diff options
-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. |