Mercurial > repos > earlhaminst > ensembl_get_genetree
comparison get_feature_info.py @ 8:935de83b470b draft
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:15 +0000 |
| parents | 0618e3bd5138 |
| children |
comparison
equal
deleted
inserted
replaced
| 7:515e7181d5e9 | 8:935de83b470b |
|---|---|
| 1 # A simple tool to connect to the Ensembl server and retrieve feature | 1 # A simple tool to connect to the Ensembl server and retrieve feature |
| 2 # information using the Ensembl REST API. | 2 # information using the Ensembl REST API. |
| 3 from __future__ import print_function | |
| 4 | |
| 5 import json | 3 import json |
| 6 import optparse | 4 import optparse |
| 7 from itertools import islice | 5 from itertools import islice |
| 6 from urllib.parse import urljoin | |
| 8 | 7 |
| 9 import requests | 8 import requests |
| 10 from six.moves.urllib.parse import urljoin | |
| 11 | 9 |
| 12 parser = optparse.OptionParser() | 10 parser = optparse.OptionParser() |
| 13 parser.add_option('-i', '--input', help='List of Ensembl IDs') | 11 parser.add_option("-i", "--input", help="List of Ensembl IDs") |
| 14 parser.add_option('-e', '--expand', type='choice', choices=['0', '1'], | 12 parser.add_option( |
| 15 default='0', | 13 "-e", |
| 16 help='Expands the search to include any connected features. e.g. If the object is a gene, its transcripts, translations and exons will be returned as well.') | 14 "--expand", |
| 15 type="choice", | |
| 16 choices=["0", "1"], | |
| 17 default="0", | |
| 18 help="Expands the search to include any connected features. e.g. If the object is a gene, its transcripts, translations and exons will be returned as well.", | |
| 19 ) | |
| 17 | 20 |
| 18 parser.add_option('-f', '--format', type='choice', | 21 parser.add_option( |
| 19 choices=['full', 'condensed'], default='full', | 22 "-f", |
| 20 help='Specify the formats to emit from this endpoint') | 23 "--format", |
| 24 type="choice", | |
| 25 choices=["full", "condensed"], | |
| 26 default="full", | |
| 27 help="Specify the formats to emit from this endpoint", | |
| 28 ) | |
| 21 options, args = parser.parse_args() | 29 options, args = parser.parse_args() |
| 22 if options.input is None: | 30 if options.input is None: |
| 23 raise Exception('-i option must be specified') | 31 raise Exception("-i option must be specified") |
| 24 | 32 |
| 25 | 33 |
| 26 server = 'https://rest.ensembl.org' | 34 server = "https://rest.ensembl.org" |
| 27 ext = 'lookup/id' | 35 ext = "lookup/id" |
| 28 | 36 |
| 29 headers = {'Content-Type': 'application/json', 'Accept': 'application/json'} | 37 headers = {"Content-Type": "application/json", "Accept": "application/json"} |
| 30 params = dict((k, getattr(options, k)) for k in ['format', 'expand']) | 38 params = {k: getattr(options, k) for k in ("format", "expand")} |
| 31 | 39 |
| 32 first = True | 40 first = True |
| 33 | 41 |
| 34 print('{') | 42 print("{") |
| 35 | 43 |
| 36 with open(options.input) as f: | 44 with open(options.input) as f: |
| 37 while True: | 45 while True: |
| 38 ids = [line.strip() for line in islice(f, 50)] | 46 ids = [line.strip() for line in islice(f, 50)] |
| 39 if not ids: | 47 if not ids: |
| 40 break | 48 break |
| 41 if not first: | 49 if not first: |
| 42 print(",") | 50 print(",") |
| 43 data = {'ids': ids} | 51 data = {"ids": ids} |
| 44 r = requests.post(urljoin(server, ext), params=params, headers=headers, | 52 r = requests.post( |
| 45 data=json.dumps(data), allow_redirects=False) | 53 urljoin(server, ext), |
| 54 params=params, | |
| 55 headers=headers, | |
| 56 data=json.dumps(data), | |
| 57 allow_redirects=False, | |
| 58 ) | |
| 46 | 59 |
| 47 if not r.ok: | 60 if not r.ok: |
| 48 r.raise_for_status() | 61 r.raise_for_status() |
| 49 | 62 |
| 50 print(r.text[1:-1]) | 63 print(r.text[1:-1]) |
| 51 | 64 |
| 52 first = False | 65 first = False |
| 53 | 66 |
| 54 print('}') | 67 print("}") |
