2011-08-11 4 views
5

私はpackageに、plone.app.registryを使用して作成されたコントロールパネルが含まれています。私はTimo's tutorialを追跡しましたが、レコードを追加しようとすると悪名高いものに直面していますKeyError:レコードがないフィールドPloneコントロールパネルのベストプラクティス

だから私はベストプラクティスについての質問のカップルを持っている:

私の最初の質問は次のとおりです。パッケージには、それは、アンインストール時にレジストリのです削除する必要がありますか?

私は私のパッケージのregistry.xmlの中でこれを使用:にmetadata.xmlに

<registry> 
    <records interface="collective.nitf.controlpanel.INITFSettings" /> 
</registry> 

と、この:

<metadata> 
    <version>1</version> 
    <dependencies> 
    <dependency>profile-plone.app.registry:default</dependency> 
    </dependencies> 
</metadata> 

しかし、アン・プロファイルに削除= "true" を追加することはないようです働くこと。 ZMIで手動でステップを実行しない限り、すべてのレコードを名前で列挙してみました。

だから、私の2番目の質問です:どのように私は正常にアンインストール時にコントロールパネルのレコードを削除しますか?

def setUp(self): 
    self.portal = self.layer['portal'] 
    setRoles(self.portal, TEST_USER_ID, ['Manager']) 
    # Set up the NITF settings registry 
    self.registry = Registry() 
    self.registry.registerInterface(INITFSettings) 

def test_record_sections(self): 
    # Test that the sections record is in the control panel 
    record_sections = self.registry.records[ 
     'collective.nitf.controlpanel.INITFSettings.sections'] 
    self.failUnless('sections' in INITFSettings) 
    self.assertEquals(record_sections.value, set([])) 

3番目の質問は、レコードがunisntall時に削除されたかどうかをテストする方法が考えられます。

は、レコードは、レジストリ上にある場合、私はこのような何かをテストします。

他のお勧めはありますか?

答えて

5

注:私はまだパッケージに直接自分plone.app.registry使用していません。

My first question is: a package must remove it's registry at uninstall time?

はい。少なくともコミュニティパッケージの作者からこれを期待するのは妥当と思われます。私はplone.app.registryが古い削除されたパッケージから欠けているものを上に移動しないように願っています。ここでやっているようですが、それは難しいかもしれません。

So, my second question is: how do I remove control panel records at uninstall time gracefully?

ほとんどのGenericSetupファイルでは、remove="True"が動作します。この特定のケースについては不明です。

+1

「真 "=を削除する"(のhttp://!は、PyPI .python.org /は、PyPI/plone.app.registry#plone.app.registryに)レコードを削除すると少し異なっており、私のために働いていない、あなたはこのような何かをする必要があります: <レコード名=」私は[インターフェイスに基づいて作成](http://pypi.python.org/pypi/plone.app.registry#にprefix属性を追加しようとしていた真の 『/> 「=を削除』 my.package.myRecordインターフェイス上でレコードを作成する)、しかしそれはドキュメントではあまり明確ではありません。 – hvelarde

3
My first question is: a package must remove it's registry at uninstall time? 

私はいくつかの時間が、インストール再であなたの設定を失いたくないので、アンインストール時に物事を取り除くの一部ではないよ...レジストリは、管理者のために良いはずクリーンアップへの道を提供しますサイト。データを失わないように気を配らないテストインスタンスでテストしてください。

あなたがタイプミスを気にする必要がありますので2番目の質問はすでに、マウリッツによって回答されています

削除= "true" を= [レコードを削除]

+1

これは、GenericSetupプロファイルを持つ製品をインストールした後で、製品の追加と削除パネルにアンインストールオプション(Plone 3.3以上)のみをインストールして再インストールするオプションが提供される理由です。登録されている場合にのみ、アップグレード手順を適用することを提案します。 portal_quickinstallerを使用した再インストールは、パワーユーザーにとってはまだ可能ですが、上記のような可能性のある障害を把握しておく必要があります。 – maurits

+0

delete = "true"はplone.app.registryで動作しますが、ポータルセットで手動でステップを実行した場合のみです。 remove = "true"は文書化されていません。 – hvelarde

+1

@hvelardeドキュメント:http://plone.org/documentation/kb/genericsetup/creating-an-uninstall-profileおよびhttp://packages.python.org/Products.GenericSetup/profiles.html#update-directives – toutpt

関連する問題