Skip to content

Commit a1b67dd

Browse files
committed
ongoing
1 parent 0ddb6f9 commit a1b67dd

File tree

8 files changed

+1207
-463
lines changed

8 files changed

+1207
-463
lines changed

api/specs/storage/_datasets.py

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
import logging
2+
3+
from aiohttp import web
4+
from aiohttp.web import RouteTableDef
5+
from common_library.json_serialization import json_dumps
6+
from models_library.api_schemas_storage import FileMetaDataGet
7+
from models_library.utils.fastapi_encoders import jsonable_encoder
8+
from servicelib.aiohttp.requests_validation import (
9+
parse_request_path_parameters_as,
10+
parse_request_query_parameters_as,
11+
)
12+
13+
# Exclusive for simcore-s3 storage -----------------------
14+
from ..._meta import API_VTAG
15+
from ...dsm import get_dsm_provider
16+
from ...models import (
17+
FileMetaData,
18+
FilesMetadataDatasetPathParams,
19+
FilesMetadataDatasetQueryParams,
20+
LocationPathParams,
21+
StorageQueryParamsBase,
22+
)
23+
24+
_logger = logging.getLogger(__name__)
25+
26+
routes = RouteTableDef()
27+
28+
29+
@routes.get(
30+
f"/{API_VTAG}/locations/{{location_id}}/datasets", name="list_datasets_metadata"
31+
)
32+
async def list_datasets_metadata(request: web.Request) -> web.Response:
33+
query_params: StorageQueryParamsBase = parse_request_query_parameters_as(
34+
StorageQueryParamsBase, request
35+
)
36+
path_params = parse_request_path_parameters_as(LocationPathParams, request)
37+
_logger.debug(
38+
"received call to list_datasets_metadata with %s",
39+
f"{path_params=}, {query_params=}",
40+
)
41+
42+
dsm = get_dsm_provider(request.app).get(path_params.location_id)
43+
return web.json_response(
44+
{"data": await dsm.list_datasets(query_params.user_id)}, dumps=json_dumps
45+
)
46+
47+
48+
@routes.get(
49+
f"/{API_VTAG}/locations/{{location_id}}/datasets/{{dataset_id}}/metadata",
50+
name="list_dataset_files_metadata",
51+
)
52+
async def list_dataset_files_metadata(request: web.Request) -> web.Response:
53+
query_params: FilesMetadataDatasetQueryParams = parse_request_query_parameters_as(
54+
FilesMetadataDatasetQueryParams, request
55+
)
56+
path_params = parse_request_path_parameters_as(
57+
FilesMetadataDatasetPathParams, request
58+
)
59+
_logger.debug(
60+
"received call to list_dataset_files_metadata with %s",
61+
f"{path_params=}, {query_params=}",
62+
)
63+
dsm = get_dsm_provider(request.app).get(path_params.location_id)
64+
data: list[FileMetaData] = await dsm.list_files_in_dataset(
65+
user_id=query_params.user_id,
66+
dataset_id=path_params.dataset_id,
67+
expand_dirs=query_params.expand_dirs,
68+
)
69+
return web.json_response(
70+
{"data": [jsonable_encoder(FileMetaDataGet(**d.model_dump())) for d in data]},
71+
dumps=json_dumps,
72+
)

0 commit comments

Comments
 (0)