zope.principalannotation

Software screenshot:
zope.principalannotation
Software detaljer:
Version: 4.0.0 Alpha 2
Upload dato: 14 Apr 15
Licens: Gratis
Popularitet: 0

Rating: 5.0/5 (Total Votes: 1)

zope.principalannotation er en Python-modul, der implementerer anmærkninger for zope.security opdragsgivere. & Nbsp; For at gøre det klart, den vigtigste her er det objekt, der giver zope.security.interfaces.IPrincipal interface og anmærkninger objektet levere Zope. annotation.interfaces.IAnnotations.
Problemet er, at skoleledere er dynamisk, ikke-vedvarende objekter, der oprettes i farten for hver sikkerhed deltagelse (anmodning eller noget), så almindelige annotation teknikker, ligesom AttributeAnnotations kan ikke anvendes på dem.
Denne pakke indeholder en vedvarende lagring af vigtigste anmærkninger, lagring anmærkninger ved primære ID samt en adapter fra IPrincipal til IAnnotations.
PrincipalAnnotationUtility
Kernen i denne pakke er PrincipalAnnotationUtility klasse, der gemmer anmærkninger for skoleledere og gør det muligt at få dem let.
Det giver IPrincipalAnnotationUtility interface:
>>> Fra zope.principalannotation.interfaces importerer IPrincipalAnnotationUtility
>>> Fra zope.principalannotation.utility import PrincipalAnnotationUtility
>>> Fra zope.interface.verify import verifyObject
>>> Util = PrincipalAnnotationUtility ()
>>> VerifyObject (IPrincipalAnnotationUtility, util)
Sandt
Det giver tre metoder: getAnnotations, getAnnotationsById og hasAnnotations. Lad os oprette en test hovedstol og tjek disse metoder:
>>> Fra zope.security.testing import Principal
>>> Nadako = Principal (»nadako)
>>> Nadako.id
'Nadako'
Vi kan kontrollere, om vores vigtigste har nogen anmærkninger. Selvfølgelig er det i øjeblikket ikke har nogen:
>>> util.hasAnnotations (nadako)
False
Vi kan få IAnnotations objekt ved hjælp hovedformål selv:
>>> util.getAnnotations (nadako)

Eller ved hjælp af principal id:
>>> Util.getAnnotationsById (nadako.id)

Lad os få de IAnnotations objekt for vores vigtigste og lege med det:
>>> Annots = util.getAnnotations (nadako)
>>> Fra zope.interface.verify import verifyObject
>>> Fra zope.annotation.interfaces import- IAnnotations
>>> VerifyObject (IAnnotations, annots)
Sandt
Lad os tjekke IAnnotation kontrakt:
>>> bool (annots)
False
>>> annots ['not.here']
Tilbagesporingstællingen (seneste opkald sidste):
...
KeyError: »not.here '
>>> Annots.get (»not.here«) er None
Sandt
>>> Annots.get (»not.here«, 42)
42
Bemærk, at IAnnotations objektet bliver gemt i bryggerset, når vi sætter en nøgle til det. Dette er en simpel optimering, der giver os ikke at gemme nogen data, når alt vi gør, er blot at markere for presense af anmærkning. Den hasAnnotations metode returnerer Sand efter lagring af en nøgle i kommentarerne:
>>> util.hasAnnotations (nadako)
False
>>> annots ['its.here'] = 'nogle info'
>>> util.hasAnnotations (nadako)
Sandt
Vi kan også slette den eksisterende nøgle:
>>> Del annots ['its.here']
Men vi kan ikke slette den nøgle, er (ikke mere) existant:
>>> Del annots ['its.here']
Tilbagesporingstællingen (seneste opkald sidste):
...
KeyError: its.here '
Multiple annotation forsyningsselskaber
Forestil dig, at din ansøgning har en rod websted objekt med sin komponent register (aka site manager), og at objektet har en sub-site objekt med sin egen komponent register, og at komponenten registreringsdatabasen har roden s komponent register som sin base.
I så fald, vi ønsker IAnnotations objekt at være til rådighed til at hente anmærkninger fra højere niveau forsyningsselskaber.
Lad os registrere vores nytte i roden stedet og skabe en sub-site med egen IPrincipalAnnotationUtility:
>>> Root ['util'] = util
>>> Rootsm = root.getSiteManager ()
>>> Rootsm.registerUtility (util, IPrincipalAnnotationUtility)
>>> Fra zope.site.folder import Folder
>>> Fra zope.site.site import LocalSiteManager
>>> Underordnet websted = Mappe ()
>>> Root ['underordnet websted'] = underordnet websted
>>> Subsm = LocalSiteManager (underordnet websted)
>>> Subsm .__ bases__ = (rootsm,)
>>> Subsite.setSiteManager (subsm)
>>> Util2 = PrincipalAnnotationUtility ()
>>> Underordnet websted ['util2'] = util2
>>> Subsm.registerUtility (util2, IPrincipalAnnotationUtility)
Lad os nu oprette en nøgle i IAnnotations, leveret af root nytte:
>>> Annots = util.getAnnotations (nadako)
>>> annots ['root.number'] = 42
Det underordnede websted nytte bør få den anmærkning succes:
>>> Annots2 = util2.getAnnotations (nadako)
>>> Bool (annots2)
Sandt
>>> Annots2 ['root.number']
42
Hvis vi har nøglen både højere niveau annotationer og lavere niveau dem, vil det nederste niveau har prioritet, men højere niveau, vil ikke blive slettet eller tilsidesættes:
>>> annots ['another.number'] = 1
>>> Annots2 ['another.number'] = 42
>>> annots ['another.number']
1
>>> Annots2 ['another.number']
42
Hvis vi vil slette nøglen fra lavere niveau, vil det ikke blive slettet fra et højere niveau nytte:
>>> Del annots2 ['another.number']
>>> annots ['another.number']
1
>>> Annots2 ['another.number']
1
IPrincipal -> IAnnotations adapter
Selvfølgelig er den mest nice funktion er, at vi simpelthen kan tilpasse vores hovedformål at IAnnotations og få de anmærkninger ved hjælp af standard måde dokumenteret i zope.annotation pakke.
& Nbsp; >>> annots = IAnnotations (nadako)
& Nbsp; >>> annots
& Nbsp;
& Nbsp; >>> annots ['root.number']
& Nbsp; 42
Som standard IAnnotation adapteren bruger den aktuelle webstedets anvendelighed:
>>> IAnnotations (nadako) er util.getAnnotations (nadako)
Sandt
>>> Fra zope.site.hooks import setSite
>>> SetSite (underordnet websted)
>>> IAnnotations (nadako) er util2.getAnnotations (nadako)
Sandt
Howerver, kan vi bruge en binær multi-adapter til IAnnotations at angive nogle sammenhæng objekt, hvorfra man kan få anmærkninger værktøjet:
>>> Fra zope.component import getMultiAdapter
>>> Annots = getMultiAdapter ((nadako, root), IAnnotations)
>>> Annots er util.getAnnotations (nadako)
Sandt
>>> Annots = getMultiAdapter ((nadako, underordnet websted), IAnnotations)
>>> Annots er util2.getAnnotations (nadako)
Sand

Hvad er nyt i denne udgivelse:.

  • Korrigeret Trove klassifikatorer

Hvad er nyt i version 3.6.1:

  • Rettet en test fejl i indrykkede lokale site manager setup .
  • Fjernet afhængighed zope.container.

Krav :

  • Python

Andre software developer Zope Corporation and Contributors

Kommentarer til zope.principalannotation

Kommentarer ikke fundet
Tilføj kommentar
Tænd billeder!