def __call__(self, request, obj, stack): """Resolves a view. """ default_fallback = False unconsumed_amount = len(stack) if unconsumed_amount == 0: default_fallback = True ns, name = VIEW, self.default_name elif unconsumed_amount == 1: ns, name = stack[0] else: raise ResolveError( "Can't resolve view: stack is not fully consumed.") if ns not in (DEFAULT, VIEW): raise ResolveError( "Can't resolve view: namespace %r is not supported." % ns) # If this is the last node AND if it's a view, we return it. if default_fallback and IView.providedBy(obj): return obj # Else, we need to resolve the model into a view. view = self.lookup(request, obj, name) if view is None: if default_fallback: raise ResolveError( "Can't resolve view: no default view on %r." % obj) else: if ns == VIEW: raise ResolveError( "Can't resolve view: no view `%s` on %r." % (name, obj)) raise ResolveError( "%r is neither a view nor a model." % name) return view
def query_view_layout(view, interface=ILayout, name=""): """Returns a layout associated to the view's request and context. """ assert IView.providedBy(view) assert interface.isOrExtends(ILayout) return queryMultiAdapter( (view.request, view.context), interface, name=name)
def query_view_template(view, interface=ITemplate, name=""): """Returns a template associated to a view, or None. """ assert IView.providedBy(view) assert interface.isOrExtends(ITemplate) return queryMultiAdapter( (view, view.request), interface, name=name)
def query_viewlet_manager(view, context=None, request=None, interface=IViewletManager, name=''): """Retrieve a viewlet manager""" assert IView.providedBy(view), "view must implements IView" if context is None: context = view.context if request is None: request = view.request assert interface.isOrExtends(IViewletManager), ( "interface must extends IViewletManager") assert IRequest.providedBy(request), "request must be an IRequest" return getMultiAdapter((context, request, view), interface, name)
def query_viewlet_manager(view, context=None, request=None, interface=IViewletManager, name=''): """Retrieve a viewlet manager""" assert IView.providedBy(view), "view must implements IView" if context is None: context = view.context if request is None: request = view.request assert interface.isOrExtends(IViewletManager), ( "interface must extends IViewletManager") assert IRequest.providedBy(request), "request must be an IRequest" security_predict, security_check = getSecurityGuards() try: factory = interface.component(context, request, view, name=name) if factory is not None and security_predict is not None: factory = security_predict(factory) # raises if security error manager = factory(context, request, view) if security_check is not None: manager = security_check(manager) # raises if security error except ComponentLookupError: pass else: return manager