summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris McDonough <chrism@plope.com>2013-10-02 18:11:45 -0400
committerChris McDonough <chrism@plope.com>2013-10-02 18:11:45 -0400
commit71644dbf58cdea59017328f57a6727856ba5f2c7 (patch)
tree32aeb99b4e994f51ec53d70b3166d48467fb0efc
parentab2fedf7adaec0a56a69beed35312c88d7961c6c (diff)
parentcefcf8732b9e17bcde5b2b16fdd9c5118caa3f83 (diff)
downloadpyramid-71644dbf58cdea59017328f57a6727856ba5f2c7.tar.gz
pyramid-71644dbf58cdea59017328f57a6727856ba5f2c7.tar.bz2
pyramid-71644dbf58cdea59017328f57a6727856ba5f2c7.zip
fix merge conflict
-rw-r--r--CHANGES.txt6
-rw-r--r--pyramid/scripts/pviews.py27
-rw-r--r--pyramid/tests/test_scripts/dummy.py7
-rw-r--r--pyramid/tests/test_scripts/test_pviews.py51
4 files changed, 51 insertions, 40 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
index 67cefb79a..c8b79d65f 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -15,6 +15,12 @@ Bug Fixes
on resources. Previously it did not try to call the ``__acl__``
if it was callable.
+- The ``pviews`` script did not work when a url required custom request
+ methods in order to perform traversal. Custom methods and descriptors added
+ via ``pyramid.config.Configurator.add_request_method`` will now be present,
+ allowing traversal to continue.
+ See https://github.com/Pylons/pyramid/issues/1104
+
Documentation
-------------
diff --git a/pyramid/scripts/pviews.py b/pyramid/scripts/pviews.py
index 081c13e9d..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,22 +64,19 @@ class PViewsCommand(object):
from pyramid.interfaces import IRequest
from pyramid.interfaces import IRootFactory
from pyramid.interfaces import IRouteRequest
- 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):
@@ -111,20 +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)
context = None
routes_multiview = None
attrs = request.__dict__
- attrs['registry'] = registry
request_iface = IRequest
# find the root object
@@ -236,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('')
@@ -257,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 266d1ec90..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)