本文整理汇总了Python中behave.runner.Runner.hooks方法的典型用法代码示例。如果您正苦于以下问题:Python Runner.hooks方法的具体用法?Python Runner.hooks怎么用?Python Runner.hooks使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类behave.runner.Runner
的用法示例。
在下文中一共展示了Runner.hooks方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: start
# 需要导入模块: from behave.runner import Runner [as 别名]
# 或者: from behave.runner.Runner import hooks [as 别名]
def start():
u'''
Точка входа в приложение, которая активируется при запуске его
из командной строки.
'''
setup_logging()
config = {}
try:
arg_delim_index = sys.argv.index('--')
behave_args = sys.argv[arg_delim_index+1:]
sys.argv = sys.argv[:arg_delim_index]
except ValueError:
behave_args = []
opt_parser = OptionParser()
opt_parser.add_option('', '--var-file', dest='var_file',
help='Load template variables from .py file.',
metavar='<FILE>')
opt_parser.add_option('', '--cfg-file', dest='cfg_file',
help='Load configuration from YAML file.',
metavar='<FILE>')
(options, _) = opt_parser.parse_args()
if options.cfg_file:
cfg_fn = options.cfg_file
try:
with open(cfg_fn, 'r') as fp:
config = yaml.load(fp.read()) or {}
except Exception as ex:
logger.error('Can\'t load {0}: {1}'.format(cfg_fn, unicode(ex)))
else:
logger.info('Loaded configuration from {0}.'.format(cfg_fn))
if options.var_file:
template_vars = load_vars_from_pyfile(options.var_file)
# Есть смысл включать режим шаблонизации только при наличии переменных,
# ради которых все и затевалось
if template_vars:
template_vars.pop('__builtins__', {})
sys.meta_path = [TemplateImportHooker(template_vars)]
# Изменяем sys.argv для обхода поведения behave<=1.2.3, который
# всегда пытается получить опции из командной строки.
# TODO: с выходом стабильной 1.2.4 поменять на передачу command_args
sys.argv = [sys.argv[0], ] + behave_args
behave_cfg = Configuration()
if not behave_cfg.format:
behave_cfg.format = ['pretty', ]
from behave.runner import Runner
runner = Runner(behave_cfg)
if 'enabled_plugins' in config:
runner.hooks = StackedHookDictWrapper()
# Ищем все доступные плагины...
plugins = find_plugins()
plugin_configs = config.get('plugins', {})
for p_id in config['enabled_plugins']:
# TODO: убрать, если будет возможность подключать свои плагины
assert p_id in plugins, 'Unknown plugin: {}!'.format(p_id)
plugin = plugins[p_id]
# Подключаем ещё один набор функций окружения. С точки зрения
# behave'а, это будет одна функция, которая в свою очередь
# по порядку будет вызывать обработчики _каждого_ плагина.
logger.info('Loading plugin "{}"...'.format(p_id))
custom_hooks = plugin.prepare_environment(plugin_configs.get(p_id, {}))
logger.debug('Plugin "{}" sets hooks: {}'.format(p_id, ', '.join(custom_hooks.keys())))
for hook, handler in custom_hooks.items():
runner.hooks[hook] = handler
runner.run()