Skip to content

Commit bad1284

Browse files
committed
mkg parser and handler clean up error code
1 parent 2d6987c commit bad1284

File tree

2 files changed

+39
-23
lines changed

2 files changed

+39
-23
lines changed

src/handlers/api.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -799,22 +799,23 @@ async def get(self, *args, **kwargs):
799799
# Set initial args
800800
parser = MetaKGParser()
801801
url = self.get_argument("url")
802+
802803
try:
803804
self.args.api_details = int(self.get_argument("api_details", 0))
804805
except ValueError:
805-
raise HTTPError(400, reason=f"Unexcepted value for api_details, {self.get_argument('api_details')}. Please enter integer, 0 or 1.")
806+
raise HTTPError(400, reason=f"Value, {self.get_argument('api_details')}, not accepted for api_details. Please enter integer, 0 or 1.")
806807
try:
807808
self.args.bte = int(self.get_argument("bte", 0))
808809
except ValueError:
809-
raise HTTPError(400, reason=f"Unexcepted value for bte, {self.get_argument('bte')}. Please enter integer, 0 or 1.")
810+
raise HTTPError(400, reason=f"Value,, {self.get_argument('bte')}, not accepted for bte. Please enter integer, 0 or 1.")
810811

811812
try:
812813
trapi_data = parser.get_TRAPI_metadatas(data=None, url=url)
813814
except MetadataRetrievalError as retrieve_err:
814815
raise HTTPError(retrieve_err.status_code, reason=retrieve_err.message)
815816
except DownloadError:
816817
raise HTTPError(400, reason="There was an error downloading the data from the given input.")
817-
818+
818819
# Get non-TRAPI metadata
819820
try:
820821
nontrapi_data = parser.get_non_TRAPI_metadatas(data=None, url=url)

src/utils/metakg/parser.py

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from copy import copy
44
from tornado.web import HTTPError
55
from utils.downloader import DownloadError
6-
6+
from utils.metakg.metakg_errors import MetadataRetrievalError
77
import requests
88

99
from .api import API
@@ -16,15 +16,19 @@ class MetaKGParser:
1616
metakg_errors = None
1717

1818
def get_non_TRAPI_metadatas(self, data=None, extra_data=None, url=None):
19+
"""
20+
Extract MetaKG edges from a SmartAPI document provided as `data` or fetched from a `url`.
21+
Raises an error if no valid input is given.
22+
"""
1923
if not data and not url:
20-
raise HTTPError(400, reason="Either data or url value is expected for this request, please provide data or a url.")
21-
# raise ValueError("Either data or url must be provided.")
24+
raise MetadataRetrievalError(400, "Either data or url value is expected for this request, please provide data or a url.")
25+
2226
if data:
2327
parser = API(smartapi_doc=data)
2428
elif url:
2529
parser = API(url=url)
2630
else:
27-
raise HTTPError(404, "No metadata available from provided data or url.")
31+
raise MetadataRetrievalError(404, "No metadata available from provided data or url.")
2832

2933
mkg = self.extract_metakgedges(parser.metadata["operations"], extra_data=extra_data)
3034
no_nodes = len({x["subject"] for x in mkg} | {x["object"] for x in mkg})
@@ -33,38 +37,51 @@ def get_non_TRAPI_metadatas(self, data=None, extra_data=None, url=None):
3337
return mkg
3438

3539
def get_TRAPI_metadatas(self, data=None, extra_data=None, url=None):
36-
ops = []
40+
"""
41+
Extract and process TRAPI metadata from a SmartAPI document or URL.
42+
Returns MetaKG edges or propagates errors.
43+
"""
3744
if not data and not url:
38-
raise HTTPError(400, reason="Either data or url value is expected for this request, please provide data or a url.")
39-
if data:
40-
metadata_list = self.get_TRAPI_with_metakg_endpoint(data=data)
41-
elif url:
42-
metadata_list = self.get_TRAPI_with_metakg_endpoint(url=url)
43-
else:
44-
raise HTTPError(404, "No metadata available from provided data or url.")
45+
raise MetadataRetrievalError(400, "Either data or url value is expected for this request, please provide data or a url.")
4546

46-
if isinstance(metadata_list, Exception):
47-
return metadata_list
47+
try:
48+
if data:
49+
metadata_list = self.get_TRAPI_with_metakg_endpoint(data=data)
50+
else:
51+
metadata_list = self.get_TRAPI_with_metakg_endpoint(url=url)
52+
except MetadataRetrievalError:
53+
raise MetadataRetrievalError(404, "No metadata available from provided data or url.")
4854

4955
count_metadata_list = len(metadata_list)
5056
self.metakg_errors = {}
57+
ops = []
58+
5159
for i, metadata in enumerate(metadata_list):
5260
ops.extend(self.get_ops_from_metakg_endpoint(metadata, f"[{i + 1}/{count_metadata_list}]"))
61+
5362
if self.metakg_errors:
54-
cnt_metakg_errors = sum([len(x) for x in self.metakg_errors.values()])
63+
cnt_metakg_errors = sum(len(x) for x in self.metakg_errors.values())
5564
logger.error(f"Found {cnt_metakg_errors} TRAPI metakg errors:\n {json.dumps(self.metakg_errors, indent=2)}")
5665

5766
return self.extract_metakgedges(ops, extra_data=extra_data)
5867

5968
def get_TRAPI_with_metakg_endpoint(self, data=None, url=None):
69+
"""
70+
Retrieve TRAPI metadata from a SmartAPI document or URL.
71+
Returns metadata if TRAPI endpoints are found, else an empty list.
72+
"""
6073
if not data and not url:
61-
raise HTTPError(400, reason="Either data or url value is expected for this request, please provide data or a url.")
74+
raise MetadataRetrievalError(400, "Either data or url value is expected for this request, please provide data or a url.")
75+
6276
# Initialize API with either data or URL
6377
parser = API(smartapi_doc=data) if data else API(url=url)
78+
79+
# Download the metadata
6480
try:
6581
metadata = parser.metadata
66-
except DownloadError:
67-
raise HTTPError(400, reason="Error fetching data from given input.")
82+
except DownloadError as dl_err:
83+
raise dl_err
84+
6885
_paths = metadata.get("paths", {})
6986
_team = metadata.get("x-translator", {}).get("team")
7087

@@ -74,8 +91,6 @@ def get_TRAPI_with_metakg_endpoint(self, data=None, url=None):
7491
return [metadata]
7592
else:
7693
return []
77-
# except Exception as value_error: # Specify Error
78-
# return value_error
7994

8095
def construct_query_url(self, server_url):
8196
if server_url.endswith("/"):

0 commit comments

Comments
 (0)