zope.principalannotation

Software captura de pantalla:
zope.principalannotation
Detalles de software:
Versión: 4.0.0 Alpha 2
Fecha de carga: 14 Apr 15
Licencia: Libre
Popularidad: 0

Rating: 5.0/5 (Total Votes: 1)

zope.principalannotation es un módulo de Python que implementa anotaciones para los directores zope.security & nbsp;. Para que quede claro, el principal aquí es el objeto que proporciona una interfaz y anotaciones zope.security.interfaces.IPrincipal es el objeto que proporciona zope. annotation.interfaces.IAnnotations.
El problema es que los directores son objetos dinámicos, no persistentes creados sobre la marcha por cada participación la seguridad (petición o algo así), por lo que las técnicas de anotación común, como AttributeAnnotations no se pueden aplicar a ellos.
Este paquete proporciona un almacenamiento persistente de anotaciones principales, almacenar anotaciones por ID del principal, así como un adaptador de IPrincipal a IAnnotations.
PrincipalAnnotationUtility
El núcleo de este paquete es la clase PrincipalAnnotationUtility que almacena anotaciones para los directores y permite obtener fácilmente.
Proporciona la interfaz IPrincipalAnnotationUtility:
>>> From zope.principalannotation.interfaces importan IPrincipalAnnotationUtility
>>> From zope.principalannotation.utility PrincipalAnnotationUtility importación
>>> From verifyObject importación zope.interface.verify
>>> Util = PrincipalAnnotationUtility ()
>>> VerifyObject (IPrincipalAnnotationUtility, util)
Verdadero
Ofrece tres métodos: getAnnotations, getAnnotationsById y hasAnnotations. Vamos a crear un principal prueba y prueba estos métodos:
>>> From zope.security.testing Principal importación
>>> Nadako = Principal ('nadako')
>>> Nadako.id
'Nadako'
Podemos comprobar si nuestro director tiene ninguna anotación. Por supuesto, en este momento no tiene ninguna:
>>> util.hasAnnotations (nadako)
Falso
Podemos obtener IAnnotations objeto valiéndose objeto principal:
>>> util.getAnnotations (nadako)

O utilizando Identificación del director:
>>> Util.getAnnotationsById (nadako.id)

Vamos a conseguir los IAnnotations objeto de nuestro director y jueguen con él:
>>> Anot = util.getAnnotations (nadako)
>>> From verifyObject importación zope.interface.verify
>>> From IAnnotations zope.annotation.interfaces importación
>>> VerifyObject (IAnnotations, Anot)
Verdadero
Vamos a ver el contrato IAnnotation:
>>> bool (Anot)
Falso
>>> Anot ['not.here']
Rastreo (llamadas recientes más última):
...
KeyError: 'not.here'
>>> Annots.get ('not.here') es Ninguno
Verdadero
>>> Annots.get ('not.here', 42)
42
Tenga en cuenta, que el objeto IAnnotations se almacena en la utilidad sólo cuando fijamos una clave para ello. Esta es una optimización simple que nos permite no almacenamos ningún dato cuando todo lo que hacemos es simplemente registrando para presense de anotación. El método hasAnnotations devolverá true después de almacenar una clave en las anotaciones:
>>> util.hasAnnotations (nadako)
Falso
>>> Anot ['its.here'] = 'algo de información'
>>> util.hasAnnotations (nadako)
Verdadero
También podemos eliminar la clave existente:
>>> Del Anot ['its.here']
Pero no podemos eliminar la clave que es (no más) al loro:
>>> Del Anot ['its.here']
Rastreo (llamadas recientes más última):
...
KeyError: 'its.here'
Utilidades de anotación múltiple
Imagínese que su aplicación tiene un objeto de sitio raíz con su registro de componentes (también conocido como jefe de obra) y ese objeto tiene un objeto sub-sitio con su propio registro de componentes, y que registro de componentes tiene registro de componentes de la raíz como su base.
En ese caso, queremos que los IAnnotations objeto de estar disponible para recuperar las anotaciones de los servicios públicos de más alto nivel.
Lo registramos nuestra utilidad en el sitio raíz y crear un sub-sitio con su propio IPrincipalAnnotationUtility:
>>> Raíz ['util'] = util
>>> Rootsm = root.getSiteManager ()
>>> Rootsm.registerUtility (util, IPrincipalAnnotationUtility)
>>> De la carpeta de importación zope.site.folder
>>> From LocalSiteManager importación zope.site.site
>>> Subsitio = Carpeta ()
>>> Raíz ['subsitio'] = subsitio
>>> Subsm = LocalSiteManager (subsitio)
>>> Subsm .__ bases__ = (rootsm,)
>>> Subsite.setSiteManager (subsm)
>>> Util2 = PrincipalAnnotationUtility ()
>>> Subsitio ['util2'] = util2
>>> Subsm.registerUtility (util2, IPrincipalAnnotationUtility)
Ahora, vamos a crear una clave en los IAnnotations, proporcionado por la utilidad de la raíz:
>>> Anot = util.getAnnotations (nadako)
>>> Anot ['root.number'] = 42
La utilidad subsitio debe recibir la anotación con éxito:
>>> Annots2 = util2.getAnnotations (nadako)
>>> Bool (annots2)
Verdadero
>>> Annots2 ['root.number']
42
Si tenemos la clave tanto en las anotaciones de alto nivel y los de nivel inferior, el nivel más bajo tendrá prioridad, pero de nivel superior no se borrará ni superados:
>>> Anot ['another.number'] = 1
>>> Annots2 ['another.number'] = 42
>>> Anot ['another.number']
1
>>> Annots2 ['another.number']
42
Si vamos a borrar la clave de nivel inferior, no se eliminará de una utilidad de nivel superior:
>>> Del annots2 ['another.number']
>>> Anot ['another.number']
1
>>> Annots2 ['another.number']
1
IPrincipal -> adaptador IAnnotations
Por supuesto, la característica más interesante es que simplemente podemos adaptar nuestro principal objeto de IAnnotations y conseguir esas anotaciones usando manera estándar documentado en paquete zope.annotation.
& Nbsp; >>> Anot = IAnnotations (nadako)
& Nbsp; >>> Anot
& Nbsp;
& Nbsp; >>> Anot ['root.number']
& Nbsp; 42
Por defecto, el adaptador IAnnotation utiliza la utilidad del sitio actual:
>>> IAnnotations (nadako) es util.getAnnotations (nadako)
Verdadero
>>> From zope.site.hooks SetSite importación
>>> SetSite (subsitio)
>>> IAnnotations (nadako) es util2.getAnnotations (nadako)
Verdadero
Howerver, podemos utilizar un adaptador múltiple binario a IAnnotations para especificar un objeto contexto desde el que obtener la utilidad de anotaciones:
>>> From getMultiAdapter importación zope.component
>>> Anot = getMultiAdapter ((nadako, raíz), IAnnotations)
>>> Anot es util.getAnnotations (nadako)
Verdadero
>>> Anot = getMultiAdapter ((nadako, subsitio), IAnnotations)
>>> Anot es util2.getAnnotations (nadako)
Verdadero

¿Qué hay de nuevo en esta versión:.

  • clasificadores Trove Corregido

¿Qué hay de nuevo en la versión 3.6.1:

  • Se ha corregido un fallo en la prueba en la configuración del gestor de sitio local anidado .
  • Eliminada la dependencia de zope.container.

Requisitos :

  • Python

Otro software de desarrollador Zope Corporation and Contributors

Comentarios a la zope.principalannotation

Comentarios que no se encuentran
Añadir comentario
A su vez en las imágenes!