Skip to content

Commit e066a1f

Browse files
committed
add example code with pydantic types
1 parent 549723d commit e066a1f

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

services/storage/src/simcore_service_storage/modules/celery/_celery_types.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
1+
from functools import partial
12
from pathlib import Path
3+
from typing import Any
24

35
from kombu.utils.json import register_type # type: ignore[import-untyped]
6+
from models_library.api_schemas_storage.storage_schemas import (
7+
FileUploadCompletionBody,
8+
FoldersBody,
9+
)
10+
from pydantic import BaseModel
11+
12+
from ...models import FileMetaData
413

514

615
def _path_encoder(obj):
@@ -20,10 +29,31 @@ def _class_full_name(clz: type) -> str:
2029
return ".".join([clz.__module__, clz.__qualname__])
2130

2231

32+
def _encoder(obj: BaseModel, *args, **kwargs) -> dict[str, Any]:
33+
return obj.model_dump(*args, **kwargs, mode="json")
34+
35+
36+
def _decoder(clz: type[BaseModel], data: dict[str, Any]) -> BaseModel:
37+
return clz(**data)
38+
39+
40+
def _register_pydantic_types(*models: type[BaseModel]) -> None:
41+
for model in models:
42+
register_type(
43+
model,
44+
_class_full_name(model),
45+
encoder=_encoder,
46+
decoder=partial(_decoder, model),
47+
)
48+
49+
2350
def register_celery_types() -> None:
2451
register_type(
2552
Path,
2653
_class_full_name(Path),
2754
_path_encoder,
2855
_path_decoder,
2956
)
57+
_register_pydantic_types(FileUploadCompletionBody)
58+
_register_pydantic_types(FileMetaData)
59+
_register_pydantic_types(FoldersBody)

0 commit comments

Comments
 (0)