Skip to content

Commit 396c282

Browse files
committed
@sanderegg review: refactor schemas
1 parent a0911f5 commit 396c282

File tree

10 files changed

+96
-88
lines changed

10 files changed

+96
-88
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
)

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

Whitespace-only changes.

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)
Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,36 +15,36 @@
1515
from servicelib.aiohttp.typing_extension import Handler
1616
from servicelib.logging_errors import create_troubleshootting_log_kwargs
1717

18-
from ..dynamic_scheduler import api as dynamic_scheduler_service
19-
from ..exception_handling import create_error_context_from_request
20-
from ..products import products_web
21-
from ..utils import compose_support_error_msg
22-
from ..utils_aiohttp import create_redirect_to_page_response, get_api_base_url
23-
from ._catalog import ValidService, validate_requested_service
24-
from ._constants import MSG_UNEXPECTED_DISPATCH_ERROR
25-
from ._controller_rest_redirects_schemas import (
26-
FileQueryParams,
27-
RedirectionQueryParams,
28-
ServiceAndFileParams,
29-
ServiceQueryParams,
30-
)
31-
from ._core import validate_requested_file, validate_requested_viewer
32-
from ._errors import (
18+
from ....dynamic_scheduler import api as dynamic_scheduler_service
19+
from ....exception_handling import create_error_context_from_request
20+
from ....products import products_web
21+
from ....utils import compose_support_error_msg
22+
from ....utils_aiohttp import create_redirect_to_page_response, get_api_base_url
23+
from ..._catalog import ValidService, validate_requested_service
24+
from ..._constants import MSG_UNEXPECTED_DISPATCH_ERROR
25+
from ..._core import validate_requested_file, validate_requested_viewer
26+
from ..._errors import (
3327
FileToLargeError,
3428
GuestUserNotAllowedError,
3529
GuestUsersLimitError,
3630
IncompatibleServiceError,
3731
InvalidRedirectionParamsError,
3832
ProjectWorkbenchMismatchError,
3933
)
40-
from ._models import ServiceInfo, ViewerInfo
41-
from ._projects import (
34+
from ..._models import ServiceInfo, ViewerInfo
35+
from ..._projects import (
4236
get_or_create_project_with_file,
4337
get_or_create_project_with_file_and_service,
4438
get_or_create_project_with_service,
4539
)
46-
from ._users import UserInfo, ensure_authentication, get_or_create_guest_user
47-
from .settings import get_plugin_settings
40+
from ..._users import UserInfo, ensure_authentication, get_or_create_guest_user
41+
from ...settings import get_plugin_settings
42+
from .redirects_schemas import (
43+
FileQueryParams,
44+
RedirectionQueryParams,
45+
ServiceAndFileParams,
46+
ServiceQueryParams,
47+
)
4848

4949
_logger = logging.getLogger(__name__)
5050

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from models_library.services import ServiceKey, ServiceVersion
55
from pydantic import BaseModel, ConfigDict, field_validator
66

7-
from ._models import FileParams, ServiceParams, ViewerInfo
7+
from ..._models import FileParams, ServiceParams, ViewerInfo
88

99

1010
class ServiceQueryParams(ServiceParams):

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55

66
from ..login.decorators import login_required
77
from ..products.plugin import setup_products
8-
from . import _rest_handlers
9-
from ._controller_rest_redirects import get_redirection_to_viewer
8+
from ._controller.rest import nih as _controller_rest_nih
9+
from ._controller.rest.redirects import get_redirection_to_viewer
1010
from ._projects_permalinks import setup_projects_permalinks
1111
from ._studies_access import get_redirection_to_study_page
1212
from .settings import StudiesDispatcherSettings, get_plugin_settings
@@ -62,6 +62,6 @@ def setup_studies_dispatcher(app: web.Application) -> bool:
6262
[web.get("/view", redirect_handler, name="get_redirection_to_viewer")]
6363
)
6464

65-
app.router.add_routes(_rest_handlers.routes)
65+
app.router.add_routes(_controller_rest_nih.routes)
6666

6767
return True

services/web/server/tests/unit/isolated/test_studies_dispatcher_models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from models_library.utils.pydantic_tools_extension import parse_obj_or_none
1414
from pydantic import ByteSize, TypeAdapter
1515
from servicelib.aiohttp.requests_validation import parse_request_query_parameters_as
16-
from simcore_service_webserver.studies_dispatcher._controller_rest_redirects_schemas import (
16+
from simcore_service_webserver.studies_dispatcher._controller.rest.redirects_schemas import (
1717
FileQueryParams,
1818
ServiceAndFileParams,
1919
)

services/web/server/tests/unit/with_dbs/04/studies_dispatcher/test_studies_dispatcher_handlers.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,10 @@
3434
from settings_library.rabbit import RabbitSettings
3535
from settings_library.redis import RedisSettings
3636
from settings_library.utils_session import DEFAULT_SESSION_COOKIE_NAME
37+
from simcore_service_webserver.studies_dispatcher._controller.rest.nih_schemas import (
38+
ServiceGet,
39+
)
3740
from simcore_service_webserver.studies_dispatcher._core import ViewerInfo
38-
from simcore_service_webserver.studies_dispatcher._rest_handlers import ServiceGet
3941
from sqlalchemy.sql import text
4042
from yarl import URL
4143

0 commit comments

Comments
 (0)