summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTres Seaver <tseaver@palladion.com>2015-01-30 15:02:30 -0500
committerTres Seaver <tseaver@palladion.com>2015-01-30 15:02:30 -0500
commit0a2701247146a57cba33683c6c386a04f51a6fa8 (patch)
tree0a5c2eefdfc228166f2eb98990f08a8dde2146ab
parent95d7552239767e25a7fc4b258dffcbabe9ee8534 (diff)
parent3271c7748d43fd5ecc9928ea69a8c4f497a68af5 (diff)
downloadpyramid-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.py8
-rw-r--r--pyramid/tests/test_decorator.py18
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