diff options
| author | Chris McDonough <chrism@agendaless.com> | 2009-11-19 11:26:23 +0000 |
|---|---|---|
| committer | Chris McDonough <chrism@agendaless.com> | 2009-11-19 11:26:23 +0000 |
| commit | a32d2a29df8948694efc78e2d30e7059f80deff7 (patch) | |
| tree | fdb69b2d594429fef84f6f65c6abbe0ccad08c10 /repoze/bfg/view.py | |
| parent | eac7c470021b647d63c2e2af8acd6cebd738f2a4 (diff) | |
| download | pyramid-a32d2a29df8948694efc78e2d30e7059f80deff7.tar.gz pyramid-a32d2a29df8948694efc78e2d30e7059f80deff7.tar.bz2 pyramid-a32d2a29df8948694efc78e2d30e7059f80deff7.zip | |
- The ``repoze.bfg.view.rendered_response`` function has been moved to
``repoze.bfg.configuration.rendered_response``.
- The ``repoze.bfg.view.decorate_view`` function has been moved to
``repoze.bfg.configuration.decorate_view``.
- The ``repoze.bfg.view.MultiView`` class has been moved to
``repoze.bfg.configuration.MultiView``.
- Fix argument ordering bug in r.b.configuration.Configurator.resource.
Diffstat (limited to 'repoze/bfg/view.py')
| -rw-r--r-- | repoze/bfg/view.py | 136 |
1 files changed, 0 insertions, 136 deletions
diff --git a/repoze/bfg/view.py b/repoze/bfg/view.py index 43ad809c1..8ef8f3bb6 100644 --- a/repoze/bfg/view.py +++ b/repoze/bfg/view.py @@ -2,7 +2,6 @@ import cgi import mimetypes import os import sys -import inspect # See http://bugs.python.org/issue5853 which is a recursion bug # that seems to effect Python 2.6, Python 2.6.1, and 2.6.2 (a fix @@ -23,15 +22,12 @@ from zope.component import getSiteManager from zope.component import providedBy from zope.component import queryUtility from zope.deprecation import deprecated -from zope.interface import implements from zope.interface.advice import getFrameInfo -from repoze.bfg.interfaces import IMultiView from repoze.bfg.interfaces import IResponseFactory from repoze.bfg.interfaces import IRoutesMapper from repoze.bfg.interfaces import IView -from repoze.bfg.exceptions import NotFound from repoze.bfg.path import caller_package from repoze.bfg.resource import resource_spec from repoze.bfg.static import PackageURLParser @@ -513,135 +509,3 @@ def derive_view(original_view, permission=None, predicates=(), attr=None, wrapper_viewname=wrapper_viewname, viewname=viewname) -def requestonly(class_or_callable, attr=None): - """ Return true of the class or callable accepts only a request argument, - as opposed to something that accepts context, request """ - if attr is None: - attr = '__call__' - if inspect.isfunction(class_or_callable): - fn = class_or_callable - elif inspect.isclass(class_or_callable): - try: - fn = class_or_callable.__init__ - except AttributeError: - return False - else: - try: - fn = getattr(class_or_callable, attr) - except AttributeError: - return False - - try: - argspec = inspect.getargspec(fn) - except TypeError: - return False - - args = argspec[0] - defaults = argspec[3] - - if hasattr(fn, 'im_func'): - # it's an instance method - if not args: - return False - args = args[1:] - if not args: - return False - - if len(args) == 1: - return True - - elif args[0] == 'request': - if len(args) - len(defaults) == 1: - return True - - return False - -class MultiView(object): - implements(IMultiView) - - def __init__(self, name): - self.name = name - self.views = [] - - def add(self, view, score): - self.views.append((score, view)) - self.views.sort() - - def match(self, context, request): - for score, view in self.views: - if not hasattr(view, '__predicated__'): - return view - if view.__predicated__(context, request): - return view - raise NotFound(self.name) - - def __permitted__(self, context, request): - view = self.match(context, request) - if hasattr(view, '__permitted__'): - return view.__permitted__(context, request) - return True - - def __call_permissive__(self, context, request): - view = self.match(context, request) - view = getattr(view, '__call_permissive__', view) - return view(context, request) - - def __call__(self, context, request): - for score, view in self.views: - try: - return view(context, request) - except NotFound: - continue - raise NotFound(self.name) - -def decorate_view(wrapped_view, original_view): - if wrapped_view is original_view: - return False - wrapped_view.__module__ = original_view.__module__ - wrapped_view.__doc__ = original_view.__doc__ - try: - wrapped_view.__name__ = original_view.__name__ - except AttributeError: - wrapped_view.__name__ = repr(original_view) - try: - wrapped_view.__permitted__ = original_view.__permitted__ - except AttributeError: - pass - try: - wrapped_view.__call_permissive__ = original_view.__call_permissive__ - except AttributeError: - pass - try: - wrapped_view.__predicated__ = original_view.__predicated__ - except AttributeError: - pass - return True - -def rendered_response(renderer, response, view, context,request, - renderer_name): - if ( hasattr(response, 'app_iter') and hasattr(response, 'headerlist') - and hasattr(response, 'status') ): - return response - result = renderer(response, {'view':view, 'renderer_name':renderer_name, - 'context':context, 'request':request}) - response_factory = queryUtility(IResponseFactory, default=Response) - response = response_factory(result) - if request is not None: # in tests, it may be None - attrs = request.__dict__ - content_type = attrs.get('response_content_type', None) - if content_type is not None: - response.content_type = content_type - headerlist = attrs.get('response_headerlist', None) - if headerlist is not None: - for k, v in headerlist: - response.headers.add(k, v) - status = attrs.get('response_status', None) - if status is not None: - response.status = status - charset = attrs.get('response_charset', None) - if charset is not None: - response.charset = charset - cache_for = attrs.get('response_cache_for', None) - if cache_for is not None: - response.cache_expires = cache_for - return response |
