dynamicforms-fastapi-viewsets 0.3.5__tar.gz → 0.3.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/PKG-INFO +1 -1
- dynamicforms_fastapi_viewsets-0.3.6/fastapi_viewsets/__init__.py +1 -0
- {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/decorators/celery_viewset/client.py +13 -5
- {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/decorators/celery_viewset/server.py +1 -1
- dynamicforms_fastapi_viewsets-0.3.5/fastapi_viewsets/__init__.py +0 -1
- {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/.gitignore +0 -0
- {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/LICENSE +0 -0
- {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/README.md +0 -0
- {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/action_configuration.py +0 -0
- {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/collection_viewset.py +0 -0
- {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/conf.py +0 -0
- {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/context/__init__.py +0 -0
- {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/context/auth/__init__.py +0 -0
- {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/context/auth/django.py +0 -0
- {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/context/auth/jwt.py +0 -0
- {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/context/auth/static.py +0 -0
- {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/decorators/__init__.py +0 -0
- {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/decorators/build_schema.py +0 -0
- {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/decorators/celery_viewset/__init__.py +0 -0
- {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/decorators/celery_viewset/result_reader.py +0 -0
- {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/decorators/lifecycle_runner.py +0 -0
- {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/decorators/primary_key_model_helper.py +0 -0
- {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/decorators/route_viewset.py +0 -0
- {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/middleware/__init__.py +0 -0
- {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/middleware/auth/__init__.py +0 -0
- {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/middleware/auth/authorization.py +0 -0
- {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/middleware/rate_limiter.py +0 -0
- {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/mixins.py +0 -0
- {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/py.typed +0 -0
- {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/response_classes.py +0 -0
- {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/save_state/__init__.py +0 -0
- {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/save_state/save_state.py +0 -0
- {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/save_state/serialize_state.py +0 -0
- {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/pyproject.toml +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dynamicforms-fastapi-viewsets
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.6
|
|
4
4
|
Summary: Django REST Framework-style viewsets for FastAPI, with optional Celery-backed async execution and a Vue/TypeScript client counterpart.
|
|
5
5
|
Project-URL: Homepage, https://github.com/dynamicforms/fastapi-viewsets
|
|
6
6
|
Project-URL: Repository, https://github.com/dynamicforms/fastapi-viewsets
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.3.6"
|
|
@@ -8,7 +8,7 @@ from typing import TYPE_CHECKING, TypeVar
|
|
|
8
8
|
from fastapi.routing import APIRoute
|
|
9
9
|
from pydantic import BaseModel
|
|
10
10
|
|
|
11
|
-
from ...context import serialize_context
|
|
11
|
+
from ...context import Context, serialize_context
|
|
12
12
|
from ..build_schema import build_schema
|
|
13
13
|
from . import result_reader
|
|
14
14
|
from .result_reader import get_result_queue_key
|
|
@@ -69,6 +69,15 @@ def celery_viewset_client(
|
|
|
69
69
|
return decorator
|
|
70
70
|
|
|
71
71
|
|
|
72
|
+
async def _serialize_value(value):
|
|
73
|
+
"""Convert a Context or BaseModel value into a JSON-safe structure for Celery/Kombu transport."""
|
|
74
|
+
if isinstance(value, Context):
|
|
75
|
+
return await serialize_context(value.raw())
|
|
76
|
+
if isinstance(value, BaseModel):
|
|
77
|
+
return value.model_dump(mode="json")
|
|
78
|
+
return value
|
|
79
|
+
|
|
80
|
+
|
|
72
81
|
def _patch_method(cls: type, original_endpoint, task_name: str, celery_app, redis_client, queue_key: str):
|
|
73
82
|
"""Replace the method on cls with an async version that sends a Celery task and awaits the result."""
|
|
74
83
|
method_name = original_endpoint.__name__
|
|
@@ -81,18 +90,17 @@ def _patch_method(cls: type, original_endpoint, task_name: str, celery_app, redi
|
|
|
81
90
|
result_reader.register_future(correlation_id, future)
|
|
82
91
|
|
|
83
92
|
try:
|
|
93
|
+
serializable_args = [await _serialize_value(v) for v in args]
|
|
84
94
|
serializable_kwargs = {}
|
|
85
95
|
for k, v in kwargs.items():
|
|
86
96
|
if k == "context":
|
|
87
97
|
serializable_kwargs[k] = await serialize_context(v.raw())
|
|
88
|
-
elif isinstance(v, BaseModel):
|
|
89
|
-
serializable_kwargs[k] = v.model_dump()
|
|
90
98
|
else:
|
|
91
|
-
serializable_kwargs[k] = v
|
|
99
|
+
serializable_kwargs[k] = await _serialize_value(v)
|
|
92
100
|
logger.info("Celery task scheduling: %s (correlation_id=%s)", task_name, correlation_id)
|
|
93
101
|
celery_app.send_task(
|
|
94
102
|
task_name,
|
|
95
|
-
args=
|
|
103
|
+
args=serializable_args,
|
|
96
104
|
kwargs={**serializable_kwargs, "_correlation_id": correlation_id, "_result_queue_key": queue_key},
|
|
97
105
|
)
|
|
98
106
|
return await future
|
|
@@ -27,7 +27,7 @@ T = TypeVar("T")
|
|
|
27
27
|
def _to_jsonable(value):
|
|
28
28
|
"""Recursively convert Pydantic models and lists to JSON-serializable structures."""
|
|
29
29
|
if isinstance(value, BaseModel):
|
|
30
|
-
return value.model_dump()
|
|
30
|
+
return value.model_dump(mode="json")
|
|
31
31
|
if isinstance(value, list):
|
|
32
32
|
return [_to_jsonable(v) for v in value]
|
|
33
33
|
return value
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.3.5"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/conf.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|