Direkt zum Inhalt | Direkt zur Navigation

Benutzerspezifische Werkzeuge

Sie sind hier: Startseite / Tech-Blog / Plone: persistente Utilities manuell entfernen

Plone: persistente Utilities manuell entfernen

In Plone werden von vielen Erweiterungen persistente Utilities (local utilities) registriert. Leider werden diese nicht bei allen Erweiterungen auch wieder entfernt, wenn man diese deinstalliert. Dies führt dazu, dass man diese Erweiterungen nicht mehr richtig entfernen kann. Nachfolgend wird erläutert, wie man local utilities manuell entfernt.

Wenn man eine solche fehlerhafte Erweiterung deinstalliert und diese auch aus dem Buildout entfernt, kommt es zu Fehlermeldungen der folgenden Art.

AttributeError: type object 'IWarehouseContainer' has no attribute '__iro__'

Um den Fehler zu beheben, müssen wir die Erweiterung noch einmal im Buildout installieren.

Registrierung finden

Am besten schauen wir uns als erstes den Code der Erweiterung an, der das local utility registriert. Hier zu suchen wir in dem package nach dem Interface 'IWarehouseContainer'.

~/.buildout/eggs/getpaid.warehouse-0.3-py2.7.egg/getpaid/warehouse
$ grep -r "IWarehouseContainer" .

Wir finden hier die Registrierung.

sm.registerUtility(component=warehouses, provided=interfaces.IWarehouseContainer )

Dies wird uns helfen das Utility zu entfernen.

Utility entfernen

Um das local utility zu entfernen starten wir die Instanz mit debug.

./bin/instance debug

Nun holen wir uns den site manager.

sm = app.Plone.getSiteManager()

Anschließend importieren wir das Interface IWarehouseContainer und holen uns das Utility.

from getpaid.warehouse.interfaces import IWarehouseContainer
warehouse = sm.queryUtility( IWarehouseContainer )

Das Utility können wir jetzt mit sm.unregisterUtility(IWarehouseContainer) aus der Registrierung entfernen. Da das Utility selbst IWarehouseContainer nicht implementiert, muss das Interface in diesem Fall mit angegeben werden.

sm.unregisterUtility(warehouse, provided=IWarehouseContainer)
abgelegt unter: ,