diff options
| author | Tres Seaver <tseaver@palladion.com> | 2015-01-30 11:36:34 -0500 |
|---|---|---|
| committer | Tres Seaver <tseaver@palladion.com> | 2015-01-30 11:36:34 -0500 |
| commit | 462af266b61e0b8aad87775926b49e8758f564e7 (patch) | |
| tree | ed71e8be99332e51a3aaf967967161de2414fa93 | |
| parent | c7bf2744f332c0294d8d673d21b56f5edacb2eae (diff) | |
| download | pyramid-462af266b61e0b8aad87775926b49e8758f564e7.tar.gz pyramid-462af266b61e0b8aad87775926b49e8758f564e7.tar.bz2 pyramid-462af266b61e0b8aad87775926b49e8758f564e7.zip | |
Use 'functools.update_wrapper' to preserve attributes from wrapped.
| -rw-r--r-- | pyramid/decorator.py | 8 | ||||
| -rw-r--r-- | pyramid/tests/test_decorator.py | 18 |
2 files changed, 15 insertions, 11 deletions
diff --git a/pyramid/decorator.py b/pyramid/decorator.py index 0d17bc398..df30c5e10 100644 --- a/pyramid/decorator.py +++ b/pyramid/decorator.py @@ -1,3 +1,6 @@ +import functools + + class reify(object): """ Use as a class method decorator. It operates almost exactly like the Python ``@property`` decorator, but it puts the result of the method it @@ -26,10 +29,7 @@ class reify(object): """ def __init__(self, wrapped): self.wrapped = wrapped - try: - self.__doc__ = wrapped.__doc__ - except: # pragma: no cover - pass + functools.update_wrapper(self, wrapped) def __get__(self, inst, objtype=None): if inst is None: diff --git a/pyramid/tests/test_decorator.py b/pyramid/tests/test_decorator.py index 9ab1b7229..eb5266235 100644 --- a/pyramid/tests/test_decorator.py +++ b/pyramid/tests/test_decorator.py @@ -15,15 +15,19 @@ class TestReify(unittest.TestCase): self.assertEqual(inst.__dict__['wrapped'], 'a') def test___get__noinst(self): - decorator = self._makeOne(None) + def wrapped(inst): + return 'a' + decorator = self._makeOne(wrapped) result = decorator.__get__(None) self.assertEqual(result, decorator) - def test___doc__copied(self): - def wrapped(inst): - """My doc""" - decorator = self._makeOne(wrapped) - self.assertEqual(decorator.__doc__, "My doc") - + def test_dunder_attrs_copied(self): + from pyramid.util import viewdefaults + decorator = self._makeOne(viewdefaults) + self.assertEqual(decorator.__doc__, viewdefaults.__doc__) + self.assertEqual(decorator.__name__, viewdefaults.__name__) + self.assertEqual(decorator.__module__, viewdefaults.__module__) + + class Dummy(object): pass |
