summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Anderson <sontek@gmail.com>2016-07-06 13:40:55 -0400
committerJohn Anderson <sontek@gmail.com>2016-07-06 13:40:55 -0400
commit1bdb556e2122204e84429e9b1001d10367203a6c (patch)
tree32b615e206b3e10f7e78cfd98e1ad006e4d2527a
parentbf91270f872594dd586d738b5aebc8b043dcad23 (diff)
downloadpyramid-1bdb556e2122204e84429e9b1001d10367203a6c.tar.gz
pyramid-1bdb556e2122204e84429e9b1001d10367203a6c.tar.bz2
pyramid-1bdb556e2122204e84429e9b1001d10367203a6c.zip
This shows the correct view when a class and `attr` is involved.
-rw-r--r--pyramid/scripts/proutes.py11
-rw-r--r--pyramid/tests/test_scripts/dummy.py3
-rw-r--r--pyramid/tests/test_scripts/test_proutes.py27
3 files changed, 39 insertions, 2 deletions
diff --git a/pyramid/scripts/proutes.py b/pyramid/scripts/proutes.py
index a389c303c..19d91cc72 100644
--- a/pyramid/scripts/proutes.py
+++ b/pyramid/scripts/proutes.py
@@ -184,8 +184,15 @@ def get_route_data(route, registry):
request_method = view.get('request_methods')
if request_method is not None:
- view_callable = view['callable']
- view_module = _get_view_module(view_callable)
+ if view.get('attr') is not None:
+ view_callable = getattr(view['callable'], view['attr'])
+ view_module = '%s.%s' % (
+ _get_view_module(view['callable']),
+ view['attr']
+ )
+ else:
+ view_callable = view['callable']
+ view_module = _get_view_module(view_callable)
if view_module not in view_request_methods:
view_request_methods[view_module] = []
diff --git a/pyramid/tests/test_scripts/dummy.py b/pyramid/tests/test_scripts/dummy.py
index a872e197c..4bfd5d46c 100644
--- a/pyramid/tests/test_scripts/dummy.py
+++ b/pyramid/tests/test_scripts/dummy.py
@@ -70,6 +70,9 @@ class DummyView(object):
def __init__(self, **attrs):
self.__request_attrs__ = attrs
+ def view(context, request):
+ return 'view1'
+
from zope.interface import implementer
from pyramid.interfaces import IMultiView
@implementer(IMultiView)
diff --git a/pyramid/tests/test_scripts/test_proutes.py b/pyramid/tests/test_scripts/test_proutes.py
index 876572b01..aeaa57060 100644
--- a/pyramid/tests/test_scripts/test_proutes.py
+++ b/pyramid/tests/test_scripts/test_proutes.py
@@ -200,6 +200,33 @@ class TestPRoutesCommand(unittest.TestCase):
'pyramid.tests.test_scripts.test_proutes.view']
)
+ def test_class_view(self):
+ from pyramid.renderers import null_renderer as nr
+
+ config = self._makeConfig(autocommit=True)
+ config.add_route('foo', '/a/b')
+ config.add_view(
+ route_name='foo',
+ view=dummy.DummyView,
+ attr='view',
+ renderer=nr,
+ request_method='POST'
+ )
+
+ command = self._makeOne()
+ L = []
+ command.out = L.append
+ command.bootstrap = (dummy.DummyBootstrap(registry=config.registry),)
+ result = command.run()
+ self.assertEqual(result, 0)
+ self.assertEqual(len(L), 3)
+ compare_to = L[-1].split()
+ expected = [
+ 'foo', '/a/b',
+ 'pyramid.tests.test_scripts.dummy.DummyView.view', 'POST'
+ ]
+ self.assertEqual(compare_to, expected)
+
def test_single_route_one_view_registered_with_factory(self):
from zope.interface import Interface
from pyramid.interfaces import IRouteRequest