.
zope.principalannotation bir Python zope.security müdürleri için açıklamaları uygular modül & nbsp değil, açıkça yapmak için, buraya temel zope.security.interfaces.IPrincipal arayüzü ve açıklamaları sağlayan nesne zope sağlayan nesne olmasıdır. annotation.interfaces.IAnnotations.
Sorun müdürleri her güvenlik katılımı (istek ya da bir şey) için anında oluşturulan dinamik, kalıcı olmayan nesneler, yani AttributeAnnotations gibi ortak açıklama teknikleri, onlara uygulanan edilemez olduğunu.
Bu paket asıl kimliği ile açıklamaları yanı sıra IAnnotations için IPrincipal bir adaptör depolama, temel ek açıklamaların bir kalıcı depolama sağlar.
PrincipalAnnotationUtility
Bu paketin temel ilkeleri için ek açıklamaları depolar ve bunları kolayca ulaşmasını sağlar PrincipalAnnotationUtility sınıftır.
Bu IPrincipalAnnotationUtility arabirimi sağlar:
>>> Zope.principalannotation.interfaces IPrincipalAnnotationUtility ithal gelen
>>> Zope.principalannotation.utility ithalat PrincipalAnnotationUtility gelen
>>> Zope.interface.verify ithalat verifyObject gelen
>>> Util = PrincipalAnnotationUtility ()
>>> VerifyObject (IPrincipalAnnotationUtility, util)
Gerçek
GetAnnotations, getAnnotationsById ve hasAnnotations: Bu üç yöntem sunar. En bir test anapara oluşturmak ve bu yöntemleri kontrol edelim:
>>> Zope.security.testing ithalat Müdürü itibaren
>>> Nadako = Anapara ('nadako')
>>> Nadako.id
'Nadako'
Bizim asıl herhangi açıklamaları varsa biz kontrol edebilirsiniz. Tabii ki, şu anda herhangi bir yok:
>>> Util.hasAnnotations (nadako)
Yanlış
Biz IAnnotations ana nesne kendisini kullanarak nesne alabilirsiniz:
>>> Util.getAnnotations (nadako)
Ya da asıl kimliği kullanarak:
>>> Util.getAnnotationsById (nadako.id)
En IAnnotations bizim müdürü için itiraz ve onunla oynamak dönelim:
>>> Annots = util.getAnnotations (nadako)
>>> Zope.interface.verify ithalat verifyObject gelen
>>> Zope.annotation.interfaces ithalat IAnnotations gelen
>>> VerifyObject (IAnnotations, annots)
Gerçek
En IAnnotation sözleşme kontrol edelim:
>>> Bool (annots)
Yanlış
>>> Annots ['not.here']
Traceback (en son çağrı son):
...
KeyError 'not.here'
>>> Annots.get ('not.here') Yok olan
Gerçek
>>> Annots.get ('not.here', 42)
42
IAnnotations nesnesi biz bunun için bir anahtar set sadece programı saklanan alır ki, unutmayın. Bu hepimizi biz sadece açıklama bileşiğin varlığında denetliyor musunuz herhangi bir veri depolamak için değil sağlayan basit bir optimizasyon. hasAnnotations yöntemi açıklamalarla bir tuşa sakladıktan sonra Doğru dönecektir:
>>> Util.hasAnnotations (nadako)
Yanlış
>>> Annots = 'biraz bilgi' ['its.here']
>>> Util.hasAnnotations (nadako)
Gerçek
Biz aynı zamanda mevcut anahtarını silebilirsiniz:
>>> Del annots ['its.here']
Ama biz (artık) kayıtlarınız olan anahtarı silemezsiniz:
>>> Del annots ['its.here']
Traceback (en son çağrı son):
...
KeyError 'its.here'
Birden açıklama programları
Uygulama bileşen kayıt ile bir kök site nesnesi (aka site yöneticisi) sahiptir ve bu nesne, kendi bileşen kayıt ile bir alt-site nesnesi vardır ve bu bileşen kayıt tabanı gibi kök bileşen kayıt olduğunu düşünün.
Bu durumda, biz IAnnotations üst düzey yarar gelen açıklamaları almak için kullanılabilir olmasını nesne istiyorum.
Kök sitemizde programını kaydetmek ve kendi IPrincipalAnnotationUtility ile bir alt site oluşturmak edelim:
>>> Root ['util'] = util
>>> Rootsm = root.getSiteManager ()
>>> Rootsm.registerUtility (util, IPrincipalAnnotationUtility)
>>> Zope.site.folder ithalat Klasör
>>> Zope.site.site ithalat LocalSiteManager gelen
>>> Alt site = Klasör ()
>>> Kök ['altsite] alt site =
>>> Subsm = LocalSiteManager (alt)
>>> Subsm .__ bases__ = (rootsm)
>>> Subsite.setSiteManager (subsm)
>>> Util2 = PrincipalAnnotationUtility ()
>>> Alt site ['util2'] = util2
>>> Subsm.registerUtility (util2, IPrincipalAnnotationUtility)
Şimdi, kök programı tarafından sağlanan IAnnotations bir tuşa oluşturmasına izin:
>>> Annots = util.getAnnotations (nadako)
>>> Annots ['root.number'] 42 =
alt site programı başarıyla açıklamayı almalısınız:
>>> Annots2 = util2.getAnnotations (nadako)
>>> Bool (annots2)
Gerçek
>>> Annots2 ['root.number']
42
Biz de üst düzey açıklamaları ve alt düzey olanlar anahtarı varsa, alt düzey önceliğe sahiptir, ancak üst düzey silinmiş veya overriden olmayacak:
>>> Annots ['another.number'] = 1
>>> Annots2 ['another.number'] 42 =
>>> Annots ['another.number']
1
>>> Annots2 ['another.number']
42
Biz alt seviyeden anahtarını silin verirseniz, daha yüksek seviyeli programı silinmez olmayacak:
>>> Del annots2 ['another.number']
>>> Annots ['another.number']
1
>>> Annots2 ['another.number']
1
IPrincipal -> IAnnotations adaptörü
Tabii ki, en güzel özelliği biz sadece IAnnotations bizim temel nesneyi adapte ve zope.annotation paketinde belgelenmiş standart bir yol kullanarak bu açıklamaları alabiliriz.
& Nbsp; >>> annots = IAnnotations (nadako)
& Nbsp; >>> annots
& Nbsp;
& Nbsp; >>> annots ['root.number']
& Nbsp; 42
Varsayılan olarak, IAnnotation adaptörü mevcut sitenin programı kullanır:
>>> IAnnotations (nadako) (nadako) util.getAnnotations olan
Gerçek
>>> Zope.site.hooks ithalat SetSite gelen
>>> SetSite (alt)
>>> IAnnotations (nadako) (nadako) util2.getAnnotations olan
Gerçek
Howerver, biz açıklamalar programı almak için bazı içerik nesne belirtmek için IAnnotations bir ikili çoklu-adaptörü kullanabilirsiniz:
>>> Zope.component ithalat getMultiAdapter gelen
>>> Annots = getMultiAdapter ((nadako, kök), IAnnotations)
>>> Annots olan util.getAnnotations (nadako)
Gerçek
>>> Annots = getMultiAdapter ((nadako, alt site), IAnnotations)
>>> Annots olan util2.getAnnotations (nadako)
Doğru
Bu sürümde Yeni nedir:.
- düzeltildi Olimpiyatı sınıflandırıcılar
nedir sürüm 3.6.1 Yeni:
- iç içe yerel site yöneticisi kurulumunda bir sınama hatası düzeltildi .
- Kaldırılan bağımlılık.
Zope.container üzerinde
Gereksinimler :
- Python
Yorum Bulunamadı