33from copy import copy
44from tornado .web import HTTPError
55from utils .downloader import DownloadError
6-
6+ from utils . metakg . metakg_errors import MetadataRetrievalError
77import requests
88
99from .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