Skip to content

Commit 940c3f1

Browse files
committed
fix
1 parent 5f1c5d7 commit 940c3f1

File tree

2 files changed

+34
-12
lines changed

2 files changed

+34
-12
lines changed

services/datcore-adapter/src/simcore_service_datcore_adapter/api/rest/datasets.py

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,20 @@
11
import logging
2-
from typing import Annotated, Final
2+
from typing import Annotated, Final, TypeAlias, TypeVar
33

44
from aiocache import cached # type: ignore[import-untyped]
5-
from fastapi import APIRouter, Depends, Header, Request
5+
from fastapi import APIRouter, Depends, Header, Query, Request
66
from fastapi_pagination import Page, Params
77
from fastapi_pagination.api import create_page, resolve_params
88
from fastapi_pagination.bases import RawParams
9+
from fastapi_pagination.customization import CustomizedPage, UseParamsFields
910
from models_library.api_schemas_datcore_adapter.datasets import (
1011
DatasetMetaData,
1112
FileMetaData,
1213
)
14+
from models_library.api_schemas_storage.storage_schemas import (
15+
DEFAULT_NUMBER_OF_PATHS_PER_PAGE,
16+
MAX_NUMBER_OF_PATHS_PER_PAGE,
17+
)
1318
from servicelib.fastapi.requests_decorators import cancel_on_disconnect
1419
from starlette import status
1520

@@ -25,11 +30,24 @@
2530
) # NOTE: this caching time is arbitrary
2631

2732

33+
_T = TypeVar("_T")
34+
_CustomPage = CustomizedPage[
35+
Page[_T],
36+
UseParamsFields(
37+
size=Query(
38+
DEFAULT_NUMBER_OF_PATHS_PER_PAGE, ge=1, le=MAX_NUMBER_OF_PATHS_PER_PAGE
39+
),
40+
),
41+
]
42+
43+
_CustomizedPageParams: TypeAlias = _CustomPage.__params_type__ # type: ignore
44+
45+
2846
@router.get(
2947
"/datasets",
3048
summary="list datasets",
3149
status_code=status.HTTP_200_OK,
32-
response_model=Page[DatasetMetaData],
50+
response_model=_CustomPage[DatasetMetaData],
3351
)
3452
@cancel_on_disconnect
3553
@cached(
@@ -41,8 +59,8 @@ async def list_datasets(
4159
x_datcore_api_key: Annotated[str, Header(..., description="Datcore API Key")],
4260
x_datcore_api_secret: Annotated[str, Header(..., description="Datcore API Secret")],
4361
pennsieve_client: Annotated[PennsieveApiClient, Depends(get_pennsieve_api_client)],
44-
params: Annotated[Params, Depends()],
45-
) -> Page[DatasetMetaData]:
62+
params: Annotated[_CustomizedPageParams, Depends()],
63+
):
4664
assert request # nosec
4765
raw_params: RawParams = resolve_params(params).to_raw_params()
4866
assert raw_params.limit is not None # nosec
@@ -85,7 +103,7 @@ async def get_dataset(
85103
"/datasets/{dataset_id}/files",
86104
summary="list top level files/folders in a dataset",
87105
status_code=status.HTTP_200_OK,
88-
response_model=Page[FileMetaData],
106+
response_model=_CustomPage[FileMetaData],
89107
)
90108
@cancel_on_disconnect
91109
@cached(
@@ -98,8 +116,8 @@ async def list_dataset_top_level_files(
98116
x_datcore_api_key: Annotated[str, Header(..., description="Datcore API Key")],
99117
x_datcore_api_secret: Annotated[str, Header(..., description="Datcore API Secret")],
100118
pennsieve_client: Annotated[PennsieveApiClient, Depends(get_pennsieve_api_client)],
101-
params: Annotated[Params, Depends()],
102-
) -> Page[FileMetaData]:
119+
params: Annotated[_CustomizedPageParams, Depends()],
120+
):
103121
assert request # nosec
104122
raw_params: RawParams = resolve_params(params).to_raw_params()
105123

@@ -119,7 +137,7 @@ async def list_dataset_top_level_files(
119137
"/datasets/{dataset_id}/files/{collection_id}",
120138
summary="list top level files/folders in a collection in a dataset",
121139
status_code=status.HTTP_200_OK,
122-
response_model=Page[FileMetaData],
140+
response_model=_CustomPage[FileMetaData],
123141
)
124142
@cancel_on_disconnect
125143
@cached(
@@ -133,8 +151,8 @@ async def list_dataset_collection_files(
133151
x_datcore_api_key: Annotated[str, Header(..., description="Datcore API Key")],
134152
x_datcore_api_secret: Annotated[str, Header(..., description="Datcore API Secret")],
135153
pennsieve_client: Annotated[PennsieveApiClient, Depends(get_pennsieve_api_client)],
136-
params: Annotated[Params, Depends()],
137-
) -> Page[FileMetaData]:
154+
params: Annotated[_CustomizedPageParams, Depends()],
155+
):
138156
assert request # nosec
139157
raw_params: RawParams = resolve_params(params).to_raw_params()
140158
assert raw_params.limit is not None # nosec

services/datcore-adapter/src/simcore_service_datcore_adapter/modules/pennsieve.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,11 @@ async def list_datasets(
347347
DatasetMetaData(
348348
id=d["content"]["id"],
349349
display_name=d["content"]["name"],
350-
size=ByteSize(d["storage"]) if d["storage"] > 0 else None,
350+
size=(
351+
ByteSize(d["storage"])
352+
if ("storage" in d and d["storage"] > 0)
353+
else None
354+
),
351355
)
352356
for d in dataset_page["datasets"]
353357
],

0 commit comments

Comments
 (0)