partial conversion to eager response resolving
| | |
| | | self.owrapped_view( |
| | | self.decorated_view( |
| | | self.http_cached_view( |
| | | self.rendered_view( |
| | | self.mapped_view(view))))))))) |
| | | self.response_resolved_view( |
| | | self.rendered_view( |
| | | self.mapped_view(view)))))))))) |
| | | |
| | | @wraps_view |
| | | def response_resolved_view(self, view): |
| | | registry = self.registry |
| | | def wrapper(context, request): |
| | | result = view(context, request) |
| | | response = registry.queryAdapterOrSelf(result, IResponse) |
| | | if response is None: |
| | | if response is None: |
| | | raise ValueError( |
| | | 'Could not convert view return value "%s" into a ' |
| | | 'response object' % (result,)) |
| | | return response |
| | | return wrapper |
| | | |
| | | @wraps_view |
| | | def mapped_view(self, view): |
| | |
| | | @wraps_view |
| | | def http_cached_view(self, view): |
| | | seconds = self.kw.get('http_cache') |
| | | options = {} |
| | | |
| | | if seconds is None: |
| | | return view |
| | | |
| | | options = {} |
| | | |
| | | if isinstance(seconds, (tuple, list)): |
| | | try: |
| | |
| | | |
| | | def wrapper(context, request): |
| | | response = view(context, request) |
| | | cache_expires = getattr(response, 'cache_expires', None) |
| | | if cache_expires is not None: |
| | | cache_expires(seconds, **options) |
| | | response.cache_expires(seconds, **options) |
| | | return response |
| | | |
| | | return wrapper |
| | |
| | | |
| | | def _rendered_view(context, request): |
| | | renderer = static_renderer |
| | | result = wrapped_view(context, request) |
| | | response = wrapped_view(context, request) |
| | | registry = self.kw['registry'] |
| | | response = registry.queryAdapterOrSelf(result, IResponse) |
| | | if response is None: |
| | | attrs = getattr(request, '__dict__', {}) |
| | | if 'override_renderer' in attrs: |
| | | # renderer overridden by newrequest event or other |
| | | renderer_name = attrs.pop('override_renderer') |
| | | renderer = RendererHelper(name=renderer_name, |
| | | package=self.kw.get('package'), |
| | | registry = registry) |
| | | if '__view__' in attrs: |
| | | view_inst = attrs.pop('__view__') |
| | | else: |
| | | view_inst = getattr(wrapped_view, '__original_view__', |
| | | wrapped_view) |
| | | response = renderer.render_view(request, result, view_inst, |
| | | context) |
| | | attrs = getattr(request, '__dict__', {}) |
| | | if 'override_renderer' in attrs: |
| | | # renderer overridden by newrequest event or other |
| | | renderer_name = attrs.pop('override_renderer') |
| | | renderer = RendererHelper(name=renderer_name, |
| | | package=self.kw.get('package'), |
| | | registry = registry) |
| | | if '__view__' in attrs: |
| | | view_inst = attrs.pop('__view__') |
| | | else: |
| | | view_inst = getattr(wrapped_view, '__original_view__', |
| | | wrapped_view) |
| | | response = renderer.render_view(request, response, view_inst, |
| | | context) |
| | | return response |
| | | |
| | | return _rendered_view |
| | |
| | | msg = request.path_info |
| | | raise HTTPNotFound(msg) |
| | | else: |
| | | result = view_callable(context, request) |
| | | response = view_callable(context, request) |
| | | |
| | | # handle exceptions raised during root finding and view-exec |
| | | except Exception, why: |
| | |
| | | if view_callable is None: |
| | | raise |
| | | |
| | | result = view_callable(why, request) |
| | | |
| | | # process the response |
| | | response = registry.queryAdapterOrSelf(result, IResponse) |
| | | if response is None: |
| | | raise ValueError( |
| | | 'Could not convert view return value "%s" into a ' |
| | | 'response object' % (result,)) |
| | | response = view_callable(why, request) |
| | | |
| | | has_listeners and notify(NewResponse(request, response)) |
| | | |
| | |
| | | self.assertEqual(predicates, [True, True]) |
| | | |
| | | def test_with_wrapper_viewname(self): |
| | | from webob import Response |
| | | from pyramid.response import Response |
| | | from pyramid.interfaces import IView |
| | | from pyramid.interfaces import IViewClassifier |
| | | inner_response = Response('OK') |
| | |
| | | self.assertEqual(response.body, 'outer OK') |
| | | |
| | | def test_with_wrapper_viewname_notfound(self): |
| | | from webob import Response |
| | | from pyramid.response import Response |
| | | inner_response = Response('OK') |
| | | def inner_view(context, request): |
| | | return inner_response |
| | |
| | | |
| | | def test_http_cached_view_integer(self): |
| | | import datetime |
| | | from webob import Response |
| | | from pyramid.response import Response |
| | | response = Response('OK') |
| | | def inner_view(context, request): |
| | | return response |
| | |
| | | |
| | | def test_http_cached_view_timedelta(self): |
| | | import datetime |
| | | from webob import Response |
| | | from pyramid.response import Response |
| | | response = Response('OK') |
| | | def inner_view(context, request): |
| | | return response |
| | |
| | | |
| | | def test_http_cached_view_tuple(self): |
| | | import datetime |
| | | from webob import Response |
| | | from pyramid.response import Response |
| | | response = Response('OK') |
| | | def inner_view(context, request): |
| | | return response |
| | |
| | | self.assertEqual(headers['Cache-Control'], 'max-age=3600, public') |
| | | |
| | | def test_http_cached_view_tuple_seconds_None(self): |
| | | from webob import Response |
| | | from pyramid.response import Response |
| | | response = Response('OK') |
| | | def inner_view(context, request): |
| | | return response |
| | |
| | | self.assertEqual(headers['Cache-Control'], 'public') |
| | | |
| | | def test_http_cached_view_nonresponse_object_returned_downstream(self): |
| | | from pyramid.response import Response |
| | | response = Response() |
| | | def inner_view(context, request): |
| | | return None |
| | | return response |
| | | deriver = self._makeOne(http_cache=3600) |
| | | result = deriver(inner_view) |
| | | self.assertFalse(result is inner_view) |
| | |
| | | self.assertEqual(inner_view.__doc__, result.__doc__) |
| | | request = self._makeRequest() |
| | | result = result(None, request) |
| | | self.assertEqual(result, None) # doesn't blow up |
| | | self.assertEqual(result, response) # doesn't blow up |
| | | |
| | | def test_http_cached_view_bad_tuple(self): |
| | | from pyramid.exceptions import ConfigurationError |
| | |
| | | reg = config.registry |
| | | view = reg.adapters.lookup( |
| | | (IViewClassifier, IRequest, INothing), IView, name='') |
| | | self.assertEqual(view, wsgiapptest) |
| | | self.assertEqual(view.__original_view__, wsgiapptest) |
| | | |
| | | here = os.path.dirname(__file__) |
| | | staticapp = static(os.path.join(here, 'fixtures')) |
| | |
| | | secure=True) |
| | | self.assertEqual(iterable, ()) |
| | | |
| | | def test_call_view_returns_iresponse_adaptable(self): |
| | | from pyramid.response import Response |
| | | request = self._makeRequest() |
| | | context = self._makeContext() |
| | | view = make_view('123') |
| | | self._registerView(request.registry, view, 'registered') |
| | | def str_response(s): |
| | | return Response(s) |
| | | request.registry.registerAdapter(str_response, (str,), IResponse) |
| | | iterable = self._callFUT(context, request, name='registered', |
| | | secure=True) |
| | | self.assertEqual(iterable, ['123']) |
| | | |
| | | def test_call_view_registered_insecure_no_call_permissive(self): |
| | | context = self._makeContext() |
| | | request = self._makeRequest() |
| | |
| | | from zope.interface import providedBy |
| | | from zope.deprecation import deprecated |
| | | |
| | | from pyramid.interfaces import IResponse |
| | | from pyramid.interfaces import IRoutesMapper |
| | | from pyramid.interfaces import IView |
| | | from pyramid.interfaces import IViewClassifier |
| | |
| | | response = render_view_to_response(context, request, name, secure) |
| | | if response is None: |
| | | return None |
| | | try: |
| | | reg = request.registry |
| | | except AttributeError: |
| | | reg = get_current_registry() |
| | | response = reg.queryAdapterOrSelf(response, IResponse) |
| | | return response.app_iter |
| | | |
| | | def render_view(context, request, name='', secure=True): |