1- from builtins import ValueError , isinstance
21import asyncio
32import json
43import logging
@@ -390,8 +389,10 @@ class MetaKGHandlerMixin:
390389 def get_filtered_api (self , api_dict ):
391390 """Extract and return filtered API information."""
392391 api_info = api_dict .get ("api" , api_dict ) # Handle both formats
393- bte = getattr (self .args , "bte" , 0 )
394- api_details = getattr (self .args , "api_details" , 0 )
392+
393+ # Default to False if not present
394+ bte = getattr (self .args , "bte" , False )
395+ api_details = getattr (self .args , "api_details" , False )
395396
396397 # Default structure to preserve top-level keys
397398 filtered_dict = {
@@ -401,7 +402,8 @@ def get_filtered_api(self, api_dict):
401402 }
402403
403404 # Determine filtered API structure based on `bte` and `api_details`
404- if bte == 1 and api_details == 0 :
405+ if bte and not api_details :
406+ # When bte is True and api_details is False, include only minimal API info
405407 filtered_api = {
406408 ** ({"name" : api_info .get ("name" )} if "name" in api_info else {}),
407409 ** (
@@ -411,15 +413,17 @@ def get_filtered_api(self, api_dict):
411413 ),
412414 "bte" : api_info .get ("bte" , {}),
413415 }
414- elif api_details == 1 :
415- # Covers both (bte=0, api_details=1) and (bte=1, api_details=1)
416+ elif api_details :
417+ # When api_details is True, include more detailed information
416418 filtered_api = api_info .copy ()
417- if bte == 0 :
419+ if not bte :
418420 filtered_api .pop ("bte" , None )
419- # Check if the "ui" key exists and ends with "None"
420- if filtered_api ['smartapi' ].get ("ui" , "" ).endswith ("/None" ):
421+
422+ # Handle case where "ui" key exists and ends with "None"
423+ if filtered_api .get ('smartapi' , {}).get ("ui" , "" ).endswith ("/None" ):
421424 filtered_api ["smartapi" ]["ui" ] = None
422- else : # bte == 0 and api_details == 0
425+ else :
426+ # Default: No bte and no api_details - just minimal API info
423427 filtered_api = {
424428 ** ({"name" : api_info .get ("name" )} if "name" in api_info else {}),
425429 ** (
@@ -436,11 +440,55 @@ def get_filtered_api(self, api_dict):
436440 if "bte" in filtered_dict ["api" ]:
437441 filtered_dict ["bte" ] = filtered_dict ["api" ].pop ("bte" )
438442
439-
440443 return filtered_dict
441-
442-
443- class MetaKGQueryHandler (MetaKGHandlerMixin ,QueryHandler ):
444+ # # Default structure to preserve top-level keys
445+ # filtered_dict = {
446+ # key: api_dict.get(key)
447+ # for key in ["subject", "object", "predicate", "subject_prefix", "object_prefix"]
448+ # if key in api_dict
449+ # }
450+
451+ # # Determine filtered API structure based on `bte` and `api_details`
452+ # if bte == 1 and api_details == 0:
453+ # filtered_api = {
454+ # **({"name": api_info.get("name")} if "name" in api_info else {}),
455+ # **(
456+ # {"smartapi": {"id": api_info.get("smartapi", {}).get("id", None)}}
457+ # if "smartapi" in api_info
458+ # else {"smartapi": {"id": None}}
459+ # ),
460+ # "bte": api_info.get("bte", {}),
461+ # }
462+ # elif api_details == 1:
463+ # # Covers both (bte=0, api_details=1) and (bte=1, api_details=1)
464+ # filtered_api = api_info.copy()
465+ # if bte == 0:
466+ # filtered_api.pop("bte", None)
467+ # # Check if the "ui" key exists and ends with "None"
468+ # if filtered_api['smartapi'].get("ui", "").endswith("/None"):
469+ # filtered_api["smartapi"]["ui"] = None
470+ # else: # bte == 0 and api_details == 0
471+ # filtered_api = {
472+ # **({"name": api_info.get("name")} if "name" in api_info else {}),
473+ # **(
474+ # {"smartapi": {"id": api_info.get("smartapi", {}).get("id", None)}}
475+ # if "smartapi" in api_info
476+ # else {"smartapi": {"id": None}}
477+ # ),
478+ # }
479+
480+ # # Add the filtered 'api' key to the preserved top-level structure
481+ # filtered_dict["api"] = filtered_api
482+
483+ # # Remove 'bte' from 'api' and move it to the top level
484+ # if "bte" in filtered_dict["api"]:
485+ # filtered_dict["bte"] = filtered_dict["api"].pop("bte")
486+
487+
488+ # return filtered_dict
489+
490+
491+ class MetaKGQueryHandler (QueryHandler , MetaKGHandlerMixin ):
444492 """
445493 Support metakg queries with biolink model's semantic descendants
446494
@@ -725,7 +773,7 @@ async def get(self, *args, **kwargs):
725773 self .finish (res )
726774
727775
728- class MetaKGParserHandler (MetaKGHandlerMixin , BaseHandler ):
776+ class MetaKGParserHandler (QueryHandler , MetaKGHandlerMixin ):
729777 """
730778 Handles parsing of SmartAPI metadata from a given URL or request body.
731779
@@ -753,12 +801,12 @@ class MetaKGParserHandler(MetaKGHandlerMixin, BaseHandler):
753801 "max" : 1000 ,
754802 "description" : "URL of the SmartAPI metadata to parse"
755803 },
756- "api_details" : {"type" : bool , "default" : 0 },
757- "bte" : {"type" : bool , "default" : 0 },
804+ "api_details" : {"type" : bool , "default" : False },
805+ "bte" : {"type" : bool , "default" : False },
758806 },
759807 "POST" : {
760- "api_details" : {"type" : bool , "default" : 0 },
761- "bte" : {"type" : bool , "default" : 0 },
808+ "api_details" : {"type" : bool , "default" : False },
809+ "bte" : {"type" : bool , "default" : False },
762810 },
763811 }
764812
@@ -783,18 +831,18 @@ def process_apis(self, apis):
783831 return apis
784832
785833 async def get (self , * args , ** kwargs ):
786- url = self .get_argument ( " url" , None )
787- if not self . get_argument ( " url" , None ) :
834+ url = self .args . url
835+ if not url :
788836 raise HTTPError (400 , reason = "A url value is expected for the request, please provide a url." )
789837
790838 # Set initial args and handle potential errors in query parameters
791839 parser = MetaKGParser ()
792840
793- try :
794- self .args .api_details = int (self .get_argument ("api_details" , 0 ))
795- self .args .bte = int (self .get_argument ("bte" , 0 ))
796- except ValueError as err :
797- raise HTTPError (400 , reason = f"Invalid value for parameter: { str (err )} . Please enter integer, 0 or 1." )
841+ # try:
842+ # self.args.api_details = int(self.get_argument("api_details", 0))
843+ # self.args.bte = int(self.get_argument("bte", 0))
844+ # except ValueError as err:
845+ # raise HTTPError(400, reason=f"Invalid value for parameter: {str(err)}. Please enter integer, 0 or 1.")
798846
799847 try :
800848 trapi_data = parser .get_TRAPI_metadatas (data = None , url = url )
@@ -831,11 +879,11 @@ async def get(self, *args, **kwargs):
831879 self .finish (response )
832880
833881 async def post (self , * args , ** kwargs ):
834- if not self .request .body :
882+ raw_body = self .request .body
883+ if not raw_body :
835884 raise HTTPError (400 , reason = "Request body cannot be empty." )
836885
837886 content_type = self .request .headers .get ("Content-Type" , "" ).lower ()
838- raw_body = self .request .body
839887
840888 # Try to parse the request body based on content type
841889 try :
@@ -859,11 +907,11 @@ async def post(self, *args, **kwargs):
859907 raise ValueError ("Invalid input data type. Please provide a valid JSON/YAML object." )
860908
861909 # Extract query parameters (assuming these need to be parsed from the request)
862- try :
863- self .args .api_details = int (self .get_argument ("api_details" , 0 ))
864- self .args .bte = int (self .get_argument ("bte" , 0 ))
865- except ValueError as err :
866- raise HTTPError (400 , reason = f"Invalid query parameter: { str (err )} " )
910+ # try:
911+ # self.args.api_details = int(self.get_argument("api_details", 0))
912+ # self.args.bte = int(self.get_argument("bte", 0))
913+ # except ValueError as err:
914+ # raise HTTPError(400, reason=f"Invalid query parameter: {str(err)}")
867915
868916 # Process the parsed metadata
869917 parser = MetaKGParser ()
0 commit comments