zope.principalannotation

Software screenshot:
zope.principalannotation
Software informatie:
Versie: 4.0.0 Alpha 2
Upload datum: 14 Apr 15
Licentie: Gratis
Populariteit: 0

Rating: 5.0/5 (Total Votes: 1)

zope.principalannotation is een Python module die annotaties implementeert voor zope.security opdrachtgevers & nbsp;. Om het duidelijk te maken, de belangrijkste hier is het object dat zope.security.interfaces.IPrincipal interface en annotaties biedt is het doel het verstrekken van Zope. annotation.interfaces.IAnnotations.
Het probleem is dat opdrachtgevers is dynamisch, niet-blijvende objecten gemaakt op de vlieg voor elke security participatie (verzoek of zoiets), zo gewoon annotatie technieken, zoals AttributeAnnotations kan niet worden toegepast op hen.
Dit pakket bevat een permanente opslag van de hoofdsom annotaties, het opslaan van annotaties door opdrachtgever ID alsook een adapter van IPrincipal naar IAnnotations.
PrincipalAnnotationUtility
De kern van dit pakket is de PrincipalAnnotationUtility klasse die annotaties opslaat voor opdrachtgevers en maakt het mogelijk om gemakkelijk te krijgen.
Het biedt de IPrincipalAnnotationUtility interface:
>>> Van zope.principalannotation.interfaces importeren IPrincipalAnnotationUtility
>>> Van zope.principalannotation.utility import PrincipalAnnotationUtility
>>> Van zope.interface.verify import verifyObject
>>> Util = PrincipalAnnotationUtility ()
>>> VerifyObject (IPrincipalAnnotationUtility, util)
Waar
Het kan op drie manieren: getAnnotations, getAnnotationsById en hasAnnotations. Laten we een test hoofdsom en check out deze methoden:
>>> Van zope.security.testing import Principal
>>> Nadako = Principal ('nadako')
>>> Nadako.id
'Nadako'
We kunnen controleren of onze opdrachtgever heeft geen annotaties. Natuurlijk is het op dit moment er geen heeft:
>>> Util.hasAnnotations (nadako)
Vals
We kunnen krijgen IAnnotations bezwaar behulp voornaamste object zelf:
>>> Util.getAnnotations (nadako)

Of het gebruik van principal-id:
>>> Util.getAnnotationsById (nadako.id)

