summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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: