zope.principalannotation

Software screenshot:
zope.principalannotation
Dettagli del software:
Versione: 4.0.0 Alpha 2
Data di caricamento: 14 Apr 15
Licenza: Libero
Popolarità: 0

Rating: 5.0/5 (Total Votes: 1)

zope.principalannotation è un modulo Python che implementa le annotazioni per presidi zope.security. & Nbsp; Per chiarire, il principale qui è l'oggetto che fornisce l'interfaccia zope.security.interfaces.IPrincipal e annotazioni è l'oggetto che fornisce zope. annotation.interfaces.IAnnotations.
Il problema è che i presidi sono dinamici oggetti, non persistenti creati al volo per ogni partecipazione di sicurezza (richiesta o qualcosa del genere), così le tecniche di annotazione comune, come AttributeAnnotations non possono essere applicate a loro.
Questo pacchetto offre una memorizzazione persistente dei principali annotazioni, memorizzare annotazioni di ID principale e un adattatore da IPrincipal a IAnnotations.
PrincipalAnnotationUtility
Il nucleo di questo pacchetto è la classe PrincipalAnnotationUtility che memorizza le annotazioni per presidi e permette di ottenere facilmente.
Esso fornisce l'interfaccia IPrincipalAnnotationUtility:
>>> Da zope.principalannotation.interfaces import IPrincipalAnnotationUtility
>>> Da zope.principalannotation.utility import PrincipalAnnotationUtility
>>> Da zope.interface.verify verifyObject import
>>> Util = PrincipalAnnotationUtility ()
>>> VerifyObject (IPrincipalAnnotationUtility, util)
Vero
Esso fornisce tre metodi: getAnnotations, getAnnotationsById e hasAnnotations. Creiamo un preside di test e prova anche questi metodi:
>>> Da zope.security.testing Principal import
>>> Nadako = Principal ('nadako')
>>> Nadako.id
'Nadako'
Siamo in grado di controllare se il nostro principale ha qualche annotazioni. Certo, attualmente non ha alcuna:
>>> util.hasAnnotations (nadako)
Falso
Siamo in grado di ottenere l'oggetto IAnnotations con sé oggetto principale:
>>> util.getAnnotations (nadako)

Oppure usando principal id:
>>> Util.getAnnotationsById (nadako.id)

