def _apply_wildcards(newitems, olditems, wildcards, wildcards_obj, concretize=apply_wildcards, ruleio=None): for name, item in olditems.allitems(): start = len(newitems) if callable(item): item = item(wildcards_obj) if not_iterable(item): item = [item] for item_ in item: if not isinstance(item_, str): raise RuleException( "Input function did not return str or list of str.", rule=self) concrete = concretize(item_, wildcards) newitems.append(concrete) if ruleio is not None: ruleio[concrete] = item_ else: if not_iterable(item): item = [item] for item_ in item: concrete = concretize(item_, wildcards) newitems.append(concrete) if ruleio is not None: ruleio[concrete] = item_ if name: newitems.set_name(name, start, end=len(newitems))
def _apply_wildcards( newitems, olditems, wildcards, wildcards_obj, concretize = apply_wildcards, ruleio = None): for name, item in olditems.allitems(): start = len(newitems) if callable(item): item = item(wildcards_obj) if not_iterable(item): item = [item] for item_ in item: if not isinstance(item_, str): raise RuleException("Input function did not return str or list of str.", rule=self) concrete = concretize(item_, wildcards) newitems.append(concrete) if ruleio is not None: ruleio[concrete] = item_ else: if not_iterable(item): item = [item] for item_ in item: concrete = concretize(item_, wildcards) newitems.append(concrete) if ruleio is not None: ruleio[concrete] = item_ if name: newitems.set_name(name, start, end=len(newitems))
def target(self, paths): if not_iterable(paths): path = paths path = path if os.path.isabs(path) else os.path.join( self.workdir, path) return flag(path, "subworkflow", self) return [self.target(path) for path in paths]
def _apply_wildcards(self, newitems, olditems, wildcards, concretize=apply_wildcards, check_return_type=True, mapping=None, no_flattening=False, aux_params=None): if aux_params is None: aux_params = dict() for name, item in olditems.allitems(): start = len(newitems) is_iterable = True if callable(item): item = self.apply_input_function(item, wildcards, **aux_params) if not_iterable(item) or no_flattening: item = [item] is_iterable = False for item_ in item: if check_return_type and not isinstance(item_, str): raise WorkflowError("Function did not return str or list " "of str.", rule=self) concrete = concretize(item_, wildcards) newitems.append(concrete) if mapping is not None: mapping[concrete] = item_ if name: newitems.set_name( name, start, end=len(newitems) if is_iterable else None)
def _apply_wildcards(newitems, olditems, wildcards, wildcards_obj, concretize=apply_wildcards, check_return_type=check_string_type, ruleio=None, no_flattening=False): for name, item in olditems.allitems(): start = len(newitems) is_iterable = True if callable(item): try: item = item(wildcards_obj) except (Exception, BaseException) as e: raise InputFunctionException(e, rule=self, wildcards=wildcards) if not_iterable(item) or no_flattening: item = [item] is_iterable = False for item_ in item: check_return_type(item_) concrete = concretize(item_, wildcards) newitems.append(concrete) if ruleio is not None: ruleio[concrete] = item_ if name: newitems.set_name( name, start, end=len(newitems) if is_iterable else None)
def format_cli_pos_arg(value, quote=True): if isinstance(value, dict): return join_cli_args(repr(f"{key}={val}") for key, val in value.items()) elif not_iterable(value): return repr(value) else: return join_cli_args(repr(v) for v in value)
def _apply_wildcards( self, newitems, olditems, wildcards, concretize=None, check_return_type=True, omit_callable=False, mapping=None, no_flattening=False, aux_params=None, apply_path_modifier=True, property=None, incomplete_checkpoint_func=lambda e: None, allow_unpack=True, ): if aux_params is None: aux_params = dict() for name, item in olditems._allitems(): start = len(newitems) is_unpack = is_flagged(item, "unpack") _is_callable = is_callable(item) if _is_callable: if omit_callable: continue item, incomplete = self.apply_input_function( item, wildcards, incomplete_checkpoint_func=incomplete_checkpoint_func, is_unpack=is_unpack, **aux_params) if apply_path_modifier: item = self.apply_path_modifier(item, property=property) if is_unpack and not incomplete: if not allow_unpack: raise WorkflowError( "unpack() is not allowed with params. " "Simply return a dictionary which can be directly ." "used, e.g. via {params[mykey]}.") # Sanity checks before interpreting unpack() if not isinstance(item, (list, dict)): raise WorkflowError( "Can only use unpack() on list and dict", rule=self) if name: raise WorkflowError( "Cannot combine named input file with unpack()", rule=self) # Allow streamlined code with/without unpack if isinstance(item, list): pairs = zip([None] * len(item), item) else: assert isinstance(item, dict) pairs = item.items() else: pairs = [(name, item)] for name, item in pairs: is_iterable = True if not_iterable(item) or no_flattening: item = [item] is_iterable = False for item_ in item: if (check_return_type and not isinstance(item_, str) and not isinstance(item_, Path)): raise WorkflowError( "Function did not return str or list " "of str.", rule=self) concrete = concretize(item_, wildcards, _is_callable) newitems.append(concrete) if mapping is not None: mapping[concrete] = item_ if name: newitems._set_name( name, start, end=len(newitems) if is_iterable else None) start = len(newitems)
def target(self, paths): if not_iterable(paths): return flag(os.path.join(self.workdir, paths), "subworkflow", self) return [self.target(path) for path in paths]
def _apply_wildcards(self, newitems, olditems, wildcards, concretize=apply_wildcards, check_return_type=True, omit_callable=False, mapping=None, no_flattening=False, aux_params=None, apply_default_remote=True): if aux_params is None: aux_params = dict() for name, item in olditems.allitems(): start = len(newitems) is_iterable = True is_unpack = is_flagged(item, "unpack") if is_callable(item): if omit_callable: continue item = self.apply_input_function(item, wildcards, **aux_params) if apply_default_remote: item = self.apply_default_remote(item) if is_unpack: # Sanity checks before interpreting unpack() if not isinstance(item, (list, dict)): raise WorkflowError( "Can only use unpack() on list and dict", rule=self) if name: raise WorkflowError( "Cannot combine named input file with unpack()", rule=self) # Allow streamlined code with/without unpack if isinstance(item, list): pairs = zip([None] * len(item), item) else: assert isinstance(item, dict) pairs = item.items() else: pairs = [(name, item)] for name, item in pairs: if not_iterable(item) or no_flattening: item = [item] is_iterable = False for item_ in item: if check_return_type and not isinstance(item_, str): raise WorkflowError( "Function did not return str or list " "of str.", rule=self) concrete = concretize(item_, wildcards) newitems.append(concrete) if mapping is not None: mapping[concrete] = item_ if name: newitems.set_name( name, start, end=len(newitems) if is_iterable else None) start = len(newitems)