Skip to content

Commit

Permalink
feature: added fhirservice concrete class
Browse files Browse the repository at this point in the history
  • Loading branch information
anubhuti24 committed Jul 9, 2024
1 parent 5466e56 commit 3000f72
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 1 deletion.
6 changes: 5 additions & 1 deletion personal_graph/database/externalservice.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,11 @@ def disconnect(self):

@abstractmethod
def execute_request(
self, method: str, endpoint: str, data: Optional[Dict] = None
self,
method: str,
endpoint: str,
data: Optional[Dict] = None,
params: Optional[Dict] = None,
) -> Any:
"""Execute a REST API request to the external service"""
pass
Empty file.
62 changes: 62 additions & 0 deletions personal_graph/database/fhirservice/fhirservice.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
import requests
from fastapi import HTTPException
from typing import List, Any, Dict, Optional

from personal_graph.database.externalservice import ExternalService


class FhirService(ExternalService):
def __init__(self, ontologies: Optional[List[Any]] = None):
if not ontologies:
raise ValueError("Ontology not provided")

self.ontologies = ontologies
self.base_url = ""
self.session = requests.Session()

def connect(self, url: str):
self.base_url = url

def disconnect(self):
self.session.close()

def execute_request(
self,
method: str,
endpoint: str,
data: Optional[Dict] = None,
params: Optional[Dict] = None,
) -> Any:
url = f"{self.base_url}/{endpoint}"
try:
response = self.session.request(method, url, json=data, params=params)
response.raise_for_status()
return response.json()
except requests.HTTPError as e:
if e.response.status_code == 422:
raise HTTPException(
status_code=422,
detail="Validation error: " + str(e.response.json()),
)
else:
raise

def add_node(self, db_url: str, label: str, attribute: Dict):
try:
params = {
"db_url": db_url,
"resource_type": label,
}

response = self.execute_request(
method="POST", endpoint=label, data=attribute, params=params
)
return response
except requests.HTTPError as e:
if e.response.status_code == 422:
error_detail = e.response.json()
raise HTTPException(
status_code=422, detail="Validation error: " + str(error_detail)
)
else:
raise

0 comments on commit 3000f72

Please sign in to comment.