summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichele Simionato <michele.simionato@gmail.com>2021-04-08 07:41:51 +0200
committerMichele Simionato <michele.simionato@gmail.com>2021-04-08 07:41:51 +0200
commitb2e77f281365007b756626372fb234c13f9426bb (patch)
treec59244a6bb0d4c31a18e26242f95630e87aedc5f /src
parentfb8a321d672848852d7706b3c40156771e568084 (diff)
downloadpython-decorator-git-b2e77f281365007b756626372fb234c13f9426bb.tar.gz
func.__module__ was not copied anymore
Diffstat (limited to 'src')
-rw-r--r--src/decorator.py10
-rw-r--r--src/tests/documentation.py7
-rw-r--r--src/tests/test.py6
3 files changed, 15 insertions, 8 deletions
diff --git a/src/decorator.py b/src/decorator.py
index aa406cb..deb93cd 100644
--- a/src/decorator.py
+++ b/src/decorator.py
@@ -40,7 +40,7 @@ import itertools
from contextlib import _GeneratorContextManager
from inspect import getfullargspec, iscoroutinefunction, isgeneratorfunction
-__version__ = '5.0.5'
+__version__ = '5.0.6'
DEF = re.compile(r'\s*def\s*([_\w][_\w\d]*)\s*\(')
POS = inspect.Parameter.POSITIONAL_OR_KEYWORD
@@ -230,12 +230,14 @@ def decorate(func, caller, extras=(), kwsyntax=False):
args, kw = fix(args, kw, sig)
return caller(func, *(extras + args), **kw)
fun.__name__ = func.__name__
+ fun.__doc__ = func.__doc__
+ fun.__defaults__ = func.__defaults__
+ fun.__kwdefaults__ = func.__kwdefaults__
+ fun.__annotations__ = func.__annotations__
+ fun.__module__ = func.__module__
fun.__signature__ = sig
fun.__wrapped__ = func
fun.__qualname__ = func.__qualname__
- fun.__annotations__ = func.__annotations__
- fun.__kwdefaults__ = func.__kwdefaults__
- fun.__doc__ = func.__doc__
fun.__dict__.update(func.__dict__)
return fun
diff --git a/src/tests/documentation.py b/src/tests/documentation.py
index 40b0a28..3ddc6a1 100644
--- a/src/tests/documentation.py
+++ b/src/tests/documentation.py
@@ -1852,14 +1852,13 @@ def to_method(f):
self = inspect.Parameter('self', inspect.Parameter.POSITIONAL_OR_KEYWORD)
params.insert(0, self) # insert self
del params[-1] # remove context
- newsig = sig.replace(parameters=params)
+ newsig = '%s%s' % (f.__name__, sig.replace(parameters=params))
return FunctionMaker.create(
- '%s%s' % (f.__name__, newsig),
- 'context = self.context; return _func_%s' % sig,
+ newsig, 'context = self.context; return _func_%s' % sig,
dict(_func_=f))
-def foo(x, context):
+def foo(x, context=None):
return x
diff --git a/src/tests/test.py b/src/tests/test.py
index ad45ca1..c10757d 100644
--- a/src/tests/test.py
+++ b/src/tests/test.py
@@ -69,6 +69,12 @@ class DocumentationTestCase(unittest.TestCase):
err = doctest.testmod(doc)[0]
self.assertEqual(err, 0)
+ def test_copy_dunder_attrs(self):
+ traced = doc.trace(doc.foo)
+ self.assertEqual(traced.__module__, 'documentation')
+ self.assertEqual(traced.__annotations__, {})
+ self.assertEqual(traced.__defaults__, (None,))
+
def test_singledispatch1(self):
with assertRaises(RuntimeError):
doc.singledispatch_example1()