Prendiamo l'oggetto IAnnotations per la nostra capitale e giocare con esso:
>>> Annots = util.getAnnotations (nadako)
>>> Da zope.interface.verify verifyObject import
>>> Da IAnnotations zope.annotation.interfaces importazione
>>> VerifyObject (IAnnotations, annots)
Vero
Controlliamo il contratto IAnnotation:
>>> bool (annots)
Falso
>>> annots ['not.here']
Traceback (chiamata più recente scorso):
...
KeyError: 'not.here'
>>> Annots.get ('not.here') è None
Vero
>>> Annots.get ('not.here', 42)
42
Si noti, che l'oggetto IAnnotations viene memorizzato nel programma di utilità solo quando abbiamo fissato una chiave per esso. Questa è una semplice ottimizzazione che ci permette di non memorizzare i dati, quando tutto ciò che facciamo è semplicemente controllando per presense di annotazione. Il metodo hasAnnotations restituirà true dopo aver memorizzato una chiave nelle annotazioni:
>>> util.hasAnnotations (nadako)
Falso
>>> annots ['its.here'] = 'alcune informazioni'
>>> util.hasAnnotations (nadako)
Vero
Possiamo anche eliminare la chiave esistente:
>>> Del annots ['its.here']
Ma non possiamo eliminare la chiave che è (non di più) existant:
>>> Del annots ['its.here']
Traceback (chiamata più recente scorso):
...
KeyError: 'its.here'
Utilities annotazione multipla
Immaginate che l'applicazione ha un oggetto sito principale con il suo registro dei componenti (aka gestore del sito) e l'oggetto ha un oggetto sotto-sito con un proprio registro dei componenti, e che registro componente ha registro componente della radice come base.
In questo caso, vogliamo che i IAnnotations oggetto di essere a disposizione per recuperare le annotazioni dalle utility di livello superiore.
Registriamolo nostra utilità nel sito radice e creare un sub-sito con il proprio IPrincipalAnnotationUtility:
>>> Radice ['util'] = util
>>> Rootsm = root.getSiteManager ()
>>> Rootsm.registerUtility (util, IPrincipalAnnotationUtility)
>>> Da zope.site.folder cartella import
>>> Da zope.site.site LocalSiteManager import
>>> Subsite = Folder ()
>>> Radice ['sottosito'] = sottosito
>>> Subsm = LocalSiteManager (secondario)
>>> Subsm .__ bases__ = (rootsm,)
>>> Subsite.setSiteManager (subsm)
>>> Util2 = PrincipalAnnotationUtility ()
>>> Sito secondario ['util2'] = util2
>>> Subsm.registerUtility (util2, IPrincipalAnnotationUtility)
Ora, creiamo una chiave nelle IAnnotations, fornito da utility root:
>>> Annots = util.getAnnotations (nadako)
>>> annots ['root.number'] = 42
L'utilità sito secondario dovrebbe ottenere l'annotazione con successo:
>>> Annots2 = util2.getAnnotations (nadako)
>>> Bool (annots2)
Vero
>>> Annots2 ['root.number']
42
Se abbiamo la chiave sia nelle annotazioni di livello superiore e quelli di livello inferiore, il livello più basso avrà la priorità, ma di livello superiore non verrà eliminato o sovrascritto:
>>> annots ['another.number'] = 1
>>> Annots2 ['another.number'] = 42
>>> annots ['another.number']
1
>>> Annots2 ['another.number']
42
Se faremo eliminare la chiave dal livello inferiore, non verrà eliminato da un programma di utilità di livello superiore:
>>> Del annots2 ['another.number']
>>> annots ['another.number']
1
>>> Annots2 ['another.number']
1
IPrincipal -> adattatore IAnnotations
Ovviamente, la caratteristica più bella è che possiamo semplicemente adattare il nostro scopo principale per IAnnotations e ottenere quelle annotazioni utilizzando modalità standard documentato in pacchetto zope.annotation.
& Nbsp; >>> annots = IAnnotations (nadako)
& Nbsp; >>> annots
& Nbsp;
& Nbsp; >>> annots ['root.number']
& Nbsp; 42
Per impostazione predefinita, l'adattatore IAnnotation utilizza l'utilità del sito corrente:
>>> IAnnotations (nadako) è util.getAnnotations (nadako)
Vero
>>> Da zope.site.hooks import SetSite
>>> SetSite (secondario)
>>> IAnnotations (nadako) è util2.getAnnotations (nadako)
Vero
Howerver, possiamo usare un binario multi-adattatore per IAnnotations per specificare un oggetto contesto da cui ottenere l'utilità annotazioni:
>>> Da zope.component getMultiAdapter import
>>> Annots = getMultiAdapter ((nadako, root), IAnnotations)
>>> Annots è util.getAnnotations (nadako)
Vero
>>> Annots = getMultiAdapter ((nadako, sito secondario), IAnnotations)
>>> Annots è util2.getAnnotations (nadako)
Vero

Cosa c'è di nuovo in questa versione:.

  • classificatori Trove corretti

Cosa c'è di nuovo nella versione 3.6.1:

  • Risolto un fallimento del test in nidificato configurazione gestore del sito locale .
  • Rimosso dipendenza zope.container.

Requisiti :

  • Python

Altri software di sviluppo Zope Corporation and Contributors

zope.html
zope.html

14 Apr 15

zope.traversing
zope.traversing

11 May 15

zope.app.testing
zope.app.testing

14 Apr 15

Commenti a zope.principalannotation

I commenti non trovato
Aggiungi commento
Accendere le immagini!