2011-08-11 17 views
5

Estoy trabajando en un package que incluye un panel de control creado usando plone.app.registry. Seguí Timo's tutorial pero, cuando trato de agregar un registro adicional, estoy frente al infame KeyError: un campo para el que no hay registro.Mejores prácticas para paneles de control Plone

así que tengo un par de preguntas acerca de las mejores prácticas:

Mi primera pregunta es: un paquete debe eliminar del registro es en el momento de desinstalación?

He utilizado este en registry.xml de mi paquete:

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

y esto en metadata.xml:

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

embargo, la adición de un delete = "true" en el perfil de desinstalación no parece estar trabajando Intenté también enumerando todos los registros por nombre sin suerte, a menos que ejecute el paso manualmente en ZMI.

Por lo tanto, mi segunda pregunta es: ¿cómo elimino correctamente los registros del panel de control en el momento de la desinstalación?

Para probar si un registro está en el registro hago algo como esto:

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

Una tercera pregunta podría ser la forma de probar si un registro se retiró a tiempo unisntall.

¿Alguna otra recomendación?

Respuesta

5

Nota: No he usado plone.app.registry directamente en un paquete todavía.

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

Sí. Al menos parece razonable esperar esto de los autores de paquetes comunitarios. Espero que plone.app.registry no tropiece con material perdido de paquetes eliminados, como parece estar haciendo aquí, pero puede ser complicado.

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

En la mayoría de los archivos GenericSetup remove="True" funciona. No estoy seguro acerca de este caso específico.

+1

[Eliminar registros] (http: // PyPI .python.org/pypi/plone.app.registry # deleting-records) en plone.app.registry es un poco diferente y no funciona para mí; tienes que hacer algo como esto: Estaba intentando agregar un atributo de prefijo a [creación basada en una interfaz] (http://pypi.python.org/pypi/plone.app.registry# creating-records-based-on-an-interface), pero no está muy claro en la documentación. – hvelarde

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

No soy parte de remover las cosas a tiempo debido a que algunos de desinstalación vez que no quiere perder su configuración en volver a instalar ... proporcionando una manera de limpiar el registro debe ser mejor para el administrador de la sitio. Haga una prueba en una instancia de prueba donde no le importe perder sus datos.

La segunda pregunta ya está contestada por Maurits, por lo que deben preocuparse por la errata:

delete = "true" = "Eliminar =" true"

+1

Es por esto que después de que un producto con un perfil GenericSetup ha sido instalado, el panel Agregar/Quitar productos solo ofrece la opción de desinstalarlo y ya no más (Plone 3.3 y versiones posteriores) para volver a instalarlo. Solo ofrece aplicar los pasos de actualización si alguno ha sido registrado. La reinstalación a través del portal_quickinstaller aún es posible para usuarios avanzados, pero deben conocer los posibles inconvenientes, como usted mencionó anteriormente. – maurits

+0

delete = "true" funciona en plone.app.registry pero solo si ejecuto el paso manualmente en portal_setup; remove = "true" no está documentado. – hvelarde

+1

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