Skip to content

Commit fd777ab

Browse files
committed
rename storage schemas exposed via webserver
1 parent 434602f commit fd777ab

File tree

4 files changed

+85
-72
lines changed

4 files changed

+85
-72
lines changed

packages/models-library/src/models_library/api_schemas_rpc_async_jobs/async_jobs.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,16 @@
22
from typing import Any, TypeAlias
33
from uuid import UUID
44

5-
from pydantic import BaseModel, Field, PositiveFloat, model_validator
5+
from pydantic import BaseModel, model_validator
6+
from servicelib.progress_bar import ProgressBarData
67
from typing_extensions import Self
78

89
AsyncJobId: TypeAlias = UUID
910

1011

1112
class AsyncJobStatus(BaseModel):
1213
job_id: AsyncJobId
13-
progress: PositiveFloat = Field(..., ge=0.0, le=1.0)
14+
progress: ProgressBarData
1415
done: bool
1516
started: datetime
1617
stopped: datetime | None
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
from datetime import datetime
2+
from pathlib import Path
3+
from typing import Any
4+
5+
from pydantic import BaseModel
6+
7+
from ..api_schemas_rpc_async_jobs.async_jobs import (
8+
AsyncJobGet,
9+
AsyncJobId,
10+
AsyncJobResult,
11+
AsyncJobStatus,
12+
ProgressBarData,
13+
)
14+
from ..api_schemas_storage.data_export_async_jobs import DataExportTaskStartInput
15+
from ..projects_nodes_io import LocationID
16+
from ..users import UserID
17+
18+
19+
class DataExportPost(BaseModel):
20+
paths: list[Path]
21+
22+
def to_storage_model(
23+
self, user_id: UserID, location_id: LocationID
24+
) -> DataExportTaskStartInput:
25+
return DataExportTaskStartInput(
26+
paths=self.paths, user_id=user_id, location_id=location_id
27+
)
28+
29+
30+
class StorageAsyncJobGet(BaseModel):
31+
job_id: AsyncJobId
32+
33+
@classmethod
34+
def from_async_job_rpc_get(
35+
cls, async_job_rpc_get: AsyncJobGet
36+
) -> "StorageAsyncJobGet":
37+
return StorageAsyncJobGet(job_id=async_job_rpc_get.job_id)
38+
39+
40+
class StorageAsyncJobStatus(BaseModel):
41+
job_id: AsyncJobId
42+
progress: ProgressBarData
43+
done: bool
44+
started: datetime
45+
stopped: datetime | None
46+
47+
@classmethod
48+
def from_async_job_rpc_status(
49+
cls, async_job_rpc_status: AsyncJobStatus
50+
) -> "StorageAsyncJobStatus":
51+
return StorageAsyncJobStatus(
52+
job_id=async_job_rpc_status.job_id,
53+
progress=async_job_rpc_status.progress,
54+
done=async_job_rpc_status.done,
55+
started=async_job_rpc_status.started,
56+
stopped=async_job_rpc_status.stopped,
57+
)
58+
59+
60+
class StorageAsyncJobResult(BaseModel):
61+
result: Any | None
62+
error: Any | None
63+
64+
@classmethod
65+
def from_async_job_rpc_result(
66+
cls, async_job_rpc_result: AsyncJobResult
67+
) -> "StorageAsyncJobResult":
68+
return StorageAsyncJobResult(
69+
result=async_job_rpc_result.result, error=async_job_rpc_result.error
70+
)

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

Lines changed: 0 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
from enum import Enum
1111

1212
# /data-export
13-
from pathlib import Path
1413
from typing import Annotated, Any, Literal, Self, TypeAlias
1514
from uuid import UUID
1615

@@ -21,7 +20,6 @@
2120
ByteSize,
2221
ConfigDict,
2322
Field,
24-
PositiveFloat,
2523
PositiveInt,
2624
RootModel,
2725
StringConstraints,
@@ -30,12 +28,6 @@
3028
)
3129
from pydantic.networks import AnyUrl
3230

33-
from .api_schemas_rpc_async_jobs.async_jobs import (
34-
AsyncJobGet,
35-
AsyncJobResult,
36-
AsyncJobStatus,
37-
)
38-
from .api_schemas_storage.data_export_async_jobs import DataExportTaskStartInput
3931
from .basic_regex import DATCORE_DATASET_NAME_RE, S3_BUCKET_NAME_RE
4032
from .basic_types import SHA256Str
4133
from .generics import ListModel
@@ -378,55 +370,3 @@ def ensure_consistent_entries(self: Self) -> Self:
378370

