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'])
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()
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'])
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()
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' } })
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)
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)