zope.principalannotation

Скриншот программы:
zope.principalannotation
Детали программы:
Версия: 4.0.0 Alpha 2
Дата загрузки: 14 Apr 15
Разработчик: Zope Corporation and Contributors
Тип распространения: Бесплатная
Популярность: 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:
>>> От импорта IPrincipalAnnotationUtility zope.principalannotation.interfaces
>>> От импорта zope.principalannotation.utility PrincipalAnnotationUtility
>>> От импорта verifyObject zope.interface.verify
>>> 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)
>>> От импорта verifyObject zope.interface.verify
>>> От импортных 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 сохраняется в утилите только тогда, когда мы установили ключ для него. Это простой оптимизации, позволяет не хранить любые данные, когда все мы просто проверка для presense аннотации. Метод hasAnnotations вернется Правда после сохранения ключа в аннотации:
>>> Util.hasAnnotations (nadako)
Ложь
>>> Annots ['its.here'] = '' некоторую информацию
>>> Util.hasAnnotations (nadako)
Правда
Мы также можем удалить существующий ключ:
>>> Дель annots ['its.here']
Но мы не можем удалить ключ, который (не более) вообще отсутствуют:
>>> Дель annots ['its.here']
Traceback (самый последний вызов последнего):
...
KeyError: «its.here"
коммунальные Несколько аннотаций
Представьте себе, что ваше приложение имеет сайт корневой объект с его компонент реестра (ака менеджер сайта), и что объект имеет суб-сайт объекта с собственным реестром компонента, и что реестр компонент имеет компонент реестра корневой в качестве своей базы.
В этом случае, мы хотим, чтобы IAnnotations объект будет доступен для извлечения из аннотации коммунальные услуги более высокого уровня.
Давайте зарегистрировать нашу утилиту в корневом сайте и создать суб-сайт с собственным IPrincipalAnnotationUtility:
>>> Корень ['Util'] = Util
>>> Rootsm = root.getSiteManager ()
>>> Rootsm.registerUtility (Util, IPrincipalAnnotationUtility)
>>> От импорта папки zope.site.folder
>>> От импорта LocalSiteManager zope.site.site
>>> Дочернего = Папка ()
>>> Корень ['дочерний'] = дочернего
>>> 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)
Правда
>>> От импорта SetSite zope.site.hooks
>>> SetSite (дочерний)
>>> IAnnotations (nadako) является util2.getAnnotations (nadako)
Правда
Howerver, мы можем использовать бинарный мульти-адаптер для IAnnotations указать какой-нибудь объект контекста, из которого, чтобы получить утилиты аннотации:
>>> От импорта getMultiAdapter zope.component
>>> Annots = getMultiAdapter ((nadako, корень), IAnnotations)
>>> Annots является util.getAnnotations (nadako)
Правда
>>> Annots = getMultiAdapter ((nadako, дочерний), IAnnotations)
>>> Annots является util2.getAnnotations (nadako)
Правда

Что нового В этом выпуске:.

  • Исправлены Trove классификаторы

Что нового в версии 3.6.1:

  • Исправлена ​​Неудачный тест в вложенной локальной настройки менеджера сайт .
  • Удалено зависимость от zope.container.

Требования

  • Python

Другие программы разработчика Zope Corporation and Contributors

zope.error
zope.error

14 Apr 15

zope.dublincore
zope.dublincore

12 May 15

zope.index
zope.index

14 Apr 15

Комментарии к zope.principalannotation

Комментарии не найдены
добавить комментарий
Включите картинки!