From 5bd2501402b2ff5b7134fb40264f838c22587f81 Mon Sep 17 00:00:00 2001 From: Kevin Schaper Date: Fri, 11 Aug 2023 11:32:26 -0700 Subject: [PATCH] An alternate approach to controlling how oak is initialized on startup to see how it behaves on gcp --- backend/src/monarch_py/api/association.py | 2 +- backend/src/monarch_py/api/config.py | 10 ++++++++-- backend/src/monarch_py/api/entity.py | 4 ++-- backend/src/monarch_py/api/histopheno.py | 2 +- backend/src/monarch_py/api/main.py | 9 ++++++++- backend/src/monarch_py/api/search.py | 4 ++-- backend/src/monarch_py/api/semsim.py | 4 ++-- 7 files changed, 24 insertions(+), 11 deletions(-) diff --git a/backend/src/monarch_py/api/association.py b/backend/src/monarch_py/api/association.py index 27bd4caa1..e00fd61ce 100644 --- a/backend/src/monarch_py/api/association.py +++ b/backend/src/monarch_py/api/association.py @@ -23,7 +23,7 @@ async def _get_associations( pagination: PaginationParams = Depends(), ) -> AssociationResults: """Retrieves all associations for a given entity, or between two entities.""" - response = solr.get_associations( + response = solr().get_associations( category=category, predicate=predicate, subject=subject, diff --git a/backend/src/monarch_py/api/config.py b/backend/src/monarch_py/api/config.py index 76e316e1b..119c74fa6 100644 --- a/backend/src/monarch_py/api/config.py +++ b/backend/src/monarch_py/api/config.py @@ -15,6 +15,12 @@ class Settings(BaseSettings): settings = Settings() -solr = SolrImplementation(base_url=settings.solr_url) -oak = OakImplementation().init_semsim() +@lru_cache(maxsize=1) +def solr(): + return SolrImplementation(settings.solr_url) + + +@lru_cache(maxsize=1) +def oak(): + return OakImplementation().init_semsim() \ No newline at end of file diff --git a/backend/src/monarch_py/api/entity.py b/backend/src/monarch_py/api/entity.py index cab746787..c84669a5d 100644 --- a/backend/src/monarch_py/api/entity.py +++ b/backend/src/monarch_py/api/entity.py @@ -26,7 +26,7 @@ async def _get_entity( Returns: Node: Entity details for the specified id """ - response = solr.get_entity(id, extra=True) + response = solr().get_entity(id, extra=True) if response is None: raise HTTPException(status_code=404, detail="Entity not found") return Node(**response.__dict__) # This is an odd consequence of how Node extends Entity @@ -59,7 +59,7 @@ def _association_table( Returns: AssociationResults: Association table data for the specified entity and association type """ - response = solr.get_association_table( + response = solr().get_association_table( entity=id, category=category, q=query, offset=pagination.offset, limit=pagination.limit ) return response diff --git a/backend/src/monarch_py/api/histopheno.py b/backend/src/monarch_py/api/histopheno.py index 4925463de..72b54829b 100644 --- a/backend/src/monarch_py/api/histopheno.py +++ b/backend/src/monarch_py/api/histopheno.py @@ -12,7 +12,7 @@ @router.get("/{id}") async def _get_histopheno(id) -> HistoPheno: """Retrieves the entity with the specified id""" - response = solr.get_histopheno(id) + response = solr().get_histopheno(id) if response is None: raise HTTPException(status_code=404, detail="Entity not found") diff --git a/backend/src/monarch_py/api/main.py b/backend/src/monarch_py/api/main.py index 7a785cde0..d222a16bc 100644 --- a/backend/src/monarch_py/api/main.py +++ b/backend/src/monarch_py/api/main.py @@ -3,13 +3,20 @@ from fastapi.middleware.cors import CORSMiddleware from fastapi.responses import RedirectResponse from monarch_py.api import association, entity, histopheno, search, semsim +from monarch_py.api.config import oak PREFIX = "/v3/api" + app = FastAPI( docs_url="/v3/docs", redoc_url="/v3/redoc", - on_startup=[], ) + + +@app.on_event('startup') +async def initialize_app(): + oak() + app.include_router(entity.router, prefix=f"{PREFIX}/entity") app.include_router(association.router, prefix=f"{PREFIX}/association") app.include_router(search.router, prefix=PREFIX) diff --git a/backend/src/monarch_py/api/search.py b/backend/src/monarch_py/api/search.py index c49529cfe..ac09b618d 100644 --- a/backend/src/monarch_py/api/search.py +++ b/backend/src/monarch_py/api/search.py @@ -31,7 +31,7 @@ async def search( EntityResults """ facet_fields = ["category", "in_taxon_label"] - response = solr.search( + response = solr().search( q=q, category=category, in_taxon_label=taxon, @@ -53,5 +53,5 @@ async def autocomplete(q: str) -> SearchResults: Returns: SearchResults """ - response = solr.autocomplete(q=q) + response = solr().autocomplete(q=q) return response diff --git a/backend/src/monarch_py/api/semsim.py b/backend/src/monarch_py/api/semsim.py index c58688773..07928bded 100644 --- a/backend/src/monarch_py/api/semsim.py +++ b/backend/src/monarch_py/api/semsim.py @@ -25,7 +25,7 @@ def _compare( subjects: {subjects.split(',')} objects: {objects.split(',')} """) - results = oak.compare( + results = oak().compare( subjects=subjects.split(","), objects=objects.split(","), ) @@ -48,4 +48,4 @@ def _post_compare( } """ - return oak.compare(subjects, objects) + return oak().compare(subjects, objects)