zope.principalannotation

Sagteware kiekie:
zope.principalannotation
Sagteware besonderhede:
Weergawe: 4.0.0 Alpha 2
Upload datum: 14 Apr 15
Lisensie: Gratis
Populariteit: 0

Rating: 5.0/5 (Total Votes: 1)

zope.principalannotation is 'n Python module wat implemente annotasies vir zope.security skoolhoofde & nbsp;. Om dit duidelik te maak, die skoolhoof hier is die voorwerp wat 'zope.security.interfaces.IPrincipal koppelvlak en annotasies is die voorwerp verskaffing Zope. annotation.interfaces.IAnnotations.
Die probleem is dat skoolhoofde is dinamiese, nie-aanhoudende voorwerpe geskep op die vlieg vir elke sekuriteit deelname (versoek of iets), so algemeen body tegnieke, soos AttributeAnnotations kan nie toegepas word vir hulle.
Hierdie pakket bied 'n aanhoudende stoor van die skoolhoof notas, stoor notas deur skoolhoof ID sowel as 'n adapter van IPrincipal te IAnnotations.
PrincipalAnnotationUtility
Die kern van hierdie pakket is die PrincipalAnnotationUtility klas wat winkels notas vir skoolhoofde en hulle toelaat om te maklik.
Dit bied die IPrincipalAnnotationUtility koppelvlak:
>>> Van zope.principalannotation.interfaces invoer IPrincipalAnnotationUtility
>>> Van zope.principalannotation.utility invoer PrincipalAnnotationUtility
>>> Van zope.interface.verify invoer verifyObject
>>> Util = PrincipalAnnotationUtility ()
>>> VerifyObject (IPrincipalAnnotationUtility, util)
True
Dit bied drie metodes: getAnnotations, getAnnotationsById en hasAnnotations. Kom ons skep 'n toets skoolhoof en kyk uit hierdie metodes:
>>> Van zope.security.testing invoer Skoolhoof
>>> Nadako = Skoolhoof ('nadako')
>>> Nadako.id
'Nadako'
Ons kan kyk of ons skoolhoof het enige notas. Natuurlik, dit tans nie enige:
>>> Util.hasAnnotations (nadako)
Valse
Ons kan kry IAnnotations voorwerp deur gebruik skoolhoof voorwerp self:
>>> Util.getAnnotations (nadako)

Of die gebruik van hoof id:
>>> Util.getAnnotationsById (nadako.id)

