Как зарегистрировать слой браузера программно

Я знаю, что слой браузера можно зарегистрировать с помощью GenericSetup и одного XML-файла, но мне нужно сделать это программно.

Это возможно?


person rodfersou    schedule 21.05.2015    source источник
comment
Не могли бы вы поподробнее рассказать о своем варианте использования? Вам это нужно для теста?   -  person tisto    schedule 21.05.2015
comment
да, это для пробы   -  person hvelarde    schedule 21.05.2015
comment
да, мне это нужно для теста, мне нужно программно зарегистрировать слой браузера перед тестом и выполнить шаг обновления, чтобы отменить его регистрацию   -  person rodfersou    schedule 21.05.2015


Ответы (1)


Ну вот:

>>> from plone.browserlayer.tests.interfaces import IMyProductLayer
>>> from plone.browserlayer import utils
>>> IMyProductLayer in utils.registered_layers()
False

>>> utils.register_layer(IMyProductLayer, name='my.product')
>>> IMyProductLayer in utils.registered_layers()
True

Скопировано с https://github.com/plone/plone.browserlayer/blob/master/plone/browserlayer/README.rst

Если вы просто хотите, чтобы уровень браузера присутствовал в тестовом запросе, вы можете использовать ZCA и напрямую предоставить интерфейс уровня браузера для тестового запроса:

from zope.interface import directlyProvides
from my.product.interfaces import IMyProductBrowserLayer
directlyProvides(self.request, IMyProductBrowserLayer)
person tisto    schedule 21.05.2015
comment
Спасибо, мне понадобится первая часть вашего ответа. Единственная часть, которую я думаю, у меня будут проблемы, это то, что интерфейс был удален в моей ветке, поэтому я попытаюсь смоделировать его в тестовом сценарии. - person rodfersou; 21.05.2015