Исходный код wellbehaved.utils

#coding: utf-8
u'''
Вспомогательный класс подсистемы плагинов.
'''


[документация]class StackedHookDictWrapper(dict): u''' Унаследованный от *dict* класс, "прозрачно" перехватываюиbщий установку обработчиков шагов тестирования в environment.py. Каждый перехваченный обработчик добавляется в стэк, связанный с этим конкретным этапом тестирования и при каждом . ''' def __init__(self, *args, **kwargs): self.hook_registry = {} super(StackedHookDictWrapper, self).__init__(*args, **kwargs) def __setitem__(self, hook, handler): u''' Перехватчик установки обработчиков из environment.py. :param hook: Идентификатор обработчика (см. документацию behave). :param handler: Функция, обрабатывающая определенный шаг тестирования. ''' def wrapper(*args, **kwargs): u''' Оберточная функция, которая вызывает по очереди каждый из установленных извне обработчиков того или иного шага тестирования. :param args: Позиционные аргументы обработчика. :param kwargs: Словарь с непозиционными аргументами. ''' fnlist = self.hook_registry[hook] for func in fnlist: func(*args, **kwargs) # Беспорядочный метод заполнения окружения behave'ом заставляет # нас явно фильтровать список устанавливаемых значений. if hook in ['before_all', 'after_all', 'before_step', 'after_step', 'before_feature', 'after_feature', 'before_tag', 'after_tag', 'before_scenario', 'after_scenario']: if not hook in self.hook_registry: super(StackedHookDictWrapper, self).__setitem__(hook, wrapper) self.hook_registry.setdefault(hook, []).append(handler) else: super(StackedHookDictWrapper, self).__setitem__(hook, handler)