summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Merickel <michael@merickel.org>2013-09-28 03:46:30 -0500
committerMichael Merickel <michael@merickel.org>2013-09-28 03:46:30 -0500
commitcefcf8732b9e17bcde5b2b16fdd9c5118caa3f83 (patch)
treee8713537a900770ae94f3e875f9292cb8747f084
parent97f366094b3e31f43d6fe63bd16c86542b7e90e3 (diff)
downloadpyramid-cefcf8732b9e17bcde5b2b16fdd9c5118caa3f83.tar.gz
pyramid-cefcf8732b9e17bcde5b2b16fdd9c5118caa3f83.tar.bz2
pyramid-cefcf8732b9e17bcde5b2b16fdd9c5118caa3f83.zip
update pviews to work with the bootstrapped request
had to fix DummyBootstrap a bit because it fails pretty hard at handling part of bootstrap contract in which the request passed in should be enhanced with the registry, and returned. In some cases the wrong request or the wrong registry were being returned if the test case actually specified a registry or request.
-rw-r--r--pyramid/scripts/pviews.py33
-rw-r--r--pyramid/tests/test_scripts/dummy.py7
-rw-r--r--pyramid/tests/test_scripts/test_pviews.py84
3 files changed, 45 insertions, 79 deletions
diff --git a/pyramid/scripts/pviews.py b/pyramid/scripts/pviews.py
index 070b08c30..504f583b7 100644
--- a/pyramid/scripts/pviews.py
+++ b/pyramid/scripts/pviews.py
@@ -4,6 +4,7 @@ import textwrap
from pyramid.interfaces import IMultiView
from pyramid.paster import bootstrap
+from pyramid.request import Request
from pyramid.scripts.common import parse_vars
def main(argv=sys.argv, quiet=False):
@@ -52,7 +53,7 @@ class PViewsCommand(object):
infos.append(info)
return infos
- def _find_view(self, url, registry):
+ def _find_view(self, request):
"""
Accept ``url`` and ``registry``; create a :term:`request` and
find a :app:`Pyramid` view based on introspection of :term:`view
@@ -63,23 +64,19 @@ class PViewsCommand(object):
from pyramid.interfaces import IRequest
from pyramid.interfaces import IRootFactory
from pyramid.interfaces import IRouteRequest
- from pyramid.interfaces import IRequestExtensions
- from pyramid.interfaces import IRequestFactory
from pyramid.interfaces import IRoutesMapper
from pyramid.interfaces import IView
from pyramid.interfaces import IViewClassifier
from pyramid.interfaces import ITraverser
- from pyramid.request import Request
from pyramid.traversal import DefaultRootFactory
from pyramid.traversal import ResourceTreeTraverser
+ registry = request.registry
q = registry.queryUtility
root_factory = q(IRootFactory, default=DefaultRootFactory)
routes_mapper = q(IRoutesMapper)
- request_factory = q(IRequestFactory, default=Request)
adapters = registry.adapters
- request = None
@implementer(IMultiView)
class RoutesMultiView(object):
@@ -112,25 +109,9 @@ class PViewsCommand(object):
view.__view_attr__ = ''
self.views.append((None, view, None))
-
- # create the request
- environ = {
- 'wsgi.url_scheme':'http',
- 'SERVER_NAME':'localhost',
- 'SERVER_PORT':'8080',
- 'REQUEST_METHOD':'GET',
- 'PATH_INFO':url,
- }
- request = request_factory(environ)
-
- extensions = registry.queryUtility(IRequestExtensions)
- if extensions is not None:
- request._set_extensions(extensions)
-
context = None
routes_multiview = None
attrs = request.__dict__
- attrs['registry'] = registry
request_iface = IRequest
# find the root object
@@ -242,9 +223,10 @@ class PViewsCommand(object):
if not url.startswith('/'):
url = '/%s' % url
- env = self.bootstrap[0](config_uri, options=parse_vars(self.args[2:]))
- registry = env['registry']
- view = self._find_view(url, registry)
+ request = Request.blank(url)
+ env = self.bootstrap[0](config_uri, options=parse_vars(self.args[2:]),
+ request=request)
+ view = self._find_view(request)
self.out('')
self.out("URL = %s" % url)
self.out('')
@@ -263,5 +245,6 @@ class PViewsCommand(object):
else:
self.out(" Not found.")
self.out('')
+ env['closer']()
return 0
diff --git a/pyramid/tests/test_scripts/dummy.py b/pyramid/tests/test_scripts/dummy.py
index d580203af..366aa00b5 100644
--- a/pyramid/tests/test_scripts/dummy.py
+++ b/pyramid/tests/test_scripts/dummy.py
@@ -146,10 +146,13 @@ class DummyBootstrap(object):
def __call__(self, *a, **kw):
self.a = a
self.kw = kw
+ registry = kw.get('registry', self.registry)
+ request = kw.get('request', self.request)
+ request.registry = registry
return {
'app': self.app,
- 'registry': self.registry,
- 'request': self.request,
+ 'registry': registry,
+ 'request': request,
'root': self.root,
'root_factory': self.root_factory,
'closer': self.closer,
diff --git a/pyramid/tests/test_scripts/test_pviews.py b/pyramid/tests/test_scripts/test_pviews.py
index ee9be6770..b162144a7 100644
--- a/pyramid/tests/test_scripts/test_pviews.py
+++ b/pyramid/tests/test_scripts/test_pviews.py
@@ -12,6 +12,12 @@ class TestPViewsCommand(unittest.TestCase):
cmd.args = ('/foo/bar/myapp.ini#myapp',)
return cmd
+ def _makeRequest(self, url, registry):
+ from pyramid.request import Request
+ request = Request.blank('/a')
+ request.registry = registry
+ return request
+
def _register_mapper(self, registry, routes):
from pyramid.interfaces import IRoutesMapper
mapper = dummy.DummyMapper(*routes)
@@ -22,7 +28,8 @@ class TestPViewsCommand(unittest.TestCase):
registry = Registry()
self._register_mapper(registry, [])
command = self._makeOne(registry)
- result = command._find_view('/a', registry)
+ request = self._makeRequest('/a', registry)
+ result = command._find_view(request)
self.assertEqual(result, None)
def test__find_view_no_match_multiview_registered(self):
@@ -45,7 +52,8 @@ class TestPViewsCommand(unittest.TestCase):
IMultiView)
self._register_mapper(registry, [])
command = self._makeOne(registry=registry)
- result = command._find_view('/x', registry)
+ request = self._makeRequest('/x', registry)
+ result = command._find_view(request)
self.assertEqual(result, None)
def test__find_view_traversal(self):
@@ -65,7 +73,8 @@ class TestPViewsCommand(unittest.TestCase):
IView, name='a')
self._register_mapper(registry, [])
command = self._makeOne(registry=registry)
- result = command._find_view('/a', registry)
+ request = self._makeRequest('/a', registry)
+ result = command._find_view(request)
self.assertEqual(result, view1)
def test__find_view_traversal_multiview(self):
@@ -89,7 +98,8 @@ class TestPViewsCommand(unittest.TestCase):
IMultiView, name='a')
self._register_mapper(registry, [])
command = self._makeOne(registry=registry)
- result = command._find_view('/a', registry)
+ request = self._makeRequest('/a', registry)
+ result = command._find_view(request)
self.assertEqual(result, view)
def test__find_view_route_no_multiview(self):
@@ -117,7 +127,8 @@ class TestPViewsCommand(unittest.TestCase):
dummy.DummyRoute('b', '/b', factory=Factory)]
self._register_mapper(registry, routes)
command = self._makeOne(registry=registry)
- result = command._find_view('/a', registry)
+ request = self._makeRequest('/a', registry)
+ result = command._find_view(request)
self.assertEqual(result, view)
def test__find_view_route_multiview_no_view_registered(self):
@@ -147,7 +158,8 @@ class TestPViewsCommand(unittest.TestCase):
dummy.DummyRoute('b', '/a', matchdict={})]
self._register_mapper(registry, routes)
command = self._makeOne(registry=registry)
- result = command._find_view('/a', registry)
+ request = self._makeRequest('/a', registry)
+ result = command._find_view(request)
self.assertTrue(IMultiView.providedBy(result))
def test__find_view_route_multiview(self):
@@ -185,7 +197,8 @@ class TestPViewsCommand(unittest.TestCase):
dummy.DummyRoute('b', '/a', matchdict={})]
self._register_mapper(registry, routes)
command = self._makeOne(registry=registry)
- result = command._find_view('/a', registry)
+ request = self._makeRequest('/a', registry)
+ result = command._find_view(request)
self.assertTrue(IMultiView.providedBy(result))
self.assertEqual(len(result.views), 2)
self.assertTrue((None, view1, None) in result.views)
@@ -228,7 +241,7 @@ class TestPViewsCommand(unittest.TestCase):
command = self._makeOne(registry=registry)
L = []
command.out = L.append
- command._find_view = lambda arg1, arg2: None
+ command._find_view = lambda arg1: None
command.args = ('/foo/bar/myapp.ini#myapp', '/a')
result = command.run()
self.assertEqual(result, 0)
@@ -241,7 +254,7 @@ class TestPViewsCommand(unittest.TestCase):
command = self._makeOne(registry=registry)
L = []
command.out = L.append
- command._find_view = lambda arg1, arg2: None
+ command._find_view = lambda arg1: None
command.args = ('/foo/bar/myapp.ini#myapp', 'a')
result = command.run()
self.assertEqual(result, 0)
@@ -255,7 +268,7 @@ class TestPViewsCommand(unittest.TestCase):
L = []
command.out = L.append
view = dummy.DummyView(context='context', view_name='a')
- command._find_view = lambda arg1, arg2: view
+ command._find_view = lambda arg1: view
command.args = ('/foo/bar/myapp.ini#myapp', '/a')
result = command.run()
self.assertEqual(result, 0)
@@ -273,7 +286,7 @@ class TestPViewsCommand(unittest.TestCase):
command.out = L.append
def view(): pass
view.__request_attrs__ = {'context': 'context', 'view_name': 'a'}
- command._find_view = lambda arg1, arg2: view
+ command._find_view = lambda arg1: view
command.args = ('/foo/bar/myapp.ini#myapp', '/a')
result = command.run()
self.assertEqual(result, 0)
@@ -291,7 +304,7 @@ class TestPViewsCommand(unittest.TestCase):
command.out = L.append
view = dummy.DummyView(context='context', view_name='a')
view.__permission__ = 'test'
- command._find_view = lambda arg1, arg2: view
+ command._find_view = lambda arg1: view
command.args = ('/foo/bar/myapp.ini#myapp', '/a')
result = command.run()
self.assertEqual(result, 0)
@@ -312,7 +325,7 @@ class TestPViewsCommand(unittest.TestCase):
predicate.text = lambda *arg: "predicate = x"
view = dummy.DummyView(context='context', view_name='a')
view.__predicates__ = [predicate]
- command._find_view = lambda arg1, arg2: view
+ command._find_view = lambda arg1: view
command.args = ('/foo/bar/myapp.ini#myapp', '/a')
result = command.run()
self.assertEqual(result, 0)
@@ -332,7 +345,7 @@ class TestPViewsCommand(unittest.TestCase):
route = dummy.DummyRoute('a', '/a', matchdict={})
view = dummy.DummyView(context='context', view_name='a',
matched_route=route, subpath='')
- command._find_view = lambda arg1, arg2: view
+ command._find_view = lambda arg1: view
command.args = ('/foo/bar/myapp.ini#myapp', '/a')
result = command.run()
self.assertEqual(result, 0)
@@ -360,7 +373,7 @@ class TestPViewsCommand(unittest.TestCase):
view_name='a1')
multiview2 = dummy.DummyMultiView(multiview1, context='context',
view_name='a')
- command._find_view = lambda arg1, arg2: multiview2
+ command._find_view = lambda arg1: multiview2
command.args = ('/foo/bar/myapp.ini#myapp', '/a')
result = command.run()
self.assertEqual(result, 0)
@@ -383,7 +396,7 @@ class TestPViewsCommand(unittest.TestCase):
route = dummy.DummyRoute('a', '/a', matchdict={}, predicate=predicate)
view = dummy.DummyView(context='context', view_name='a',
matched_route=route, subpath='')
- command._find_view = lambda arg1, arg2: view
+ command._find_view = lambda arg1: view
command.args = ('/foo/bar/myapp.ini#myapp', '/a')
result = command.run()
self.assertEqual(result, 0)
@@ -409,7 +422,7 @@ class TestPViewsCommand(unittest.TestCase):
view.__name__ = 'view'
view.__view_attr__ = 'call'
multiview = dummy.DummyMultiView(view, context='context', view_name='a')
- command._find_view = lambda arg1, arg2: multiview
+ command._find_view = lambda arg1: multiview
command.args = ('/foo/bar/myapp.ini#myapp', '/a')
result = command.run()
self.assertEqual(result, 0)
@@ -430,7 +443,7 @@ class TestPViewsCommand(unittest.TestCase):
view.__view_attr__ = 'call'
view.__permission__ = 'test'
multiview = dummy.DummyMultiView(view, context='context', view_name='a')
- command._find_view = lambda arg1, arg2: multiview
+ command._find_view = lambda arg1: multiview
command.args = ('/foo/bar/myapp.ini#myapp', '/a')
result = command.run()
self.assertEqual(result, 0)
@@ -454,7 +467,7 @@ class TestPViewsCommand(unittest.TestCase):
view.__view_attr__ = 'call'
view.__predicates__ = [predicate]
multiview = dummy.DummyMultiView(view, context='context', view_name='a')
- command._find_view = lambda arg1, arg2: multiview
+ command._find_view = lambda arg1: multiview
command.args = ('/foo/bar/myapp.ini#myapp', '/a')
result = command.run()
self.assertEqual(result, 0)
@@ -465,39 +478,6 @@ class TestPViewsCommand(unittest.TestCase):
' pyramid.tests.test_scripts.dummy.view.call')
self.assertEqual(L[9], ' view predicates (predicate = x)')
- def test_find_views_with_request_extensions(self):
- from zope.interface import providedBy
- from pyramid.interfaces import IRequest
- from pyramid.interfaces import IRequestExtensions
- from pyramid.interfaces import IRootFactory
- from pyramid.interfaces import IViewClassifier
- from pyramid.interfaces import IView
- from pyramid.registry import Registry
-
- class DummyExtensions(object):
- descriptors = {}
- methods = {'foo': lambda r: 'bar'}
-
- registry = Registry()
- registry.registerUtility(DummyExtensions(), IRequestExtensions)
-
- called = []
- def factory(request):
- called.append(request.foo())
-
- def view1(): pass
- request = dummy.DummyRequest({'PATH_INFO':'/a'})
- root_iface = providedBy(None)
- registry.registerUtility(factory, IRootFactory)
- registry.registerAdapter(view1,
- (IViewClassifier, IRequest, root_iface),
- IView, name='a')
- self._register_mapper(registry, [])
- command = self._makeOne(registry=registry)
- result = command._find_view('/a', registry)
- self.assertEqual(result, view1)
- self.assertEqual(called, ['bar'])
-
class Test_main(unittest.TestCase):
def _callFUT(self, argv):
from pyramid.scripts.pviews import main