ここに問題があります。私はmynamespace.mypackage
それを依存関係として持っていますmynamespace.mydependencypackage
、それはローカルユーティリティです。コンポーネントレジストリを使用して登録されます。
config.py
からmynamespace.mypackage
、私は持っています
DEPENDENCIES = ['mynamespace.mydependencypackage']
そして、私mynamespace.mypackage
のsetuphandlers.py
場合、この依存関係はまだインストールされていない場合はインストールされます。
問題は次のとおりです。を再インストールmynamespace.mypackage
するZMI
と、すべてが完全にインストールされているように見えますが(エラーが表示されないため)、ユーティリティを取得するComponentLookupError
メソッドを使用すると、次のようになります。mynamespace.mypackage
Module zope.component._api, line 207, in getUtility
ComponentLookupError: (<InterfaceClass MY_UTILITY_INTERFACE, '')
mynamespace.mydependencypackage
再インストールするときに、setuphandlers.py
またはZMIを介して再インストールすることで、この問題を「修正」できますmynamespace.mypackage
が、これは私にとって最善の解決策ではないようです。
ここでジェネリックセットアップについて何が欠けていますか?このユーティリティをZODBで永続化することは一切しませんでした。これらすべての問題を忘れてBrowserView
、ユーティリティメソッドを使用して作成することはできますが、最初に、なぜこれらの問題が発生するのかを理解したいと思います。
編集:今、私はより大きな問題を抱えています。TypeError: ('object.__new__(MyClass) is not safe, use Persistence.Persistent.__new__()', <function _reconstructor at 0xb7783e9c>, (<class 'mynamespace.mydependencypackage.package.MyClass'>, <type 'object'>, None))
が表示されています。完全なトレースバック:
Traceback (innermost last):
Module ZPublisher.Publish, line 110, in publish
Module ZPublisher.BaseRequest, line 429, in traverse
Module ZPublisher.BeforeTraverse, line 99, in __call__
Module Products.CMFCore.PortalObject, line 94, in __before_publishing_traverse__
Module zope.event, line 23, in notify
Module zope.component.event, line 26, in dispatch
Module zope.component._api, line 130, in subscribers
Module zope.component.registry, line 290, in subscribers
Module zope.interface.adapter, line 535, in subscribers
Module zope.component.event, line 33, in objectEventNotify
Module zope.component._api, line 130, in subscribers
Module zope.component.registry, line 290, in subscribers
Module zope.interface.adapter, line 535, in subscribers
Module zope.app.component.site, line 375, in threadSiteSubscriber
Module zope.app.component.hooks, line 61, in setSite
Module Products.CMFCore.PortalObject, line 75, in getSiteManager
Module ZODB.Connection, line 761, in setstate
Module ZODB.Connection, line 819, in _setstate
Module ZODB.serialize, line 604, in setGhostState
Module ZODB.serialize, line 597, in getState
Module copy_reg, line 48, in _reconstructor
TypeError: ('object.__new__(MyClass) is not safe, use Persistence.Persistent.__new__()', <function _reconstructor at 0xb7783e9c>, (<class 'mynamespace.mydependencypackage.package.MyClass'>, <type 'object'>, None))