1

私はいくつかのクラスを持つ古いスタイルの製品を持っています。クラスでは、meta_type を定義し、それらも に登録しました__init__.py

def initialize(context):
    context.registerClass(
        ClassA.ClassA,
        permission = "Add ClassA",
        constructors = (ClassA.manage_addClassA,
                        ClassA.manage_addClassA),
        icon = 'www/images/ClassA.gif'
    )

Zope を 2.9 から 2.13 に更新するまで、これはうまくいきました。zmi の [Add Products] ドロップダウン リストに、これらの meta_types がそれぞれ 2 回表示されます。

このエラーの原因を追跡しようとしました:

  1. ObjectManager.py、filtered_meta_types
  2. ObjectManager.py、all_meta_types
  3. getattr(製品, 'meta_types', ())

今、私は次にどこを見るべきかわかりません:)

これは迷惑なだけで、製品の機能に問題はありません。新しいスタイルの Zope 製品に更新する必要があるかもしれませんが、このエラーがどこから発生するのか興味があります。

4

1 に答える 1

1

レガシ パッケージが名前空間を使用しているため<five:registerPackage />、ファイルから登録を削除する必要があります。configure.zcmlProducts.

名前Products.空間は常に自動ロードされています。initialize(context)関数は、公式の名前空間になる前から、その名前空間に対して暗黙的にロードされています。

しかし、Zope が名前空間外のパッケージをサポートし始めたときProducts.、代わりに登録を明示的にするという決定が (賢明にも) 行われ、<five:registerPackage />必要な場合は古い登録フックを使用できるように が導入されました。

ただし、あなたの場合、それはinitialize()関数が 2 回呼び出されていることを意味します。1 つはProducts.パッケージであるため、もう 1 つは明示的に登録したためです。

于 2013-02-06T14:12:14.353 に答える