summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris McDonough <chrism@plope.com>2012-03-11 21:06:08 -0700
committerChris McDonough <chrism@plope.com>2012-03-11 21:06:08 -0700
commit3b4deef1f6a7825c7c3eb904af15f4d626793b5f (patch)
tree58833d5e99f83199cb732662cc1a11353ebf7579
parent74d096f1fa08fbbbe9a83ef1531af8e89cc1aff7 (diff)
parent4a6f532316421ef85caefc706e191d6977e71feb (diff)
downloadpyramid-3b4deef1f6a7825c7c3eb904af15f4d626793b5f.tar.gz
pyramid-3b4deef1f6a7825c7c3eb904af15f4d626793b5f.tar.bz2
pyramid-3b4deef1f6a7825c7c3eb904af15f4d626793b5f.zip
Merge branch '1.3-branch'
-rw-r--r--CHANGES.txt9
-rw-r--r--pyramid/config/views.py14
-rw-r--r--pyramid/tests/test_config/test_views.py12
3 files changed, 34 insertions, 1 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
index 8076bc35d..abdb3d80a 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,3 +1,12 @@
+Next release
+============
+
+Bug Fixes
+---------
+
+- ``config.add_view(<aninstancemethod>)`` raised AttributeError involving
+ ``__text__``. See https://github.com/Pylons/pyramid/issues/461
+
1.3b2 (2012-03-02)
==================
diff --git a/pyramid/config/views.py b/pyramid/config/views.py
index 0f70c604f..432db79cf 100644
--- a/pyramid/config/views.py
+++ b/pyramid/config/views.py
@@ -139,7 +139,19 @@ class ViewDeriver(object):
self.http_cached_view(
self.decorated_view(
self.rendered_view(
- self.mapped_view(view)))))))))
+ self.mapped_view(
+ self.text_wrapped_view(
+ view))))))))))
+
+ @wraps_view
+ def text_wrapped_view(self, view):
+ # if the method is an instance method, we need to wrap it in order
+ # to be able to assign a __text__ value to it later. see #461.
+ if inspect.ismethod(view):
+ def text_wrapper(context, request):
+ return view(context, request)
+ return text_wrapper
+ return view
@wraps_view
def mapped_view(self, view):
diff --git a/pyramid/tests/test_config/test_views.py b/pyramid/tests/test_config/test_views.py
index 7bfe174b7..8877c011e 100644
--- a/pyramid/tests/test_config/test_views.py
+++ b/pyramid/tests/test_config/test_views.py
@@ -218,6 +218,18 @@ class TestViewsConfigurationMixin(unittest.TestCase):
result = wrapper(None, None)
self.assertEqual(result, 'OK')
+ def test_add_view_as_instancemethod(self):
+ from pyramid.renderers import null_renderer
+ class View:
+ def index(self, context, request):
+ return 'OK'
+ view = View()
+ config=self._makeOne(autocommit=True)
+ config.add_view(view=view.index, renderer=null_renderer)
+ wrapper = self._getViewCallable(config)
+ result = wrapper(None, None)
+ self.assertEqual(result, 'OK')
+
def test_add_view_as_instance_requestonly(self):
from pyramid.renderers import null_renderer
class AView: