Skip to content

Commit f88c795

Browse files
committed
locations
1 parent 344b9e6 commit f88c795

File tree

1 file changed

+30
-41
lines changed
  • services/storage/src/simcore_service_storage/api/rest

1 file changed

+30
-41
lines changed
Lines changed: 30 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,23 @@
11
import asyncio
22
import logging
3-
from typing import cast
3+
from typing import Annotated, cast
44

5-
from aiohttp import web
6-
from aiohttp.web import RouteTableDef
7-
from common_library.json_serialization import json_dumps
5+
from fastapi import APIRouter, Depends, HTTPException, Request
86
from models_library.api_schemas_storage import FileLocation
7+
from models_library.generics import Envelope
98
from models_library.projects_nodes_io import StorageFileID
9+
from servicelib.aiohttp import status
1010
from servicelib.aiohttp.application_keys import (
1111
APP_CONFIG_KEY,
1212
APP_FIRE_AND_FORGET_TASKS_KEY,
1313
)
14-
from servicelib.aiohttp.requests_validation import (
15-
parse_request_path_parameters_as,
16-
parse_request_query_parameters_as,
17-
)
1814
from servicelib.utils import fire_and_forget_task
1915

2016
# Exclusive for simcore-s3 storage -----------------------
21-
from ..._meta import API_VTAG
2217
from ...core.settings import ApplicationSettings
2318
from ...dsm import get_dsm_provider
2419
from ...models import (
25-
LocationPathParams,
20+
LocationID,
2621
StorageQueryParamsBase,
2722
SyncMetadataQueryParams,
2823
SyncMetadataResponse,
@@ -31,43 +26,43 @@
3126

3227
_logger = logging.getLogger(__name__)
3328

34-
routes = RouteTableDef()
29+
router = APIRouter(
30+
tags=["locations"],
31+
)
3532

3633

3734
# HANDLERS ---------------------------------------------------
38-
@routes.get(f"/{API_VTAG}/locations", name="list_storage_locations")
39-
async def list_storage_locations(request: web.Request) -> web.Response:
40-
query_params: StorageQueryParamsBase = parse_request_query_parameters_as(
41-
StorageQueryParamsBase, request
42-
)
43-
_logger.debug(
44-
"received call to list_storage_locations with %s",
45-
f"{query_params=}",
46-
)
35+
@router.get(
36+
"/locations",
37+
status_code=status.HTTP_200_OK,
38+
response_model=Envelope[list[FileLocation]],
39+
)
40+
async def list_storage_locations(
41+
query_params: Annotated[StorageQueryParamsBase, Depends()], request: Request
42+
):
4743
dsm_provider = get_dsm_provider(request.app)
4844
location_ids = dsm_provider.locations()
4945
locs: list[FileLocation] = []
5046
for loc_id in location_ids:
5147
dsm = dsm_provider.get(loc_id)
5248
if await dsm.authorized(query_params.user_id):
5349
locs.append(FileLocation(name=dsm.location_name, id=dsm.location_id))
54-
55-
return web.json_response({"error": None, "data": locs}, dumps=json_dumps)
50+
return Envelope[list[FileLocation]](data=locs)
5651

5752

58-
@routes.post(
59-
f"/{API_VTAG}/locations/{{location_id}}:sync", name="synchronise_meta_data_table"
53+
@router.post(
54+
"/locations/{location_id}:sync", response_model=Envelope[SyncMetadataResponse]
6055
)
61-
async def synchronise_meta_data_table(request: web.Request) -> web.Response:
62-
query_params: SyncMetadataQueryParams = parse_request_query_parameters_as(
63-
SyncMetadataQueryParams, request
64-
)
65-
path_params = parse_request_path_parameters_as(LocationPathParams, request)
66-
_logger.debug(
67-
"received call to synchronise_meta_data_table with %s",
68-
f"{path_params=}, {query_params=}",
69-
)
70-
56+
async def synchronise_meta_data_table(
57+
query_params: Annotated[SyncMetadataQueryParams, Depends()],
58+
location_id: LocationID,
59+
request: Request,
60+
):
61+
if not location_id == SimcoreS3DataManager.get_location_id():
62+
raise HTTPException(
63+
status.HTTP_400_BAD_REQUEST,
64+
detail="invalid call: cannot be called for other than simcore",
65+
)
7166
dsm = cast(
7267
SimcoreS3DataManager,
7368
get_dsm_provider(request.app).get(SimcoreS3DataManager.get_location_id()),
@@ -101,10 +96,4 @@ async def _go():
10196
fire_and_forget=query_params.fire_and_forget,
10297
dry_run=query_params.dry_run,
10398
)
104-
return web.json_response(
105-
{
106-
"error": None,
107-
"data": response,
108-
},
109-
dumps=json_dumps,
110-
)
99+
return Envelope[SyncMetadataResponse](data=response)

0 commit comments

Comments
 (0)