Repository 'uniprot_rest_interface'
hg clone https://toolshed.g2.bx.psu.edu/repos/bgruening/uniprot_rest_interface

Changeset 9:468c71dac78a (2024-05-22)
Previous changeset 8:af5eccf83605 (2022-11-21) Next changeset 10:95fb5712344f (2024-08-06)
Commit message:
planemo upload for repository https://github.com/bgruening/galaxytools/tree/master/tools/uniprot_rest_interface commit da476148d1c609f5c26e880a3e593f0fa71ff2f6
modified:
test-data/test2_map.tab
uniprot.py
uniprot.xml
removed:
macros.xml
b
diff -r af5eccf83605 -r 468c71dac78a macros.xml
--- a/macros.xml Mon Nov 21 22:02:41 2022 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
b'@@ -1,226 +0,0 @@\n-<macros>\n-<token name="@EXECUTABLE@">1.0</token>\n-    <macro name="macro-category_FROM">\n-            <param name="category_FROM" type="select" label="Choose your database category (FROM):"\n-                help="Select a databse from which your ids are coming from">\n-                <option value="uniprot">UniProt</option>\n-                <option value="oseqdb">Other sequence databases</option>\n-                <option value="3Dstrdb">3D structure databases</option>\n-                <option value="ppidb">Protein-protein interaction databases</option>\n-                <option value="chemistry">Chemistry</option>\n-                <option value="protfgdb">Protein family/group databases</option>\n-                <option value="polymorphismANDmutation">Polymorphism and mutation databases</option>\n-                <option value="2DgelDB">2D gel databases</option>\n-                <option value="ProtocolsMaterialsDB">Protocols and materials databases</option>\n-                <option value="GenomeAnnotationDB">Genome annotation databases</option>\n-                <option value="OrganismSpecificGeneDB">Organism-specific gene databases</option>\n-                <option value="phylogenomic">Phylogenomic databases</option>\n-                <option value="EnzymePathwayDB">Enzyme and pathway databases</option>\n-                <option value="GeneExpression">Gene expression databases</option>\n-                <option value="other">Other</option>\n-            </param>\n-        </macro>\n-        <macro name="macro-category_TO">\n-            <param name="category_TO" type="select" label="Choose your database category (TO):"\n-                help="Select a database which will be used for mapping">\n-                <option value="uniprot">UniProt</option>\n-                <option value="oseqdb">Other sequence databases</option>\n-                <option value="3Dstrdb">3D structure databases</option>\n-                <option value="ppidb">Protein-protein interaction databases</option>\n-                <option value="chemistry">Chemistry</option>\n-                <option value="protfgdb">Protein family/group databases</option>\n-                <option value="polymorphismANDmutation">Polymorphism and mutation databases</option>\n-                <option value="2DgelDB">2D gel databases</option>\n-                <option value="ProtocolsMaterialsDB">Protocols and materials databases</option>\n-                <option value="GenomeAnnotationDB">Genome annotation databases</option>\n-                <option value="OrganismSpecificGeneDB">Organism-specific gene databases</option>\n-                <option value="phylogenomic">Phylogenomic databases</option>\n-                <option value="EnzymePathwayDB">Enzyme and pathway databases</option>\n-                <option value="GeneExpression">Gene expression databases</option>\n-                <option value="other">Other</option>\n-            </param>\n-        </macro>\n-        <macro name="macro-db_uniprot_FROM">\n-            <param name="db_uniprot_FROM" type="select" label="Choose a database:"\n-                                help="">\n-                                <option value="ACC+ID">UniProtKB AC/ID</option>\n-                                <option value="ACC">UniProtKB AC</option>\n-                                <option value="ID">UniProtKB ID</option>\n-                                <option value="UPARC">UniParc</option>\n-                                <option value="NF50">UniRef50</option>\n-                                <option value="NF90">UniRef90</option>\n-                                <option value="NF100">UniRef100</option>\n-                                <option value="GENENAME">Gene name</option>\n-            </param>\n-        </macro>\n-        <macro name="macro-db_uniprot_TO">\n-            <param name="db_uniprot_TO" type="select" label="Choose a database:"\n-                                help="">\n-                                <option value="ACC">UniProtKB'..b'rganismSpecificGeneDB" type="select" label="Choose a database:"\n-                help="">\n-                <option value="ARACHNOSERVER_ID">ArachnoServer</option>\n-                <option value="CGD">CGD</option>\n-                <option value="CONOSERVER_ID">ConoServer</option>\n-                <option value="DICTYBASE_ID">dictyBase</option>\n-                <option value="ECHOBASE_ID">EchoBASE</option>\n-                <option value="ECOGENE_ID">EcoGene</option>\n-                <option value="EUHCVDB_ID">euHCVdb</option>\n-                <option value="EUPATHDB_ID">EuPathDB</option>\n-                <option value="FLYBASE_ID">FlyBase</option>\n-                <option value="GENECARDS_ID">GeneCards</option>\n-                <option value="GENEFARM_ID">GeneFarm</option>\n-                <option value="GENOLIST_ID">GenoList</option>\n-                <option value="H_INVDB_ID">H-InvDB</option>\n-                <option value="HGNC_ID">HGNC</option>\n-                <option value="HPA_ID">HPA</option>\n-                <option value="LEGIOLIST_ID">LegioList</option>\n-                <option value="MAIZEGDB_ID">MaizeGDB</option>\n-                <option value="MIM_ID">MIM</option>\n-                <option value="MGI_ID">MGI</option>\n-                <option value="NEXTPROT_ID">neXtProt</option>\n-                <option value="ORPHANET_ID">Orphanet</option>\n-                <option value="PHARMGKB_ID">PharmGKB</option>\n-                <option value="POMBASE_ID">PomBase</option>\n-                <option value="PSEUDOCAP_ID">PseudoCAP</option>\n-                <option value="RGD_ID">RGD</option>\n-                <option value="SGD_ID">SGD</option>\n-                <option value="TAIR_ID">TAIR</option>\n-                <option value="TUBERCULIST_ID">TubercuList</option>\n-                <option value="WORMBASE_ID">WormBase</option>\n-                <option value="WORMBASE_TRS_ID">WormBase Transcript</option>\n-                <option value="WORMBASE_PRO_ID">WormBase Protein</option>\n-                <option value="XENBASE_ID">Xenbase</option>\n-                <option value="ZFIN_ID">ZFIN</option>\n-            </param>\n-        </macro>\n-        <macro name="macro-db_phylogenomic">\n-            <param name="db_phylogenomic" type="select" label="Choose a database:"\n-                help="">\n-                <option value="EGGNOG_ID">eggNOG</option>\n-                <option value="GENETREE_ID">GeneTree</option>\n-                <option value="HOGENOM_ID">HOGENOM</option>\n-                <option value="HOVERGEN_ID">HOVERGEN</option>\n-                <option value="KO_ID">KO</option>\n-                <option value="OMA_ID">OMA</option>\n-                <option value="ORTHODB_ID">OrthoDB</option>\n-                <option value="PROTCLUSTDB_ID">ProtClustDB</option>\n-                <option value="TREEFAM_ID">TreeFam</option>\n-            </param>\n-        </macro>\n-        <macro name="macro-db_EnzymePathwayDB">\n-            <param name="db_EnzymePathwayDB" type="select" label="Choose a database:"\n-                help="">\n-                <option value="BIOCYC_ID">BioCyc</option>\n-                <option value="REACTOME_ID">Reactome</option>\n-                <option value="UNIPATHWAY_ID">UniPathWay</option>\n-            </param>\n-        </macro>\n-        <macro name="macro-db_GeneExpression">\n-            <param name="db_GeneExpression" type="select" label="Choose a database:"\n-                help="">\n-                <option value="CLEANEX_ID">CleanEx</option>\n-            </param>\n-        </macro>\n-        <macro name="macro-db_other">\n-            <param name="db_other" type="select" label="Choose a database:"\n-                help="">\n-                <option value="CHITARS_ID">ChiTaRS</option>\n-                <option value="GENOMERNAI_ID">GenomeRNAi</option>\n-                <option value="GENEWIKI_ID">GeneWiki</option>\n-                <option value="NEXTBIO_ID">NextBio</option>\n-            </param>\n-        </macro>\n-</macros>\n'
b
diff -r af5eccf83605 -r 468c71dac78a test-data/test2_map.tab
--- a/test-data/test2_map.tab Mon Nov 21 22:02:41 2022 +0000
+++ b/test-data/test2_map.tab Wed May 22 21:18:15 2024 +0000
b
@@ -1,4 +1,4 @@
-From To
-NM_001087 AAMP_HUMAN
-NM_130786 A1BG_HUMAN
-NM_130786 V9HWD8_HUMAN
+From Entry Entry Name Reviewed Protein names Gene Names Organism Length
+NM_001087 Q13685 AAMP_HUMAN reviewed Angio-associated migratory cell protein AAMP Homo sapiens (Human) 434
+NM_130786 P04217 A1BG_HUMAN reviewed Alpha-1B-glycoprotein (Alpha-1-B glycoprotein) A1BG Homo sapiens (Human) 495
+NM_130786 V9HWD8 V9HWD8_HUMAN unreviewed Epididymis secretory sperm binding protein Li 163pA HEL-S-163pA Homo sapiens (Human) 495
b
diff -r af5eccf83605 -r 468c71dac78a uniprot.py
--- a/uniprot.py Mon Nov 21 22:02:41 2022 +0000
+++ b/uniprot.py Wed May 22 21:18:15 2024 +0000
[
b'@@ -1,92 +1,266 @@\n-#!/usr/bin/env python\n-"""\n-uniprot python interface\n-to access the uniprot database\n-\n-Based on work from Jan Rudolph: https://github.com/jdrudolph/uniprot\n-available services:\n-    map\n-    retrieve\n-\n-rewitten using inspiration form: https://findwork.dev/blog/advanced-usage-python-requests-timeouts-retries-hooks/\n-"""\n import argparse\n+import json\n+import re\n import sys\n+import time\n+import zlib\n+from urllib.parse import (\n+    parse_qs,\n+    urlencode,\n+    urlparse,\n+)\n+from xml.etree import ElementTree\n \n import requests\n-from requests.adapters import HTTPAdapter\n-from requests.packages.urllib3.util.retry import Retry\n-\n-\n-DEFAULT_TIMEOUT = 5  # seconds\n-URL = \'https://legacy.uniprot.org/\'\n-\n-retry_strategy = Retry(\n-    total=5,\n-    backoff_factor=2,\n-    status_forcelist=[429, 500, 502, 503, 504],\n-    allowed_methods=["HEAD", "GET", "OPTIONS", "POST"]\n+from requests.adapters import (\n+    HTTPAdapter,\n+    Retry,\n )\n \n \n-class TimeoutHTTPAdapter(HTTPAdapter):\n-    def __init__(self, *args, **kwargs):\n-        self.timeout = DEFAULT_TIMEOUT\n-        if "timeout" in kwargs:\n-            self.timeout = kwargs["timeout"]\n-            del kwargs["timeout"]\n-        super().__init__(*args, **kwargs)\n+POLLING_INTERVAL = 3\n+API_URL = "https://rest.uniprot.org"\n+\n+\n+retries = Retry(total=5, backoff_factor=0.25, status_forcelist=[500, 502, 503, 504])\n+session = requests.Session()\n+session.mount("https://", HTTPAdapter(max_retries=retries))\n+\n+\n+def check_response(response):\n+    try:\n+        response.raise_for_status()\n+    except requests.HTTPError:\n+        print(response.json())\n+        raise\n+\n+\n+def submit_id_mapping(from_db, to_db, ids):\n+    print(f"{from_db} {to_db}")\n+    request = requests.post(\n+        f"{API_URL}/idmapping/run",\n+        data={"from": from_db, "to": to_db, "ids": ",".join(ids)},\n+    )\n+    check_response(request)\n+    return request.json()["jobId"]\n+\n+\n+def get_next_link(headers):\n+    re_next_link = re.compile(r\'<(.+)>; rel="next"\')\n+    if "Link" in headers:\n+        match = re_next_link.match(headers["Link"])\n+        if match:\n+            return match.group(1)\n+\n+\n+def check_id_mapping_results_ready(job_id):\n+    while True:\n+        request = session.get(f"{API_URL}/idmapping/status/{job_id}")\n+        check_response(request)\n+        j = request.json()\n+        if "jobStatus" in j:\n+            if j["jobStatus"] == "RUNNING":\n+                print(f"Retrying in {POLLING_INTERVAL}s")\n+                time.sleep(POLLING_INTERVAL)\n+            else:\n+                raise Exception(j["jobStatus"])\n+        else:\n+            return bool(j["results"] or j["failedIds"])\n+\n+\n+def get_batch(batch_response, file_format, compressed):\n+    batch_url = get_next_link(batch_response.headers)\n+    while batch_url:\n+        batch_response = session.get(batch_url)\n+        batch_response.raise_for_status()\n+        yield decode_results(batch_response, file_format, compressed)\n+        batch_url = get_next_link(batch_response.headers)\n \n-    def send(self, request, **kwargs):\n-        timeout = kwargs.get("timeout")\n-        if timeout is None:\n-            kwargs["timeout"] = self.timeout\n-        return super().send(request, **kwargs)\n+\n+def combine_batches(all_results, batch_results, file_format):\n+    if file_format == "json":\n+        for key in ("results", "failedIds"):\n+            if key in batch_results and batch_results[key]:\n+                all_results[key] += batch_results[key]\n+    elif file_format == "tsv":\n+        return all_results + batch_results[1:]\n+    else:\n+        return all_results + batch_results\n+    return all_results\n+\n+\n+def get_id_mapping_results_link(job_id):\n+    url = f"{API_URL}/idmapping/details/{job_id}"\n+    request = session.get(url)\n+    check_response(request)\n+    return request.json()["redirectURL"]\n+\n+\n+def decode_results(response, file_format, compressed):\n+    if compressed:\n+        decompressed = zlib.decompress(response.content, 16 +'..b'args=\'?\', type=argparse.FileType(\'w\'),\n-                          default=sys.stdout, help=\'output file (default: stdout)\')\n-    retrieve.add_argument(\'-f\', \'--format\', help=\'specify output format\', default=\'txt\')\n+    retrieve = subparsers.add_parser("retrieve")\n+    retrieve.add_argument(\n+        "inp",\n+        metavar="in",\n+        nargs="?",\n+        type=argparse.FileType("r"),\n+        default=sys.stdin,\n+        help="input file (default: stdin)",\n+    )\n+    retrieve.add_argument(\n+        "out",\n+        nargs="?",\n+        type=argparse.FileType("w"),\n+        default=sys.stdout,\n+        help="output file (default: stdout)",\n+    )\n+    retrieve.add_argument("-f", "--format", help="specify output format", default="txt")\n+    mapping = subparsers.add_parser("menu")\n \n     args = parser.parse_args()\n \n+    # code for auto generating the from - to conditional\n+    if args.tool == "menu":\n+        from lxml import etree\n+\n+        request = session.get("https://rest.uniprot.org/configure/idmapping/fields")\n+        check_response(request)\n+        fields = request.json()\n+\n+        tos = dict()\n+        from_cond = etree.Element("conditional", name="from_cond")\n+        from_select = etree.SubElement(\n+            from_cond, "param", name="from", type="select", label="Source database:"\n+        )\n+\n+        rules = dict()\n+        for rule in fields["rules"]:\n+            rules[rule["ruleId"]] = rule["tos"]\n+\n+        for group in fields["groups"]:\n+            group_name = group["groupName"]\n+            group_name = group_name.replace("databases", "DBs")\n+            for item in group["items"]:\n+                if item["to"]:\n+                    tos[item["name"]] = f"{group_name} - {item[\'displayName\']}"\n+\n+        for group in fields["groups"]:\n+            group_name = group["groupName"]\n+            group_name = group_name.replace("databases", "DBs")\n+            for item in group["items"]:\n+                if not item["from"]:\n+                    continue\n+                option = etree.SubElement(from_select, "option", value=item["name"])\n+                option.text = f"{group_name} - {item[\'displayName\']}"\n+                when = etree.SubElement(from_cond, "when", value=item["name"])\n+\n+                to_select = etree.SubElement(\n+                    when, "param", name="to", type="select", label="Target database:"\n+                )\n+                ruleId = item["ruleId"]\n+                for to in rules[ruleId]:\n+                    option = etree.SubElement(to_select, "option", value=to)\n+                    option.text = tos[to]\n+        etree.indent(from_cond, space="    ")\n+        print(etree.tostring(from_cond, pretty_print=True, encoding="unicode"))\n+        sys.exit(0)\n+\n     # get the IDs from the file as sorted list\n     # (sorted is convenient for testing)\n     query = set()\n@@ -94,15 +268,19 @@\n         query.add(line.strip())\n     query = sorted(query)\n \n-    if args.tool == \'map\':\n-        pload = _map(query, args.f, args.t, chunk_size=100)\n-    elif args.tool == \'retrieve\':\n-        pload = _map(query, \'ACC+ID\', \'ACC\', args.format, chunk_size=100)\n+    if args.tool == "map":\n+        job_id = submit_id_mapping(from_db=args.f, to_db=args.t, ids=query)\n+    elif args.tool == "retrieve":\n+        job_id = submit_id_mapping(\n+            from_db="UniProtKB_AC-ID", to_db="UniProtKB", ids=query\n+        )\n \n-    adapter = TimeoutHTTPAdapter(max_retries=retry_strategy)\n-    http = requests.Session()\n-    http.mount("https://", adapter)\n-    for i, p in enumerate(pload):\n-        response = http.post(**p)\n-        args.out.write(response.text)\n-    http.close()\n+    if check_id_mapping_results_ready(job_id):\n+        link = get_id_mapping_results_link(job_id)\n+        link = f"{link}?format={args.format}"\n+        print(link)\n+        results = get_id_mapping_results_search(link)\n+\n+    if not isinstance(results, str):\n+        results = "\\n".join(results)\n+    args.out.write(f"{results}\\n")\n'
b
diff -r af5eccf83605 -r 468c71dac78a uniprot.xml
--- a/uniprot.xml Mon Nov 21 22:02:41 2022 +0000
+++ b/uniprot.xml Wed May 22 21:18:15 2024 +0000
[
b'@@ -1,197 +1,824 @@\n-<tool id="uniprot" name="UniProt" version="0.4">\n+<tool id="uniprot" name="UniProt" version="0.5" profile="23.1">\n     <description>ID mapping and retrieval</description>\n-    <macros>\n-         <import>macros.xml</import>\n-    </macros>\n     <requirements>\n         <requirement type="package" version="2.25.1">requests</requirement>\n     </requirements>\n     <version_command>echo "UniProt ID mapping for Galaxy in version 0.1"</version_command>\n     <command detect_errors="aggressive"><![CDATA[\n-\n         cut -f ${id_column} \'$infile\' > id_file.tabular &&\n \n-        \'$__tool_directory__/uniprot.py\'\n-\n+        python \'$__tool_directory__/uniprot.py\'\n         #if $tool.tool_choice == "retrieve":\n             retrieve -f $tool.format id_file.tabular ./output\n         #elif $tool.tool_choice == "map":\n             map\n-\n-            #if $tool.from.category_FROM == "uniprot"\n-                \'${tool.from.db_uniprot_FROM}\'\n-            #elif $tool.from.category_FROM == "oseqdb"\n-                ${tool.from.db_oseqdb}\n-            #elif $tool.from.category_FROM == "3Dstrdb"\n-                ${tool.from.db_3Dstrdb}\n-            #elif $tool.from.category_FROM == "ppidb"\n-                ${tool.from.db_ppidb}\n-            #elif $tool.from.category_FROM == "chemistry"\n-                ${tool.from.db_chemistry}\n-            #elif $tool.from.category_FROM == "protfgdb"\n-                ${tool.from.db_protfgdb}\n-            #elif $tool.from.category_FROM == "polymorphismANDmutation"\n-                ${tool.from.db_polymorphismANDmutation}\n-            #elif $tool.from.category_FROM == "2DgelDB"\n-                ${tool.from.db_2DgelDB}\n-            #elif $tool.from.category_FROM == "ProtocolsMaterialsDB"\n-                ${tool.from.db_ProtocolsMaterialsDB}\n-            #elif $tool.from.category_FROM == "GenomeAnnotationDB"\n-                ${tool.from.db_GenomeAnnotationDB}\n-            #elif $tool.from.category_FROM == "OrganismSpecificGeneDB"\n-                ${tool.from.db_OrganismSpecificGeneDB}\n-            #elif $tool.from.category_FROM == "phylogenomic"\n-                ${tool.from.db_phylogenomic}\n-            #elif $tool.from.category_FROM == "EnzymePathwayDB"\n-                ${tool.from.db_EnzymePathwayDB}\n-            #elif $tool.from.category_FROM == "GeneExpression"\n-                ${tool.from.db_GeneExpression}\n-            #elif $tool.from.category_FROM == "other"\n-                ${tool.from.db_other}\n-            #end if\n-\n-            #if $tool.to.category_TO == "uniprot"\n-                ${tool.to.db_uniprot_TO}\n-            #elif $tool.to.category_TO == "oseqdb"\n-                ${tool.to.db_oseqdb}\n-            #elif $tool.to.category_TO == "3Dstrdb"\n-                ${tool.to.db_3Dstrdb}\n-            #elif $tool.to.category_TO == "ppidb"\n-                ${tool.to.db_ppidb}\n-            #elif $tool.to.category_TO == "chemistry"\n-                ${tool.to.db_chemistry}\n-            #elif $tool.to.category_TO == "protfgdb"\n-                ${tool.to.db_protfgdb}\n-            #elif $tool.to.category_TO == "polymorphismANDmutation"\n-                ${tool.to.db_polymorphismANDmutation}\n-            #elif $tool.to.category_TO == "2DgelDB"\n-                ${tool.to.db_2DgelDB}\n-            #elif $tool.to.category_TO == "ProtocolsMaterialsDB"\n-                ${tool.to.db_ProtocolsMaterialsDB}\n-            #elif $tool.to.category_TO == "GenomeAnnotationDB"\n-                ${tool.to.db_GenomeAnnotationDB}\n-            #elif $tool.to.category_TO == "OrganismSpecificGeneDB"\n-                ${tool.to.db_OrganismSpecificGeneDB}\n-            #elif $tool.to.category_TO == "phylogenomic"\n-                ${tool.to.db_phylogenomic}\n-            #elif $tool.to.category_TO == "EnzymePathwayDB"\n-                ${tool.to.db_EnzymePathwayDB}\n-            #elif $tool.to.category_TO == "GeneExpression"\n-                ${tool.to.db_GeneExpression}\n-            #elif $tool.to.category_TO == "other"\n-                '..b' label="Target database:">\n+                            <option value="UniProtKB">UniProt - UniProtKB</option>\n+                            <option value="UniProtKB-Swiss-Prot">UniProt - UniProtKB/Swiss-Prot</option>\n+                        </param>\n                     </when>\n                 </conditional>\n             </when>\n@@ -206,58 +833,54 @@\n     </inputs>\n     <outputs>\n             <data name="outfile_retrieve_fasta" format="fasta" from_work_dir="./output"\n-                label="${tool.name} on ${on_string} (retrieve output)">\n+                label="${tool.name} on ${on_string}: fasta">\n                 <filter>tool[\'tool_choice\'] == \'retrieve\'</filter>\n                 <filter>tool[\'format\'] == \'fasta\'</filter>\n             </data>\n             <data name="outfile_retrieve_gff" format="gff" from_work_dir="./output"\n-                label="${tool.name} on ${on_string} (retrieve output)">\n+                label="${tool.name} on ${on_string}: gff">\n                 <filter>tool[\'tool_choice\'] == \'retrieve\'</filter>\n                 <filter>tool[\'format\'] == \'gff\'</filter>\n             </data>\n             <data name="outfile_retrieve_txt" format="txt" from_work_dir="./output"\n-                label="${tool.name} on ${on_string} (retrieve output)">\n+                label="${tool.name} on ${on_string}: txt">\n                \t<filter>tool[\'tool_choice\'] == \'retrieve\'</filter>\n                 <filter>tool[\'format\'] == \'txt\'</filter>\n             </data>\n             <data name="outfile_map" format="tabular" from_work_dir="./output"\n-                label="${tool.name} on ${on_string} (map output)">\n+                label="${tool.name} on ${on_string}: mapping">\n                 <filter>tool[\'tool_choice\'] == \'map\'</filter>\n             </data>\n     </outputs>\n     <tests>\n-        <test>\n+        <test expect_num_outputs="1">\n             <param name="infile" value="id_uniprot.tab" ftype="tabular"/>\n             <param name="id_column" value="c1"/>\n             <param name="format" value="fasta"/>\n             <param name="tool_choice" value="retrieve"/>\n             <output name="outfile_retrieve_fasta" file="test1_retrieve.fasta" ftype="fasta" compare="sim_size" />\n         </test>\n-        <test>\n+        <test expect_num_outputs="1">\n             <param name="infile" value="id_uniprot.tab" ftype="tabular"/>\n             <param name="id_column" value="c1"/>\n             <param name="format" value="gff"/>\n             <param name="tool_choice" value="retrieve"/>\n             <output name="outfile_retrieve_gff" file="test2_retrieve.gff" ftype="gff" compare="sim_size" />\n         </test>\n-        <test>\n+        <test expect_num_outputs="1">\n             <param name="infile" value="id_uniprot.tab" ftype="tabular"/>\n             <param name="id_column" value="c1"/>\n             <param name="tool_choice" value="map"/>\n-            <param name="category_FROM" value="uniprot"/>\n-            <param name="db_uniprot_FROM" value="ID"/>\n-            <param name="category_TO" value="uniprot"/>\n-            <param name="db_uniprot_TO" value="GENENAME"/>\n+            <param name="from" value="UniProtKB_AC-ID"/>\n+            <param name="to" value="Gene_Name"/>\n             <output name="outfile_map" file="test1_map.tab" ftype="tabular"/>\n         </test>\n-        <test>\n+        <test expect_num_outputs="1">\n             <param name="infile" value="id_map_refseq.txt" ftype="tabular"/>\n             <param name="id_column" value="c1"/>\n             <param name="tool_choice" value="map"/>\n-            <param name="category_FROM" value="oseqdb"/>\n-            <param name="db_oseqdb" value="REFSEQ_NT_ID"/>\n-            <param name="category_TO" value="uniprot"/>\n-            <param name="db_uniprot_TO" value="ID"/>\n+            <param name="from" value="RefSeq_Nucleotide"/>\n+            <param name="to" value="UniProtKB"/>\n             <output name="outfile_map" file="test2_map.tab" ftype="tabular"/>\n         </test>\n     </tests>\n'