TriZPUG Camp Five - IV
Último dia con zope3 como protagonista absoluto. Mañana comienza el sprint de Plone, con un montón de asuntos interesantes en el tintero.
Hemos terminado el programa del turorial con un poco de retraso y se ha tenido que caer del temario el tema de seguridad. Una pena. De cualquier forma, Philip Von Weitershausen ha vuelto a estar genial.
Metadatos en Zope3
Todos los objetos que queremos que (con)tengan metadatos, deben implementar el marker interface IAnnotatable.
Zope busca automáticamente un adapter para soportar esta característica.
Existe un adapter para los objetos que implementan el marker IAtributeAnnotatable (que hereda de IAnnotatable) que guarda los metadatos en un atributo llamado __annotations__ .
Si queremos personalizar el tratamiento que nuestros objetos hacen de los metadatos tendremos que seguir los siguientes pasos:
- creamos un nuevo marker interface que herede de IAnnotatable (ej:IRatable)
- creamos un interfaz con la funcionalidad sobre metadatos necesaria (ej:IRating)
- creamos un adapter para que los objetos (IRatable) implementen una funcionalidad
Esta clase es un objeto persistente que almacena los metadatos y tiene funciones para manejarlos.
Para adaptar Iannotatable, se utiliza la utilidad ‘annotation.factory’ que realiza una serie de comprobaciones necesarias de forma automática.
Trusted adapters
Un adaptador que intenta acceder/modificar un objeto se enfrenta en realidad a un security-proxy, no al objeto. Por esta razón, recibiremos una excepción de violación de permisos.
Sin embargo, si convertimos el adapter en un trusted adapter, este accederá al objeto directamente en lugar de acceder al security-proxy. En consecuencia, tenemos que definir permisos de lectura/escritura sobre este adapter. Que será quien será reemplazado por un security-proxy cuando sea publicado.
Eventos
Si queremos manejar eventos tendremos que crear un subscriber para dos interfaces: tipo de objeto y suceso (o tipo de suceso).
una vez registrado ya es estamos capturando estos eventos o sucesos. Además podemos crear instancias de eventos nosotros mismos y notificar a todos los observadores que estén pendientes (subscritos) a los eventos con cierta interfaz, generados por objetos con otra interfaz concreta.
La adquisición en Zope3
La adquisisción es un mecanismo muchísimo más sencillo que en Zope2:
- Al pedir un objeto (url) atravesamos uno o varios SiteManagers.
- Las utilidades se registran bien a nivel global (zcml) o en un SiteManager.
- Cuando buscamos una utilidad en un contexto contreto, implícitamente lo hacemos en el último sitemanager que hayamos atravesado.
El catálogo en Zope3
El catálog es bastante más simple que en Zope2. ¿Cuál es el camino básico para añadir un Catálogo a nuestro Zope?
- registrar el catalog como una utilidad.
- añadir índices al catálogo e ndicar el interfaz que expresa los objetos que vamos a indexar (ej: el marker interface ISearchableText) y los atributos de esos objetos (callables o no).
- hacer un adaptador para nuestros objetos y el interface ISearchableText.
Cena en el jardín de un Camper
La noche no podía terminar mejor. Cerveza local y comida cocinada por la mujer (encantadora) de uno de los campers. ¡Grácias de corazón! Allí hemos podido charlar mientras las estrellas han ido apareciendo entre el follaje y el porche.
La gran sorpresa me la he llevado cuando Philip me ha abordado en “perfecto español”. Vamos, que el tipo es un crack y una caja de sorpresas
Las transparencias de Philip de hoy:
Share your source code
Tagging the planet
Marzo 14, 2007 - 2:46 am
Simplemente añadir una cosa a lo que dices del catálogo.Gracias a la implementación que han hecho del catálogo utilizando intids, ya nos podemos olvidar de toda la metadata y del método getObject de los CatalogBrains. De ahora en adelante en los resultados de los catálogos tendremos directamente los objetos.Y no, esto no es ineficiente, porque ahora catalogaremos objetos pequeñísimos, todo lo que antes hacían de más nuestros objetos Zope, ahora están en los adapters.