Zope / Plone: global utilities erzeugen und verwenden
Eigenschaften von global utilities
- global utilities werden beim Start der Zope-Instanz instanziert
- sind nicht persistent und können daher auch keine persistenten Daten enthalten
- können problemlos jeder Zeit entfernt werden, da keien persistente Registrierung in der Datenbank erfolgt
Ein Global Utility erzeugen
Utility Klasse
Um ein global utility zu erzeugen, legen wir uns eine Datei utilities.py mit folgenden Inhalt in unserem Package an:
from zope.site.hooks import getSite class PloneClipboardTool(object): """ provide some useful methods """ def get_plone_portal(self): """ return the portal object """ portal = getSite()
Utility Interface
In der Datei interfaces.py definieren wir ein entsprechendes Interface:
from zope.interface import Interface class IPloneClipboardTool(Interface): def get_plone_portal(self): """ return the portal object """
Utility Registrierung
In der configure.zcml registrieren wir unser global utility wie folgt:
<utility factory=".tool.PloneClipboardTool" provides=".interfaces.IPloneClipboardTool"/>
Ein Global Utility verwenden
Um auf das global utility zuzugreifen, verwenden wir getUtility() oder queryUtility().
getUtility
from zope.component import getUtility my_tool = getUtility(IPloneClipboardTool)
Sollte kein Utility gefunden werden, würde man hier einen ComponentLookupError bekommen.
*** ComponentLookupError: (<InterfaceClass inqbus.plone.clipboard.interfaces.IPloneClipboardTool>, 'test')
queryUtility
from zope.component import queryUtility my_tool = queryUtility(IPloneClipboardTool)
Sollte kein Utility gefunden werden, würde man hier 'None' bekommen.
Der folgende Aufruf bringt uns dann das Portalobjekt zurück.
plone_portal = my_tool.get_plone_portal()
Analog kann man beliebig viele Utilities und Methoden darin erzeugen und verwenden.