summaryrefslogtreecommitdiff
path: root/repoze/bfg/view.py
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-09-16 04:56:49 +0000
committerChris McDonough <chrism@agendaless.com>2009-09-16 04:56:49 +0000
commita9fed7675d8da572dee840676714b2653e3f7f79 (patch)
tree93327afae95fb9cf6b1d0cb72da265af42a705bd /repoze/bfg/view.py
parenta37220b84dee4cc8b1b12f34643ce97dad89ffe1 (diff)
downloadpyramid-a9fed7675d8da572dee840676714b2653e3f7f79.tar.gz
pyramid-a9fed7675d8da572dee840676714b2653e3f7f79.tar.bz2
pyramid-a9fed7675d8da572dee840676714b2653e3f7f79.zip
Checkpoint. Not 100% test coverage.
Diffstat (limited to 'repoze/bfg/view.py')
-rw-r--r--repoze/bfg/view.py93
1 files changed, 52 insertions, 41 deletions
diff --git a/repoze/bfg/view.py b/repoze/bfg/view.py
index ba96812e7..0f899df53 100644
--- a/repoze/bfg/view.py
+++ b/repoze/bfg/view.py
@@ -26,15 +26,16 @@ from zope.interface import implements
from zope.deprecation import deprecated
from repoze.bfg.interfaces import IResponseFactory
+from repoze.bfg.interfaces import IRendererFactory
from repoze.bfg.interfaces import IView
from repoze.bfg.interfaces import IMultiView
+from repoze.bfg.interfaces import ITemplateRenderer
from repoze.bfg.path import caller_package
from repoze.bfg.static import PackageURLParser
-from repoze.bfg.templating import renderer_from_path
-from repoze.bfg.templating import _auto_reload
+from repoze.bfg.renderers import renderer_from_name
deprecated('view_execution_permitted',
"('from repoze.bfg.view import view_execution_permitted' was "
@@ -236,8 +237,8 @@ class bfg_view(object):
function itself if the view is a function, or the ``__call__``
callable attribute if the view is a class).
- If ``template`` is not supplied, ``None`` is used (meaning that no
- template is associated with this view).
+ If ``renderer`` is not supplied, ``None`` is used (meaning that no
+ renderer is associated with this view).
If ``wrapper`` is not supplied, ``None`` is used (meaning that no
view wrapper is associated with this view).
@@ -335,7 +336,7 @@ class bfg_view(object):
"""
def __init__(self, name='', request_type=None, for_=None, permission=None,
route_name=None, request_method=None, request_param=None,
- containment=None, attr=None, template=None, wrapper=None):
+ containment=None, attr=None, renderer='', wrapper=None):
self.name = name
self.request_type = request_type
self.for_ = for_
@@ -345,11 +346,11 @@ class bfg_view(object):
self.request_param = request_param
self.containment = containment
self.attr = attr
- self.template = template
+ self.renderer = renderer
self.wrapper_viewname = wrapper
def __call__(self, wrapped):
- _bfg_view = map_view(wrapped, self.attr, self.template)
+ _bfg_view = map_view(wrapped, self.attr, self.renderer)
_bfg_view.__is_bfg_view__ = True
_bfg_view.__permission__ = self.permission
_bfg_view.__for__ = self.for_
@@ -430,41 +431,43 @@ class MultiView(object):
continue
raise NotFound(self.name)
-def templated_response(template_name, response, view, context, request,
- auto_reload=False):
+def rendered_response(renderer_name, response, view, context, request):
if is_response(response):
return response
- renderer = renderer_from_path(template_name, auto_reload=auto_reload)
- kw = {'view':view, 'template_name':template_name, 'context':context,
- 'request':request}
- try:
- kw.update(response)
- except TypeError:
- return response
- result = renderer(**kw)
+ renderer = renderer_from_name(renderer_name)
+ if ITemplateRenderer.providedBy(renderer):
+ kw = {'view':view, 'template_name':renderer_name, 'context':context,
+ 'request':request}
+ try:
+ kw.update(response)
+ except TypeError:
+ return response
+ result = renderer(kw)
+ else:
+ result = renderer(response)
response_factory = queryUtility(IResponseFactory, default=Response)
response = response_factory(result)
- content_type = kw.get('content_type_', None)
+ attrs = request.environ.get('webob.adhoc_attrs', {})
+ content_type = attrs.get('response_content_type', None)
if content_type is not None:
response.content_type = content_type
- headerlist = kw.get('headerlist_', None)
+ headerlist = attrs.get('response_headerlist', None)
if headerlist is not None:
for k, v in headerlist:
response.headers.add(k, v)
- status = kw.get('status_', None)
+ status = attrs.get('response_status', None)
if status is not None:
response.status = status
- charset = kw.get('charset_', None)
+ charset = attrs.get('response_charset', None)
if charset is not None:
response.charset = charset
- cache_for = kw.get('cache_for_', None)
+ cache_for = attrs.get('response_cache_for', None)
if cache_for is not None:
response.cache_expires = cache_for
return response
-def map_view(view, attr=None, template=None):
+def map_view(view, attr=None, renderer=None):
wrapped_view = view
- auto_reload = _auto_reload()
if inspect.isclass(view):
# If the object we've located is a class, turn it into a
@@ -482,9 +485,9 @@ def map_view(view, attr=None, template=None):
response = inst()
else:
response = getattr(inst, attr)()
- if template:
- response = templated_response(template, response, inst,
- context, request, auto_reload)
+ if renderer:
+ response = rendered_response(renderer, response, inst,
+ context, request)
return response
wrapped_view = _bfg_class_requestonly_view
else:
@@ -495,9 +498,9 @@ def map_view(view, attr=None, template=None):
response = inst()
else:
response = getattr(inst, attr)()
- if template:
- response = templated_response(template, response, inst,
- context, request, auto_reload)
+ if renderer:
+ response = rendered_response(renderer, response, inst,
+ context, request)
return response
wrapped_view = _bfg_class_view
@@ -510,28 +513,36 @@ def map_view(view, attr=None, template=None):
else:
response = getattr(view, attr)(request)
- if template:
- response = templated_response(template, response, view,
- context, request, auto_reload)
+ if renderer:
+ response = rendered_response(renderer, response, view,
+ context, request)
return response
wrapped_view = _bfg_requestonly_view
elif attr:
def _bfg_attr_view(context, request):
response = getattr(view, attr)(context, request)
- if template:
- response = templated_response(template, response, view,
- context, request, auto_reload)
+ if renderer:
+ response = rendered_response(renderer, response, view,
+ context, request)
return response
wrapped_view = _bfg_attr_view
- elif template:
- def _templated_view(context, request):
+ elif renderer:
+ def _rendered_view(context, request):
+ response = view(context, request)
+ response = rendered_response(renderer, response, view,
+ context, request)
+ return response
+ wrapped_view = _rendered_view
+
+ elif queryUtility(IRendererFactory):
+ def _default_rendered_view(context, request):
response = view(context, request)
- response = templated_response(template, response, view,
- context, request, auto_reload)
+ response = rendered_response(renderer, response, view,
+ context, request)
return response
- wrapped_view = _templated_view
+ wrapped_view = _default_rendered_view
decorate_view(wrapped_view, view)
return wrapped_view