mirror of
https://github.com/python/cpython
synced 2024-09-19 15:11:34 +00:00
gh-106727: Add __module__
check for inspect.getsource(cls)
(#106968)
This commit is contained in:
parent
8ebc9fc321
commit
b383703491
|
@ -1078,7 +1078,8 @@ def get_lineno(self):
|
||||||
|
|
||||||
# First, let's see if there are any method definitions
|
# First, let's see if there are any method definitions
|
||||||
for member in self.cls.__dict__.values():
|
for member in self.cls.__dict__.values():
|
||||||
if isinstance(member, types.FunctionType):
|
if (isinstance(member, types.FunctionType) and
|
||||||
|
member.__module__ == self.cls.__module__):
|
||||||
for lineno, end_lineno in self.lineno_found:
|
for lineno, end_lineno in self.lineno_found:
|
||||||
if lineno <= member.__code__.co_firstlineno <= end_lineno:
|
if lineno <= member.__code__.co_firstlineno <= end_lineno:
|
||||||
return lineno
|
return lineno
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
import shutil
|
import shutil
|
||||||
import sys
|
import sys
|
||||||
import types
|
import types
|
||||||
|
import tempfile
|
||||||
import textwrap
|
import textwrap
|
||||||
import unicodedata
|
import unicodedata
|
||||||
import unittest
|
import unittest
|
||||||
|
@ -963,6 +964,33 @@ def test_nested_class_definition_inside_function(self):
|
||||||
self.assertSourceEqual(mod2.cls213, 218, 222)
|
self.assertSourceEqual(mod2.cls213, 218, 222)
|
||||||
self.assertSourceEqual(mod2.cls213().func219(), 220, 221)
|
self.assertSourceEqual(mod2.cls213().func219(), 220, 221)
|
||||||
|
|
||||||
|
def test_class_with_method_from_other_module(self):
|
||||||
|
with tempfile.TemporaryDirectory() as tempdir:
|
||||||
|
with open(os.path.join(tempdir, 'inspect_actual%spy' % os.extsep),
|
||||||
|
'w', encoding='utf-8') as f:
|
||||||
|
f.write(textwrap.dedent("""
|
||||||
|
import inspect_other
|
||||||
|
class A:
|
||||||
|
def f(self):
|
||||||
|
pass
|
||||||
|
class A:
|
||||||
|
def f(self):
|
||||||
|
pass # correct one
|
||||||
|
A.f = inspect_other.A.f
|
||||||
|
"""))
|
||||||
|
|
||||||
|
with open(os.path.join(tempdir, 'inspect_other%spy' % os.extsep),
|
||||||
|
'w', encoding='utf-8') as f:
|
||||||
|
f.write(textwrap.dedent("""
|
||||||
|
class A:
|
||||||
|
def f(self):
|
||||||
|
pass
|
||||||
|
"""))
|
||||||
|
|
||||||
|
with DirsOnSysPath(tempdir):
|
||||||
|
import inspect_actual
|
||||||
|
self.assertIn("correct", inspect.getsource(inspect_actual.A))
|
||||||
|
|
||||||
@unittest.skipIf(
|
@unittest.skipIf(
|
||||||
support.is_emscripten or support.is_wasi,
|
support.is_emscripten or support.is_wasi,
|
||||||
"socket.accept is broken"
|
"socket.accept is broken"
|
||||||
|
|
Loading…
Reference in a new issue