Skip to content

Commit dec2502

Browse files
committed
exchanged basehandler for queryhandler in metakgparserhandler, removed old testing code
1 parent 220e4a3 commit dec2502

File tree

2 files changed

+83
-41
lines changed

2 files changed

+83
-41
lines changed

src/controller/smartapi.py

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -369,14 +369,8 @@ def is_trapi(self):
369369
"""return True if a TRAPI"""
370370
return self.has_tags("trapi", "translator")
371371

372-
def get_metakg(self, include_trapi=True, metadata_url=False):
373-
if metadata_url:
374-
data_id = decoder.get_id(self.url)
375-
doc = self.get(data_id)
376-
self._doc = doc._doc
377-
raw_metadata = decoder.to_dict(decoder.decompress(doc._doc._raw))
378-
else:
379-
raw_metadata = decoder.to_dict(decoder.decompress(self._doc._raw))
372+
def get_metakg(self, include_trapi=True):
373+
raw_metadata = decoder.to_dict(decoder.decompress(self._doc._raw))
380374
mkg_parser = MetaKGParser()
381375
extra_data = {"id": self._id, "url": self.url}
382376
self.metakg_errors = None # reset metakg_errors

src/handlers/api.py

Lines changed: 81 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
from builtins import ValueError, isinstance
21
import asyncio
32
import json
43
import 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

Comments
 (0)