diff options
author | R. David Murray <rdmurray@bitdance.com> | 2009-05-13 17:33:03 (GMT) |
---|---|---|
committer | R. David Murray <rdmurray@bitdance.com> | 2009-05-13 17:33:03 (GMT) |
commit | 74b8924eaf5af4529d676b052347a3a1937c8796 (patch) | |
tree | 32333579a256472bc212411748ffdb42d179bc5e | |
parent | 14b7efa21532ba2585dd9910d9f2cf28d456e72d (diff) | |
download | cpython-74b8924eaf5af4529d676b052347a3a1937c8796.zip cpython-74b8924eaf5af4529d676b052347a3a1937c8796.tar.gz cpython-74b8924eaf5af4529d676b052347a3a1937c8796.tar.bz2 |
This fix makes, eg, 'pydoc time' work again.
Merged revisions 72605 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r72605 | r.david.murray | 2009-05-13 13:14:11 -0400 (Wed, 13 May 2009) | 3 lines
Issue #4050: inspect.findsource/getsource now raise an IOError if the 'source'
file is a binary. Patch by Brodie Rao, test by Daniel Diniz.
........
-rw-r--r-- | Lib/inspect.py | 4 | ||||
-rw-r--r-- | Lib/test/test_inspect.py | 7 | ||||
-rw-r--r-- | Misc/ACKS | 2 | ||||
-rw-r--r-- | Misc/NEWS | 4 |
4 files changed, 16 insertions, 1 deletions
diff --git a/Lib/inspect.py b/Lib/inspect.py index a976c8b..c316906 100644 --- a/Lib/inspect.py +++ b/Lib/inspect.py @@ -518,7 +518,9 @@ def findsource(object): or code object. The source code is returned as a list of all the lines in the file and the line number indexes a line in that list. An IOError is raised if the source code cannot be retrieved.""" - file = getsourcefile(object) or getfile(object) + file = getsourcefile(object) + if not file: + raise IOError('source code not available') module = getmodule(object, file) if module: lines = linecache.getlines(file, module.__dict__) diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py index e2fe641..270ebfd 100644 --- a/Lib/test/test_inspect.py +++ b/Lib/test/test_inspect.py @@ -11,6 +11,9 @@ from test.support import TESTFN, run_unittest from test import inspect_fodder as mod from test import inspect_fodder2 as mod2 +# C module for test_findsource_binary +import time + # Functions tested in this suite: # ismodule, isclass, ismethod, isfunction, istraceback, isframe, iscode, # isbuiltin, isroutine, isgenerator, isgeneratorfunction, getmembers, @@ -336,6 +339,10 @@ class TestBuggyCases(GetSourceBase): def test_method_in_dynamic_class(self): self.assertSourceEqual(mod2.method_in_dynamic_class, 95, 97) + def test_findsource_binary(self): + self.assertRaises(IOError, inspect.getsource, time) + self.assertRaises(IOError, inspect.findsource, time) + # Helper for testing classify_class_attrs. def attrs_wo_objs(cls): return [t[:3] for t in inspect.classify_class_attrs(cls)] @@ -171,6 +171,7 @@ Raghuram Devarakonda Toby Dickenson Mark Dickinson Jack Diederich +Daniel Diniz Humberto Diogenes Yves Dionne Daniel Dittmar @@ -581,6 +582,7 @@ Eduardo Pérez Brian Quinlan Anders Qvist Burton Radons +Brodie Rao Antti Rasinen Eric Raymond Edward K. Ream @@ -23,6 +23,10 @@ Core and Builtins Library ------- +- Issue #4050: inspect.findsource/getsource now raise an IOError if the 'source' + file is a binary. Patch by Brodie Rao, tests by Daniel Diniz. This fix + corrects a pydoc regression. + - Issue 5955: aifc's close method did not close the file it wrapped, now it does. This also means getfp method now returns the real fp. |