compara-deep-learning/access_data_rest.py

166 lines
4.7 KiB
Python
Raw Normal View History

2019-07-24 03:27:54 -07:00
import json
import requests
import progressbar
import sys
2021-04-08 08:41:16 -07:00
def update_protein(gene_seq, gene):
t = 0
while(t != 2):
2019-07-24 03:27:54 -07:00
try:
server = "https://rest.ensembl.org"
2021-04-08 08:41:16 -07:00
ext = "/sequence/id/" + \
str(gene)+"?type=protein;multiple_sequences=1"
2019-07-24 03:27:54 -07:00
2021-04-08 08:41:16 -07:00
r = requests.get(
server+ext, headers={"Content-Type": "application/json"})
2019-07-24 03:27:54 -07:00
if not r.ok:
r.raise_for_status()
sys.exit()
2021-04-08 08:41:16 -07:00
r = r.json()
if len(r) == 1:
r = dict(r[0])
gene_seq[gene] = str(r["seq"])
2019-07-24 03:27:54 -07:00
return
else:
2021-04-08 08:41:16 -07:00
maxi = 0
maxlen = 0
2019-07-24 03:27:54 -07:00
for i in range(len(r)):
2021-04-08 08:41:16 -07:00
m = r[i]
m = dict(m)
if len(m["seq"]) > maxlen:
maxi = i
r = dict(r[maxi])
gene_seq[gene] = str(r["seq"])
2019-07-24 03:27:54 -07:00
return
2021-04-08 08:41:16 -07:00
except Exception:
t += 1
# print("\nError:",e)
2019-07-24 03:27:54 -07:00
continue
2021-04-08 08:41:16 -07:00
gene_seq[gene] = ""
2019-07-24 03:27:54 -07:00
2021-04-08 08:41:16 -07:00
def update_rest_protein(data, fname):
gids = {}
with open("processed/not_found_"+fname+".json", "r") as file:
gids = dict(json.load(file))
2019-07-24 03:27:54 -07:00
2021-04-08 08:41:16 -07:00
gids = list(gids.keys())
2019-07-24 03:27:54 -07:00
2021-04-08 08:41:16 -07:00
geneseq = {}
2019-07-24 03:27:54 -07:00
server = "https://rest.ensembl.org"
ext = "/sequence/id?type=protein"
2021-04-08 08:41:16 -07:00
headers = {"Content-Type": "application/json",
"Accept": "application/json"}
2019-07-24 03:27:54 -07:00
2021-04-08 08:41:16 -07:00
for i in progressbar.progressbar(range(0, len(gids)-50, 50)):
ids = dict(ids=list(gids[i:i+50]))
2019-07-24 03:27:54 -07:00
while(1):
try:
2021-04-08 08:41:16 -07:00
r = requests.post(server+ext, headers=headers,
data=str(json.dumps(ids)))
2019-07-24 03:27:54 -07:00
if not r.ok:
r.raise_for_status()
2021-04-08 08:41:16 -07:00
gs = r.json()
tgs = {}
2019-07-24 03:27:54 -07:00
for g in gs:
2021-04-08 08:41:16 -07:00
tgs[g["query"]] = g["seq"]
2019-07-24 03:27:54 -07:00
geneseq.update(tgs)
break
except Exception as e:
2021-04-08 08:41:16 -07:00
print("Error:", e)
2019-07-24 03:27:54 -07:00
continue
data.update(geneseq)
for genes in gids:
try:
2021-04-08 08:41:16 -07:00
_ = data[genes]
except Exception:
2019-07-24 03:27:54 -07:00
print(genes)
2021-04-08 08:41:16 -07:00
update_protein(data, genes)
2019-07-24 03:27:54 -07:00
2019-08-23 02:55:59 -07:00
print("Protein Sequences Updated Successfully")
2019-07-24 03:27:54 -07:00
return data
2021-04-08 08:41:16 -07:00
def update(gene_seq, gene):
t = 0
while(t != 2):
2019-07-24 03:27:54 -07:00
try:
server = "https://rest.ensembl.org"
2019-08-23 02:55:59 -07:00
ext = "/sequence/id/"+str(gene)+"?type=cds;multiple_sequences=1"
2019-07-24 03:27:54 -07:00
2021-04-08 08:41:16 -07:00
r = requests.get(
server+ext, headers={"Content-Type": "application/json"})
2019-07-24 03:27:54 -07:00
if not r.ok:
r.raise_for_status()
sys.exit()
2021-04-08 08:41:16 -07:00
r = r.json()
if len(r) == 1:
r = dict(r[0])
gene_seq[gene] = str(r["seq"])
2019-07-24 03:27:54 -07:00
return
else:
2021-04-08 08:41:16 -07:00
maxi = 0
maxlen = 0
2019-07-24 03:27:54 -07:00
for i in range(len(r)):
2021-04-08 08:41:16 -07:00
m = r[i]
m = dict(m)
if len(m["seq"]) > maxlen:
maxi = i
r = dict(r[maxi])
gene_seq[gene] = str(r["seq"])
2019-07-24 03:27:54 -07:00
return
2021-04-08 08:41:16 -07:00
except Exception:
t += 1
# print("\nError:",e)
2019-07-24 03:27:54 -07:00
continue
2021-04-08 08:41:16 -07:00
gene_seq[gene] = ""
2019-07-24 03:27:54 -07:00
2021-04-08 08:41:16 -07:00
def update_rest(data, fname):
gids = {}
with open("processed/not_found_"+fname+".json", "r") as file:
gids = dict(json.load(file))
2019-07-24 03:27:54 -07:00
2021-04-08 08:41:16 -07:00
gids = list(gids.keys())
2019-07-24 03:27:54 -07:00
2021-04-08 08:41:16 -07:00
geneseq = {}
2019-07-24 03:27:54 -07:00
server = "https://rest.ensembl.org"
ext = "/sequence/id?type=cds"
2021-04-08 08:41:16 -07:00
headers = {"Content-Type": "application/json",
"Accept": "application/json"}
2019-07-24 03:27:54 -07:00
2021-04-08 08:41:16 -07:00
for i in progressbar.progressbar(range(0, len(gids)-50, 50)):
ids = dict(ids=list(gids[i:i+50]))
2019-07-24 03:27:54 -07:00
while(1):
try:
2021-04-08 08:41:16 -07:00
r = requests.post(server+ext, headers=headers,
data=str(json.dumps(ids)))
2019-07-24 03:27:54 -07:00
if not r.ok:
r.raise_for_status()
2021-04-08 08:41:16 -07:00
gs = r.json()
tgs = {}
2019-07-24 03:27:54 -07:00
for g in gs:
2021-04-08 08:41:16 -07:00
tgs[g["query"]] = g["seq"]
2019-07-24 03:27:54 -07:00
geneseq.update(tgs)
break
except Exception as e:
2021-04-08 08:41:16 -07:00
print("Error:", e)
2019-07-24 03:27:54 -07:00
continue
data.update(geneseq)
for genes in gids:
try:
2021-04-08 08:41:16 -07:00
_ = data[genes]
except Exception:
2019-07-24 03:27:54 -07:00
print(genes)
2021-04-08 08:41:16 -07:00
update(data, genes)
2019-07-24 03:27:54 -07:00
print("Gene Sequences Updated Successfully")
2021-04-08 08:41:16 -07:00
return data