From 74b8924eaf5af4529d676b052347a3a1937c8796 Mon Sep 17 00:00:00 2001 From: "R. David Murray" Date: Wed, 13 May 2009 17:33:03 +0000 Subject: 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. ........ --- Lib/inspect.py | 4 +++- Lib/test/test_inspect.py | 7 +++++++ Misc/ACKS | 2 ++ Misc/NEWS | 4 ++++ 4 files changed, 16 insertions(+), 1 deletion(-) 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)] diff --git a/Misc/ACKS b/Misc/ACKS index 5623bad..83dd3ad 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -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 Brian Quinlan Anders Qvist Burton Radons +Brodie Rao Antti Rasinen Eric Raymond Edward K. Ream diff --git a/Misc/NEWS b/Misc/NEWS index c1949f5..8cb1e38 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -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. -- cgit v0.12