Вы можете создать псевдоним для обратной совместимости, фудзинг с sys.modules
.Сделайте это в вашем пакете __init__.py
:
import sys
sys.modules['my.packages'] = sys.modules[__name__]
Таким образом, механизм персистентности может по-прежнему находить ваши классы.
Что происходит, когда ваши экземпляры архетипов сохраняются в ZODB,механизм сохраняемости хранит путь модуля для класса (пунктирный путь Python, такой как my.packages.types.foobar.FooBar
) в хранимых данных.При восстановлении объекта из ZODB этот же путь затем используется для воссоздания ваших экземпляров.Когда вы переименовываете свой пакет, все эти ссылки не работают.
С помощью вышеприведенного трюка, хорошо, что если ваш объект был изменен и снова записан в ZODB в транзакции, new Путь к модулю будет сохранен.Таким образом, вы могли бы сделать так, чтобы запись во все ваши экземпляры Archetypes из этого пакета сделала перенос постоянным, чтобы вы могли снова удалить вышеуказанный обходной путь.