Skip to content

Commit b2d2373

Browse files
committed
entrypoint
1 parent e89fd54 commit b2d2373

File tree

3 files changed

+57
-6
lines changed

3 files changed

+57
-6
lines changed

packages/models-library/src/models_library/api_schemas_storage/storage_schemas.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -458,3 +458,31 @@ def _update_json_schema_extra(schema: JsonDict) -> None:
458458
model_config = ConfigDict(
459459
extra="forbid", json_schema_extra=_update_json_schema_extra
460460
)
461+
462+
463+
class PathTotalSizeCreate(BaseModel):
464+
path: Path
465+
size: ByteSize
466+
467+
@staticmethod
468+
def _update_json_schema_extra(schema: JsonDict) -> None:
469+
schema.update(
470+
{
471+
"examples": [
472+
# a folder
473+
{
474+
"path": "f8da77a9-24b9-4eab-aee7-1f0608da1e3e",
475+
"size": 15728640,
476+
},
477+
# 1 file
478+
{
479+
"path": f"f8da77a9-24b9-4eab-aee7-1f0608da1e3e/2f94f80f-633e-4dfa-a983-226b7babe3d7/outputs/output5/{FileMetaDataGet.model_json_schema()['examples'][0]['file_name']}",
480+
"size": 1024,
481+
},
482+
]
483+
}
484+
)
485+
486+
model_config = ConfigDict(
487+
extra="forbid", json_schema_extra=_update_json_schema_extra
488+
)

services/storage/src/simcore_service_storage/api/rest/_paths.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,13 @@
55
from fastapi import APIRouter, Depends
66
from fastapi_pagination import create_page
77
from fastapi_pagination.cursor import CursorPage, CursorParams
8-
from models_library.api_schemas_storage.storage_schemas import PathMetaDataGet
8+
from models_library.api_schemas_storage.storage_schemas import (
9+
PathMetaDataGet,
10+
PathTotalSizeCreate,
11+
)
12+
from models_library.generics import Envelope
913
from models_library.users import UserID
14+
from pydantic import ByteSize
1015

1116
from ...dsm_factory import BaseDataManager
1217
from .dependencies.dsm_prodiver import get_data_manager
@@ -43,3 +48,17 @@ async def list_paths(
4348
params=page_params,
4449
next_=next_cursor,
4550
)
51+
52+
53+
@router.post(
54+
"/locations/{location_id}/paths/{path:path}:size",
55+
response_model=Envelope[PathTotalSizeCreate],
56+
)
57+
async def compute_path_total_size(
58+
dsm: Annotated[BaseDataManager, Depends(get_data_manager)],
59+
user_id: UserID,
60+
path: Path,
61+
):
62+
return Envelope[PathTotalSizeCreate](
63+
data=PathTotalSizeCreate(path=path, size=ByteSize(238723))
64+
)

services/storage/tests/unit/test_handlers_paths.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@
1818
import sqlalchemy as sa
1919
from fastapi import FastAPI, status
2020
from fastapi_pagination.cursor import CursorPage
21-
from models_library.api_schemas_storage.storage_schemas import PathMetaDataGet
21+
from models_library.api_schemas_storage.storage_schemas import (
22+
PathMetaDataGet,
23+
PathTotalSizeCreate,
24+
)
2225
from models_library.projects_nodes_io import LocationID, NodeID, SimcoreS3FileID
2326
from models_library.users import UserID
2427
from pydantic import ByteSize, TypeAdapter
@@ -528,10 +531,11 @@ async def test_path_compute_size(
528531
).with_query(user_id=user_id)
529532
response = await client.post(f"{url}")
530533

531-
received_size, _ = assert_status(
534+
received, _ = assert_status(
532535
response,
533536
status.HTTP_200_OK,
534-
ByteSize,
537+
PathTotalSizeCreate,
535538
)
536-
assert received_size
537-
assert received_size == 169
539+
assert received
540+
assert received.path == Path(project["uuid"])
541+
assert received.size == 169

0 commit comments

Comments
 (0)