getMultiAdapter завершается с ошибкой ComponentLookupError
У меня есть код, который ищет интерфейс с get multi адаптер. Один из элементов элемента, который передается в мультиадаптер, предоставляет этот интерфейс, но не сам элемент.
У меня нет контроля над тем, что передается на мультиадаптер, но у меня есть контроль над элементом, который содержит один из элементов в нем. Как мне это пометить? уведомить мультиадаптер, что в нем есть что-то полезное, есть ли что-то вроде provideAdapterFactory (cls, interface)?
Пример кода:
декларации
class ImplementsInterface(object):
implements(IMarker)
class Parent(object)
child = ImplementsInterface()
уважать
some_members = zope.component.getMultiAdapter(((Parent()), IMarker)
Теперь, если я выполню код, подобный этому, он выдаст ComponentLookupError, в то же время я не могу изменить код поиска или для мультиадаптера, или в этом отношении я не могу назначить 'Implements (IMarker) для Parent, потому что parent уже реализует другой интерфейс и сломает много других вещей.
Обновить:
Я думаю, что нашел объяснение, которое я могу понять из главы 6.1 Multi Adapter
Обновление 2: я думаю, что я не правильно инициализирую zca в своем коде модульного тестирования, вот фрагмент
import unittest2 as unittest
from zope.traversing.adapters import DefaultTraversable
from z3c.form.testing import TestRequest
from z3c.form import testing, field
from zope import component
class TestFunctionalForm(unittest.TestCase):
def setUp(self):
testing.setUp(self)
component.provideAdapter(field.FieldWidgets)
component.provideAdapter(DefaultTraversable, [None])
self.context = self.globs['root']
def tearDown(self):
testing.tearDown(self)