Warning

This document is for an old release of Galaxy. You can alternatively view this page in the latest release if it exists or view the top of the latest release's documentation.

Source code for galaxy.tools.parameters.input_translation

"""
Tool Input Translation.
"""
import logging

from galaxy.util.bunch import Bunch

log = logging.getLogger(__name__)


[docs]class ToolInputTranslator(object): """ Handles Tool input translation. This is used for data source tools >>> from galaxy.util import Params >>> from xml.etree.ElementTree import XML >>> translator = ToolInputTranslator.from_element( XML( ... ''' ... <request_param_translation> ... <request_param galaxy_name="URL_method" remote_name="URL_method" missing="post" /> ... <request_param galaxy_name="URL" remote_name="URL" missing="" > ... <append_param separator="&amp;" first_separator="?" join="="> ... <value name="_export" missing="1" /> ... <value name="GALAXY_URL" missing="0" /> ... </append_param> ... </request_param> ... <request_param galaxy_name="dbkey" remote_name="db" missing="?" /> ... <request_param galaxy_name="organism" remote_name="org" missing="unknown species" /> ... <request_param galaxy_name="table" remote_name="hgta_table" missing="unknown table" /> ... <request_param galaxy_name="description" remote_name="hgta_regionType" missing="no description" /> ... <request_param galaxy_name="data_type" remote_name="hgta_outputType" missing="tabular" > ... <value_translation> ... <value galaxy_value="tabular" remote_value="primaryTable" /> ... <value galaxy_value="tabular" remote_value="selectedFields" /> ... <value galaxy_value="wig" remote_value="wigData" /> ... <value galaxy_value="interval" remote_value="tab" /> ... <value galaxy_value="html" remote_value="hyperlinks" /> ... <value galaxy_value="fasta" remote_value="sequence" /> ... </value_translation> ... </request_param> ... </request_param_translation> ... ''' ) ) >>> params = Params( { 'db':'hg17', 'URL':'URL_value', 'org':'Human', 'hgta_outputType':'primaryTable' } ) >>> translator.translate( params ) >>> print sorted(list(params.__dict__.keys())) ['URL', 'URL_method', 'data_type', 'db', 'dbkey', 'description', 'hgta_outputType', 'org', 'organism', 'table'] >>> params.get('URL', None) in ['URL_value?GALAXY_URL=0&_export=1', 'URL_value?_export=1&GALAXY_URL=0'] True """
[docs] @classmethod def from_element(cls, elem): """Loads the proper filter by the type attribute of elem""" rval = ToolInputTranslator() for req_param in elem.findall("request_param"): # req_param tags must look like <request_param galaxy_name="dbkey" remote_name="GENOME" missing="" /> # trans_list = [] remote_name = req_param.get("remote_name") galaxy_name = req_param.get("galaxy_name") missing = req_param.get("missing") value_trans = {} append_param = None value_trans_elem = req_param.find('value_translation') if value_trans_elem is not None: for value_elem in value_trans_elem.findall('value'): remote_value = value_elem.get("remote_value") galaxy_value = value_elem.get("galaxy_value") if None not in [remote_value, galaxy_value]: value_trans[remote_value] = galaxy_value append_param_elem = req_param.find("append_param") if append_param_elem is not None: separator = append_param_elem.get('separator', ',') first_separator = append_param_elem.get('first_separator', None) join_str = append_param_elem.get('join', '=') append_dict = {} for value_elem in append_param_elem.findall('value'): value_name = value_elem.get('name') value_missing = value_elem.get('missing') if None not in [value_name, value_missing]: append_dict[value_name] = value_missing append_param = Bunch(separator=separator, first_separator=first_separator, join_str=join_str, append_dict=append_dict) rval.param_trans_dict[remote_name] = Bunch(galaxy_name=galaxy_name, missing=missing, value_trans=value_trans, append_param=append_param) return rval
[docs] def __init__(self): self.param_trans_dict = {}
[docs] def translate(self, params): """ update params in-place """ for remote_name, translator in self.param_trans_dict.items(): galaxy_name = translator.galaxy_name # NB: if a param by name galaxy_name is provided, it is always thrown away unless galaxy_name == remote_name value = params.get(remote_name, translator.missing) # get value from input params, or use default value specified in tool config if translator.value_trans and value in translator.value_trans: value = translator.value_trans[value] if translator.append_param: for param_name, missing_value in translator.append_param.append_dict.items(): param_value = params.get(param_name, missing_value) if translator.append_param.first_separator and translator.append_param.first_separator not in value: sep = translator.append_param.first_separator else: sep = translator.append_param.separator value += '%s%s%s%s' % (sep, param_name, translator.append_param.join_str, param_value) params.update({galaxy_name: value})