if not hasattr(object, 'co_firstlineno'):
raise OSError('could not find function definition')
lnum = object.co_firstlineno - 1
- pat = re.compile(r'^(\s*def\s)|(\s*async\s+def\s)|(.*(?<!\w)lambda(:|\s))|^(\s*@)')
- while lnum > 0:
- try:
- line = lines[lnum]
- except IndexError:
- raise OSError('lineno is out of bounds')
- if pat.match(line):
- break
- lnum = lnum - 1
+ if lnum >= len(lines):
+ raise OSError('lineno is out of bounds')
return lines, lnum
raise OSError('could not find code object')
class cls310:
def g():
pass
+
+# line 314
+class ClassWithCodeObject:
+ import sys
+ code = sys._getframe(0).f_code
def test_getsource_on_method(self):
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):
self.assertSourceEqual(mod2.cls135.func136, 136, 139)
--- /dev/null
+Fixed :func:`inspect.findsource` for class code objects.