Skip to content

Commit 17ba3af

Browse files
committed
refactor: update scicrunch service integration and improve dependency management
1 parent 64cf911 commit 17ba3af

File tree

7 files changed

+40
-17
lines changed

7 files changed

+40
-17
lines changed

services/web/server/src/simcore_service_webserver/groups/_classifiers_rest.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from .._meta import API_VTAG
1010
from ..login.decorators import login_required
1111
from ..scicrunch.models import ResourceHit
12-
from ..scicrunch.scicrunch_service import ScicrunchResourcesService
12+
from ..scicrunch.scicrunch_service import SCICRUNCH_SERVICE_APPKEY
1313
from ..security.decorators import permission_required
1414
from ..utils_aiohttp import envelope_json_response
1515
from ._classifiers_service import GroupClassifiersService
@@ -50,7 +50,7 @@ async def get_group_classifiers(request: web.Request):
5050
async def get_scicrunch_resource(request: web.Request):
5151
rrid = request.match_info["rrid"]
5252

53-
service = ScicrunchResourcesService(request.app)
53+
service = request.app[SCICRUNCH_SERVICE_APPKEY]
5454
resource = await service.get_or_fetch_research_resource(rrid)
5555

5656
return envelope_json_response(resource.model_dump())
@@ -66,7 +66,7 @@ async def get_scicrunch_resource(request: web.Request):
6666
async def add_scicrunch_resource(request: web.Request):
6767
rrid = request.match_info["rrid"]
6868

69-
service = ScicrunchResourcesService(request.app)
69+
service = request.app[SCICRUNCH_SERVICE_APPKEY]
7070
resource = await service.create_research_resource(rrid)
7171

7272
return envelope_json_response(resource.model_dump())
@@ -82,7 +82,7 @@ async def add_scicrunch_resource(request: web.Request):
8282
async def search_scicrunch_resources(request: web.Request):
8383
guess_name = str(request.query["guess_name"]).strip()
8484

85-
service = ScicrunchResourcesService(request.app)
85+
service = request.app[SCICRUNCH_SERVICE_APPKEY]
8686
hits: list[ResourceHit] = await service.search_research_resources(guess_name)
8787

8888
return envelope_json_response([hit.model_dump() for hit in hits])

services/web/server/src/simcore_service_webserver/groups/plugin.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import logging
22

33
from aiohttp import web
4+
from simcore_service_webserver.scicrunch.plugin import setup_scicrunch
45

56
from ..application_keys import APP_SETTINGS_APPKEY
67
from ..application_setup import ModuleCategory, app_setup_func
@@ -22,6 +23,7 @@ def setup_groups(app: web.Application):
2223

2324
# plugin dependencies
2425
setup_products(app)
26+
setup_scicrunch(app)
2527

2628
app.router.add_routes(_groups_rest.routes)
2729
app.router.add_routes(_classifiers_rest.routes)

services/web/server/src/simcore_service_webserver/scicrunch/_service.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
import logging
66

7-
from aiohttp import web
87
from common_library.logging.logging_errors import create_troubleshooting_log_kwargs
98
from pydantic import HttpUrl, ValidationError
109

