def rewrite_unstructured_paths(input_values, input): if isinstance(input, SelectToolParameter): input_values[input.name] = SelectToolParameterWrapper( input, input_values[input.name], other_values=param_dict, compute_environment=self.compute_environment)
def test_select_wrapper_with_path_rewritting(tool): parameter = _setup_blast_tool(tool, multiple=True) wrapper = SelectToolParameterWrapper( parameter, ["val1", "val2"], other_values={}, path_rewriter=lambda v: "Rewrite<%s>" % v) assert wrapper.fields.path == "Rewrite<path1>,Rewrite<path2>"
def wrap_values(self, inputs, input_values, skip_missing_values=False): trans = self.trans tool = self.tool incoming = self.incoming # Wrap tool inputs as necessary for input in inputs.itervalues(): if input.name not in input_values and skip_missing_values: continue value = input_values[input.name] if isinstance(input, Repeat): for d in input_values[input.name]: self.wrap_values(input.inputs, d, skip_missing_values=skip_missing_values) elif isinstance(input, Conditional): values = input_values[input.name] current = values["__current_case__"] self.wrap_values(input.cases[current].inputs, values, skip_missing_values=skip_missing_values) elif isinstance(input, Section): values = input_values[input.name] self.wrap_values(input.inputs, values, skip_missing_values=skip_missing_values) elif isinstance(input, DataToolParameter) and input.multiple: value = input_values[input.name] dataset_instances = DatasetListWrapper.to_dataset_instances( value) input_values[ input.name ] = \ DatasetListWrapper( None, dataset_instances, datatypes_registry=trans.app.datatypes_registry, tool=tool, name=input.name ) elif isinstance(input, DataToolParameter): input_values[ input.name ] = \ DatasetFilenameWrapper( input_values[ input.name ], datatypes_registry=trans.app.datatypes_registry, tool=tool, name=input.name ) elif isinstance(input, SelectToolParameter): input_values[input.name] = SelectToolParameterWrapper( input, input_values[input.name], tool.app, other_values=incoming) elif isinstance(input, DataCollectionToolParameter): input_values[input.name] = DatasetCollectionWrapper( None, input_values[input.name], datatypes_registry=trans.app.datatypes_registry, tool=tool, name=input.name, ) else: input_values[input.name] = InputValueWrapper( input, value, incoming)
def test_select_wrapper_multiple_options(tool): xml = XML('''<param name="blah" type="select" multiple="true"> <option value="x">I am X</option> <option value="y" selected="true">I am Y</option> <option value="z">I am Z</option> </param>''') parameter = SelectToolParameter(tool, xml) wrapper = SelectToolParameterWrapper(parameter, ["x"]) assert wrapper.name == "blah" assert str(wrapper) == "x" assert "x" in wrapper wrapper = SelectToolParameterWrapper(parameter, ["x", "z"]) assert str(wrapper) == "x,z" assert "x" in wrapper wrapper = SelectToolParameterWrapper(parameter, []) assert str(wrapper) == "None" assert "x" not in wrapper
def rewrite_unstructured_paths(input_values, input): if isinstance(input, SelectToolParameter): input_values[input.name] = SelectToolParameterWrapper( input, input_values[input.name], self.app, other_values=param_dict, path_rewriter=self.unstructured_path_rewriter)
def test_select_wrapper_with_path_rewritting(tool): parameter = _setup_blast_tool(tool, multiple=True) compute_environment = MockComputeEnvironment(None) wrapper = SelectToolParameterWrapper( parameter, ["val1", "val2"], other_values={}, compute_environment=compute_environment) assert wrapper.fields.path == "Rewrite<path1>,Rewrite<path2>"
def wrap_values(self, inputs, input_values, skip_missing_values=False): trans = self.trans tool = self.tool incoming = self.incoming element_identifier_mapper = ElementIdentifierMapper(self._input_datasets) # Wrap tool inputs as necessary for input in inputs.values(): if input.name not in input_values and skip_missing_values: continue value = input_values[input.name] copy_identifiers(destination=value, source=input_values) if isinstance(input, Repeat): for d in value: copy_identifiers(destination=d, source=value) self.wrap_values(input.inputs, d, skip_missing_values=skip_missing_values) elif isinstance(input, Conditional): values = value current = values["__current_case__"] self.wrap_values(input.cases[current].inputs, values, skip_missing_values=skip_missing_values) elif isinstance(input, Section): values = value self.wrap_values(input.inputs, values, skip_missing_values=skip_missing_values) elif isinstance(input, DataToolParameter) and input.multiple: dataset_instances = DatasetListWrapper.to_dataset_instances(value) input_values[input.name] = \ DatasetListWrapper(None, dataset_instances, datatypes_registry=trans.app.datatypes_registry, tool=tool, name=input.name, formats=input.formats) elif isinstance(input, DataToolParameter): wrapper_kwds = dict( datatypes_registry=trans.app.datatypes_registry, tool=tool, name=input.name, formats=input.formats ) element_identifier = element_identifier_mapper.identifier(value, input_values) if element_identifier: wrapper_kwds["identifier"] = element_identifier input_values[input.name] = DatasetFilenameWrapper(value, **wrapper_kwds) elif isinstance(input, SelectToolParameter): input_values[input.name] = SelectToolParameterWrapper(input, value, other_values=incoming) elif isinstance(input, DataCollectionToolParameter): input_values[input.name] = DatasetCollectionWrapper( None, value, datatypes_registry=trans.app.datatypes_registry, tool=tool, name=input.name, ) else: input_values[input.name] = InputValueWrapper(input, value, incoming)
def selectwrapper(tool, value, multiple=False, optional=False): optional = 'optional="true"' if optional else '' multiple = 'multiple="true"' if multiple else '' xml = XML('''<param name="blah" type="select" %s %s> <option value="x">I am X</option> <option value="y" selected="true">I am Y</option> <option value="z">I am Z</option> </param>''' % (multiple, optional)) parameter = SelectToolParameter(tool, xml) return SelectToolParameterWrapper(parameter, value)
def test_select_wrapper_simple_options(tool): xml = XML('''<param name="blah" type="select"> <option value="x">I am X</option> <option value="y" selected="true">I am Y</option> <option value="z">I am Z</option> </param>''') parameter = SelectToolParameter(tool, xml) wrapper = SelectToolParameterWrapper(parameter, "x", tool.app) assert str(wrapper) == "x" assert wrapper.name == "blah" assert wrapper.value_label == "I am X"
def wrap_input(input_values, input): value = input_values[input.name] if isinstance(input, DataToolParameter) and input.multiple: dataset_instances = DatasetListWrapper.to_dataset_instances(value) input_values[input.name] = \ DatasetListWrapper(job_working_directory, dataset_instances, compute_environment=self.compute_environment, datatypes_registry=self.app.datatypes_registry, tool=self.tool, name=input.name, formats=input.formats) elif isinstance(input, DataToolParameter): dataset = input_values[input.name] wrapper_kwds = dict( datatypes_registry=self.app.datatypes_registry, tool=self, name=input.name, compute_environment=self.compute_environment ) element_identifier = element_identifier_mapper.identifier(dataset, param_dict) if element_identifier: wrapper_kwds["identifier"] = element_identifier input_values[input.name] = \ DatasetFilenameWrapper(dataset, **wrapper_kwds) elif isinstance(input, DataCollectionToolParameter): dataset_collection = value wrapper_kwds = dict( datatypes_registry=self.app.datatypes_registry, compute_environment=self.compute_environment, tool=self, name=input.name ) wrapper = DatasetCollectionWrapper( job_working_directory, dataset_collection, **wrapper_kwds ) input_values[input.name] = wrapper elif isinstance(input, SelectToolParameter): if input.multiple: value = listify(value) input_values[input.name] = SelectToolParameterWrapper( input, value, other_values=param_dict, compute_environment=self.compute_environment) else: input_values[input.name] = InputValueWrapper( input, value, param_dict)
def test_select_wrapper_multiple(tool): parameter = _setup_blast_tool(tool, multiple=True) wrapper = SelectToolParameterWrapper(parameter, ["val1", "val2"]) assert str(wrapper) == "val1,val2" assert wrapper.fields.name == "name1,name2"
def test_select_wrapper_option_file(tool): parameter = _setup_blast_tool(tool) wrapper = SelectToolParameterWrapper(parameter, "val2") assert str(wrapper) == "val2" assert wrapper.fields.name == "name2" assert wrapper.fields.path == "path2"
def test_select_wrapper_with_drilldown(tool): parameter = _drilldown_parameter(tool) wrapper = SelectToolParameterWrapper(parameter, ["option3"]) assert str(wrapper) == "option3", str(wrapper)
def wrap_input(input_values, input): value = input_values[input.name] if isinstance(input, DataToolParameter) and input.multiple: dataset_instances = DatasetListWrapper.to_dataset_instances(value) input_values[input.name] = \ DatasetListWrapper(job_working_directory, dataset_instances, compute_environment=self.compute_environment, datatypes_registry=self.app.datatypes_registry, tool=self.tool, name=input.name, formats=input.formats) elif isinstance(input, DataToolParameter): # FIXME: We're populating param_dict with conversions when # wrapping values, this should happen as a separate # step before wrapping (or call this wrapping step # something more generic) (but iterating this same # list twice would be wasteful) # Add explicit conversions by name to current parent for conversion_name, conversion_extensions, conversion_datatypes in input.conversions: # If we are at building cmdline step, then converters # have already executed direct_match, conv_ext, converted_dataset = input_values[input.name].find_conversion_destination(conversion_datatypes) # When dealing with optional inputs, we'll provide a # valid extension to be used for None converted dataset if not direct_match and not conv_ext: conv_ext = conversion_extensions[0] # input_values[ input.name ] is None when optional # dataset, 'conversion' of optional dataset should # create wrapper around NoneDataset for converter output if input_values[input.name] and not converted_dataset: # Input that converter is based from has a value, # but converted dataset does not exist raise Exception('A path for explicit datatype conversion has not been found: %s --/--> %s' % (input_values[input.name].extension, conversion_extensions)) else: # Trick wrapper into using target conv ext (when # None) without actually being a tool parameter input_values[conversion_name] = \ DatasetFilenameWrapper(converted_dataset, datatypes_registry=self.app.datatypes_registry, tool=Bunch(conversion_name=Bunch(extensions=conv_ext)), name=conversion_name) # Wrap actual input dataset dataset = input_values[input.name] wrapper_kwds = dict( datatypes_registry=self.app.datatypes_registry, tool=self, name=input.name, compute_environment=self.compute_environment ) element_identifier = element_identifier_mapper.identifier(dataset, param_dict) if element_identifier: wrapper_kwds["identifier"] = element_identifier input_values[input.name] = \ DatasetFilenameWrapper(dataset, **wrapper_kwds) elif isinstance(input, DataCollectionToolParameter): dataset_collection = value wrapper_kwds = dict( datatypes_registry=self.app.datatypes_registry, compute_environment=self.compute_environment, tool=self, name=input.name ) wrapper = DatasetCollectionWrapper( job_working_directory, dataset_collection, **wrapper_kwds ) input_values[input.name] = wrapper elif isinstance(input, SelectToolParameter): if input.multiple: value = listify(value) input_values[input.name] = SelectToolParameterWrapper( input, value, other_values=param_dict, compute_environment=self.compute_environment) else: input_values[input.name] = InputValueWrapper( input, value, param_dict)
def wrap_input(input_values, input): if isinstance(input, DataToolParameter) and input.multiple: dataset_instances = input_values[input.name] if isinstance(dataset_instances, model.HistoryDatasetCollectionAssociation): dataset_instances = dataset_instances.collection.dataset_instances[:] input_values[ input.name ] = \ DatasetListWrapper( dataset_instances, dataset_paths=input_dataset_paths, datatypes_registry=self.app.datatypes_registry, tool=self.tool, name=input.name ) elif isinstance(input, DataToolParameter): ## FIXME: We're populating param_dict with conversions when ## wrapping values, this should happen as a separate ## step before wrapping (or call this wrapping step ## something more generic) (but iterating this same ## list twice would be wasteful) # Add explicit conversions by name to current parent for conversion_name, conversion_extensions, conversion_datatypes in input.conversions: # If we are at building cmdline step, then converters # have already executed conv_ext, converted_dataset = input_values[ input.name].find_conversion_destination( conversion_datatypes) # When dealing with optional inputs, we'll provide a # valid extension to be used for None converted dataset if not conv_ext: conv_ext = conversion_extensions[0] # input_values[ input.name ] is None when optional # dataset, 'conversion' of optional dataset should # create wrapper around NoneDataset for converter output if input_values[input.name] and not converted_dataset: # Input that converter is based from has a value, # but converted dataset does not exist raise Exception( 'A path for explicit datatype conversion has not been found: %s --/--> %s' % (input_values[input.name].extension, conversion_extensions)) else: # Trick wrapper into using target conv ext (when # None) without actually being a tool parameter input_values[ conversion_name ] = \ DatasetFilenameWrapper( converted_dataset, datatypes_registry=self.app.datatypes_registry, tool=Bunch( conversion_name=Bunch( extensions=conv_ext ) ), name=conversion_name ) # Wrap actual input dataset dataset = input_values[input.name] wrapper_kwds = dict( datatypes_registry=self.app.datatypes_registry, tool=self, name=input.name) if dataset: #A None dataset does not have a filename real_path = dataset.file_name if real_path in input_dataset_paths: wrapper_kwds["dataset_path"] = input_dataset_paths[ real_path] input_values[ input.name ] = \ DatasetFilenameWrapper( dataset, **wrapper_kwds ) elif isinstance(input, DataCollectionToolParameter): dataset_collection = input_values[input.name] wrapper_kwds = dict( datatypes_registry=self.app.datatypes_registry, dataset_paths=input_dataset_paths, tool=self, name=input.name) wrapper = DatasetCollectionWrapper(dataset_collection, **wrapper_kwds) input_values[input.name] = wrapper elif isinstance(input, SelectToolParameter): input_values[input.name] = SelectToolParameterWrapper( input, input_values[input.name], self.app, other_values=param_dict, path_rewriter=self.unstructured_path_rewriter) elif isinstance(input, LibraryDatasetToolParameter): # TODO: Handle input rewrites in here? How to test LibraryDatasetToolParameters? input_values[input.name] = LibraryDatasetValueWrapper( input, input_values[input.name], param_dict) else: input_values[input.name] = InputValueWrapper( input, input_values[input.name], param_dict)