Есть ли какой-либо простой способ в системе компонентов 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
на что-то более конкретное заставляет его возвращать пустой кортеж.
С результатами должна быть возможность поиска атрибутов класса представления.