diff options
| author | Steve Piercy <web@stevepiercy.com> | 2016-07-08 00:48:25 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2016-07-08 00:48:25 -0700 |
| commit | 474d4a861ece9f8ee3c61c31e9ce52f42d52d33d (patch) | |
| tree | 2c5fff682c2ef0df16f620d415c08601ef641bc2 | |
| parent | 2b8c7d5e418b2d5df0e05508ae9c17168b30f28d (diff) | |
| parent | d9dc88d3cdf8b92941d09af32f0342be58c263cb (diff) | |
| download | pyramid-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.py | 11 | ||||
| -rw-r--r-- | pyramid/tests/test_scripts/dummy.py | 2 | ||||
| -rw-r--r-- | pyramid/tests/test_scripts/test_proutes.py | 27 |
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 |
