def func(func_args): kwargs = func_args.get('kwargs', {}) for value in kwargs.values(): if dsl_functions.parse(value) != value: return _RAW kwargs['loader'] = loader function = module.load_attribute(func_args['name']) return function(**kwargs)
def func(args): self._set_paths() function = module.load_attribute(command['function']) kwargs = vars(args) kwargs.pop('_functions_stack', None) state.current_loader.set(self) try: return function(**kwargs) finally: state.current_loader.clear()
def _add_args_to_func(self, func, args, skip_env): for arg in reversed(args): name = arg.pop('name') completer = arg.pop('completer', None) if completer: completer = module.load_attribute(completer) completer = Completer(None if skip_env else self._load_env, completer) arg['completer'] = completer name = name if isinstance(name, list) else [name] argh.arg(*name, **arg)(func)
def setup_output(event_cls, verbose, env, command): if event_cls is None: event_cls = Event else: event_cls = module.load_attribute(event_cls) if hasattr(event_cls, "factory"): event_cls = event_cls.factory(env=env, verbose=verbose, command=command) logs.EVENT_CLASS = event_cls if not verbose: def stub(*_): pass logs.stdout_event_out = stub
def func(args): if (self.user_config.current == args.name and self.user_config.storage_dir and not args.reset): raise argh.CommandError('storage dir already configured. pass ' '--reset to override.') storage_dir = args.storage_dir or os.getcwd() self.user_config.current = args.name self.user_config.editable = args.editable self.user_config.storage_dir = storage_dir self.user_config.storage_dir.mkdir_p() self._create_inputs(args, env_create.get('inputs', {})) self.user_config.macros_path.touch() after_env_create_func = self.config.hooks.after_env_create if after_env_create_func: after_env_create = module.load_attribute(after_env_create_func) after_env_create(self, **vars(args))
def setup_output(event_cls, verbose, env, command): if event_cls is None: event_cls = Event else: event_cls = module.load_attribute(event_cls) if hasattr(event_cls, 'factory'): event_cls = event_cls.factory(env=env, verbose=verbose, command=command) logs.EVENT_CLASS = event_cls if not verbose: def stub(*_): pass logs.stdout_event_out = stub
def _init_command(self, reset=False): local_dir = self.user_config.storage_dir / self._name if local_dir.exists(): if reset: shutil.rmtree(local_dir) else: raise argh.CommandError('Already initialized, pass --reset ' 'to re-initialize.') inputs = self.user_config.inputs temp_dir = path(tempfile.mkdtemp( prefix='{}-blueprint-dir-'.format(self.config.name))) blueprint_dir = temp_dir / 'blueprint' try: shutil.copytree(self.config.blueprint_dir, blueprint_dir) sys.path.append(blueprint_dir) blueprint_path = (blueprint_dir / self.config.blueprint_path.basename()) before_init_func = self.config.hooks.before_init if before_init_func: blueprint = yaml.safe_load(blueprint_path.text()) before_init = module.load_attribute(before_init_func) before_init(blueprint=blueprint, inputs=inputs, loader=self) blueprint_path.write_text(yaml.safe_dump(blueprint)) local.init_env(blueprint_path=blueprint_path, inputs=inputs, name=self._name, storage=self._storage(), ignored_modules=self.config.ignored_modules) finally: shutil.rmtree(temp_dir, ignore_errors=True) if self.user_config.editable: resources_path = (self.user_config.storage_dir / self._name / 'resources') shutil.rmtree(resources_path, ignore_errors=True) os.symlink(self.config.blueprint_dir, resources_path)
def test_load_attribute(self): attribute_path = '{}:TEST_ATTRIBUTE'.format(__name__) attribute = module.load_attribute(attribute_path) self.assertIs(TEST_ATTRIBUTE, attribute)