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)

0 ответов

Другие вопросы по тегам