Interface Registration APIs =========================== .. testsetup:: from zope.component.testing import setUp setUp() Registering Interfaces as Utilities ----------------------------------- .. autofunction:: zope.component.interface.provideInterface We can register a given interface with the global site manager as a utility. First, declare a new interface, which itself provides only the core API, :class:`zope.interface.interfaces.IInterface`: .. doctest:: >>> from zope.interface import Interface >>> from zope.interface.interfaces import IInterface >>> from zope.component.tests.examples import ITestType >>> from zope.component import getGlobalSiteManager >>> gsm = getGlobalSiteManager() >>> class IDemo(Interface): ... pass >>> IInterface.providedBy(IDemo) True >>> ITestType.providedBy(IDemo) False >>> list(gsm.getUtilitiesFor(ITestType)) [] Now, register ``IDemo`` as providing ``ITestType`` .. doctest:: >>> from zope.component.interface import provideInterface >>> provideInterface('', IDemo, ITestType) >>> ITestType.providedBy(IDemo) True >>> interfaces = list(gsm.getUtilitiesFor(ITestType)) >>> [iface.__name__ for (name, iface) in interfaces] ['IDemo'] We can register ``IDemo`` as providing more than one interface: .. doctest:: >>> class IOtherType(IInterface): ... pass >>> provideInterface('', IDemo, IOtherType) >>> ITestType.providedBy(IDemo) True >>> IOtherType.providedBy(IDemo) True >>> interfaces = list(gsm.getUtilitiesFor(ITestType)) >>> [iface.__name__ for (name, iface) in interfaces] ['IDemo'] >>> interfaces = list(gsm.getUtilitiesFor(IOtherType)) >>> [iface.__name__ for (name, iface) in interfaces] ['IDemo'] .. testcleanup:: from zope.component.testing import tearDown tearDown() .. autofunction:: zope.component.interface.getInterface .. doctest:: >>> from zope.interface import Interface >>> from zope.component.interface import getInterface >>> from zope.component.tests.examples import ITestType >>> from zope.component.tests.examples import IGI >>> IInterface.providedBy(IGI) True >>> ITestType.providedBy(IGI) False >>> getInterface(None, 'zope.component.tests.examples.IGI') Traceback (most recent call last): ... ComponentLookupError: zope.component.tests.examples.interface.IGI >>> provideInterface('', IGI, ITestType) >>> ITestType.providedBy(IGI) True >>> iface = getInterface(None, ... 'zope.component.tests.examples.IGI') >>> iface.__name__ 'IGI' .. testcleanup:: from zope.component.testing import tearDown tearDown() .. autofunction:: zope.component.interface.queryInterface .. doctest:: >>> from zope.interface import Interface >>> from zope.interface.interfaces import IInterface >>> from zope.component.interface import queryInterface >>> from zope.component.tests.examples import ITestType >>> from zope.component.tests.examples import IQI >>> IInterface.providedBy(IQI) True >>> ITestType.providedBy(IQI) False >>> queryInterface('zope.component.tests.examples.IQI') is None True >>> provideInterface('', IQI, ITestType) >>> ITestType.providedBy(IQI) True >>> iface = queryInterface('zope.component.tests.examples.IQI') >>> iface.__name__ 'IQI' .. testcleanup:: from zope.component.testing import tearDown tearDown() .. autofunction:: zope.component.interface.searchInterface .. doctest:: >>> from zope.interface import Interface >>> from zope.interface.interfaces import IInterface >>> from zope.component.interface import searchInterface >>> from zope.component.tests.examples import ITestType >>> from zope.component.tests.examples import ISI >>> IInterface.providedBy(ISI) True >>> ITestType.providedBy(ISI) False >>> searchInterface(None, 'zope.component.tests.examples.ISI') [] >>> provideInterface('', ISI, ITestType) >>> ITestType.providedBy(ISI) True >>> searchInterface(None, 'zope.component.tests.examples.ISI') == [ISI] True .. testcleanup:: from zope.component.testing import tearDown tearDown() .. autofunction:: zope.component.interface.searchInterfaceIds .. doctest:: >>> from zope.interface import Interface >>> from zope.interface.interfaces import IInterface >>> from zope.component.interface import searchInterfaceIds >>> from zope.component.tests.examples import ITestType >>> from zope.component.tests.examples import ISII >>> IInterface.providedBy(ISII) True >>> ITestType.providedBy(ISII) False >>> searchInterfaceIds(None, 'zope.component.tests.examples.ISII') [] >>> provideInterface('', ISII, ITestType) >>> ITestType.providedBy(ISII) True >>> searchInterfaceIds(None, 'zope.component.tests.examples.ISII') [u'zope.component.tests.examples.ISII'] .. testcleanup:: from zope.component.testing import tearDown tearDown()