Warning
This document is for an in-development version 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.
"""
from __future__ import print_function
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="&" 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(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 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})