zope.principalannotation

Logiciel capture d'écran:
zope.principalannotation
Détails logiciels:
Version: 4.0.0 Alpha 2
Date de transfert: 14 Apr 15
Licence: Gratuit
Popularité: 0

Rating: 5.0/5 (Total Votes: 1)

zope.principalannotation est un module Python qui implémente annotations pour les directeurs d'zope.security & nbsp;. Pour être clair, le principal ici est l'objet qui fournit une interface et annotations zope.security.interfaces.IPrincipal est l'objet fournissant Zope. annotation.interfaces.IAnnotations.
Le problème est que les directeurs est dynamique, les objets non persistants créés à la volée pour chaque participation de sécurité (de demande ou quelque chose), de sorte que les techniques d'annotation commune, comme AttributeAnnotations ne peuvent leur être appliquées.
Ce paquet fournit un stockage persistant des principaux annotations, stocker annotations par ID principal ainsi qu'un adaptateur de IPrincipal à IAnnotations.
PrincipalAnnotationUtility
Le noyau de ce paquet est la classe qui stocke PrincipalAnnotationUtility annotations pour les directeurs et permet de les obtenir facilement.
Il fournit l'interface IPrincipalAnnotationUtility:
>>> From zope.principalannotation.interfaces importer IPrincipalAnnotationUtility
>>> From zope.principalannotation.utility importation PrincipalAnnotationUtility
>>> From verifyObject d'importation zope.interface.verify
>>> Util = PrincipalAnnotationUtility ()
>>> VerifyObject (IPrincipalAnnotationUtility, util)
Vrai
Il propose trois méthodes: getAnnotations, getAnnotationsById et hasAnnotations. Créons un directeur d'essai et de vérifier ces méthodes:
>>> From zope.security.testing principal d'importation
>>> Nadako = principal ("nadako ')
>>> Nadako.id
'Nadako'
Nous pouvons vérifier si notre principale a des annotations. Bien sûr, il ne dispose pas actuellement de:
>>> util.hasAnnotations (nadako)
Faux
Nous pouvons obtenir IAnnotations objet à l'aide objet principal lui-même:
>>> util.getAnnotations (nadako)

Ou en utilisant id principale:
>>> Util.getAnnotationsById (nadako.id)

Sortons les IAnnotations objet pour notre principal et jouer avec lui:
>>> Annots = util.getAnnotations (nadako)
>>> From verifyObject d'importation zope.interface.verify
>>> From IAnnotations zope.annotation.interfaces d'importation
>>> VerifyObject (IAnnotations, Annots)
Vrai
Voyons maintenant le contrat IAnnotation:
>>> bool (Annots)
Faux
>>> Annots ['not.here']
Retraçage (appel plus récente en dernier):
...
KeyError: 'not.here'
>>> Annots.get ('not.here') est Aucun
Vrai
>>> Annots.get ('not.here', 42)
42
Notez que l'objet IAnnotations est stocké dans l'utilitaire que lorsque nous avons créé une clé pour elle. Ce est une optimisation simple qui nous permet de ne pas stocker les données quand tout ce que nous faisons, ce est tout simplement la vérification de presense d'annotation. La méthode hasAnnotations retournera vrai après stocker une clé dans les annotations:
>>> util.hasAnnotations (nadako)
Faux
>>> Annots ['its.here'] = 'quelques infos »
>>> util.hasAnnotations (nadako)
Vrai
Nous pouvons également supprimer la clé existante:
>>> Del Annots ['its.here']
Mais nous ne pouvons pas supprimer la clé qui est (pas plus) existant:
>>> Del Annots ['its.here']
Retraçage (appel plus récente en dernier):
...
KeyError: 'its.here'
Utilitaires annotation multiple
Imaginez que votre demande a un objet racine du site avec son registre de composants (aka gestionnaire du site) et cet objet a un objet sous-site avec son propre registre de composants, et que registre de composants a composante le registre de la racine comme sa base.
Dans ce cas, nous voulons que les IAnnotations objet d'être disponible pour récupérer les annotations des services publics de niveau supérieur.
Disons enregistrer notre utilité dans la racine du site et créer un sous-site avec son propre IPrincipalAnnotationUtility:
>>> Racine ['util'] = util
>>> Rootsm root.getSiteManager = ()
>>> Rootsm.registerUtility (util, IPrincipalAnnotationUtility)
>>> À partir du dossier d'importation de zope.site.folder
>>> From LocalSiteManager d'importation zope.site.site
>>> Subsite = Dossier ()
>>> Racine ['sous-site'] = sous-site
>>> Subsm = LocalSiteManager (sous-site)
>>> Subsm .__ bases__ = (rootsm,)
>>> Subsite.setSiteManager (subsm)
>>> Util2 PrincipalAnnotationUtility = ()
>>> Subsite ['util2'] = util2
>>> Subsm.registerUtility (util2, IPrincipalAnnotationUtility)
Maintenant, nous allons créer une clé dans les IAnnotations, fournies par l'utilitaire de root:
>>> Annots = util.getAnnotations (nadako)
>>> Annots ['root.number'] = 42
L'utilitaire de sous-site doit obtenir l'annotation avec succès:
>>> Annots2 = util2.getAnnotations (nadako)
>>> Bool (annots2)
Vrai
>>> Annots2 ['root.number']
42
Si nous avons la clé à la fois dans les annotations de niveau supérieur et ceux de niveau inférieur, le niveau inférieur aura la priorité, mais de plus haut niveau ne sera pas supprimé, ou surchargé:
>>> Annots ['another.number'] = 1
>>> Annots2 ['another.number'] = 42
>>> Annots ['another.number']
1
>>> Annots2 ['another.number']
42
Si nous supprimons la clé de niveau inférieur, il ne sera pas supprimé à partir d'un utilitaire de niveau supérieur:
>>> Del annots2 ['another.number']
>>> Annots ['another.number']
1
>>> Annots2 ['another.number']
1
IPrincipal -> adaptateur IAnnotations
Bien sûr, la caractéristique la plus intéressante est que nous ne pouvons tout simplement adapter notre objet principal de IAnnotations et obtenir ces annotations en utilisant de façon standard documentée dans le paquet de zope.annotation.
& Nbsp; >>> Annots = IAnnotations (nadako)
& Nbsp; >>> Annots
& Nbsp;
& Nbsp; >>> Annots ['root.number']
& Nbsp; 42
Par défaut, l'adaptateur IAnnotation utilise l'utilité du site actuel:
>>> IAnnotations (nadako) est util.getAnnotations (nadako)
Vrai
>>> From zope.site.hooks de SetSite d'importation
>>> SetSite (sous-site)
>>> IAnnotations (nadako) est util2.getAnnotations (nadako)
Vrai
Howerver, nous pouvons utiliser un adaptateur multi-binaire IAnnotations de spécifier un objet de contexte à partir duquel obtenir l'utilitaire annotations:
>>> From zope.component getMultiAdapter d'importation
>>> Annots = getMultiAdapter ((nadako, racine), IAnnotations)
>>> Annots est util.getAnnotations (nadako)
Vrai
>>> Annots = getMultiAdapter ((nadako, sous-site), IAnnotations)
>>> Annots est util2.getAnnotations (nadako)
Vrai

Ce qui est nouveau dans cette version:.

  • classificateurs de Trove corrigées

Ce qui est nouveau dans la version 3.6.1:

  • Correction d'un échec de l'essai dans la configuration imbriquée de gestionnaire de site local .
  • Retiré dépendance zope.container.

Exigences :

  • Python

D'autres logiciels de développeur Zope Corporation and Contributors

zope.app.zapi
zope.app.zapi

12 May 15

zope.i18n
zope.i18n

15 Apr 15

zope.browserpage
zope.browserpage

20 Feb 15

Commentaires à zope.principalannotation

Commentaires non trouvées
Ajouter un commentaire
Tourner sur les images!