2012-03-05 23 views
5

my.packages là một gói mẫu tùy chỉnh trong thư mục src. Hàng ngàn mục trong bản sao Plone được thêm vào với các loại của nó. Tôi muốn đổi tên gói như my.package. Chỉ cần gỡ cài đặt my.packages và cài đặt my.package, tôi tìm thấy http://localhost:8080/mysite/myfolder/my-item hiển thị <persistent broken my.packages.content.mytype.MyType instance '\x00\x00\x00\x00\x00Un^'>. Tôi có nên phải di chuyển không? Hoặc là có một cách đơn giản để khắc phục vấn đề này?Đổi tên my.packages thành my.package

Trả lời

5

Bạn có thể tạo bí danh để tương thích ngược, bằng cách fudzing với sys.modules. Thực hiện việc này trong gói của bạn __init__.py:

import sys 
sys.modules['my.packages'] = sys.modules[__name__] 

Bằng cách này, máy móc kiên trì vẫn có thể tìm thấy lớp học của bạn. Điều gì xảy ra là khi các cá thể Archetypes của bạn được duy trì trong ZODB, máy móc lưu giữ tồn tại một đường dẫn mô-đun cho lớp (một đường dẫn python rải rác chẳng hạn như my.packages.types.foobar.FooBar) trong dữ liệu được lưu trữ. Khi khôi phục một đối tượng từ ZODB, cùng một đường dẫn đó sau đó được sử dụng để tạo lại các cá thể của bạn. Khi bạn đổi tên gói của mình, tất cả các tham chiếu này sẽ bị hỏng.

Với mẹo trên, điều tốt đẹp là nếu đối tượng của bạn bị thay đổi và được ghi vào ZODB lần nữa trong giao dịch, đường dẫn mô-đun mới mới sẽ được lưu trữ. Do đó bạn có thể tưởng tượng được việc viết thư cho tất cả các cá thể Archetypes của bạn từ gói này để làm cho việc di trú vĩnh viễn để bạn có thể loại bỏ công việc trên một lần nữa.

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