Utility

Utilities sind Komponenten mit einem Interface und die mit einem Interface und einem Namen aufgerufen werden können.

Utilities erstellen

Solche Utilities können erstellt werden mit:

>>> from zope import interface
>>> class IGreeter(interface.Interface):
...     def greet():
...         "say hello"
>>> class Greeter:
...     interface.implements(IGreeter)
...
...     def __init__(self, other="world"):
...         self.other = other
...
...     def greet(self):
...         print "Hello", self.other
queryUtility oder getUtility

fragen das Utility nach ihrem Interface:

>>> component.queryUtility(IGreeter, 'christian').greet()
Hello chris
>>> component.getUtility(IGreeter, 'christian').greet()
Hello chris

queryUtility und getUtility unterscheiden sich jedoch in ihrer Fehlerbehandlung:

>>> component.queryUtility(IGreeter, 'veit')
>>> component.getUtility(IGreeter, 'veit')
... # doctest: +ELLIPSIS
Traceback (most recent call last):
...
ComponentLookupError: (<InterfaceClass ...IGreeter>, 'veit')
provideUtility

registriert eine Instanz einer Utility-Klasse, z.B.:

>>> from zope import component
>>> greet = Greeter('chris')
>>> component.provideUtility(greet, IGreeter, 'christian')