Skip to content

Commit 664e796

Browse files
committed
@sanderegg review: refactor schemas
1 parent a0911f5 commit 664e796

File tree

11 files changed

+295
-256
lines changed

11 files changed

+295
-256
lines changed

api/specs/web-server/_nih_sparc.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from fastapi import APIRouter
99
from models_library.generics import Envelope
1010
from simcore_service_webserver._meta import API_VTAG
11-
from simcore_service_webserver.studies_dispatcher._rest_handlers import (
11+
from simcore_service_webserver.studies_dispatcher._controller.rest.nih_schemas import (
1212
ServiceGet,
1313
Viewer,
1414
)
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import logging
2+
3+
from aiohttp import web
4+
5+
from ...login.decorators import login_required
6+
from .._controller.rest.redirects import get_redirection_to_viewer
7+
from ..settings import StudiesDispatcherSettings
8+
from .rest.nih import routes as nih_routes
9+
from .rest.redirects import get_redirection_to_viewer
10+
11+
_logger = logging.getLogger(__name__)
12+
13+
14+
def setup_controller(app: web.Application, settings: StudiesDispatcherSettings):
15+
# routes
16+
redirect_handler = get_redirection_to_viewer
17+
if settings.is_login_required():
18+
redirect_handler = login_required(get_redirection_to_viewer)
19+
20+
_logger.info(
21+
"'%s' config explicitly disables anonymous users from this feature",
22+
__name__,
23+
)
24+
25+
app.router.add_routes(
26+
[web.get("/view", redirect_handler, name="get_redirection_to_viewer")]
27+
)
28+
29+
app.router.add_routes(nih_routes)

services/web/server/src/simcore_service_webserver/studies_dispatcher/_controller/rest/__init__.py

Whitespace-only changes.
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
"""Handles requests to the Rest API"""
2+
3+
import logging
4+
5+
from aiohttp import web
6+
from aiohttp.web import Request
7+
from pydantic import (
8+
ValidationError,
9+
)
10+
11+
from ...._meta import API_VTAG
12+
from ....products import products_web
13+
from ....utils_aiohttp import envelope_json_response
14+
from ..._catalog import iter_latest_product_services
15+
from ..._core import list_viewers_info
16+
from .nih_schemas import ServiceGet, Viewer
17+
18+
_logger = logging.getLogger(__name__)
19+
20+
21+
routes = web.RouteTableDef()
22+
23+
24+
@routes.get(f"/{API_VTAG}/services", name="list_latest_services")
25+
async def list_latest_services(request: Request):
26+
"""Returns a list latest version of services"""
27+
product_name = products_web.get_product_name(request)
28+
29+
services = []
30+
async for service_data in iter_latest_product_services(
31+
request.app, product_name=product_name
32+
):
33+
try:
34+
service = ServiceGet.create(service_data, request)
35+
services.append(service)
36+
except ValidationError as err:
37+
_logger.debug("Invalid %s: %s", f"{service_data=}", err)
38+
39+
return envelope_json_response(services)
40+
41+
42+
@routes.get(f"/{API_VTAG}/viewers", name="list_viewers")
43+
async def list_viewers(request: Request):
44+
# filter: file_type=*
45+
file_type: str | None = request.query.get("file_type", None)
46+
47+
viewers = [
48+
Viewer.create(request, viewer).model_dump()
49+
for viewer in await list_viewers_info(request.app, file_type=file_type)
50+
]
51+
return envelope_json_response(viewers)
52+
53+
54+
@routes.get(f"/{API_VTAG}/viewers/default", name="list_default_viewers")
55+
async def list_default_viewers(request: Request):
56+
# filter: file_type=*
57+
file_type: str | None = request.query.get("file_type", None)
58+
59+
viewers = [
60+
Viewer.create(request, viewer).model_dump()
61+
for viewer in await list_viewers_info(
62+
request.app, file_type=file_type, only_default=True
63+
)
64+
]
65+
return envelope_json_response(viewers)

services/web/server/src/simcore_service_webserver/studies_dispatcher/_rest_handlers.py renamed to services/web/server/src/simcore_service_webserver/studies_dispatcher/_controller/rest/nih_schemas.py

Lines changed: 3 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
"""Handles requests to the Rest API"""
2-
31
import logging
42
from dataclasses import asdict
53

@@ -12,18 +10,13 @@
1210
ConfigDict,
1311
Field,
1412
TypeAdapter,
15-
ValidationError,
1613
field_validator,
1714
)
1815
from pydantic.networks import HttpUrl
1916

20-
from .._meta import API_VTAG
21-
from ..products import products_web
22-
from ..utils_aiohttp import envelope_json_response
23-
from ._catalog import ServiceMetaData, iter_latest_product_services
24-
from ._controller_rest_redirects import ViewerQueryParams
25-
from ._core import list_viewers_info
26-
from ._models import ViewerInfo
17+
from ..._catalog import ServiceMetaData
18+
from ..._models import ViewerInfo
19+
from .redirects_schemas import ViewerQueryParams
2720

2821
_logger = logging.getLogger(__name__)
2922

@@ -149,55 +142,3 @@ def remove_dot_prefix_from_extension(cls, v):
149142
}
150143
}
151144
)
152-
153-
154-
#
155-
# API Handlers
156-
#
157-
158-
159-
routes = web.RouteTableDef()
160-
161-
162-
@routes.get(f"/{API_VTAG}/services", name="list_latest_services")
163-
async def list_latest_services(request: Request):
164-
"""Returns a list latest version of services"""
165-
product_name = products_web.get_product_name(request)
166-
167-
services = []
168-
async for service_data in iter_latest_product_services(
169-
request.app, product_name=product_name
170-
):
171-
try:
172-
service = ServiceGet.create(service_data, request)
173-
services.append(service)
174-
except ValidationError as err:
175-
_logger.debug("Invalid %s: %s", f"{service_data=}", err)
176-
177-
return envelope_json_response(services)
178-
179-
180-
@routes.get(f"/{API_VTAG}/viewers", name="list_viewers")
181-
async def list_viewers(request: Request):
182-
# filter: file_type=*
183-
file_type: str | None = request.query.get("file_type", None)
184-
185-
viewers = [
186-
Viewer.create(request, viewer).model_dump()
187-
for viewer in await list_viewers_info(request.app, file_type=file_type)
188-
]
189-
return envelope_json_response(viewers)
190-
191-
192-
@routes.get(f"/{API_VTAG}/viewers/default", name="list_default_viewers")
193-
async def list_default_viewers(request: Request):
194-
# filter: file_type=*
195-
file_type: str | None = request.query.get("file_type", None)
196-
197-
viewers = [
198-
Viewer.create(request, viewer).model_dump()
199-
for viewer in await list_viewers_info(
200-
request.app, file_type=file_type, only_default=True
201-
)
202-
]
203-
return envelope_json_response(viewers)

0 commit comments

Comments
 (0)