Пример #1
0
 def __init__(self,
              _context,
              provides,
              class_=None,
              component=None,
              name=''):
     if class_ is not None:
         assert component is None, "Both class and component specified"
         self.component = class_()
     else:
         assert component is not None, \
                 "Neither class nor component specified"
         self.component = component
     self._context = _context
     self.provides = provides
     self.name = name
     self.permission_collector = PermissionCollectingContext()
     self.contentdirective = ClassDirective(self.permission_collector,
                                            class_)
Пример #2
0
def addMenuItem(_context,
                title,
                description='',
                menu=None,
                for_=None,
                class_=None,
                factory=None,
                view=None,
                icon=None,
                filter=None,
                permission=None,
                layer=IDefaultBrowserLayer,
                extra=None,
                order=0,
                item_class=None):
    """Create an add menu item for a given class or factory

    As a convenience, a class can be provided, in which case, a
    factory is automatically defined based on the class.  In this
    case, the factory id is based on the class name.

    """

    if for_ is not None:
        _context.action(discriminator=None,
                        callable=provideInterface,
                        args=('', for_))
        forname = 'For' + for_.getName()
    else:
        for_ = IAdding
        forname = ''

    if menu is not None:
        if isinstance(menu, six.string_types):
            menu = getUtility(IMenuItemType, menu)
            if menu is None:
                raise ValueError("Missing menu id '%s'" % menu)

    if class_ is None:
        if factory is None:
            raise ValueError("Must specify either class or factory")
    else:
        if factory is not None:
            raise ValueError("Can't specify both class and factory")
        if permission is None:
            raise ValueError(
                "A permission must be specified when a class is used")
        factory = "BrowserAdd%s__%s.%s" % (forname, class_.__module__,
                                           class_.__name__)
        ClassDirective(_context, class_).factory(_context, id=factory)

    extra = {'factory': factory}

    if view:
        action = view
        # This action will check if the view exists
        _context.action(discriminator=None,
                        callable=_checkViewFor,
                        args=(for_, layer, view),
                        order=999999)
    else:
        action = factory

    if menu == None:
        menu = AddMenu

    return menuItemsDirective(_context, menu, for_,
                              layer=layer).menuItem(_context, action, title,
                                                    description, icon, filter,
                                                    permission, extra, order,
                                                    item_class)