Skip to content

Commit 9861aee

Browse files
committed
version 0.1.0 finalizada
1 parent c98cd0c commit 9861aee

File tree

5 files changed

+23
-63
lines changed

5 files changed

+23
-63
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,5 @@ docker-compose.yml
1010
bio-api/secretkey.txt
1111
*.log
1212
databases/hgnc/hgnc_output.json
13-
databases/hgnc/hgnc_dataset.tsv
13+
databases/hgnc/hgnc_dataset.tsv
14+
databases/cpdb/

bio-api/bioapi.py

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@
66
from flask import request
77
import urllib.parse
88
import pymongo
9+
from pymongo.database import Database
910
import re
1011
import os
1112
import configparser
1213
import logging
13-
from pymongo.database import Database
14+
1415

1516
# Gets production flag
1617
IS_DEBUG: bool = os.environ.get('DEBUG', 'true') == 'true'
@@ -60,7 +61,7 @@ def get_mongo_connection() -> Database:
6061
mongo_client = pymongo.MongoClient(f"mongodb://{user}:{password}@{host}:{port}/?authSource=admin")
6162
return mongo_client[db]
6263
except Exception as e:
63-
logging.error("BioAPI no se pudo conectar a la base de datos MongoDB configurada." + str(e), exc_info=True)
64+
logging.error("Database connection error." + str(e), exc_info=True)
6465
exit(-1)
6566

6667

@@ -151,8 +152,14 @@ def genSymbol(gene_id):
151152
respuesta = {gene_id: []}
152153
try:
153154
gv = mapear_gen(gene_id)
155+
if len(gv) == 0:
156+
abort(404, "invalid gene identifier")
154157
respuesta[gene_id] = gv
155-
except Exception as e:
158+
except TypeError as e:
159+
abort(400, e)
160+
except ValueError as e:
161+
abort(400, e)
162+
except KeyError as e:
156163
abort(400, e)
157164
return make_response(respuesta, 200, headers)
158165

@@ -178,10 +185,9 @@ def genSymbols():
178185
def genes_of_the_same_family(gene_id):
179186
respuesta = {"gene_id": None, "groups": [], "locus_group": None, "locus_type": None}
180187
try:
181-
182188
mapped_gene = mapear_gen(gene_id)
183189
if len(mapped_gene) == 0:
184-
abort(400, "invalid gene identifier")
190+
abort(404, "invalid gene identifier")
185191
elif len(mapped_gene) >= 2:
186192
abort(400, "ambiguous gene identifier. The identifier may refer to more than one HGNC-approved gene (" + ",".join(mapped_gene) + ")")
187193
approved_symbol = mapped_gene[0]
@@ -208,25 +214,13 @@ def genes_of_the_same_family(gene_id):
208214

209215
# Manejo de errores
210216
@flask_app.errorhandler(400)
211-
def resource_not_found(e):
217+
def bad_request(e):
212218
return jsonify(error=str(e)), 400
213219

214-
@flask_app.errorhandler(405)
215-
def resource_not_found(e):
216-
return jsonify(error=str(e)), 405
217-
218220
@flask_app.errorhandler(404)
219-
def resource_not_found(e):
221+
def not_found(e):
220222
return jsonify(error=str(e)), 404
221223

222-
@flask_app.errorhandler(409)
223-
def resource_not_found(e):
224-
return jsonify(error=str(e)), 409
225-
226-
@flask_app.errorhandler(500)
227-
def resource_not_found(e):
228-
return jsonify(error=str(e)), 500
229-
230224
return flask_app
231225

232226

bio-api/tests/test_gene_symbol.py

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ def test_gene_id_valid(client):
88
response = client.get(f'{URL_BASE}/{valid_id}')
99
res = json.loads(response.data)
1010
assert response.status_code == 200
11-
assert valid_id in list(res.keys())
1211
assert type(res[valid_id]) == list
1312
assert "TP53" in res[valid_id]
1413

@@ -18,7 +17,6 @@ def test_gene_alias_two_genes(client):
1817
response = client.get(f'{URL_BASE}/{alias_id}')
1918
res = json.loads(response.data)
2019
assert response.status_code == 200
21-
assert alias_id in list(res.keys())
2220
assert type(res[alias_id]) == list
2321
assert "BRCA1" in res[alias_id]
2422
assert "ICE2" in res[alias_id]
@@ -29,15 +27,12 @@ def test_gene_id_invalid(client):
2927
invalid_id="XXX" #Invalid id
3028
response = client.get(f'{URL_BASE}/{invalid_id}')
3129
res = json.loads(response.data)
32-
assert response.status_code == 200
33-
assert invalid_id in list(res.keys())
34-
assert type(res[invalid_id]) == list
35-
assert res[invalid_id] == []
30+
assert response.status_code == 404
31+
assert "error" in list(res.keys())
3632

3733
def test_missing_gene_id_param(client):
3834
"""Tests missing mandatory parameter"""
3935
response = client.get(f'{URL_BASE}/')
4036
res = json.loads(response.data)
4137
assert response.status_code == 404
4238
assert "error" in list(res.keys())
43-
assert type(res["error"]) == str

bio-api/tests/test_genes_same_group.py

