summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Piercy <web@stevepiercy.com>2016-07-08 00:48:25 -0700
committerGitHub <noreply@github.com>2016-07-08 00:48:25 -0700
commit474d4a861ece9f8ee3c61c31e9ce52f42d52d33d (patch)
tree2c5fff682c2ef0df16f620d415c08601ef641bc2
parent2b8c7d5e418b2d5df0e05508ae9c17168b30f28d (diff)
parentd9dc88d3cdf8b92941d09af32f0342be58c263cb (diff)
downloadpyramid-474d4a861ece9f8ee3c61c31e9ce52f42d52d33d.tar.gz
pyramid-474d4a861ece9f8ee3c61c31e9ce52f42d52d33d.tar.bz2
pyramid-474d4a861ece9f8ee3c61c31e9ce52f42d52d33d.zip
Merge pull request #2687 from sontek/support_classes_in_proutes
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.py2
-rw-r--r--pyramid/tests/test_scripts/test_proutes.py27
3 files changed, 38 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..f3aa20e7c 100644
--- a/pyramid/tests/test_scripts/dummy.py
+++ b/pyramid/tests/test_scripts/dummy.py
@@ -70,6 +70,8 @@ class DummyView(object):
def __init__(self, **attrs):
self.__request_attrs__ = attrs
+ def view(context, request): pass
+
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