Kaydet (Commit) 74b8924e authored tarafından R. David Murray's avatar R. David Murray

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.
........
üst 14b7efa2
...@@ -518,7 +518,9 @@ def findsource(object): ...@@ -518,7 +518,9 @@ def findsource(object):
or code object. The source code is returned as a list of all the lines 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 in the file and the line number indexes a line in that list. An IOError
is raised if the source code cannot be retrieved.""" 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) module = getmodule(object, file)
if module: if module:
lines = linecache.getlines(file, module.__dict__) lines = linecache.getlines(file, module.__dict__)
......
...@@ -11,6 +11,9 @@ from test.support import TESTFN, run_unittest ...@@ -11,6 +11,9 @@ from test.support import TESTFN, run_unittest
from test import inspect_fodder as mod from test import inspect_fodder as mod
from test import inspect_fodder2 as mod2 from test import inspect_fodder2 as mod2
# C module for test_findsource_binary
import time
# Functions tested in this suite: # Functions tested in this suite:
# ismodule, isclass, ismethod, isfunction, istraceback, isframe, iscode, # ismodule, isclass, ismethod, isfunction, istraceback, isframe, iscode,
# isbuiltin, isroutine, isgenerator, isgeneratorfunction, getmembers, # isbuiltin, isroutine, isgenerator, isgeneratorfunction, getmembers,
...@@ -336,6 +339,10 @@ class TestBuggyCases(GetSourceBase): ...@@ -336,6 +339,10 @@ class TestBuggyCases(GetSourceBase):
def test_method_in_dynamic_class(self): def test_method_in_dynamic_class(self):
self.assertSourceEqual(mod2.method_in_dynamic_class, 95, 97) 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. # Helper for testing classify_class_attrs.
def attrs_wo_objs(cls): def attrs_wo_objs(cls):
return [t[:3] for t in inspect.classify_class_attrs(cls)] return [t[:3] for t in inspect.classify_class_attrs(cls)]
......
...@@ -171,6 +171,7 @@ Raghuram Devarakonda ...@@ -171,6 +171,7 @@ Raghuram Devarakonda
Toby Dickenson Toby Dickenson
Mark Dickinson Mark Dickinson
Jack Diederich Jack Diederich
Daniel Diniz
Humberto Diogenes Humberto Diogenes
Yves Dionne Yves Dionne
Daniel Dittmar Daniel Dittmar
...@@ -581,6 +582,7 @@ Eduardo P ...@@ -581,6 +582,7 @@ Eduardo P
Brian Quinlan Brian Quinlan
Anders Qvist Anders Qvist
Burton Radons Burton Radons
Brodie Rao
Antti Rasinen Antti Rasinen
Eric Raymond Eric Raymond
Edward K. Ream Edward K. Ream
......
...@@ -23,6 +23,10 @@ Core and Builtins ...@@ -23,6 +23,10 @@ Core and Builtins
Library 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, - 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. now it does. This also means getfp method now returns the real fp.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment