本文整理匯總了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()