Mercurial > repos > earlhaminst > ensembl_get_sequences
view get_genetree.py @ 7:c79ce2342f1e draft default tip
planemo upload for repository https://github.com/TGAC/earlham-galaxytools/tree/master/tools/Ensembl-REST commit 8f8808de862973aedbf87abd4dfa9d2dc7219322
author | earlhaminst |
---|---|
date | Mon, 17 Feb 2025 14:49:24 +0000 |
parents | 7af66c2b3831 |
children |
line wrap: on
line source
# A simple tool to connect to the Ensembl server and retrieve genetree using # the Ensembl REST API. import optparse from urllib.parse import urljoin import requests parser = optparse.OptionParser() parser.add_option( "--id_type", type="choice", default="gene_id", choices=["gene_id", "gene_tree_id"], help="Input type", ) parser.add_option("--species", help="Species name/alias") parser.add_option("-i", "--input", help="Ensembl ID") parser.add_option( "--format", type="choice", choices=["json", "orthoxml", "phyloxml", "nh"], default="json", help="Output format", ) parser.add_option( "-s", "--sequence", type="choice", choices=["protein", "cdna", "none"], default="protein", help="The type of sequence to bring back. Setting it to none results in no sequence being returned", ) parser.add_option( "-a", "--aligned", type="choice", choices=["0", "1"], default="0", help="Return the aligned string if true. Otherwise, return the original sequence (no insertions)", ) parser.add_option( "-c", "--cigar_line", type="choice", choices=["0", "1"], default="0", help="Return the aligned sequence encoded in CIGAR format", ) parser.add_option( "--nh_format", type="choice", choices=[ "full", "display_label_composite", "simple", "species", "species_short_name", "ncbi_taxon", "ncbi_name", "njtree", "phylip", ], default="simple", help="The format of a NH (New Hampshire) request", ) options, args = parser.parse_args() if options.input is None: raise Exception("-i option must be specified") server = "https://rest.ensembl.org" if options.id_type == "gene_id": ext = f"genetree/member/id/{options.species}/{options.input}" elif options.id_type == "gene_tree_id": ext = f"genetree/id/{options.input}" if options.format == "json": content_type = "application/json" elif options.format == "orthoxml": content_type = "text/x-orthoxml+xml" elif options.format == "phyloxml": content_type = "text/x-phyloxml+xml" elif options.format == "nh": content_type = "text/x-nh" headers = {"Content-Type": content_type} params = { k: getattr(options, k) for k in ("sequence", "aligned", "cigar_line", "nh_format") } r = requests.get(urljoin(server, ext), params=params, headers=headers) if not r.ok: r.raise_for_status() print(r.text)