zope.principalannotation

Скріншот програми:
zope.principalannotation
Дані програми:
Версія: 4.0.0 Alpha 2
Дата завантаження: 14 Apr 15
Ліцензія: Безкоштовно
Популярність: 0

Rating: 5.0/5 (Total Votes: 1)

zope.principalannotation є модуль Python, який реалізує анотації для zope.security принципів і NBSP ;. Для того, щоб зробити його ясним, головний тут об'єкт, який забезпечує zope.security.interfaces.IPrincipal інтерфейс і анотацій об'єкт, що дає лящ. annotation.interfaces.IAnnotations.
Проблема в тому, що принципи є динамічні, непостійні об'єкти, створені на льоту для всіх участю безпеки (запит або щось), так прийоми загального анотації, як AttributeAnnotations не можуть бути застосовані до них.
Цей пакет забезпечує постійну зберігання основних анотації, зберігання анотації від головного ID, а також перехідник з IPrincipal до IAnnotations.
PrincipalAnnotationUtility
Ядро цього пакету класу PrincipalAnnotationUtility, який зберігає анотації для директорів і дозволяє отримати їх легко.
Вона забезпечує інтерфейс IPrincipalAnnotationUtility:
>>> Від zope.principalannotation.interfaces імпортувати IPrincipalAnnotationUtility
>>> Від zope.principalannotation.utility PrincipalAnnotationUtility імпорту
>>> Від zope.interface.verify імпорту verifyObject
>>> Корисне = PrincipalAnnotationUtility ()
>>> VerifyObject (IPrincipalAnnotationUtility, Корисне)
Вірно
Вона передбачає три методи: getAnnotations, getAnnotationsById і hasAnnotations. Давайте створимо тестову основного боргу та перевірити ці методи:
>>> Від zope.security.testing імпорту Замовник
>>> Nadako = Основний ('nadako')
>>> Nadako.id
"Nadako"
Ми можемо перевірити, якщо наш керівник має яких-небудь написів. Звичайно, в даний час не має ніяких:
>>> Util.hasAnnotations (nadako)
Помилковий
Ми можемо отримати IAnnotations об'єкта, використовуючи саму головним об'єктом:
>>> Util.getAnnotations (nadako)

Або за допомогою основної ID:
>>> Util.getAnnotationsById (nadako.id)

Давайте отримати IAnnotations об'єкт для нашого основного і грати з ним:
>>> Annots = util.getAnnotations (nadako)
>>> Від zope.interface.verify імпорту verifyObject
>>> Від імпортних zope.annotation.interfaces IAnnotations
>>> VerifyObject (IAnnotations, annots)
Вірно
Давайте перевіримо контракт IAnnotation:
>>> BOOL (annots)
Помилковий
>>> Annots ['not.here']
Traceback (останній виклик останнього):
...
KeyError: «not.here"
>>> Annots.get ('not.here ") є ні що
Вірно
>>> Annots.get ("not.here ', 42)
42
Зверніть увагу, що об'єкт IAnnotations отримує зберігається в утиліті тільки тоді, коли ми встановлюємо ключ для нього. Це просто оптимізація, що дозволяє не зберігати будь-які дані, коли все, що ми робимо, просто перевірка для присутність яких анотації. Метод hasAnnotations повернеться Правда після збереження ключа в анотації:
>>> Util.hasAnnotations (nadako)
Помилковий
>>> Annots ['its.here'] = 'деяку інформацію "
>>> Util.hasAnnotations (nadako)
Вірно
Ми також можемо видалити існуючий ключ:
>>> Дель annots ['its.here']
Але ми не можемо видалити ключ, який (не більше) проіснувало:
>>> Дель annots ['its.here']
Traceback (останній виклик останнього):
...
KeyError: «its.here"
Комунальні послуги Кілька приміток
Уявіть собі, що ваш додаток має сайт кореневої об'єкт з його складовою реєстрі (ака менеджер сайтів) і що об'єкт має суб-сайт об'єкту з його власною реєстрі компонентів, і що реєстр компонент має компонент реєстру кореня в якості своєї бази.
У цьому випадку, ми хочемо, щоб IAnnotations об'єкт, який буде доступний для отримання анотації з утиліт більш високого рівня.
Давайте зареєструвати нашу утиліту в кореневому сайті і створити суб-сайтів з власної IPrincipalAnnotationUtility:
>>> Корінь ['Корисне'] = Корисне
>>> 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)
>>> BOOL (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)
True

Що нового У цьому випуску :.

  • Виправлені Trove класифікатори

Що нового у версії 3.6.1:

  • Виправлена ​​Невдалий тест у вкладених локальної налаштування менеджера сайт .
  • Вилучено залежність від zope.container.

Вимоги

  • Python

Інші програми розробника Zope Corporation and Contributors

zope.schema
zope.schema

14 Apr 15

Products.ZNagios
Products.ZNagios

11 May 15

zope.principalannotation

Коментар не знайдено
додати коментар
Включіть картинки!