mirror of https://github.com/python/cpython
gh-116987: Support class code objects in inspect.findsource() (GH-117025)
This commit is contained in:
parent
6547330f4e
commit
d16c9d1278
|
@ -1157,15 +1157,8 @@ def findsource(object):
|
||||||
if not hasattr(object, 'co_firstlineno'):
|
if not hasattr(object, 'co_firstlineno'):
|
||||||
raise OSError('could not find function definition')
|
raise OSError('could not find function definition')
|
||||||
lnum = object.co_firstlineno - 1
|
lnum = object.co_firstlineno - 1
|
||||||
pat = re.compile(r'^(\s*def\s)|(\s*async\s+def\s)|(.*(?<!\w)lambda(:|\s))|^(\s*@)')
|
if lnum >= len(lines):
|
||||||
while lnum > 0:
|
raise OSError('lineno is out of bounds')
|
||||||
try:
|
|
||||||
line = lines[lnum]
|
|
||||||
except IndexError:
|
|
||||||
raise OSError('lineno is out of bounds')
|
|
||||||
if pat.match(line):
|
|
||||||
break
|
|
||||||
lnum = lnum - 1
|
|
||||||
return lines, lnum
|
return lines, lnum
|
||||||
raise OSError('could not find code object')
|
raise OSError('could not find code object')
|
||||||
|
|
||||||
|
|
|
@ -310,3 +310,8 @@ else:
|
||||||
class cls310:
|
class cls310:
|
||||||
def g():
|
def g():
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
# line 314
|
||||||
|
class ClassWithCodeObject:
|
||||||
|
import sys
|
||||||
|
code = sys._getframe(0).f_code
|
||||||
|
|
|
@ -983,6 +983,9 @@ class TestBuggyCases(GetSourceBase):
|
||||||
def test_getsource_on_method(self):
|
def test_getsource_on_method(self):
|
||||||
self.assertSourceEqual(mod2.ClassWithMethod.method, 118, 119)
|
self.assertSourceEqual(mod2.ClassWithMethod.method, 118, 119)
|
||||||
|
|
||||||
|
def test_getsource_on_class_code_object(self):
|
||||||
|
self.assertSourceEqual(mod2.ClassWithCodeObject.code, 315, 317)
|
||||||
|
|
||||||
def test_nested_func(self):
|
def test_nested_func(self):
|
||||||
self.assertSourceEqual(mod2.cls135.func136, 136, 139)
|
self.assertSourceEqual(mod2.cls135.func136, 136, 139)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Fixed :func:`inspect.findsource` for class code objects.
|
Loading…
Reference in New Issue