Как узнать название разрешения Zope, зная его идентификатор (и наоборот)?

В Zope и Plone вы можете зарегистрировать разрешения следующим образом:

<permission
   id="choosen.id.for.your.permission"
   title="Old Zope 2 permission, shown in ZMI"
   />

Как получить заголовок разрешения от Python, если вы знаете идентификатор разрешения?

Я имею в виду что-то вроде:

>>> something_magic.get('choosen.id.for.your.permission')
'Old Zope 2 permission, shown in ZMI'

person keul    schedule 28.02.2015    source источник


Ответы (1)


Разрешения регистрируются как zope.security.interfaces.IPermission утилиты по их id; таким образом, вы можете искать их по идентификаторам с помощью zope.component.getUtility()< /а>:

from zope.component import getUtility
from zope.security.interfaces import IPermission

permission = getUtility(IPermission, name=u'choosen.id.for.your.permission')
print permission.title

Чтобы пойти другим путем, от title к id, нужно перерыть все утилиты:

from zope.component import getUtilitiesFor
from zope.security.interfaces import IPermission

searched_title = u'Old Zope 2 permission, shown in ZMI'
name = next((name for name, p in getUtilitiesFor(IPermission)
             if p.title == searched_title), None)
person Martijn Pieters    schedule 28.02.2015
comment
По какой-то причине он не работал у меня, но, вероятно, я использовал неправильный идентификатор. Спасибо! Итак, как быстрее получить идентификатор из заголовка? - person keul; 28.02.2015
comment
Я не думаю, что есть один; вам нужно будет перечислить все утилиты и выполнить поиск: next((name for name, p in getUtilitiesFor(IPermission) if p.title == searched_title), None) вернет имя или None, если такого разрешения нет. - person Martijn Pieters; 28.02.2015