zope.principalannotation

البرمجيات قطة:
zope.principalannotation
تفاصيل البرنامج:
الإصدار: 4.0.0 Alpha 2
تاريخ إيداع: 14 Apr 15
ترخيص: حرر
شعبية: 0

Rating: 5.0/5 (Total Votes: 1)

وzope.principalannotation هو وحدة بيثون التي تطبق الشروح لمديري zope.security & nbsp؛ يمكنك لجعلها واضحة، ومدير المدرسة هنا هو الكائن الذي يوفر واجهة zope.security.interfaces.IPrincipal وشروحه والكائن توفير zope. annotation.interfaces.IAnnotations.
والمشكلة هي أن مديري هو ديناميكية الأجسام، غير المستمرة التي تم إنشاؤها على الطاير لكل مشاركة الأمنية (طلب أو شيء)، وذلك تقنيات الشرح مشترك، مثل AttributeAnnotations لا يمكن تطبيقها لهم.
توفر هذه الحزمة التخزين الثابتة من الشروح الرئيسية، وتخزين الشروح عن الهوية الرئيسي فضلا عن محول من IPrincipal إلى IAnnotations.
PrincipalAnnotationUtility
جوهر هذه الحزمة هي الطبقة PrincipalAnnotationUtility الذي يخزن الشروح لمديري المدارس وتتيح للحصول عليها بسهولة.
وهو يوفر واجهة IPrincipalAnnotationUtility:
>>> من zope.principalannotation.interfaces استيراد IPrincipalAnnotationUtility
>>> من zope.principalannotation.utility PrincipalAnnotationUtility استيراد
>>> من zope.interface.verify verifyObject استيراد
>>> UTIL = PrincipalAnnotationUtility ()
>>> verifyObject (IPrincipalAnnotationUtility، UTIL)
صحيح
ويقدم ثلاث طرق: getAnnotations، getAnnotationsById وhasAnnotations. دعونا إنشاء المدرسة الاختبار وتحقق من هذه الأساليب:
>>> من zope.security.testing مدير الواردات
>>> nadako = الرئيسي ('nadako')
>>> nadako.id
"nadako"
يمكننا معرفة ما اذا كان مدير المدرسة لديه أي شروحه. بطبيعة الحال، فإنه ليس لديه أي:
>>> util.hasAnnotations (nadako)
زائف
يمكننا الحصول على الاعتراض IAnnotations باستخدام الكائن الرئيسي نفسه:
>>> util.getAnnotations (nadako)

أو باستخدام معرف الرئيسي:
>>> util.getAnnotationsById (nadako.id)

