zope.principalannotation

Tela Software:
zope.principalannotation
Detalhes de Software:
Versão: 4.0.0 Alpha 2
Data de upload: 14 Apr 15
Licença: Livre
Popularidade: 5

Rating: 5.0/5 (Total Votes: 1)

zope.principalannotation é um módulo Python que implementa anotações para diretores zope.security & nbsp;. Para deixar claro, o principal aqui é o objeto que fornece interface e anotações zope.security.interfaces.IPrincipal é o objeto fornecendo Zope. annotation.interfaces.IAnnotations.
O problema é que os diretores é objetos dinâmicos, não-persistentes criadas on the fly para cada participação segurança (pedido ou algo assim), então técnicas de anotação comum, como AttributeAnnotations não pode ser aplicado a eles.
Este pacote fornece um armazenamento persistente de anotações principais, armazenar anotações por principais ID, bem como um adaptador de IPrincipal para IAnnotations.
PrincipalAnnotationUtility
O núcleo deste pacote é a classe PrincipalAnnotationUtility que armazena anotações para diretores e permite obtê-los facilmente.
Ele fornece a interface IPrincipalAnnotationUtility:
>>> From zope.principalannotation.interfaces importar IPrincipalAnnotationUtility
>>> From zope.principalannotation.utility importação PrincipalAnnotationUtility
>>> From zope.interface.verify verifyObject importação
>>> Util = PrincipalAnnotationUtility ()
>>> VerifyObject (IPrincipalAnnotationUtility, util)
Verdadeiro
Ele fornece três métodos: GetAnnotations, getAnnotationsById e hasAnnotations. Vamos criar uma entidade de testes e verificar esses métodos:
>>> From zope.security.testing principal importação
>>> Nadako = Principal ('nadako')
>>> Nadako.id
'Nadako'
Podemos verificar se o nosso principal possui quaisquer anotações. É claro que não tem actualmente qualquer:
>>> util.hasAnnotations (nadako)
Falso
Podemos obter IAnnotations objeto usando capital próprio objeto:
>>> util.getAnnotations (nadako)

Ou usando id principais:
>>> Util.getAnnotationsById (nadako.id)

Vamos fazer o IAnnotations objeto para o nosso principal e jogar com ele:
>>> Annots = util.getAnnotations (nadako)
>>> From zope.interface.verify verifyObject importação
>>> From IAnnotations zope.annotation.interfaces importação
>>> VerifyObject (IAnnotations, annots)
Verdadeiro
Vamos verificar o contrato IAnnotation:
>>> bool (annots)
Falso
>>> annots ['not.here']
Traceback (most recent call last):
...
KeyError: 'not.here'
>>> Annots.get ('not.here') é None
Verdadeiro
>>> Annots.get ('not.here', 42)
42
Note-se, que o objeto IAnnotations fica armazenado no utilitário apenas quando vamos definir uma chave para ele. Esta é uma otimização simples que nos permite não para armazenar todos os dados quando tudo o que fazemos é simplesmente verificar para presense de anotação. O método hasAnnotations irá retornar True depois de armazenar uma chave nas anotações:
>>> util.hasAnnotations (nadako)
Falso
>>> annots ['its.here'] = 'alguma informação'
>>> util.hasAnnotations (nadako)
Verdadeiro
Nós também podemos excluir a chave existente:
>>> Del annots ['its.here']
Mas não podemos excluir a chave que é (não mais) existant:
>>> Del annots ['its.here']
Traceback (most recent call last):
...
KeyError: 'its.here'
Utilitários de anotação Multiple
Imagine que a sua aplicação tem um objeto de site de raiz com o seu registro componente (aka administrador do site) e esse objeto tem um objeto de sub-site com seu próprio registro de componentes, e que o registro componente tem registro componente da raiz como sua base.
Nesse caso, queremos que os IAnnotations objeto a ser disponível para recuperar as anotações de utilitários de alto nível.
Vamos registrar a nossa utilidade no site raiz e criar um sub-site com seu próprio IPrincipalAnnotationUtility:
>>> Raiz ['util'] = util
>>> Rootsm = root.getSiteManager ()
>>> Rootsm.registerUtility (util, IPrincipalAnnotationUtility)
>>> From pasta de importação zope.site.folder
>>> From zope.site.site LocalSiteManager importação
>>> Subsite = Pasta ()
>>> Raiz ['subsite'] = subsite
>>> Subsm = LocalSiteManager (subsite)
>>> Subsm .__ bases__ = (rootsm,)
>>> Subsite.setSiteManager (subsm)
>>> Util2 = PrincipalAnnotationUtility ()
>>> Subsite ['util2'] = util2
>>> Subsm.registerUtility (util2, IPrincipalAnnotationUtility)
Agora, vamos criar uma chave nos IAnnotations, fornecido pelo utilitário root:
>>> Annots = util.getAnnotations (nadako)
>>> annots ['root.number'] = 42
O utilitário subsite deve começar a anotação com sucesso:
>>> Annots2 = util2.getAnnotations (nadako)
>>> Bool (annots2)
Verdadeiro
>>> Annots2 ['root.number']
42
Se nós temos a chave tanto em anotações de nível superior e os de nível mais baixo, o nível mais baixo terá prioridade, mas de nível superior não serão excluídos ou anulado:
>>> annots ['another.number'] = 1
>>> Annots2 ['another.number'] = 42
>>> annots ['another.number']
1
>>> Annots2 ['another.number']
42
Se nós vamos eliminar a chave de nível inferior, ele não será excluído de um utilitário de nível superior:
>>> Del annots2 ['another.number']
>>> annots ['another.number']
1
>>> Annots2 ['another.number']
1
IPrincipal -> adaptador IAnnotations
É claro que a característica mais interessante é que podemos simplesmente adaptar o nosso principal objectivo para IAnnotations e obter essas anotações usando maneira padrão documentado no pacote zope.annotation.
& Nbsp; >>> annots = IAnnotations (nadako)
& Nbsp; >>> annots
& Nbsp;
& Nbsp; >>> annots ['root.number']
& Nbsp; 42
Por padrão, o adaptador IAnnotation usa a utilidade do site atual:
>>> IAnnotations (nadako) é util.getAnnotations (nadako)
Verdadeiro
>>> From zope.site.hooks SetSite importação
>>> SetSite (subsite)
>>> IAnnotations (nadako) é util2.getAnnotations (nadako)
Verdadeiro
Howerver, podemos usar um binário multi-adaptador para IAnnotations especificar algum objeto de contexto do qual obter o utilitário anotações:
>>> From zope.component getMultiAdapter importação
>>> Annots = getMultiAdapter ((nadako, root), IAnnotations)
>>> Annots é util.getAnnotations (nadako)
Verdadeiro
>>> Annots = getMultiAdapter ((nadako, subsite), IAnnotations)
>>> Annots é util2.getAnnotations (nadako)
Verdadeiro

O que é novo nesta versão:.

  • classificadores Trove Corrigidos

O que é novo na versão 3.6.1:

  • Corrigido uma falha de teste na configuração do gerenciador de site local nested .
  • Removido dependência de zope.container.

Requisitos :

  • Python

Outro software de desenvolvedor Zope Corporation and Contributors

zope.keyreference
zope.keyreference

15 Apr 15

zope.app.testing
zope.app.testing

14 Apr 15

zope.index
zope.index

14 Apr 15

Comentário para zope.principalannotation

Comentários não encontrado
Adicionar comentário
Ligue imagens!