view get_feature_info.py @ 6:0618e3bd5138 draft

"planemo upload for repository https://github.com/TGAC/earlham-galaxytools/tree/master/tools/Ensembl-REST commit 17c65045b726d0695814bfe761e534f6521786f1"
author earlhaminst
date Tue, 20 Oct 2020 15:06:37 +0000
parents 675fd774314e
children
line wrap: on
line source

# A simple tool to connect to the Ensembl server and retrieve feature
# information using the Ensembl REST API.
from __future__ import print_function

import json
import optparse
from itertools import islice

import requests
from six.moves.urllib.parse import urljoin

parser = optparse.OptionParser()
parser.add_option('-i', '--input', help='List of Ensembl IDs')
parser.add_option('-e', '--expand', type='choice', choices=['0', '1'],
                  default='0',
                  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.')

parser.add_option('-f', '--format', type='choice',
                  choices=['full', 'condensed'], default='full',
                  help='Specify the formats to emit from this endpoint')
options, args = parser.parse_args()
if options.input is None:
    raise Exception('-i option must be specified')


server = 'https://rest.ensembl.org'
ext = 'lookup/id'

headers = {'Content-Type': 'application/json', 'Accept': 'application/json'}
params = dict((k, getattr(options, k)) for k in ['format', 'expand'])

first = True

print('{')

with open(options.input) as f:
    while True:
        ids = [line.strip() for line in islice(f, 50)]
        if not ids:
            break
        if not first:
            print(",")
        data = {'ids': ids}
        r = requests.post(urljoin(server, ext), params=params, headers=headers,
                          data=json.dumps(data), allow_redirects=False)

        if not r.ok:
            r.raise_for_status()

        print(r.text[1:-1])

        first = False

print('}')