Esempio n. 1
0
            def func(args):
                self._set_paths()
                parameters = functions.parse_parameters(
                    loader=self,
                    parameters=copy.deepcopy(command.get('parameters', {})),
                    args=vars(args))
                task_config = {
                    'retries': 0,
                    'retry_interval': 1,
                    'thread_pool_size': 1
                }
                global_task_config = self.config.task
                command_task_config = command.get('task', {})
                task_config.update(global_task_config)
                task_config.update(command_task_config)
                env = self.env

                event_cls = command.get('event_cls', self.config.event_cls)
                output.setup_output(event_cls=event_cls,
                                    verbose=args.verbose,
                                    env=env,
                                    command=command)

                return env.execute(
                    workflow=command['workflow'],
                    parameters=parameters,
                    task_retries=task_config['retries'],
                    task_retry_interval=task_config['retry_interval'],
                    task_thread_pool_size=task_config['thread_pool_size'])
Esempio n. 2
0
 def user_config_path(self):
     result = self.config['user_config_path']
     if isinstance(result, dict):
         result = functions.parse_parameters(parameters={'holder': result},
                                             loader=None,
                                             args=None)['holder']
     return path(result).expanduser()
Esempio n. 3
0
            def func(args):
                self._set_paths()
                parameters = functions.parse_parameters(
                    loader=self,
                    parameters=copy.deepcopy(command.get('parameters', {})),
                    args=vars(args))
                task_config = {
                    'retries': 0,
                    'retry_interval': 1,
                    'thread_pool_size': 1
                }
                global_task_config = self.config.task
                command_task_config = command.get('task', {})
                task_config.update(global_task_config)
                task_config.update(command_task_config)
                env = self.env

                event_cls = command.get('event_cls',
                                        self.config.event_cls)
                output.setup_output(event_cls=event_cls,
                                    verbose=args.verbose,
                                    env=env,
                                    command=command)

                return env.execute(
                    workflow=command['workflow'],
                    parameters=parameters,
                    task_retries=task_config['retries'],
                    task_retry_interval=task_config['retry_interval'],
                    task_thread_pool_size=task_config['thread_pool_size'])
Esempio n. 4
0
        def func(args):
            bin_dir = path(sys.executable).dirname()
            current_path_env = os.environ.get('PATH', '')
            if bin_dir not in current_path_env:
                os.environ['PATH'] = '{}{}{}'.format(bin_dir,
                                                     os.pathsep,
                                                     current_path_env)
            self._set_python_path()
            parameters = functions.parse_parameters(
                loader=self,
                parameters=copy.deepcopy(command.get('parameters', {})),
                args=vars(args))
            task_config = {
                'retries': 0,
                'retry_interval': 1,
                'thread_pool_size': 1
            }
            global_task_config = self.config.task
            command_task_config = command.get('task', {})
            task_config.update(global_task_config)
            task_config.update(command_task_config)
            env = self._load_env()

            event_cls = command.get('event_cls',
                                    self.config.event_cls)
            output.setup_output(event_cls=event_cls,
                                verbose=args.verbose,
                                env=env,
                                command=command)

            env.execute(workflow=command['workflow'],
                        parameters=parameters,
                        task_retries=task_config['retries'],
                        task_retry_interval=task_config['retry_interval'],
                        task_thread_pool_size=task_config['thread_pool_size'])
Esempio n. 5
0
 def user_config_path(self):
     result = self.config['user_config_path']
     if isinstance(result, dict):
         result = functions.parse_parameters(
             parameters={'holder': result},
             loader=None,
             args=None)['holder']
     return path(result).expanduser()
Esempio n. 6
0
 def test_parse_parameters(self):
     full_config_path = resources.DIR / 'configs' / 'plain.yaml'
     loader = _loader.Loader(config_path=full_config_path)
     args = {'arg1': 'arg1_value'}
     custom_func_name = '{}:{}'.format(__name__, custom_func.__name__)
     with patch.dict(os.environ, {'MY_ENV_VAR': 'MY_ENV_VAR_VALUE'}):
         parsed_params = functions.parse_parameters(loader, {
             'arg_based_param': {'arg': 'arg1'},
             'env_based_param1': {'env': 'MY_ENV_VAR'},
             'env_based_param2': {'env': ['MY_ENV_VAR', 'not in use']},
             'env_based_param3': {'env': ['NON_EXISTENT_ENV', 'fallback']},
             'loader_based_param': {'loader': 'config'},
             'user_config_based_param': {'user_config': 'inputs'},
             'concat_based_param': {'concat': ['a', 'b', 'c']},
             'func_based_param1': {'func': {
                 'name': custom_func_name
             }},
             'func_based_param2': {'func': {
                 'name': custom_func_name,
                 'kwargs': {
                     'kwarg': 'kwarg_value'
                 }
             }},
             'func_based_param3': {'func': {
                 'name': custom_func_name,
                 'kwargs': {
                     'kwarg': {'arg': 'arg1'}
                 }
             }}
         }, args=args)
     self.assertEqual(parsed_params, {
         'arg_based_param': 'arg1_value',
         'env_based_param1': 'MY_ENV_VAR_VALUE',
         'env_based_param2': 'MY_ENV_VAR_VALUE',
         'env_based_param3': 'fallback',
         'loader_based_param': loader.config,
         'user_config_based_param': {},
         'concat_based_param': 'abc',
         'func_based_param1': {
             'loader': loader.config,
             'kwarg': 'None'
         },
         'func_based_param2': {
             'loader': loader.config,
             'kwarg': 'kwarg_value'
         },
         'func_based_param3': {
             'loader': loader.config,
             'kwarg': 'arg1_value'
         }
     })
