Skip to content

Commit 7d487b5

Browse files
committed
entrypoint
1 parent dc0ead3 commit 7d487b5

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
@@ -455,3 +455,31 @@ def _update_json_schema_extra(schema: JsonDict) -> None:
455455
model_config = ConfigDict(
456456
extra="forbid", json_schema_extra=_update_json_schema_extra
457457
)
458+
459+
460+
class PathTotalSizeCreate(BaseModel):
461+
path: Path
462+
size: ByteSize
463+
464+
@staticmethod
465+
def _update_json_schema_extra(schema: JsonDict) -> None:
466+
schema.update(
467+
{
468+
"examples": [
469+
# a folder
470+
{
471+
"path": "f8da77a9-24b9-4eab-aee7-1f0608da1e3e",
472+
"size": 15728640,
473+
},
474+
# 1 file
475+
{
476+
"path": f"f8da77a9-24b9-4eab-aee7-1f0608da1e3e/2f94f80f-633e-4dfa-a983-226b7babe3d7/outputs/output5/{FileMetaDataGet.model_json_schema()['examples'][0]['file_name']}",
477+
"size": 1024,
478+
},
479+
]
480+
}
481+
)
482+
483+
model_config = ConfigDict(
484+
extra="forbid", json_schema_extra=_update_json_schema_extra
485+
)

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
@@ -482,10 +485,11 @@ async def test_path_compute_size(
482485
).with_query(user_id=user_id)
483486
response = await client.post(f"{url}")
484487

485-
received_size, _ = assert_status(
488+
received, _ = assert_status(
486489
response,
487490
status.HTTP_200_OK,
488-
ByteSize,
491+
PathTotalSizeCreate,
489492
)
490-
assert received_size
491-
assert received_size == 169
493+
assert received
494+
assert received.path == Path(project["uuid"])
495+
assert received.size == 169

0 commit comments

Comments
 (0)