Kom ons kry die IAnnotations beswaar vir ons skoolhoof en speel met dit:
>>> Annots = util.getAnnotations (nadako)
>>> Van zope.interface.verify invoer verifyObject
>>> Van zope.annotation.interfaces invoer IAnnotations
>>> VerifyObject (IAnnotations, annots)
True
Kom ons kyk die IAnnotation kontrak:
>>> Bool (annots)
Valse
>>> Annots ['not.here']
Stapelspoor (mees onlangse oproep laaste):
...
KeyError: "not.here '
>>> Annots.get ('not.here') is Geen
True
>>> Annots.get ('not.here', 42)
42
Kennis dat die IAnnotations voorwerp kry gestoor in die nut slegs wanneer ons het 'n sleutel vir dit. Dit is 'n eenvoudige optimization wat ons toelaat nie enige data wanneer al ons doen, is eenvoudig kontrole vir presense van body te stoor. Die hasAnnotations metode sal terugkeer True na stoor 'n sleutel in die notas:
>>> Util.hasAnnotations (nadako)
Valse
>>> Annots ['its.here'] = 'n paar info '
>>> Util.hasAnnotations (nadako)
True
Ons kan ook verwyder die bestaande sleutel:
>>> Del annots ['its.here']
Maar ons kan nie die sleutel wat (nie meer) zowat onbestaande verwyder:
>>> Del annots ['its.here']
Stapelspoor (mees onlangse oproep laaste):
...
KeyError: "its.here '
Veelvuldige body utilities
Verbeel jou dat jou aansoek het 'n wortel webwerf voorwerp met sy komponent register (aka webwerf bestuurder) en die voorwerp het 'n sub-site voorwerp met sy eie komponent register, en dat komponent register het die wortel se komponent register as basis.
In daardie geval, ons wil die IAnnotations beswaar beskikbaar annotasies van hoër-vlak nuts te haal nie.
Kom ons registreer ons nut in die wortel webwerf en skep 'n sub-site met sy eie IPrincipalAnnotationUtility:
>>> Wortel ['util'] = util
>>> Rootsm = root.getSiteManager ()
>>> Rootsm.registerUtility (util, IPrincipalAnnotationUtility)
>>> Van zope.site.folder invoer Folder
>>> Van zope.site.site invoer LocalSiteManager
>>> -subtuiste = Folder ()
>>> Wortel ['-subtuiste'] = -subtuiste
>>> Subsm = LocalSiteManager (-subtuiste)
>>> Subsm .__ bases__ = (rootsm,)
>>> Subsite.setSiteManager (subsm)
>>> Util2 = PrincipalAnnotationUtility ()
>>> -subtuiste ['Util2'] = util2
>>> Subsm.registerUtility (util2, IPrincipalAnnotationUtility)
Nou, laat ons 'n sleutel in die IAnnotations, wat deur wortel nut:
>>> Annots = util.getAnnotations (nadako)
>>> Annots ['root.number'] = 42
Die -subtuiste nut moet die body suksesvol kry:
>>> Annots2 = util2.getAnnotations (nadako)
>>> Bool (annots2)
True
>>> Annots2 ['root.number']
42
As ons die sleutel beide in hoër-vlak aantekeninge en laer-vlak kinders, sal die laer vlak prioriteit, maar hoër-vlak sal nie geskrap word of oorheers:
>>> Annots ['another.number'] = 1
>>> Annots2 ['another.number'] = 42
>>> Annots ['another.number']
1
>>> Annots2 ['another.number']
42
As ons die sleutel van die laer-vlak te verwyder, sal dit nie van 'n hoër vlak nut verwyder word:
>>> Del annots2 ['another.number']
>>> Annots ['another.number']
1
>>> Annots2 ['another.number']
1
IPrincipal -> IAnnotations adapter
Natuurlik, die mees mooi eienskap is dat ons eenvoudig ons skoolhoof voorwerp kan aanpas by IAnnotations en kry die notas met behulp van standaard gedokumenteer in zope.annotation pakket.
& Nbsp; >>> annots = IAnnotations (nadako)
& Nbsp; >>> annots
& Nbsp;
& Nbsp; >>> annots ['root.number']
& Nbsp; 42
By verstek, die IAnnotation adapter gebruik die huidige terrein se nut:
>>> IAnnotations (nadako) is util.getAnnotations (nadako)
True
>>> Van zope.site.hooks invoer setSite
>>> SetSite (-subtuiste)
>>> IAnnotations (nadako) is util2.getAnnotations (nadako)
True
Howerver, kan ons 'n binêre multi-adapter te IAnnotations gebruik sommige konteks voorwerp waaruit die notas nut te kry om te spesifiseer:
>>> Van zope.component invoer getMultiAdapter
>>> Annots = getMultiAdapter ((nadako, root), IAnnotations)
>>> Annots is util.getAnnotations (nadako)
True
>>> Annots = getMultiAdapter ((nadako, -subtuiste), IAnnotations)
>>> Annots is util2.getAnnotations (nadako)
Ware

Wat is nuut in hierdie release:.

  • Reggemaak Trove klassifiseerders

Wat is nuut in die weergawe 3.6.1:

  • Vaste 'n toets mislukking in geneste plaaslike webwerf bestuurder opstel .
  • verwyder afhanklikheid zope.container.

Vereistes :

  • Python

Ander sagteware ontwikkelaar Zope Corporation and Contributors

Kommentaar te zope.principalannotation

Kommentaar nie gevind
Kommentaar te lewer
Draai op die foto!