|
| 1 | +import logging |
| 2 | +from typing import Annotated |
| 3 | + |
| 4 | +from fastapi import APIRouter, Depends, Request |
| 5 | +from models_library.api_schemas_storage import DatasetMetaDataGet, FileMetaDataGet |
| 6 | +from models_library.generics import Envelope |
| 7 | + |
| 8 | +# Exclusive for simcore-s3 storage ----------------------- |
| 9 | +from ...dsm import get_dsm_provider |
| 10 | +from ...models import ( |
| 11 | + FilesMetadataDatasetQueryParams, |
| 12 | + LocationID, |
| 13 | + StorageQueryParamsBase, |
| 14 | +) |
| 15 | + |
| 16 | +_logger = logging.getLogger(__name__) |
| 17 | + |
| 18 | +router = APIRouter( |
| 19 | + tags=[ |
| 20 | + "datasets", |
| 21 | + ], |
| 22 | +) |
| 23 | + |
| 24 | + |
| 25 | +@router.get( |
| 26 | + "/locations/{location_id}/datasets", |
| 27 | + response_model=Envelope[list[DatasetMetaDataGet]], |
| 28 | +) |
| 29 | +async def list_datasets_metadata( |
| 30 | + query_params: Annotated[StorageQueryParamsBase, Depends()], |
| 31 | + location_id: LocationID, |
| 32 | + request: Request, |
| 33 | +) -> Envelope[DatasetMetaDataGet]: |
| 34 | + dsm = get_dsm_provider(request.app).get(location_id) |
| 35 | + data = await dsm.list_datasets(query_params.user_id) |
| 36 | + return Envelope[list[DatasetMetaDataGet]]( |
| 37 | + data=[DatasetMetaDataGet(**d.model_dump()) for d in data] |
| 38 | + ) |
| 39 | + |
| 40 | + |
| 41 | +@router.get( |
| 42 | + "/locations/{location_id}/datasets/{dataset_id}/metadata", |
| 43 | + response_model=Envelope[list[FileMetaDataGet]], |
| 44 | +) |
| 45 | +async def list_dataset_files_metadata( |
| 46 | + query_params: Annotated[FilesMetadataDatasetQueryParams, Depends()], |
| 47 | + location_id: LocationID, |
| 48 | + dataset_id: str, |
| 49 | + request: Request, |
| 50 | +) -> Envelope[list[FileMetaDataGet]]: |
| 51 | + dsm = get_dsm_provider(request.app).get(location_id) |
| 52 | + data = await dsm.list_files_in_dataset( |
| 53 | + user_id=query_params.user_id, |
| 54 | + dataset_id=dataset_id, |
| 55 | + expand_dirs=query_params.expand_dirs, |
| 56 | + ) |
| 57 | + return Envelope[list[FileMetaDataGet]]( |
| 58 | + data=[FileMetaDataGet(**d.model_dump()) for d in data] |
| 59 | + ) |
0 commit comments