Class
zope.app.publisher.browser.fields.MenuField

This fields represents a menu (item type).

Besides being able to look up the menu by importing it, we also try to look up the name in the site manager.

>>> from zope.interface import directlyProvides
>>> from zope.interface.interface import InterfaceClass
>>> menu1 = InterfaceClass('menu1', (),
...                        __doc__='Menu Item Type: menu1',
...                        __module__='zope.app.menus')
>>> directlyProvides(menu1, IMenuItemType)
>>> menus = None
>>> class Resolver(object):
...     def resolve(self, path):
...         if path.startswith('zope.app.menus') and \
...             hasattr(menus, 'menu1') or \
...             path == 'zope.app.component.menus.menu1':
...             return menu1
...         raise ConfigurationError('menu1')
>>> field = MenuField()
>>> field = field.bind(Resolver())

Test 1: Import the menu

>>> field.fromUnicode('zope.app.component.menus.menu1') is menu1
True

Test 2: We have a shortcut name. Import the menu from zope.app.menus1.

>>> from types import ModuleType as module
>>> import sys
>>> menus = module('menus')
>>> old = sys.modules.get('zope.app.menus', None)
>>> sys.modules['zope.app.menus'] = menus
>>> setattr(menus, 'menu1', menu1)
>>> field.fromUnicode('menu1') is menu1
True
>>> if old is not None:
...     sys.modules['zope.app.menus'] = old

Test 3: Get the menu from the Site Manager

>>> from zope.app.testing import ztapi
>>> ztapi.provideUtility(IMenuItemType, menu1, 'menu1')
>>> field.fromUnicode('menu1') is menu1
True

Base classes

Implemented Interfaces

Attributes/Properties

Methods

Known Subclasses

There are no known subclasses.