[Python-checkins] cpython: inspect: Fix getsource() to support decorated functions.
yury.selivanov
python-checkins at python.org
Fri Sep 26 23:35:14 CEST 2014
https://hg.python.org/cpython/rev/ad9cc6124a19
changeset: 92593:ad9cc6124a19
user: Yury Selivanov <yselivanov at sprymix.com>
date: Fri Sep 26 17:34:54 2014 -0400
summary:
inspect: Fix getsource() to support decorated functions.
Issue #1764286. Patch by Claudiu Popa.
files:
Lib/inspect.py | 1 +
Lib/test/inspect_fodder2.py | 13 +++++++++++++
Lib/test/test_inspect.py | 3 +++
Misc/NEWS | 3 +++
4 files changed, 20 insertions(+), 0 deletions(-)
diff --git a/Lib/inspect.py b/Lib/inspect.py
--- a/Lib/inspect.py
+++ b/Lib/inspect.py
@@ -817,6 +817,7 @@
corresponding to the object and the line number indicates where in the
original source file the first line of code was found. An OSError is
raised if the source code cannot be retrieved."""
+ object = unwrap(object)
lines, lnum = findsource(object)
if ismodule(object): return lines, 0
diff --git a/Lib/test/inspect_fodder2.py b/Lib/test/inspect_fodder2.py
--- a/Lib/test/inspect_fodder2.py
+++ b/Lib/test/inspect_fodder2.py
@@ -109,3 +109,16 @@
#line 109
def keyword_only_arg(*, arg):
pass
+
+from functools import wraps
+
+def decorator(func):
+ @wraps(func)
+ def fake():
+ return 42
+ return fake
+
+#line 121
+ at decorator
+def real():
+ return 20
diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py
--- a/Lib/test/test_inspect.py
+++ b/Lib/test/test_inspect.py
@@ -377,6 +377,9 @@
def test_replacing_decorator(self):
self.assertSourceEqual(mod2.gone, 9, 10)
+ def test_getsource_unwrap(self):
+ self.assertSourceEqual(mod2.real, 122, 124)
+
class TestOneliners(GetSourceBase):
fodderModule = mod2
def test_oneline_lambda(self):
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,9 @@
Core and Builtins
-----------------
+- Issue #1764286: Fix inspect.getsource() to support decorated functions.
+ Patch by Claudiu Popa.
+
- Issue #18554: os.__all__ includes posix functions.
- Issue #21391: Use os.path.abspath in the shutil module.
--
Repository URL: https://hg.python.org/cpython
More information about the Python-checkins
mailing list