示例#1
0
def query_components(context, request, view, collection, interface=IViewlet):
    """Query components of the given collection :

    * Queries the registry according to context, request, view, manager.
    * Updates the components.
    * Filters out the unavailable components.
    * Returns an iterable of components.
    """
    def registry_components():
        security_predict, security_check = getSecurityGuards()
        
        for name, factory in interface.all_components(
                context, request, view, collection):
            
            if security_predict is not None:
                factory = security_predict(factory, swallow_errors=True)

            if factory is not None:
                component = factory(context, request, view, collection)
                if security_check is not None:
                    component = security_check(component, swallow_errors=True)

                if component is not None:
                    component.update()
                    if bool(component.available) is True:
                        yield component

    assert interface.isOrExtends(IViewlet), "interface must extends IViewlet"
    assert IRequest.providedBy(request), "request must be an IRequest"
    return registry_components()
示例#2
0
def query_entries(context, request, view, menu, interface=IMenuEntry):
    """Query entries of the given menu :

    * Queries the registry according to context, request, view, menu.
    * Updates the components.
    * Filters out the unavailable components.
    * Returns an iterable of components.
    """
    def isAvailable(component):
        return bool(getattr(component, 'available', True))

    def registry_components():
        for name, entry in getAdapters(
            (context, request, view, menu), interface):

            success = True
            if CHECKER is not None:
                permission = entry.permission
                if permission is not None:
                    success = CHECKER(permission, entry)

            if success and isAvailable(entry):
                if IMenuEntryViewlet.providedBy(entry):
                    entry.update()
                yield entry

    assert interface.isOrExtends(IMenuEntry)
    assert IRequest.providedBy(request), "request must be an IRequest"
    return registry_components()
示例#3
0
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)
示例#4
0
def query_subforms(context, request, form, interface=ISubForm):
    """Query subforms of the given form :

    * Queries the registry according to context, request, form.
    * Updates the components.
    * Returns an iterable of components.
    """

    def registry_components():
        for name, component in getAdapters(
            (context, form, request), interface):

            if CHECKER is not None and not CHECKER(component, 'render'):
                continue

            component.update()
            yield component

    assert interface.isOrExtends(ISubForm), "interface must extends ISubForm"
    assert IRequest.providedBy(request), "request must be an IRequest"
    return registry_components()
示例#5
0
def query_components(context, request, view, collection, interface=IViewlet):
    """Query components of the given collection :

    * Queries the registry according to context, request, view, manager.
    * Updates the components.
    * Filters out the unavailable components.
    * Returns an iterable of components.
    """

    def registry_components():
        for name, component in getAdapters(
            (context, request, view, collection), interface):

            if CHECKER is not None and not CHECKER(component, 'render'):
                continue

            component.update()
            if bool(component.available) is True:
                yield component

    assert interface.isOrExtends(IViewlet), "interface must extends IViewlet"
    assert IRequest.providedBy(request), "request must be an IRequest"
    return registry_components()
示例#6
0
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
示例#7
0
def query_layout(request, context, interface=ILayout, name=''):
    assert interface.isOrExtends(ILayout)
    assert IRequest.providedBy(request)
    return queryMultiAdapter((request, context), interface, name=name)
示例#8
0
def query_view(request, context, interface=IView, name=''):
    assert interface.isOrExtends(IView)
    assert IRequest.providedBy(request)
    return queryMultiAdapter(
        (context, request), interface, name=name)
示例#9
0
def query_view(request, context, interface=IView, name=''):
    assert interface.isOrExtends(IView)
    assert IRequest.providedBy(request)
    return interface(context, request, name=name, default=None)