.
zope.principalannotation bir Python zope.security direktorları üçün notları həyata keçirir modulu & nbsp, bu aydın etmək üçün, burada əsas zope.security.interfaces.IPrincipal interfeysi və notları təmin obyekt Zope təmin obyekt edir. annotation.interfaces.IAnnotations.
problem müdirləri hər təhlükəsizlik iştirakı (sorğu və ya bir şey) üçün Tez yaradılmış dinamik, qeyri-davamlı obyektlərin, belə ki, AttributeAnnotations kimi ümumi annotasiya texnika onlara tətbiq edilə bilməz ki.
Bu paket əsas ID notları həmçinin IAnnotations üçün IPrincipal bir adapter saxlanılması, əsas ek not davamlı saxlama təmin edir.
PrincipalAnnotationUtility
Bu paketin əsas prinsipləri üçün notları mağazalar və asanlıqla almaq üçün imkan verir PrincipalAnnotationUtility sinif edir.
Bu IPrincipalAnnotationUtility interfeysi təmin edir:
>>> Zope.principalannotation.interfaces IPrincipalAnnotationUtility idxal olan
>>> Zope.principalannotation.utility idxal PrincipalAnnotationUtility dən
>>> Zope.interface.verify idxal verifyObject dən
>>> Util = PrincipalAnnotationUtility ()
>>> VerifyObject (IPrincipalAnnotationUtility, util)
Doğru
GetAnnotations, getAnnotationsById və hasAnnotations: Bu üç üsulları təmin edir. Bir test əsas yaratmaq və bu üsulları həyata yoxlamaq edək:
>>> Zope.security.testing idxal direktoru olan
>>> Nadako = Principal (nadako)
>>> Nadako.id
'Nadako "
Bizim əsas Hər hansı bir ek var, biz kontrol edə bilərsiniz. Əlbəttə ki, hal-hazırda hər hansı bir yoxdur:
>>> Util.hasAnnotations (nadako)
Saxta
Biz IAnnotations əsas obyekt özü istifadə etiraz əldə edə bilərsiniz:
>>> Util.getAnnotations (nadako)
Və ya əsas id istifadə:
>>> Util.getAnnotationsById (nadako.id)
Üzrə IAnnotations bizim əsas üçün etiraz və onunla oynamaq edək:
>>> Annots = util.getAnnotations (nadako)
>>> Zope.interface.verify idxal verifyObject dən
>>> Zope.annotation.interfaces idxal IAnnotations dən
>>> VerifyObject (IAnnotations, annots)
Doğru
Üzrə IAnnotation müqavilə yoxlamaq edək:
>>> Bool (annots)
Saxta
>>> Annots ['not.here']
Traceback (ən son zəng, son):
...
KeyError: not.here "
>>> Annots.get (not.here) None
Doğru
>>> Annots.get (not.here, 42)
42
IAnnotations obyekt bunun üçün əsas müəyyən yalnız kommunal saxlanılır olur ki, unutmayın. Bu, bizə bütün biz sadəcə annotasiya İştirakınıza görə yoxlanılması olunur hər hansı bir veri imkan verir ki, sadə bir optimallaşdırma edir. hasAnnotations üsulu notları bir əsas saxlanılması sonra True qayıdacaqlar:
>>> Util.hasAnnotations (nadako)
Saxta
>>> Annots = 'bəzi info' ['its.here']
>>> Util.hasAnnotations (nadako)
Doğru
Biz də mövcud əsas onda düzəlişlər edə bilərsiniz:
>>> Del annots ['its.here']
Amma biz (bir daha) existant olan əsas silə bilməzsiniz:
>>> Del annots ['its.here']
Traceback (ən son zəng, son):
...
KeyError: its.here "
Birden annotasiya kommunal
Sizin tətbiqi onun tərkib qeyd bir kök site obyekt (aka site meneceri) var ki, obyekt öz komponenti qeyd bir sub-site obyekt var ki, komponent qeyd onun bazasında kimi kök komponenti reyestrinin var ki, düşünün.
Bu halda, biz IAnnotations yüksək səviyyəli kommunal notları almaq üçün mövcud olmaq etiraz istəyirəm.
Kök saytda bizim kommunal qeydiyyatdan və öz IPrincipalAnnotationUtility ilə alt-site yaratmaq edək:
>>> Kök ['util'] = util
>>> Rootsm = root.getSiteManager ()
>>> Rootsm.registerUtility (util, IPrincipalAnnotationUtility)
>>> Zope.site.folder idxal Qovluq
>>> Zope.site.site idxal LocalSiteManager dən
>>> Altsayt = Qovluq ()
>>> Kök ['altsayt'] subsite =
>>> Subsm = LocalSiteManager (altsayt)
>>> Subsm .__ bases__ = (rootsm)
>>> Subsite.setSiteManager (subsm)
>>> Util2 = PrincipalAnnotationUtility ()
>>> Altsayt ['util2'] = util2
>>> Subsm.registerUtility (util2, IPrincipalAnnotationUtility)
İndi kök kommunal tərəfindən təmin IAnnotations bir əsas yaratmaq ili:
>>> Annots = util.getAnnotations (nadako)
>>> Annots ['root.number'] 42 =
altsayt kommunal uğurla annotasiya almaq lazımdır:
>>> Annots2 = util2.getAnnotations (nadako)
>>> Bool (annots2)
Doğru
>>> Annots2 ['root.number']
42
Biz də yüksək səviyyəli notları və aşağı səviyyəli olanları əsas varsa, aşağı səviyyəli prioritet olacaq, lakin yüksək səviyyəli silinmiş və ya overriden olmaz:
>>> Annots ['another.number'] = 1
>>> Annots2 ['another.number'] 42 =
>>> Annots ['another.number']
1
>>> Annots2 ['another.number']
42
Biz aşağı səviyyədə olan əsas silmək lazımdır, bu, yüksək səviyyədə kommunal silinməyəcək:
>>> Del annots2 ['another.number']
>>> Annots ['another.number']
1
>>> Annots2 ['another.number']
1
IPrincipal -> IAnnotations adapter
Əlbəttə ki, ən gözəl xüsusiyyət biz sadəcə IAnnotations bizim əsas obyekt uyğunlaşdırmaq və zope.annotation paketi sənədləşdirilmiş standart şəkildə istifadə edərək, bu notları ala bilər.
& Nbsp; >>> annots = IAnnotations (nadako)
& Nbsp; >>> annots
& Nbsp;
& Nbsp; >>> annots ['root.number']
& Nbsp; 42
Mənim cari olaraq, IAnnotation adapter mövcud site kommunal istifadə edir:
>>> IAnnotations (nadako) (nadako) util.getAnnotations edir
Doğru
>>> Zope.site.hooks idxal setSite dən
>>> SetSite (altsayt)
>>> IAnnotations (nadako) (nadako) util2.getAnnotations edir
Doğru
Howerver, biz notları kommunal almaq üçün bəzi kontekstində obyekt müəyyən etmək IAnnotations bir ikili multi-adapter istifadə edə bilərsiniz:
>>> Zope.component idxal getMultiAdapter dən
>>> Annots = getMultiAdapter ((nadako, kök), IAnnotations)
>>> Annots edir util.getAnnotations (nadako)
Doğru
>>> Annots = getMultiAdapter ((nadako, altsayt), IAnnotations)
>>> Annots edir util2.getAnnotations (nadako)
True
Bu azad Yeni nədir.
- dəqiqləşdirilmiş define sınıflandırıcıları
nədir versiya 3.6.1-ci Yeni
- nested yerli site meneceri quraşdırma bir test uğursuz Sabit .
- silindi asılılıq.
Zope.container haqqında
tələblər
- Python
Şərhlər tapılmadı