Skip to content

Commit 9bf57f1

Browse files
committed
added pydantic models to be compatible with celery tasks
1 parent fdcdca0 commit 9bf57f1

File tree

1 file changed

+26
-1
lines changed

1 file changed

+26
-1
lines changed

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

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
1+
from functools import partial
12
from pathlib import Path
3+
from typing import Any
24

3-
from kombu.utils.json import register_type # type: ignore[import-untyped]
5+
from kombu.utils.json import register_type
6+
from models_library.api_schemas_storage.storage_schemas import FileUploadCompletionBody
7+
from pydantic import BaseModel
8+
from simcore_service_storage.models import FileMetaData
49

510

611
def _path_encoder(obj):
@@ -20,10 +25,30 @@ def _class_full_name(clz: type) -> str:
2025
return ".".join([clz.__module__, clz.__qualname__])
2126

2227

28+
def _encoder(obj: BaseModel, *args, **kwargs) -> dict[str, Any]:
29+
return obj.model_dump(*args, **kwargs)
30+
31+
32+
def _decoder(clz: type[BaseModel], data: dict[str, Any]) -> BaseModel:
33+
return clz(**data)
34+
35+
36+
def _register_pydantic_types(*models: type[BaseModel]) -> None:
37+
for model in models:
38+
register_type(
39+
model,
40+
_class_full_name(model),
41+
encoder=_encoder,
42+
decoder=partial(_decoder, model),
43+
)
44+
45+
2346
def register_celery_types() -> None:
2447
register_type(
2548
Path,
2649
_class_full_name(Path),
2750
_path_encoder,
2851
_path_decoder,
2952
)
53+
_register_pydantic_types(FileUploadCompletionBody)
54+
_register_pydantic_types(FileMetaData)

0 commit comments

Comments
 (0)