دعونا الحصول على IAnnotations الاعتراض لمدير المدرسة لدينا واللعب معها:
>>> annots = util.getAnnotations (nadako)
>>> من zope.interface.verify verifyObject استيراد
>>> من IAnnotations zope.annotation.interfaces استيراد
>>> verifyObject (IAnnotations، annots)
صحيح
دعونا تحقق العقد IAnnotation:
>>> منطقي (annots)
زائف
>>> annots ['not.here']
Traceback (معظم المكالمات الأخيرة الأخيرة):
...
KeyError: "not.here"
>>> annots.get ('not.here') هو لا يوجد
صحيح
>>> annots.get ('not.here، 42)
42
ملاحظة، أن الكائن IAnnotations يحصل المخزنة في الأداة المساعدة فقط عندما وضعنا مفتاح لذلك. هذا هو الأمثل بسيط يسمح لنا عدم تخزين أية بيانات عند كل ما نفعله هو مجرد التحقق من وجود presense من الشرح. إن أسلوب hasAnnotations العودة الحقيقية بعد تخزين مفتاح في الشروح:
>>> util.hasAnnotations (nadako)
زائف
>>> annots ['its.here'] = 'بعض المعلومات "
>>> util.hasAnnotations (nadako)
صحيح
يمكننا أيضا حذف مفتاح القائمة:
>>> ديل annots ['its.here']
ولكن لا يمكننا حذف المفتاح الذي هو (لا أكثر) existant:
>>> ديل annots ['its.here']
Traceback (معظم المكالمات الأخيرة الأخيرة):
...
KeyError: "its.here"
المرافق الشرح متعددة
تخيل أن التطبيق الخاص بك لديه كائن موقع الجذر مع التسجيل مكون من (ويعرف أيضا باسم مدير الموقع)، وأنه كائن يحتوي على كائن الموقع الفرعي مع التسجيل المكون الخاص بها، وذلك السجل مكون له التسجيل المكون الجذر مقرا لها.
في هذه الحالة، نحن نريد الاعتراض على IAnnotations لتكون متاحة لاسترداد الشروح من المرافق ذات المستوى العالي.
دعونا تسجيل أداة لدينا في الموقع الجذر وإنشاء موقع فرعي مع IPrincipalAnnotationUtility الخاصة بها:
>>> الجذر ['UTIL'] = UTIL
>>> rootsm = root.getSiteManager ()
>>> rootsm.registerUtility (UTIL، IPrincipalAnnotationUtility)
>>> من مجلد استيراد zope.site.folder
>>> من zope.site.site LocalSiteManager استيراد
>>> فرعي = مجلد ()
>>> الجذر ['فرعي'] = فرعي
>>> subsm = LocalSiteManager (فرعي)
>>> subsm .__ bases__ = (rootsm،)
>>> subsite.setSiteManager (subsm)
>>> util2 = PrincipalAnnotationUtility ()
>>> فرعي ['util2'] = util2
>>> subsm.registerUtility (util2، IPrincipalAnnotationUtility)
الآن، دعونا إنشاء مفتاح في IAnnotations، التي تقدمها المرافق الجذر:
>>> annots = util.getAnnotations (nadako)
>>> annots ['root.number'] = 42
الأداة المساعدة فرعي يجب الحصول على الشرح بنجاح:
>>> annots2 = util2.getAnnotations (nadako)
>>> منطقي (annots2)
صحيح
>>> annots2 ['root.number']
42
اذا كان لدينا مفتاح في كل من الشروح على مستوى أعلى ومنها المستوى الأدنى، فإن المستوى الأدنى لها الأولوية، ولكن لن يتم حذف على مستوى أعلى أو طغت:
>>> annots ['another.number'] = 1
>>> annots2 ['another.number'] = 42
>>> annots ['another.number']
1
>>> annots2 ['another.number']
42
إذا كنا سوف حذف المفتاح من المستوى الأدنى، لن يتم حذفه من أداة مستوى أعلى:
>>> ديل annots2 ['another.number']
>>> annots ['another.number']
1
>>> annots2 ['another.number']
1
IPrincipal -> محول IAnnotations
بطبيعة الحال، فإن أهم ميزة جميلة هي أننا يمكن ببساطة تكيف الكائن الرئيسي جهدنا لIAnnotations والحصول على تلك الشروح باستخدام طريقة قياسية موثقة في حزمة zope.annotation.
على & nbsp؛ >>> annots = IAnnotations (nadako)
على & nbsp؛ >>> annots
على & nbsp؛
على & nbsp؛ >>> annots ['root.number']
على & nbsp؛ 42
افتراضيا، محول IAnnotation يستخدم فائدة الموقع الحالي:
>>> IAnnotations (nadako) هو util.getAnnotations (nadako)
صحيح
>>> من zope.site.hooks setSite استيراد
>>> setSite (فرعي)
>>> IAnnotations (nadako) هو util2.getAnnotations (nadako)
صحيح
Howerver، يمكننا استخدام ثنائي متعدد محول لIAnnotations لتحديد بعض وجوه السياق يمكن من خلالها الحصول على فائدة الشروح:
>>> من zope.component getMultiAdapter استيراد
>>> annots = getMultiAdapter ((nadako، الجذر)، IAnnotations)
>>> annots هي util.getAnnotations (nadako)
صحيح
>>> annots = getMultiAdapter ((nadako، فرعي)، IAnnotations)
>>> annots هي util2.getAnnotations (nadako)
صحيح

ما هو الجديد في هذا الإصدار:

المصنفات الكنز الدفين تصحيح.

ما هو الجديد في الإصدار 3.6.1:

إصلاح فشل اختبار في متداخلة المحلي إعداد إدارة الموقع.
الاعتماد على إزالة zope.container.

المتطلبات:

بيثون

البرامج الأخرى من المطور Zope Corporation and Contributors

zope.generations
zope.generations

15 Apr 15

zope.index
zope.index

14 Apr 15

Products.ZNagios
Products.ZNagios

11 May 15

m01.mongofake
m01.mongofake

14 Apr 15

تعليقات ل zope.principalannotation

لم يتم العثور على التعليقات
إضافة تعليق
بدوره على الصور!