Skip to content

Commit f4de5e9

Browse files
committed
added tests and clean metakg parse endpoint
1 parent 3ce64f8 commit f4de5e9

File tree

2 files changed

+94
-5
lines changed

2 files changed

+94
-5
lines changed

src/handlers/api.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -687,7 +687,6 @@ async def get(self, *args, **kwargs):
687687
self.finish(res)
688688

689689
class MetaKGParserHandler(BaseHandler):
690-
name="metakgparser"
691690
kwargs = {
692691
"GET": {
693692
"url": {
@@ -713,6 +712,7 @@ def initialize(self, *args, **kwargs):
713712
def get_filtered_api(self, api_dict):
714713
"""Extract and return filtered API information."""
715714
api_info = api_dict["api"]
715+
716716
# Default structure to preserve top-level keys
717717
filtered_dict = {
718718
"subject": api_dict.get("subject"),
@@ -721,6 +721,7 @@ def get_filtered_api(self, api_dict):
721721
"subject_prefix": api_dict.get("subject_prefix"),
722722
"object_prefix": api_dict.get("object_prefix"),
723723
}
724+
724725
# case: bte=1, api_details=0
725726
if self.args.bte == "1" and self.args.api_details == "0":
726727
filtered_api = {
@@ -732,13 +733,16 @@ def get_filtered_api(self, api_dict):
732733
),
733734
"bte": api_info.get("bte", {}),
734735
}
736+
735737
# case: bte=0, api_details=1
736738
elif self.args.bte == "0" and self.args.api_details == "1":
737739
api_info.pop("bte", None)
738740
filtered_api = api_info
741+
739742
# case: api_details=1, bte=1
740743
elif self.args.bte == "1" and self.args.api_details == "1":
741744
filtered_api = api_info
745+
742746
# case: bte=0, api_details=0
743747
else:
744748
filtered_api = {
@@ -752,6 +756,10 @@ def get_filtered_api(self, api_dict):
752756
# Add the filtered 'api' key to the preserved top-level structure
753757
filtered_dict["api"] = filtered_api
754758

759+
# Remove 'bte' from 'api' if it exists
760+
if "bte" in filtered_dict["api"]:
761+
filtered_dict['bte'] = filtered_dict["api"].pop("bte", None)
762+
755763
return filtered_dict
756764

757765
def process_apis(self, apis):
@@ -796,7 +804,7 @@ async def get(self, *args, **kwargs):
796804
}
797805

798806
self.set_header("Content-Type", "application/json")
799-
self.write(json.dumps(response))
807+
self.write(response)
800808

801809
async def post(self, *args, **kwargs):
802810
try:
@@ -805,6 +813,8 @@ async def post(self, *args, **kwargs):
805813
# Parse the JSON content
806814
data = json.loads(body)
807815
parser = MetaKGParser()
816+
self.args.api_details = self.get_argument("api_details", "0")
817+
self.args.bte = self.get_argument("bte", "0")
808818
trapi_data = parser.get_TRAPI_metadatas(data=data)
809819
nontrapi_data = parser.get_non_TRAPI_metadatas(data=data)
810820
combined_data = trapi_data + nontrapi_data
@@ -821,8 +831,7 @@ async def post(self, *args, **kwargs):
821831
}
822832

823833
self.set_header("Content-Type", "application/json")
824-
self.write(json.dumps(response))
834+
self.write(response)
825835

826836
except json.JSONDecodeError:
827-
self.set_status(400)
828-
self.write({"error": "Invalid JSON format"})
837+
raise ValueError("Invalid JSON content in request body.")
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
import unittest
2+
import requests
3+
import json
4+
5+
6+
class TestAPI(unittest.TestCase):
7+
URL_EXAMPLE = "https://raw.githubusercontent.com/NCATS-Tangerine/translator-api-registry/master/mygene.info/openapi_full.yml"
8+
9+
def setUp(self):
10+
self.headers = {"Content-Type": "application/json"}
11+
with open('/Users/nacosta/Documents/smartAPI/WORKING_BRANCH/add-metakg-endpoint/smartAPI/src/metadata_content.json', 'r') as file:
12+
self.data = json.load(file)
13+
14+
# POST Tests
15+
def test_post_metakg_parse_api_details_1_bte_1(self):
16+
url = "http://localhost:8000/api/metakg/parse?api_details=1&bte=1"
17+
response = requests.post(url, headers=self.headers, json=self.data)
18+
json_response = response.json()
19+
self.assertEqual(response.status_code, 200)
20+
self.assertIn('api', json_response['hits'][0].keys())
21+
self.assertIn('bte', json_response['hits'][0].keys())
22+
23+
def test_post_metakg_parse_api_details_0_bte_1(self):
24+
url = "http://localhost:8000/api/metakg/parse?api_details=0&bte=1"
25+
response = requests.post(url, headers=self.headers, json=self.data)
26+
json_response = response.json()
27+
self.assertEqual(response.status_code, 200)
28+
self.assertIn('bte', json_response['hits'][0].keys())
29+
30+
def test_post_metakg_parse_api_details_1_bte_0(self):
31+
url = "http://localhost:8000/api/metakg/parse?api_details=1&bte=0"
32+
response = requests.post(url, headers=self.headers, json=self.data)
33+
json_response = response.json()
34+
self.assertEqual(response.status_code, 200)
35+
self.assertIn('api', json_response['hits'][0].keys())
36+
self.assertNotIn('bte', json_response['hits'][0].keys())
37+
38+
def test_post_metakg_parse_api_details_0_bte_0(self):
39+
url = "http://localhost:8000/api/metakg/parse?api_details=0&bte=0"
40+
response = requests.post(url, headers=self.headers, json=self.data)
41+
json_response = response.json()
42+
self.assertEqual(response.status_code, 200)
43+
self.assertNotIn('bte', json_response['hits'][0].keys())
44+
self.assertIn('subject', json_response['hits'][0].keys())
45+
46+
# GET Tests
47+
def test_get_metakg_parse_api_details_1_bte_1(self):
48+
url = f"http://localhost:8000/api/metakg/parse?url={self.URL_EXAMPLE}&api_details=1&bte=1"
49+
response = requests.get(url)
50+
json_response = response.json()
51+
self.assertEqual(response.status_code, 200)
52+
self.assertIn('api', json_response['hits'][0].keys())
53+
self.assertIn('bte', json_response['hits'][0].keys())
54+
55+
def test_get_metakg_parse_api_details_0_bte_1(self):
56+
url = f"http://localhost:8000/api/metakg/parse?url={self.URL_EXAMPLE}&api_details=0&bte=1"
57+
response = requests.get(url)
58+
json_response = response.json()
59+
self.assertEqual(response.status_code, 200)
60+
self.assertIn('bte', json_response['hits'][0].keys())
61+
62+
def test_get_metakg_parse_api_details_1_bte_0(self):
63+
url = f"http://localhost:8000/api/metakg/parse?url={self.URL_EXAMPLE}&api_details=1&bte=0"
64+
response = requests.get(url)
65+
json_response = response.json()
66+
self.assertEqual(response.status_code, 200)
67+
self.assertIn('api', json_response['hits'][0].keys())
68+
self.assertNotIn('bte', json_response['hits'][0].keys())
69+
70+
def test_get_metakg_parse_api_details_0_bte_0(self):
71+
url = f"http://localhost:8000/api/metakg/parse?url={self.URL_EXAMPLE}&api_details=0&bte=0"
72+
response = requests.get(url)
73+
json_response = response.json()
74+
self.assertEqual(response.status_code, 200)
75+
self.assertNotIn('bte', json_response['hits'][0].keys())
76+
self.assertIn('subject', json_response['hits'][0].keys())
77+
78+
79+
if __name__ == "__main__":
80+
unittest.main()

0 commit comments

Comments
 (0)