zope.principalannotation

Screenshot der Software:
zope.principalannotation
Softwarebeschreibung:
Version: 4.0.0 Alpha 2
Upload-Datum: 14 Apr 15
Lizenz: Frei
Popularität: 0

Rating: 5.0/5 (Total Votes: 1)

zope.principalannotation ist ein Python-Modul, das für Anmerkungen zope.security Prinzipien implementiert. & Nbsp; Um es deutlich zu machen, ist das wichtigste hier das Objekt, das zope.security.interfaces.IPrincipal Schnittstelle und bietet Anmerkungen wird das Objekt bietet Zope. annotation.interfaces.IAnnotations.
Das Problem ist, dass Auftraggeber ist dynamisch, nicht-persistente Objekte im laufenden Betrieb für jede Sicherheits Teilnahme (Anfrage oder etwas) erstellt, so häufig Annotation Techniken, wie AttributeAnnotations kann nicht auf sie angewendet werden.
Dieses Paket enthält eine persistente Speicherung der wichtigsten Anmerkungen, Anmerkungen Speicherung von Haupt ID sowie einen Adapter von IPrincipal zu IAnnotations.
PrincipalAnnotationUtility
Das Kernstück dieses Pakets ist die PrincipalAnnotationUtility Klasse, die Anmerkungen speichert für Schulleiter und erlaubt es, sie leicht zu bekommen.
Es bietet die IPrincipalAnnotationUtility Schnittstelle:
>>> Von zope.principalannotation.interfaces importieren IPrincipalAnnotationUtility
>>> Von zope.principalannotation.utility Import PrincipalAnnotationUtility
>>> Von zope.interface.verify Import verifyObject
>>> Util = PrincipalAnnotationUtility ()
>>> VerifyObject (IPrincipalAnnotationUtility, util)
Wahr
Es bietet drei Methoden: getannotations, getAnnotationsById und hasAnnotations. Lassen Sie uns eine Test Kapital und sehen Sie sich diese Methoden:
>>> Von zope.security.testing Importhaupt
>>> Nadako = Haupt ('nadako')
>>> Nadako.id
'Nadako'
Wir können prüfen, ob unsere Haupt irgendwelche Anmerkungen. Natürlich ist es derzeit hat keine:
>>> Util.hasAnnotations (nadako)
Falsch
Wir bekommen IAnnotations Objekt mit Hauptobjekt selbst:
>>> Util.getAnnotations (nadako)

Oder mit Haupt-ID:
>>> Util.getAnnotationsById (nadako.id)

Lassen Sie uns die IAnnotations Objekt für unsere Auftraggeber und mit ihm spielen:
>>> Annots = util.getAnnotations (nadako)
>>> Von zope.interface.verify Import verifyObject
>>> Von zope.annotation.interfaces Import IAnnotations
>>> VerifyObject (IAnnotations, Annots)
Wahr
Lassen Sie uns die IAnnotation Vertrages:
>>> Bool (Annots)
Falsch
>>> Annots ['not.here']
Traceback (jüngste Aufforderung zuletzt):
...
KeyError: 'not.here'
>>> Annots.get ('not.here') ist keine
Wahr
>>> Annots.get ('not.here', 42)
42
Beachten Sie, dass die IAnnotations Objekt wird im Dienstprogramm nur, wenn wir einen Schlüssel für sie eingestellt gespeichert. Dies ist eine einfache Optimierung, die uns, keine Daten, wenn alles, was wir tun, ist einfach Überprüfung auf presense der Annotation zu speichern. Die hasAnnotations Verfahren wird nach Speichern eines Schlüssels in den Anmerkungen zurück True:
>>> Util.hasAnnotations (nadako)
Falsch
>>> Annots ['its.here'] = 'Sie einige Informationen "
>>> Util.hasAnnotations (nadako)
Wahr
Wir können auch die vorhandenen Schlüssel zu löschen:
>>> Del Annots ['its.here']
Aber wir können den Schlüssel, der (nicht mehr) existent ist nicht zu löschen:
>>> Del Annots ['its.here']
Traceback (jüngste Aufforderung zuletzt):
...
KeyError: 'its.here'
Mehrere Annotation Utilities
Stellen Sie sich vor, dass Ihre Anwendung eine Stammwebsite Objekt mit seiner Komponente Registry (auch bekannt als Bauleiter) und das Objekt eine Unterstandortobjekt mit einer eigenen Komponente Registrierung und die Registrierungskomponente hat Komponente Registrierung der Wurzel als Basis.
In diesem Fall wollen wir die IAnnotations Objekt zur Verfügung Anmerkungen aus übergeordneten Dienstprogrammen abgerufen werden.
Lassen Sie uns unsere registrieren Dienstprogramm in der Stammwebsite und eine Unterwebsite mit eigenen IPrincipalAnnotationUtility:
>>> Root ['util'] = util
>>> Rootsm = root.getSiteManager ()
>>> Rootsm.registerUtility (util, IPrincipalAnnotationUtility)
>>> Von zope.site.folder Importordner
>>> Von zope.site.site Import LocalSiteManager
>>> Unterwebsite = Ordner ()
>>> Root ['Website'] = Unterwebsite
>>> Subsm = LocalSiteManager (Unterwebsite)
>>> Subsm .__ bases__ = (rootsm,)
>>> Subsite.setSiteManager (subsm)
>>> Util2 = PrincipalAnnotationUtility ()
>>> Unterwebsite ['util2'] = util2
>>> Subsm.registerUtility (util2, IPrincipalAnnotationUtility)
Lassen Sie uns nun einen Schlüssel in den IAnnotations, root Utility zur Verfügung gestellt zu erstellen:
>>> Annots = util.getAnnotations (nadako)
>>> Annots ['root.number'] = 42
Die Unterwebsite Dienstprogramm sollte die Anmerkung erfolgreich zu bekommen:
>>> Annots2 = util2.getAnnotations (nadako)
>>> Bool (annots2)
Wahr
>>> Annots2 ['root.number']
42
Wenn wir den Schlüssel sowohl im übergeordneten Anmerkungen und untergeordneten diejenigen haben, wird das untergeordnete Priorität haben, aber auf höherer Ebene werden nicht gelöscht oder überschrieben werden:
>>> Annots ['another.number'] = 1
>>> Annots2 ['another.number'] = 42
>>> Annots ['another.number']
1
>>> Annots2 ['another.number']
42
Wenn wir den Schlüssel aus niedrigerer Ebene zu löschen, wird es nicht von einer höheren Ebene Dienstprogramm gelöscht werden:
>>> Del annots2 ['another.number']
>>> Annots ['another.number']
1
>>> Annots2 ['another.number']
1
IPrincipal -> IAnnotations Adapter
Natürlich ist die nettes Feature, dass wir einfach passen unsere Hauptaufgabe zu IAnnotations und erhalten diese Anmerkungen mit Standardverfahren in zope.annotation Paket dokumentiert.
& Nbsp; >>> Annots = IAnnotations (nadako)
& Nbsp; >>> Annots
& Nbsp;
& Nbsp; >>> Annots ['root.number']
& Nbsp; 42
Standardmäßig verwendet die IAnnotation Adapter Utility der aktuellen Website:
>>> IAnnotations (nadako) ist util.getAnnotations (nadako)
Wahr
>>> Von zope.site.hooks Import SetSite
>>> SetSite (Unterwebsite)
>>> IAnnotations (nadako) ist util2.getAnnotations (nadako)
Wahr
Howerver, können wir eine binäre Multi-Adapter zu verwenden, um einige IAnnotations Kontextobjekt, um die Anmerkungen Dienstprogramm zu geben:
>>> Von zope.component Import getMultiAdapter
>>> Annots = getMultiAdapter ((nadako, Wurzel), IAnnotations)
>>> Annots ist util.getAnnotations (nadako)
Wahr
>>> Annots = getMultiAdapter ((nadako, Unterwebsite), IAnnotations)
>>> Annots ist util2.getAnnotations (nadako)
True

Was ist neu in dieser Pressemitteilung:.

  • Korrigierte Grube Klassifizierer

Was ist neu in Version 3.6.1:

  • ein Testfehler in verschachtelten lokalen Standort-Manager-Setup Fest .
  • Entfernt Abhängigkeit von zope.container.

Anforderungen :

  • Python

Andere Software von Entwickler Zope Corporation and Contributors

Kommentare zu zope.principalannotation

Kommentare nicht gefunden
Kommentar hinzufügen
Schalten Sie auf die Bilder!