summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-08-14 07:27:44 +0000
committerChris McDonough <chrism@agendaless.com>2009-08-14 07:27:44 +0000
commita9454c13d890c5775d58735199f57caaf75aed33 (patch)
treee49a3bc91b0ac6cc4de67126d5685c3780c09126
parent318cceb0cceb1f6ce9be2ff4f840476770654597 (diff)
downloadpyramid-a9454c13d890c5775d58735199f57caaf75aed33.tar.gz
pyramid-a9454c13d890c5775d58735199f57caaf75aed33.tar.bz2
pyramid-a9454c13d890c5775d58735199f57caaf75aed33.zip
- Move (non-API) default_view, default_forbidden_view, and
default_notfound_view functions into the ``repoze.bfg.view`` module (moved from ``repoze.bfg.router``).
-rw-r--r--CHANGES.txt4
-rw-r--r--repoze/bfg/router.py34
-rw-r--r--repoze/bfg/tests/test_router.py21
-rw-r--r--repoze/bfg/tests/test_view.py44
-rw-r--r--repoze/bfg/view.py32
5 files changed, 85 insertions, 50 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
index 0943070db..b022bf8c7 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,6 +1,10 @@
Next release
============
+- Move (non-API) default_view, default_forbidden_view, and
+ default_notfound_view functions into the ``repoze.bfg.view`` module
+ (moved from ``repoze.bfg.router``).
+
- Request-only-convention examples in the "Views" narrative
documentation were broken.
diff --git a/repoze/bfg/router.py b/repoze/bfg/router.py
index c89296837..db7d4c174 100644
--- a/repoze/bfg/router.py
+++ b/repoze/bfg/router.py
@@ -1,11 +1,8 @@
-import cgi
import os
import sys
-from webob import Response
from zope.interface import providedBy
from zope.component.event import dispatch
-from zope.component import queryUtility
from zope.interface import implements
@@ -16,7 +13,6 @@ from repoze.bfg.events import NewResponse
from repoze.bfg.events import WSGIApplicationCreatedEvent
from repoze.bfg.interfaces import ILogger
-from repoze.bfg.interfaces import IResponseFactory
from repoze.bfg.interfaces import IRootFactory
from repoze.bfg.interfaces import IRouter
from repoze.bfg.interfaces import IRoutesMapper
@@ -47,6 +43,9 @@ from repoze.bfg.traversal import _traverse
from repoze.bfg.urldispatch import RoutesRootFactory
+from repoze.bfg.view import default_forbidden_view
+from repoze.bfg.view import default_notfound_view
+
_marker = object()
class Router(object):
@@ -182,33 +181,6 @@ class Router(object):
finally:
self.threadlocal_manager.pop()
-def default_view(context, request, status):
- try:
- msg = cgi.escape(request.environ['repoze.bfg.message'])
- except KeyError:
- msg = ''
- html = """
- <html>
- <title>%s</title>
- <body>
- <h1>%s</h1>
- <code>%s</code>
- </body>
- </html>
- """ % (status, status, msg)
- headers = [('Content-Length', str(len(html))),
- ('Content-Type', 'text/html')]
- response_factory = queryUtility(IResponseFactory, default=Response)
- return response_factory(status = status,
- headerlist = headers,
- app_iter = [html])
-
-def default_forbidden_view(context, request):
- return default_view(context, request, '401 Unauthorized')
-
-def default_notfound_view(context, request):
- return default_view(context, request, '404 Not Found')
-
def make_app(root_factory, package=None, filename='configure.zcml',
authentication_policy=None, authorization_policy=None,
options=None, registry=None, debug_logger=None,
diff --git a/repoze/bfg/tests/test_router.py b/repoze/bfg/tests/test_router.py
index 8c3e23c91..cf9f2a835 100644
--- a/repoze/bfg/tests/test_router.py
+++ b/repoze/bfg/tests/test_router.py
@@ -140,7 +140,7 @@ class RouterTests(unittest.TestCase):
def test_iforbiddenview_nooverride(self):
context = DummyContext()
router = self._makeOne()
- from repoze.bfg.router import default_forbidden_view
+ from repoze.bfg.view import default_forbidden_view
self.assertEqual(router.forbidden_view, default_forbidden_view)
def test_inotfoundview_override(self):
@@ -154,7 +154,7 @@ class RouterTests(unittest.TestCase):
def test_inotfoundview_nooverride(self):
context = DummyContext()
router = self._makeOne()
- from repoze.bfg.router import default_notfound_view
+ from repoze.bfg.view import default_notfound_view
self.assertEqual(router.notfound_view, default_notfound_view)
def test_call_no_view_registered_no_isettings(self):
@@ -885,23 +885,6 @@ class MakeAppTests(unittest.TestCase):
authzpolicy)
self.assertEqual(len(logger.messages), 1) # deprecation warning
-class TestDefaultForbiddenView(unittest.TestCase):
- def _callFUT(self, context, request):
- from repoze.bfg.router import default_forbidden_view
- return default_forbidden_view(context, request)
-
- def test_nomessage(self):
- request = DummyRequest({})
- context = DummyContext()
- response = self._callFUT(context, request)
- self.failUnless('<code></code>' in response.body)
-
- def test_withmessage(self):
- request = DummyRequest({'repoze.bfg.message':'abc&123'})
- context = DummyContext()
- response = self._callFUT(context, request)
- self.failUnless('<code>abc&amp;123</code>' in response.body)
-
class TestDefaultRootFactory(unittest.TestCase):
def _getTargetClass(self):
from repoze.bfg.router import DefaultRootFactory
diff --git a/repoze/bfg/tests/test_view.py b/repoze/bfg/tests/test_view.py
index 5b870fa7d..a35930f69 100644
--- a/repoze/bfg/tests/test_view.py
+++ b/repoze/bfg/tests/test_view.py
@@ -452,10 +452,54 @@ class TestBFGViewDecorator(unittest.TestCase):
self.assertEqual(result.context, None)
self.assertEqual(result.request, None)
+class TestDefaultForbiddenView(unittest.TestCase):
+ def _callFUT(self, context, request):
+ from repoze.bfg.view import default_forbidden_view
+ return default_forbidden_view(context, request)
+
+ def test_nomessage(self):
+ request = DummyRequest({})
+ context = DummyContext()
+ response = self._callFUT(context, request)
+ self.assertEqual(response.status, '401 Unauthorized')
+ self.failUnless('<code></code>' in response.body)
+
+ def test_withmessage(self):
+ request = DummyRequest({'repoze.bfg.message':'abc&123'})
+ context = DummyContext()
+ response = self._callFUT(context, request)
+ self.assertEqual(response.status, '401 Unauthorized')
+ self.failUnless('<code>abc&amp;123</code>' in response.body)
+
+class TestDefaultNotFoundView(unittest.TestCase):
+ def _callFUT(self, context, request):
+ from repoze.bfg.view import default_notfound_view
+ return default_notfound_view(context, request)
+
+ def test_nomessage(self):
+ request = DummyRequest({})
+ context = DummyContext()
+ response = self._callFUT(context, request)
+ self.assertEqual(response.status, '404 Not Found')
+ self.failUnless('<code></code>' in response.body)
+
+ def test_withmessage(self):
+ request = DummyRequest({'repoze.bfg.message':'abc&123'})
+ context = DummyContext()
+ response = self._callFUT(context, request)
+ self.assertEqual(response.status, '404 Not Found')
+ self.failUnless('<code>abc&amp;123</code>' in response.body)
+
+
class DummyContext:
pass
class DummyRequest:
+ def __init__(self, environ=None):
+ if environ is None:
+ environ = {}
+ self.environ = environ
+
def get_response(self, application):
return application
diff --git a/repoze/bfg/view.py b/repoze/bfg/view.py
index ce7153249..4e5418175 100644
--- a/repoze/bfg/view.py
+++ b/repoze/bfg/view.py
@@ -1,3 +1,4 @@
+import cgi
import os
import inspect
import mimetypes
@@ -12,12 +13,16 @@ import mimetypes
if hasattr(mimetypes, 'init'):
mimetypes.init()
+from webob import Response
+
from paste.urlparser import StaticURLParser
from zope.component import queryMultiAdapter
+from zope.component import queryUtility
from zope.deprecation import deprecated
from repoze.bfg.interfaces import IView
+from repoze.bfg.interfaces import IResponseFactory
from repoze.bfg.path import caller_path
from repoze.bfg.path import caller_package
from repoze.bfg.security import view_execution_permitted
@@ -303,3 +308,30 @@ class bfg_view(object):
_bfg_view.__route_name__ = self.route_name
return _bfg_view
+def default_view(context, request, status):
+ try:
+ msg = cgi.escape(request.environ['repoze.bfg.message'])
+ except KeyError:
+ msg = ''
+ html = """
+ <html>
+ <title>%s</title>
+ <body>
+ <h1>%s</h1>
+ <code>%s</code>
+ </body>
+ </html>
+ """ % (status, status, msg)
+ headers = [('Content-Length', str(len(html))),
+ ('Content-Type', 'text/html')]
+ response_factory = queryUtility(IResponseFactory, default=Response)
+ return response_factory(status = status,
+ headerlist = headers,
+ app_iter = [html])
+
+def default_forbidden_view(context, request):
+ return default_view(context, request, '401 Unauthorized')
+
+def default_notfound_view(context, request):
+ return default_view(context, request, '404 Not Found')
+