Laten we de IAnnotations object voor onze opdrachtgever en ermee spelen:
>>> Annots = util.getAnnotations (nadako)
>>> Van zope.interface.verify import verifyObject
>>> Van zope.annotation.interfaces import IAnnotations
>>> VerifyObject (IAnnotations, annots)
Waar
Laten we eens kijken de IAnnotation contract:
>>> Bool (annots)
Vals
>>> Annots ['not.here']
Traceback (meest recente oproep vorige):
...
KeyError: 'not.here'
>>> Annots.get ('not.here') is None
Waar
>>> Annots.get ('not.here', 42)
42
Merk op, dat de IAnnotations object wordt opgeslagen in het hulpprogramma alleen wanneer we een sleutel voor het. Dit is een eenvoudige optimalisatie, dat ons in staat stelt om geen gegevens wanneer alles wat we doen is gewoon het controleren op presense van annotatie op te slaan. De hasAnnotations methode zal True terugkeren na het opslaan van een sleutel in de annotaties:
>>> Util.hasAnnotations (nadako)
Vals
>>> Annots ['its.here'] = 'wat info'
>>> Util.hasAnnotations (nadako)
Waar
We kunnen ook de bestaande sleutel te verwijderen:
>>> Del annots ['its.here']
Maar we kunnen de sleutel die is (niet meer) existant niet verwijderen:
>>> Del annots ['its.here']
Traceback (meest recente oproep vorige):
...
KeyError: 'its.here'
Multiple annotatie utilities
Stel je voor dat uw aanvraag heeft een wortel siteobject met zijn component register (aka site manager) en dat object heeft een subsite object met een eigen component register en die component register heeft component register van de wortel als de basis.
In dat geval willen we de IAnnotations bezwaar tegen beschikbaar voor annotaties van hoger niveau nutsbedrijven te halen zijn.
Laten we registreren onze hulpprogramma in de root website en maak een sub-site met een eigen IPrincipalAnnotationUtility:
>>> Wortel ['util'] = util
>>> Rootsm = root.getSiteManager ()
>>> Rootsm.registerUtility (util, IPrincipalAnnotationUtility)
>>> Van zope.site.folder import Folder
>>> Van zope.site.site import LocalSiteManager
>>> Subsite = Map ()
>>> Wortel ['subsite'] = subsite
>>> Subsm = LocalSiteManager (subsite)
>>> Subsm .__ bases__ = (rootsm,)
>>> Subsite.setSiteManager (subsm)
>>> Util2 = PrincipalAnnotationUtility ()
>>> Subsite ['util2'] = util2
>>> Subsm.registerUtility (util2, IPrincipalAnnotationUtility)
Nu, laten we maken een sleutel in de IAnnotations, verstrekt door root nut:
>>> Annots = util.getAnnotations (nadako)
>>> Annots ['root.number'] = 42
Het hulpprogramma subsite moeten de annotatie met succes te krijgen:
>>> Annots2 = util2.getAnnotations (nadako)
>>> Bool (annots2)
Waar
>>> Annots2 ['root.number']
42
Als we de sleutel zowel in hoger niveau annotaties en een lager niveau degenen, zal de lagere prioriteit hebben, maar op een hoger niveau worden niet verwijderd of overschreven:
>>> Annots ['another.number'] = 1
>>> Annots2 ['another.number'] = 42
>>> Annots ['another.number']
1
>>> Annots2 ['another.number']
42
Als we de toets van een lager niveau zal verwijderen, zal het niet worden vanaf een hoger niveau hulpprogramma geschrapt:
>>> Del annots2 ['another.number']
>>> Annots ['another.number']
1
>>> Annots2 ['another.number']
1
IPrincipal -> IAnnotations adapter
Natuurlijk, de meest leuke feature is dat we gewoon onze belangrijkste object kan aanpassen aan IAnnotations en krijgt die annotaties met behulp van standaard manier gedocumenteerd in zope.annotation pakket.
& Nbsp; >>> annots = IAnnotations (nadako)
& Nbsp; >>> annots
& Nbsp;
& Nbsp; >>> annots ['root.number']
& Nbsp; 42
Standaard is de IAnnotation adapter gebruikt nut van de huidige website:
>>> IAnnotations (nadako) is util.getAnnotations (nadako)
Waar
>>> Van zope.site.hooks import setSite
>>> SetSite (subsite)
>>> IAnnotations (nadako) is util2.getAnnotations (nadako)
Waar
Howerver, kunnen we een binair multi-adapter aan IAnnotations gebruiken om bepaalde context object van waaruit het nut annotaties te krijgen op te geven:
>>> Van zope.component import getMultiAdapter
>>> Annots = getMultiAdapter ((nadako, root), IAnnotations)
>>> Annots is util.getAnnotations (nadako)
Waar
>>> Annots = getMultiAdapter ((nadako, subsite), IAnnotations)
>>> Annots is util2.getAnnotations (nadako)
True

Wat is nieuw in deze release:.

  • Gecorrigeerd Trove classificatoren

Wat is nieuw in versie 3.6.1:

  • Vast een test falen in geneste lokale site manager setup .
  • Removed afhankelijkheid zope.container.

Eisen

  • Python

Andere software van ontwikkelaar Zope Corporation and Contributors

zope.security
zope.security

12 May 15

zope.schema
zope.schema

14 Apr 15

zope.app.testing
zope.app.testing

14 Apr 15

Reacties op zope.principalannotation

Reacties niet gevonden
Commentaar toe te voegen
Zet op de beelden!