Lines changed: 4 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,14 @@ def test_gene_in_group(client):
88
response = client.get(f'{URL_BASE}/{valid_id}')
99
res = json.loads(response.data)
1010
assert response.status_code == 200
11-
assert "gene_id" in list(res.keys())
12-
assert "groups" in list(res.keys())
13-
assert "locus_group" in list(res.keys())
14-
assert "locus_type" in list(res.keys())
15-
assert type(res["gene_id"]) == str
1611
assert type(res["groups"]) == list
17-
assert type(res["locus_group"]) == str
18-
assert type(res["locus_type"]) == str
19-
assert res["gene_id"] == "EGFR"
20-
assert res["locus_group"] == "protein-coding gene"
21-
assert res["locus_type"] == "gene with protein product"
2212
assert len(res["groups"]) == 1
2313
assert res["groups"][0]["gene_group"] == "Erb-b2 receptor tyrosine kinases"
2414
assert res["groups"][0]["gene_group_id"] == "1096"
2515
assert sorted(res["groups"][0]["genes"]) == sorted(["ERBB3","EGFR","ERBB2","ERBB4"])
16+
assert res["gene_id"] == "EGFR"
17+
assert res["locus_group"] == "protein-coding gene"
18+
assert res["locus_type"] == "gene with protein product"
2619

2720

2821
def test_gene_not_in_group(client):
@@ -31,19 +24,12 @@ def test_gene_not_in_group(client):
3124
response = client.get(f'{URL_BASE}/{valid_id}')
3225
res = json.loads(response.data)
3326
assert response.status_code == 200
34-
assert "gene_id" in list(res.keys())
35-
assert "groups" in list(res.keys())
36-
assert "locus_group" in list(res.keys())
37-
assert "locus_type" in list(res.keys())
38-
assert type(res["gene_id"]) == str
3927
assert type(res["groups"]) == list
40-
assert type(res["locus_group"]) == str
41-
assert type(res["locus_type"]) == str
4228
assert res["gene_id"] == "TP53"
4329
assert res["locus_group"] == "protein-coding gene"
4430
assert res["locus_type"] == "gene with protein product"
4531
assert len(res["groups"]) == 0
46-
32+
4733

4834
def test_gene_alias(client):
4935
"""test with gene symbol that is alias of two valid symbols"""
@@ -52,7 +38,6 @@ def test_gene_alias(client):
5238
res = json.loads(response.data)
5339
assert response.status_code == 400
5440
assert "error" in list(res.keys())
55-
assert type(res["error"]) == str
5641
assert res["error"] == "400 Bad Request: ambiguous gene identifier. The identifier may refer to more than one HGNC-approved gene (BRCA1,ICE2)"
5742

5843

@@ -62,8 +47,6 @@ def test_invalid_gene_symbol(client):
6247
response = client.get(f'{URL_BASE}/{invalid_id}')
6348
res = json.loads(response.data)
6449
assert response.status_code == 400
65-
assert "error" in list(res.keys())
66-
assert type(res["error"]) == str
6750
assert res["error"] =="400 Bad Request: invalid gene identifier"
6851

6952

@@ -72,6 +55,4 @@ def test_invalid_gene_symbol(client):
7255
response = client.get(f'{URL_BASE}')
7356
res = json.loads(response.data)
7457
assert response.status_code == 404
75-
assert "error" in list(res.keys())
76-
assert type(res["error"]) == str
7758
assert res["error"] == "404 Not Found: The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again."

bio-api/tests/test_genes_symbols.py

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,25 +13,20 @@ def test_gene_id_valid(client):
1313
}
1414
response = client.post(f'{URL_BASE}', data=json.dumps(data), headers=headers)
1515
res = json.loads(response.data)
16-
assert response.content_type == 'application/json'
1716
assert response.status_code == 200
18-
assert valid_id in list(res.keys())
1917
assert type(res[valid_id]) == list
2018
assert "BRAF" in res[valid_id]
2119

2220
def test_valid_and_invalid_genes(client):
23-
""""test for one valid and one invalid gene"""
21+
"""test for one valid and one invalid gene"""
2422
valid_id="HGNC:3236" #hgnc_id
2523
invalid_id="blcdtm" #invalid id
2624
data = {
2725
"genes_ids" : [ valid_id, invalid_id ]
2826
}
2927
response = client.post(f'{URL_BASE}', data=json.dumps(data), headers=headers)
3028
res = json.loads(response.data)
31-
assert response.content_type == 'application/json'
3229
assert response.status_code == 200
33-
assert valid_id in list(res.keys())
34-
assert invalid_id in list(res.keys())
3530
assert type(res[valid_id]) == list
3631
assert type(res[invalid_id]) == list
3732
assert res[valid_id][0] == "EGFR"
@@ -47,10 +42,7 @@ def test_gene_alias_two_genes_and_invalid_id(client):
4742
}
4843
response = client.post(f'{URL_BASE}', data=json.dumps(data), headers=headers)
4944
res = json.loads(response.data)
50-
assert response.content_type == 'application/json'
5145
assert response.status_code == 200
52-
assert alias_id in list(res.keys())
53-
assert invalid_id in list(res.keys())
5446
assert type(res[alias_id]) == list
5547
assert type(res[invalid_id]) == list
5648
assert res[invalid_id] == []
@@ -68,7 +60,6 @@ def test_empty_gene_id(client):
6860
}
6961
response = client.post(f'{URL_BASE}', data=json.dumps(data), headers=headers)
7062
res = json.loads(response.data)
71-
assert response.content_type == 'application/json'
7263
assert response.status_code == 200
7364
assert len(list(res.keys())) == 0
7465
assert res == {}
@@ -81,7 +72,5 @@ def test_corrupted_structure(client):
8172
}
8273
response = client.post(f'{URL_BASE}', data=json.dumps(data), headers=headers)
8374
res = json.loads(response.data)
84-
assert response.content_type == 'application/json'
8575
assert response.status_code == 400
86-
assert "error" in list(res.keys())
87-
assert res["error"] == "400 Bad Request: genes_ids is mandatory"
76+
assert "error" in list(res.keys())

0 commit comments

Comments
 (0)