Esempio n. 7
0
 def func(args):
     self._set_paths()
     args = vars(args)
     for user_command in macro['commands']:
         user_command_name = user_command['name']
         user_command_args = functions.parse_parameters(
             loader=self,
             parameters=user_command.get('args', []),
             args=args)
         print '==> {0}: {1}'.format(user_command_name,
                                     user_command_args)
         user_command_func = self.user_commands[user_command_name]
         argh.dispatch_command(user_command_func,
                               argv=user_command_args)
Esempio n. 8
0
 def func(args):
     self._set_paths()
     args = vars(args)
     for user_command in macro['commands']:
         user_command_name = user_command['name']
         user_command_args = functions.parse_parameters(
             loader=self,
             parameters=user_command.get('args', []),
             args=args)
         print '==> {0}: {1}'.format(user_command_name,
                                     user_command_args)
         user_command_func = self.user_commands[user_command_name]
         argh.dispatch_command(user_command_func,
                               argv=user_command_args)
Esempio n. 9
0
    def _create_inputs(self, args, env_create_inputs):
        inputs = {}

        with open(self.config.blueprint_path) as f:
            blueprint = yaml.safe_load(f) or {}
        blueprint_inputs = blueprint.get('inputs', {})
        blueprint_inputs_defaults = {
            key: value.get('default', '_')
            for key, value in blueprint_inputs.items()}

        env_create_inputs = functions.parse_parameters(
            loader=self,
            parameters=env_create_inputs,
            args=vars(args))

        inputs.update(blueprint_inputs_defaults)
        inputs.update(env_create_inputs)

        self.user_config.inputs = inputs

        inputs_lines = self.user_config.inputs_path.lines()
        new_input_lines = []

        first_line = True

        blueprint_description = blueprint.get('description', '').strip()
        if blueprint_description:
            blueprint_description = blueprint_description.replace('\n',
                                                                  '\n# ')
            new_input_lines.append('# {}\n'.format(blueprint_description))
            new_input_lines.append('\n')
            first_line = False

        for line in inputs_lines:
            possible_key = line.split(':')[0]
            if possible_key in inputs:
                if not first_line:
                    new_input_lines.append('\n')
                key = possible_key
                description = blueprint_inputs.get(key, {}).get(
                    'description', '').strip()
                if description:
                    description = description.replace('\n', '\n# ')
                    new_input_lines.append('# {}'.format(description))
            new_input_lines.append(line)
            first_line = False

        self.user_config.inputs_path.write_lines(new_input_lines)
Esempio n. 10
0
    def _create_inputs(self, args, env_create_inputs):
        inputs = {}

        with open(self.config.blueprint_path) as f:
            blueprint = yaml.safe_load(f) or {}
        blueprint_inputs = blueprint.get('inputs', {})
        blueprint_inputs_defaults = {
            key: value.get('default', '_')
            for key, value in blueprint_inputs.items()}

        env_create_inputs = functions.parse_parameters(
            loader=self,
            parameters=env_create_inputs,
            args=vars(args))

        inputs.update(blueprint_inputs_defaults)
        inputs.update(env_create_inputs)

        self.user_config.inputs = inputs

        inputs_lines = self.user_config.inputs_path.lines()
        new_input_lines = []

        first_line = True

        blueprint_description = blueprint.get('description', '').strip()
        if blueprint_description:
            blueprint_description = blueprint_description.replace('\n',
                                                                  '\n# ')
            new_input_lines.append('# {}\n'.format(blueprint_description))
            new_input_lines.append('\n')
            first_line = False

        for line in inputs_lines:
            possible_key = line.split(':')[0]
            if possible_key in inputs:
                if not first_line:
                    new_input_lines.append('\n')
                key = possible_key
                description = blueprint_inputs.get(key, {}).get(
                    'description', '').strip()
                if description:
                    description = description.replace('\n', '\n# ')
                    new_input_lines.append('# {}'.format(description))
            new_input_lines.append(line)
            first_line = False

        self.user_config.inputs_path.write_lines(new_input_lines)