379371
class SoftCopyBody(BaseModel):
380372
link_id: SimcoreS3FileID
381-
382-
383-
class DataExportPost(BaseModel):
384-
paths: list[Path]
385-
386-
def to_storage_model(
387-
self, user_id: UserID, location_id: LocationID
388-
) -> DataExportTaskStartInput:
389-
return DataExportTaskStartInput(
390-
paths=self.paths, user_id=user_id, location_id=location_id
391-
)
392-
393-
394-
class AsyncJobGet(BaseModel):
395-
job_id: UUID
396-
397-
@classmethod
398-
def from_async_job_rpc_get(cls, async_job_rpc_get: AsyncJobGet) -> "AsyncJobGet":
399-
return AsyncJobGet(job_id=async_job_rpc_get.job_id)
400-
401-
402-
class AsyncJobStatus(BaseModel):
403-
job_id: UUID
404-
task_progress: PositiveFloat = Field(..., ge=0.0, le=1.0)
405-
done: bool
406-
started: datetime
407-
stopped: datetime | None
408-
409-
@classmethod
410-
def from_async_job_rpc_status(
411-
cls, async_job_rpc_status: AsyncJobStatus
412-
) -> "AsyncJobStatus":
413-
return AsyncJobStatus(
414-
job_id=async_job_rpc_status.job_id,
415-
task_progress=async_job_rpc_status.task_progress,
416-
done=async_job_rpc_status.done,
417-
started=async_job_rpc_status.started,
418-
stopped=async_job_rpc_status.stopped,
419-
)
420-
421-
422-
class AsyncJobResult(BaseModel):
423-
result: Any | None
424-
error: Any | None
425-
426-
@classmethod
427-
def from_async_job_rpc_result(
428-
cls, async_job_rpc_result: AsyncJobResult
429-
) -> "AsyncJobResult":
430-
return AsyncJobResult(
431-
result=async_job_rpc_result.result, error=async_job_rpc_result.error
432-
)

services/web/server/src/simcore_service_webserver/storage/_handlers.py

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,15 @@
1010

1111
from aiohttp import ClientTimeout, web
1212
from models_library.api_schemas_storage import STORAGE_RPC_NAMESPACE
13+
from models_library.api_schemas_webserver.storage import (
14+
DataExportPost,
15+
StorageAsyncJobGet,
16+
StorageAsyncJobResult,
17+
StorageAsyncJobStatus,
18+
)
1319
from models_library.projects_nodes_io import LocationID
1420
from models_library.rest_base import RequestParameters
1521
from models_library.storage_schemas import (
16-
AsyncJobGet,
17-
AsyncJobResult,
18-
AsyncJobStatus,
19-
DataExportPost,
2022
FileUploadCompleteResponse,
2123
FileUploadCompletionBody,
2224
FileUploadSchema,
@@ -405,7 +407,7 @@ class _PathParams(BaseModel):
405407
),
406408
)
407409
return create_data_response(
408-
AsyncJobGet.from_async_job_rpc_get(async_job_rpc_get),
410+
StorageAsyncJobGet.from_async_job_rpc_get(async_job_rpc_get),
409411
status=status.HTTP_202_ACCEPTED,
410412
)
411413

@@ -420,14 +422,14 @@ class _PathParams(BaseModel):
420422
async def get_async_job_status(request: web.Request) -> web.Response:
421423
rabbitmq_rpc_client = get_rabbitmq_rpc_client(request.app)
422424

423-
async_job_get = parse_request_path_parameters_as(AsyncJobGet, request)
425+
async_job_get = parse_request_path_parameters_as(StorageAsyncJobGet, request)
424426
async_job_rpc_status = await get_status(
425427
rabbitmq_rpc_client=rabbitmq_rpc_client,
426428
rpc_namespace=STORAGE_RPC_NAMESPACE,
427429
job_id=async_job_get.job_id,
428430
)
429431
return create_data_response(
430-
AsyncJobStatus.from_async_job_rpc_status(async_job_rpc_status),
432+
StorageAsyncJobStatus.from_async_job_rpc_status(async_job_rpc_status),
431433
status=status.HTTP_200_OK,
432434
)
433435

@@ -441,7 +443,7 @@ async def get_async_job_status(request: web.Request) -> web.Response:
441443
@handle_data_export_exceptions
442444
async def abort_async_job(request: web.Request) -> web.Response:
443445
rabbitmq_rpc_client = get_rabbitmq_rpc_client(request.app)
444-
async_job_get = parse_request_path_parameters_as(AsyncJobGet, request)
446+
async_job_get = parse_request_path_parameters_as(StorageAsyncJobGet, request)
445447
async_job_rpc_abort = await abort(
446448
rabbitmq_rpc_client=rabbitmq_rpc_client,
447449
rpc_namespace=STORAGE_RPC_NAMESPACE,
@@ -463,13 +465,13 @@ async def abort_async_job(request: web.Request) -> web.Response:
463465
@handle_data_export_exceptions
464466
async def get_async_job_result(request: web.Request) -> web.Response:
465467
rabbitmq_rpc_client = get_rabbitmq_rpc_client(request.app)
466-
async_job_get = parse_request_path_parameters_as(AsyncJobGet, request)
468+
async_job_get = parse_request_path_parameters_as(StorageAsyncJobGet, request)
467469
async_job_rpc_result = await get_result(
468470
rabbitmq_rpc_client=rabbitmq_rpc_client,
469471
rpc_namespace=STORAGE_RPC_NAMESPACE,
470472
job_id=async_job_get.job_id,
471473
)
472474
return create_data_response(
473-
AsyncJobResult.from_async_job_rpc_result(async_job_rpc_result),
475+
StorageAsyncJobResult.from_async_job_rpc_result(async_job_rpc_result),
474476
status=status.HTTP_200_OK,
475477
)

0 commit comments

Comments
 (0)