diff options
| author | Tres Seaver <tseaver@palladion.com> | 2015-01-30 15:02:30 -0500 |
|---|---|---|
| committer | Tres Seaver <tseaver@palladion.com> | 2015-01-30 15:02:30 -0500 |
| commit | 0a2701247146a57cba33683c6c386a04f51a6fa8 (patch) | |
| tree | 0a5c2eefdfc228166f2eb98990f08a8dde2146ab | |
| parent | 95d7552239767e25a7fc4b258dffcbabe9ee8534 (diff) | |
| parent | 3271c7748d43fd5ecc9928ea69a8c4f497a68af5 (diff) | |
| download | pyramid-0a2701247146a57cba33683c6c386a04f51a6fa8.tar.gz pyramid-0a2701247146a57cba33683c6c386a04f51a6fa8.tar.bz2 pyramid-0a2701247146a57cba33683c6c386a04f51a6fa8.zip | |
Merge pull request #1550 from Pylons/reify-use_functools-update_wrapper
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..0a98a512d 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' # pragma: no cover + 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 |
