2012-03-05 9 views
5

my.packages es un paquete de arquetipos personalizado en el directorio src. Se agregan miles de elementos en la instancia de Plone con sus tipos. Quiero cambiar el nombre del paquete como my.package. Simplemente desinstalando my.packages e instalando my.package, encuentro http://localhost:8080/mysite/myfolder/my-item mostrando <persistent broken my.packages.content.mytype.MyType instance '\x00\x00\x00\x00\x00Un^'>. ¿Debo hacer la migración? ¿O hay una manera simple de solucionar este problema?Cambiar el nombre de mis.paquetes a mi.paquete

Respuesta

5

Puede crear un alias para compatibilidad con versiones anteriores, mediante fudzing con sys.modules. Para ello, en el paquete de __init__.py:

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

De esta manera la maquinaria persistencia puede encontrar sus clases todavía.

Lo que sucede es que cuando las instancias de Archetypes persisten en el ZODB, el mecanismo de persistencia almacena una ruta de módulo para la clase (una ruta de python punteada como my.packages.types.foobar.FooBar) en los datos almacenados. Al restaurar un objeto desde ZODB, esa misma ruta se usa para volver a crear sus instancias. Cuando cambia el nombre de su paquete, todas estas referencias están rotas.

Con el truco anterior, lo bueno es que si su objeto se cambió y se volvió a escribir en el ZODB en una transacción, se guardará la nueva ruta del módulo . Por lo tanto, es posible que haya una escritura en todas las instancias de Archetypes de este paquete para hacer que la migración sea permanente, de modo que pueda eliminar el problema anterior de nuevo.

Cuestiones relacionadas