@@ -21,11 +20,10 @@ class ScicrunchResourcesService:
2120
- Research Resources operations (RRID = Research Resource ID)
2221
"""
2322

24-
def __init__(self, app: web.Application):
25-
self.app = app
26-
self._repo = ScicrunchResourcesRepository.create_from_app(app)
23+
def __init__(self, repo: ScicrunchResourcesRepository, client: SciCrunch):
24+
self._repo = repo
2725
# client to interact with scicrunch.org service
28-
self._client = SciCrunch.get_instance(self.app)
26+
self._client = client
2927

3028
async def list_research_resources(self) -> list[ResearchResource]:
3129
"""List all research resources as domain models."""

services/web/server/src/simcore_service_webserver/scicrunch/plugin.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,12 @@
55
import logging
66

77
from aiohttp import web
8+
from conftest import app
9+
from simcore_service_webserver.scicrunch._repository import ScicrunchResourcesRepository
810

911
from ..application_setup import ModuleCategory, app_setup_func
12+
from ._service import ScicrunchResourcesService
13+
from .scicrunch_service import SCICRUNCH_SERVICE_APPKEY
1014
from .service_client import SciCrunch
1115
from .settings import get_plugin_settings
1216

@@ -15,8 +19,16 @@
1519

1620
async def _on_startup(app: web.Application):
1721
settings = get_plugin_settings(app)
18-
api = SciCrunch.acquire_instance(app, settings)
19-
assert api == SciCrunch.get_instance(app) # nosec
22+
23+
client = SciCrunch.acquire_instance(app, settings)
24+
assert client == SciCrunch.get_instance(app) # nosec
25+
26+
service = ScicrunchResourcesService(
27+
repo=ScicrunchResourcesRepository.create_from_app(app),
28+
client=SciCrunch.get_instance(app),
29+
)
30+
31+
app[SCICRUNCH_SERVICE_APPKEY] = service
2032

2133

2234
@app_setup_func(
Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,13 @@
1+
from typing import Final
2+
3+
from aiohttp import web
4+
15
from ._service import ScicrunchResourcesService
26

3-
__all__: tuple[str, ...] = ("ScicrunchResourcesService",)
7+
SCICRUNCH_SERVICE_APPKEY: Final = web.AppKey(
8+
ScicrunchResourcesService.__name__, ScicrunchResourcesService
9+
)
10+
11+
12+
__all__: tuple[str, ...] = ("SCICRUNCH_SERVICE_APPKEY",)
413
# nopycln: file

services/web/server/src/simcore_service_webserver/scicrunch/service_client.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,15 +61,15 @@ def acquire_instance(
6161
cls, app: web.Application, settings: SciCrunchSettings
6262
) -> "SciCrunch":
6363
"""Returns single instance for the application and stores it"""
64-
obj: SciCrunch | None = app.get(_SCICRUNCH_APPKEY)
64+
obj: SciCrunch | None = app.get(SCICRUNCH_CLIENT_APPKEY)
6565
if obj is None:
6666
session = get_client_session(app)
67-
app[_SCICRUNCH_APPKEY] = obj = cls(session, settings)
67+
app[SCICRUNCH_CLIENT_APPKEY] = obj = cls(session, settings)
6868
return obj
6969

7070
@classmethod
7171
def get_instance(cls, app: web.Application) -> "SciCrunch":
72-
obj: SciCrunch | None = app.get(_SCICRUNCH_APPKEY)
72+
obj: SciCrunch | None = app.get(SCICRUNCH_CLIENT_APPKEY)
7373
if obj is None:
7474
raise ScicrunchConfigError(
7575
details="Services on scicrunch.org are currently disabled"
@@ -174,4 +174,4 @@ async def search_resource(self, name_as: str) -> list[ResourceHit]:
174174
return hits.root
175175

176176

177-
_SCICRUNCH_APPKEY: Final = web.AppKey(SciCrunch.__name__, SciCrunch)
177+
SCICRUNCH_CLIENT_APPKEY: Final = web.AppKey(SciCrunch.__name__, SciCrunch)

services/web/server/tests/unit/isolated/scicrunch/test_scicrunch_service_client.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919
from servicelib.aiohttp.application import create_safe_application
2020
from servicelib.aiohttp.client_session import get_client_session
2121
from simcore_service_webserver.application_settings import setup_settings
22-
from simcore_service_webserver.scicrunch.plugin import setup_scicrunch
22+
from simcore_service_webserver.scicrunch.plugin import (
23+
setup_scicrunch,
24+
)
2325
from simcore_service_webserver.scicrunch.service_client import (
2426
ResearchResource,
2527
SciCrunch,

0 commit comments

Comments
 (0)