2011-08-11 33 views
5

Tôi đang làm việc trên package bao gồm bảng điều khiển được tạo bằng plone.app.registry. Tôi theo sau Timo's tutorial nhưng, khi cố gắng thêm một bản ghi bổ sung vào nó, tôi đang đối mặt với lỗi nổi tiếng KeyError: một trường không có bản ghi.Thực tiễn tốt nhất cho bảng điều khiển Plone

Vì vậy, tôi có một vài câu hỏi về thực hành tốt nhất:

câu hỏi đầu tiên của tôi là: một gói phải loại bỏ nó đăng ký tại uninstall thời gian?

tôi đã sử dụng này trong registry.xml của gói của tôi:

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

và điều này trên metadata.xml:

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

Nhưng thêm một delete = "true" trên hồ sơ cá nhân uninstall dường như không để làm việc. Tôi cũng đã thử bằng cách liệt kê tất cả các bản ghi theo tên không có may mắn, trừ khi tôi chạy bước thủ công tại ZMI.

Vì vậy, câu hỏi thứ hai của tôi là: làm thế nào để loại bỏ bản ghi bảng điều khiển tại thời điểm gỡ cài đặt một cách duyên dáng?

Để kiểm tra xem một kỷ lục là trên registry tôi làm điều gì đó như thế này:

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

Một câu hỏi thứ ba có thể là làm thế nào để kiểm tra xem một kỷ lục đã được gỡ bỏ tại thời gian unisntall.

Bất kỳ đề xuất nào khác?

Trả lời

5

Lưu ý: Tôi chưa tự sử dụng plone.app.registry trực tiếp trong gói.

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

Có. Nó ít nhất có vẻ hợp lý để mong đợi điều này từ các tác giả của các gói cộng đồng. Tôi hy vọng rằng plone.app.registry không đi qua những thứ còn thiếu từ các gói cũ đã bị loại bỏ, giống như nó có vẻ đang làm ở đây, nhưng điều đó có thể phức tạp.

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

Trong hầu hết các tệp GenericSetup remove="True" hoạt động. Không chắc chắn về trường hợp cụ thể này.

+1

[Xóa hồ sơ] (http: // pypi .python.org/pypi/plone.app.registry # delete-records) trên plone.app.registry có một chút khác biệt và không hoạt động đối với tôi, bạn phải làm như sau: Tôi đã thử thêm thuộc tính tiền tố vào [tạo dựa trên giao diện] (http://pypi.python.org/pypi/plone.app.registry# tạo bản ghi dựa trên giao diện), nhưng nó không rõ ràng trong tài liệu. – hvelarde

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

Tôi không phải là một phần của mọi thứ trong thời gian gỡ cài đặt vì một thời gian bạn không muốn mất cấu hình khi cài đặt lại ... cung cấp cách dọn dẹp registry sẽ tốt hơn cho quản trị viên của trang web. Làm thử nghiệm trên một trường hợp thử nghiệm mà bạn không quan tâm để mất dữ liệu của bạn.

Câu hỏi thứ hai đã được trả lời bằng cách Maurits, vì vậy bạn nên quan tâm đến typo:

delete = "true" = "loại bỏ =" True"

+1

Đây là lý do tại sao sau khi một sản phẩm có cấu hình GenericSetup được cài đặt, bảng điều khiển Add/Remove chỉ cung cấp tùy chọn gỡ cài đặt và không còn nữa (Plone 3.3 trở lên) để cài đặt lại nó. Nó chỉ cung cấp để áp dụng các bước nâng cấp nếu có đăng ký. Cài đặt lại thông qua portal_quickinstaller vẫn có thể cho người sử dụng điện, nhưng họ nên biết các snags có thể, như bạn đã đề cập ở trên. – maurits

+0

delete = "true" hoạt động trong plone.app.registry nhưng chỉ khi tôi chạy bước thủ công tại portal_setup; remove = "true" không được ghi lại. Tài liệu – hvelarde

+1

@hvelarde: http://plone.org/documentation/kb/genericsetup/creating-an-uninstall-profile và http://packages.python.org/Products.GenericSetup/profiles.html#update-directives – toutpt

Các vấn đề liên quan