diff options
| author | Chris McDonough <chrism@plope.com> | 2010-12-31 16:47:13 -0500 |
|---|---|---|
| committer | Chris McDonough <chrism@plope.com> | 2010-12-31 16:47:13 -0500 |
| commit | 95c95bf924a8c08e0a5b686d7a5d12fa4e49d87e (patch) | |
| tree | 69877760c0cff03c9ac0412e2a40129f82ca71c5 | |
| parent | 13bfb5ae063fde4bb45f73340ca97d37279e4b34 (diff) | |
| download | pyramid-95c95bf924a8c08e0a5b686d7a5d12fa4e49d87e.tar.gz pyramid-95c95bf924a8c08e0a5b686d7a5d12fa4e49d87e.tar.bz2 pyramid-95c95bf924a8c08e0a5b686d7a5d12fa4e49d87e.zip | |
- A view callable wrapper registered in the registry now contains an
``__original_view__`` attribute which references the original view callable
(or class).
| -rw-r--r-- | CHANGES.txt | 4 | ||||
| -rw-r--r-- | pyramid/config.py | 4 | ||||
| -rw-r--r-- | pyramid/tests/test_config.py | 33 |
3 files changed, 27 insertions, 14 deletions
diff --git a/CHANGES.txt b/CHANGES.txt index 04f5a7d05..826be0be6 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -51,6 +51,10 @@ Internals - The class used as the "page template" in ``pyramid.chameleon_text`` was removed, in preference to using a Chameleon-inbuilt version. +- A view callable wrapper registered in the registry now contains an + ``__original_view__`` attribute which references the original view callable + (or class). + 1.0a8 (2010-12-27) ================== diff --git a/pyramid/config.py b/pyramid/config.py index ee34adae1..01d453cd1 100644 --- a/pyramid/config.py +++ b/pyramid/config.py @@ -2695,6 +2695,10 @@ def wraps_view(wrapped): def preserve_view_attrs(view, wrapped_view): if wrapped_view is view: return view + original_view = getattr(view, '__original_view__', None) + if original_view is None: + original_view = view + wrapped_view.__original_view__ = original_view wrapped_view.__module__ = view.__module__ wrapped_view.__doc__ = view.__doc__ try: diff --git a/pyramid/tests/test_config.py b/pyramid/tests/test_config.py index b2fa0e329..1760d119a 100644 --- a/pyramid/tests/test_config.py +++ b/pyramid/tests/test_config.py @@ -3886,19 +3886,25 @@ class Test__map_view(unittest.TestCase): request = self._makeRequest() self.assertEqual(result(None, request).body, 'Hello!') -class Test_wraps_view(unittest.TestCase): - def _callFUT(self, fn, view): - from pyramid.config import wraps_view - return wraps_view(fn)(None, view) +class Test_preserve_view_attrs(unittest.TestCase): + def _callFUT(self, view, wrapped_view): + from pyramid.config import preserve_view_attrs + return preserve_view_attrs(view, wrapped_view) def test_it_same(self): def view(context, request): """ """ - def afunc(self, view): - return view - result = self._callFUT(afunc, view) + result = self._callFUT(view, view) self.failUnless(result is view) + def test_it_different_with_existing_original_view(self): + def view1(context, request): pass + view1.__original_view__ = 'abc' + def view2(context, request): pass + result = self._callFUT(view1, view2) + self.assertEqual(result.__original_view__, 'abc') + self.failIf(result is view1) + def test_it_different(self): class DummyView1: """ 1 """ @@ -3906,9 +3912,9 @@ class Test_wraps_view(unittest.TestCase): __module__ = '1' def __call__(self, context, request): """ """ - def __call_permissive__(self, context, reuqest): + def __call_permissive__(self, context, request): """ """ - def __predicated__(self, context, reuqest): + def __predicated__(self, context, request): """ """ def __permitted__(self, context, request): """ """ @@ -3918,18 +3924,17 @@ class Test_wraps_view(unittest.TestCase): __module__ = '2' def __call__(self, context, request): """ """ - def __call_permissive__(self, context, reuqest): + def __call_permissive__(self, context, request): """ """ - def __predicated__(self, context, reuqest): + def __predicated__(self, context, request): """ """ def __permitted__(self, context, request): """ """ view1 = DummyView1() view2 = DummyView2() - def afunc(self, view): - return view1 - result = self._callFUT(afunc, view2) + result = self._callFUT(view2, view1) self.assertEqual(result, view1) + self.failUnless(view1.__original_view__ is view2) self.failUnless(view1.__doc__ is view2.__doc__) self.failUnless(view1.__module__ is view2.__module__) self.failUnless(view1.__name__ is view2.__name__) |
