2011-08-11 14 views
5

मैं package पर काम कर रहा हूं जिसमें plone.app.registry का उपयोग करके बनाए गए नियंत्रण कक्ष शामिल हैं। मैंने Timo's tutorial का पालन किया, लेकिन, जब इसे अतिरिक्त रिकॉर्ड जोड़ने की कोशिश की जा रही है, तो मुझे कुख्यात कुंजी त्रुटि का सामना करना पड़ रहा है: एक फ़ील्ड जिसके लिए कोई रिकॉर्ड नहीं है।प्लोन नियंत्रण पैनलों के लिए सर्वोत्तम अभ्यास

तो मैं सर्वोत्तम प्रथाओं के बारे में सवालों की एक जोड़ी:

मेरा पहला सवाल यह है: एक पैकेज यह स्थापना रद्द करें समय में रजिस्ट्री है निकालना होगा?

मैं अपने पैकेज के registry.xml में यह प्रयोग किया है:

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

और इस metadata.xml पर:

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

लेकिन पर एक हटाने = "true" जोड़ने की स्थापना रद्द करें प्रोफ़ाइल नहीं लगता है काम करने के लिए। मैंने बिना किसी भाग्य के नाम से सभी रिकॉर्ड्स सूचीबद्ध करके भी कोशिश की, जब तक कि मैं ज़ेडमी पर मैन्युअल रूप से चरण नहीं चलाता।

तो, मेरा दूसरा सवाल यह है: मैं अनइंस्टॉल समय पर नियंत्रण कक्ष रिकॉर्ड कैसे हटा सकता हूं?

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([])) 

एक तीसरा प्रश्न हो सकता है कि कैसे अगर एक रिकार्ड 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?

अधिकांश जेनेरिकसेट फ़ाइलों में remove="True" काम करता है। इस विशिष्ट मामले के बारे में निश्चित नहीं है।

+1

[रिकॉर्ड डिलीट] (http: // pypi plone.app.registry पर .python.org/pypi/plone.app.registry # हटाना-रिकॉर्ड) थोड़ा अलग है और मेरे लिए काम नहीं कर रहा है; आपको ऐसा कुछ करना है: <रिकॉर्ड नाम = " my.package.myRecord "delete =" true "/> मैं [इंटरफ़ेस पर आधारित सृजन] में एक उपसर्ग विशेषता जोड़ने का प्रयास कर रहा था (http://pypi.python.org/pypi/plone.app.registry# बनाना-रिकॉर्ड-आधारित-ऑन-इंटरफ़ेस), लेकिन यह प्रलेखन में स्पष्ट नहीं है। – hvelarde

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

मैं स्थापना रद्द करें समय पर चीजों को दूर क्योंकि कुछ समय आप स्थापित फिर से आपके विन्यास खोने के लिए नहीं करना चाहते हैं का हिस्सा नहीं हूँ ... रजिस्ट्री के व्यवस्थापक के लिए बेहतर होना चाहिए सफाई का एक तरीका प्रदान साइट। परीक्षण उदाहरण पर परीक्षण करें जहां आपको अपना डेटा खोने की परवाह नहीं है।

दूसरा सवाल पहले से ही Maurits द्वारा उत्तर दिया है, तो आप लिखने में गलती के बारे में ध्यान देना चाहिए:

हटा = "true" = "को दूर =" सही "

+1

यही कारण है कि जेनेरिक सेटअप प्रोफ़ाइल के साथ एक उत्पाद स्थापित करने के बाद स्थापित किया गया है उत्पाद जोड़ें/निकालें केवल इसे अनइंस्टॉल करने का विकल्प प्रदान करता है और अब इसे पुनर्स्थापित करने के लिए (प्लोन 3.3 और ऊपर) नहीं है। यह केवल पंजीकृत होने पर अपग्रेड चरणों को लागू करने की पेशकश करता है। Portal_quickinstaller के माध्यम से पुनर्स्थापित करना अभी भी पावर उपयोगकर्ताओं के लिए संभव है, लेकिन आपको ऊपर बताए गए संभावित स्नैग जानना चाहिए। – maurits

+0

हटाएं = "सत्य" plone.app.registry में काम करता है लेकिन केवल तभी जब मैं पोर्टल_सेटअप पर मैन्युअल रूप से चरण चलाता हूं; निकालें = "सत्य" दस्तावेज नहीं है। – hvelarde

+1

@ हॉवेलर्ड दस्तावेज: http://plone.org/documentation/kb/genericsetup/creating-an-uninstall-profile और http://packages.python.org/Products.GenericSetup/profiles.html#update- डायरेक्टिव – toutpt