inspect: Fix getsource() to load updated source of reloaded module

Issue #1218234. Initial patch by Berker Peksag.
This commit is contained in:
Yury Selivanov 2014-12-08 16:05:34 -05:00
parent b532df62b9
commit ef1e750225
3 changed files with 46 additions and 6 deletions

View file

@ -653,11 +653,17 @@ def findsource(object):
in the file and the line number indexes a line in that list. An OSError
is raised if the source code cannot be retrieved."""
file = getfile(object)
sourcefile = getsourcefile(object)
if not sourcefile and file[:1] + file[-1:] != '<>':
raise OSError('source code not available')
file = sourcefile if sourcefile else file
file = getsourcefile(object)
if file:
# Invalidate cache if needed.
linecache.checkcache(file)
else:
file = getfile(object)
# Allow filenames in form of "<something>" to pass through.
# `doctest` monkeypatches `linecache` module to enable
# inspection, so let `linecache.getlines` to be called.
if not (file.startswith('<') and file.endswith('>')):
raise OSError('source code not available')
module = getmodule(object, file)
if module: