zope.principalannotation

Software skärmdump:
zope.principalannotation
Mjukvaruinformation:
Version: 4.0.0 Alpha 2
Ladda upp dagen: 14 Apr 15
Licens: Gratis
Popularitet: 0

Rating: 5.0/5 (Total Votes: 1)

zope.principalannotation är en Python-modul som implementerar anteckningar för zope.security rektorer. & Nbsp; För att göra det klart, är huvud här objektet som tillhandahåller zope.security.interfaces.IPrincipal gränssnitt och anteckningar objektet tillhandahåller zope. annotation.interfaces.IAnnotations.
Problemet är att rektorer är dynamiska, icke-beständiga objekt som skapats i farten för varje säkerhets deltagande (begäran eller något), så vanligt anteckningsteknik, som AttributeAnnotations kan inte tillämpas på dem.
Detta paket tillhandahåller ett beständig lagring av huvud anteckningar, lagra anteckningar från huvud ID samt en adapter från IPrincipal till IAnnotations.
PrincipalAnnotationUtility
Kärnan i detta paket är PrincipalAnnotationUtility klass som lagrar anteckningar för rektorer och gör det möjligt att få dem lätt.
Det ger IPrincipalAnnotationUtility gränssnittet:
>>> Från zope.principalannotation.interfaces importera IPrincipalAnnotationUtility
>>> Från zope.principalannotation.utility import PrincipalAnnotationUtility
>>> Från zope.interface.verify import verifyObject
>>> Util = PrincipalAnnotationUtility ()
>>> VerifyObject (IPrincipalAnnotationUtility, util)
Sann
Det ger tre metoder: getAnnotations, getAnnotationsById och hasAnnotations. Låt oss skapa ett test huvudman och kolla in dessa metoder:
>>> Från zope.security.testing import Principal
>>> Nadako = Principal ('nadako')
>>> Nadako.id
'Nadako'
Vi kan kontrollera om vår främsta har några kommentarer. Naturligtvis närvarande den inte har någon:
>>> util.hasAnnotations (nadako)
Falsk
Vi kan få IAnnotations invända använder huvudsyfte själv:
>>> util.getAnnotations (nadako)

Eller använder huvud id:
>>> Util.getAnnotationsById (nadako.id)

Låt oss få de IAnnotations invända för vår huvudman och leka med den:
>>> Annots = util.getAnnotations (nadako)
>>> Från zope.interface.verify import verifyObject
>>> Från zope.annotation.interfaces import IAnnotations
>>> VerifyObject (IAnnotations, annots)
Sann
Låt oss kolla IAnnotation kontraktet:
>>> bool (annots)
Falsk
>>> annots ['not.here']
Spårnings (senaste samtalet sist):
...
KeyError: 'not.here'
>>> Annots.get ("not.here ') är None
Sann
>>> Annots.get ('not.here ", 42)
42
Observera att IAnnotations objektet får lagras i verktyget först när vi satt en nyckel för den. Detta är en enkel optimering som tillåter oss inte att lagra några data när allt vi gör är helt enkelt att kontrollera om pres av annotation. Den hasAnnotations Metoden returnerar sant efter lagring en nyckel i anteckningarna:
>>> util.hasAnnotations (nadako)
Falsk
>>> annots ['its.here'] = 'lite info "
>>> util.hasAnnotations (nadako)
Sann
Vi kan också ta bort den befintliga nyckeln:
>>> Del annots ['its.here']
Men vi kan inte ta bort nyckeln som är (inte mer) befintliga:
>>> Del annots ['its.here']
Spårnings (senaste samtalet sist):
...
KeyError: 'its.here'
Flera anteckningsverktyg
Tänk dig att din ansökan har en rot platsobjekt med sin komponent registret (aka platschef) och att föremålet har en sub-platsobjekt med egen komponentregistret, och att komponent registret har roten komponent register som bas.
I så fall vill vi att IAnnotations invända att finnas tillgänglig för att hämta anteckningar från högre nivå verktyg.
Låt oss registrera vårt användbarhet i roten platsen och skapa en sub-site med egen IPrincipalAnnotationUtility:
>>> Rot ['util'] = util
>>> Rootsm = root.getSiteManager ()
>>> Rootsm.registerUtility (util, IPrincipalAnnotationUtility)
>>> Från zope.site.folder import Mapp
>>> Från zope.site.site import LocalSiteManager
>>> Webbplats = Mapp ()
>>> Root ['underwebbplats'] = webbplats
>>> Subsm = LocalSiteManager (subsiten)
>>> Subsm .__ bases__ = (rootsm,)
>>> Subsite.setSiteManager (subsm)
>>> Util2 = PrincipalAnnotationUtility ()
>>> Subsiten ['util2'] = util2
>>> Subsm.registerUtility (util2, IPrincipalAnnotationUtility)
Nu ska vi skapa en nyckel i IAnnotations, förutsatt av root verktyget:
>>> Annots = util.getAnnotations (nadako)
>>> annots ['root.number'] = 42
Den underwebbplats Verktyget ska få kommentaren framgångsrikt:
>>> Annots2 = util2.getAnnotations (nadako)
>>> Bool (annots2)
Sann
>>> Annots2 ['root.number']
42
Om vi ​​har nyckeln både högre nivå anteckningar och lägre nivå och kära, kommer den lägre nivå har förtur, men högre nivå kommer inte tas bort eller överstyras:
>>> annots ['another.number'] = 1
>>> Annots2 ['another.number'] = 42
>>> annots ['another.number']
1
>>> Annots2 ['another.number']
42
Om vi ​​ska ta bort nyckeln från lägre nivå, kommer det inte att tas bort från en nivå verktyg högre:
>>> Del annots2 ['another.number']
>>> annots ['another.number']
1
>>> Annots2 ['another.number']
1
IPrincipal -> IAnnotations adapter
Naturligtvis är det mest trevlig funktion som vi helt enkelt kan anpassa vår huvudsyfte att IAnnotations och få dessa anteckningar med vanlig sätt dokumenteras i zope.annotation paket.
& Nbsp; >>> annots = IAnnotations (nadako)
& Nbsp; >>> annots
& Nbsp;
& Nbsp; >>> annots ['root.number']
& Nbsp; 42
Som standard använder IAnnotation adaptern aktuell platsens användbarhet:
>>> IAnnotations (nadako) är util.getAnnotations (nadako)
Sann
>>> Från zope.site.hooks import setSite
>>> SetSite (subsiten)
>>> IAnnotations (nadako) är util2.getAnnotations (nadako)
Sann
Howerver, kan vi använda en binär multiadapter till IAnnotations att ange något sammanhang objekt för att få anteckningar verktyget:
>>> Från zope.component import getMultiAdapter
>>> Annots = getMultiAdapter ((nadako, root), IAnnotations)
>>> Annots är util.getAnnotations (nadako)
Sann
>>> Annots = getMultiAdapter ((nadako, subställe), IAnnotations)
>>> Annots är util2.getAnnotations (nadako)
Sann

Vad är nytt i den här versionen:.

  • Korrigerade Trove klassificerare

Vad är nytt i version 3.6.1:

  • Fixat en test misslyckande i kapslade lokal platschef installation .
  • Bort beroendet zope.container.

Krav :

  • Python

Annan programvara för utvecklare Zope Corporation and Contributors

Kommentarer till zope.principalannotation

Kommentarer hittades inte
Kommentar
Slå på bilder!