Есть ли простой способ в системе компонентов zope перечислить все виды (и их имена), которые были зарегистрированы для определенного интерфейса (например, IMyInterface):
<browser:page
name="content-item-plain"
for=".interfaces.IMyInterface"
class=".content_item.MyView"
permission="zope2.View"
layer="my.model.browser.interfaces.IMyModelLayer"
template="templates/content_item_plain.pt"
/>
class MyView(BrowserView):
implements(ISomeInterface)
Или, еще лучше, те, которые реализуют определенный интерфейс (ISomeInterface)?
Результатом должен быть список/кортеж классов (MyView, MyView1,...) и/или имен ("content-item-plain",...).
Нет проблем добавить classImplements/classProvides в класс MyView, если это поможет.
До сих пор много чего перепробовал. Ближайшее это:
from zope.component import getGlobalSiteManager
gsm = getGlobalSiteManager()
gsm.adapters.lookupAll((IMyInterface, IMyModelLayer), provided=Interface))
но это дает слишком много результатов, и изменение provided
на что-то более конкретное приводит к тому, что он возвращает пустой кортеж.
С результатами должна быть возможность поиска атрибутов класса представления.