当前位置: 首页>>代码示例>>Python>>正文


Python Runner.hooks[hook]方法代码示例

本文整理汇总了Python中behave.runner.Runner.hooks[hook]方法的典型用法代码示例。如果您正苦于以下问题:Python Runner.hooks[hook]方法的具体用法?Python Runner.hooks[hook]怎么用?Python Runner.hooks[hook]使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在behave.runner.Runner的用法示例。


在下文中一共展示了Runner.hooks[hook]方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。

示例1: start

# 需要导入模块: from behave.runner import Runner [as 别名]
# 或者: from behave.runner.Runner import hooks[hook] [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()
开发者ID:barsgroup,项目名称:wellbehaved,代码行数:76,代码来源:main.py


注:本文中的behave.runner.Runner.hooks[hook]方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。