dynamicforms-fastapi-viewsets 0.6.0__tar.gz → 0.6.2__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.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/PKG-INFO +1 -1
- dynamicforms_fastapi_viewsets-0.6.2/fastapi_viewsets/__init__.py +1 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/decorators/celery_viewset/client.py +5 -1
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/decorators/primary_key_model_helper.py +19 -4
- dynamicforms_fastapi_viewsets-0.6.0/fastapi_viewsets/__init__.py +0 -1
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/.gitignore +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/LICENSE +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/README.md +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/action_configuration.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/backends/__init__.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/backends/django_orm.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/collection_viewset.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/conf.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/context/__init__.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/context/auth/__init__.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/context/auth/django.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/context/auth/jwt.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/context/auth/static.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/cursor.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/decorators/__init__.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/decorators/build_schema.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/decorators/celery_viewset/__init__.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/decorators/celery_viewset/result_reader.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/decorators/celery_viewset/server.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/decorators/conftest.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/decorators/lifecycle_runner.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/decorators/route_viewset.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/endpoint_docs.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/exceptions.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/filters/__init__.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/filters/base.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/filters/declaration.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/filters/operators.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/filters/registry.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/list_query.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/list_shapes.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/middleware/__init__.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/middleware/auth/__init__.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/middleware/auth/authorization.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/middleware/rate_limiter.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/mixins.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/mux_ws/__init__.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/mux_ws/asgi.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/mux_ws/protocol.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/mux_ws/registry.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/mux_ws/server.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/mux_ws/transports.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/py.typed +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/response_classes.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/save_state/__init__.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/save_state/save_state.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/fastapi_viewsets/save_state/serialize_state.py +0 -0
- {dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/pyproject.toml +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: dynamicforms-fastapi-viewsets
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.2
|
|
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.6.2"
|
|
@@ -84,11 +84,15 @@ def celery_viewset_client(
|
|
|
84
84
|
|
|
85
85
|
|
|
86
86
|
async def _serialize_value(value):
|
|
87
|
-
"""Convert a Context or
|
|
87
|
+
"""Convert a Context, BaseModel, list, or dict value into a JSON-safe structure for Celery/Kombu transport."""
|
|
88
88
|
if isinstance(value, Context):
|
|
89
89
|
return await serialize_context(value.raw())
|
|
90
90
|
if isinstance(value, BaseModel):
|
|
91
91
|
return value.model_dump(mode="json")
|
|
92
|
+
if isinstance(value, dict):
|
|
93
|
+
return {k: await _serialize_value(v) for k, v in value.items()}
|
|
94
|
+
if isinstance(value, (list, tuple)):
|
|
95
|
+
return [await _serialize_value(v) for v in value]
|
|
92
96
|
return value
|
|
93
97
|
|
|
94
98
|
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
import types
|
|
2
|
+
|
|
3
|
+
from typing import Annotated, Any, get_args, get_origin, TypeVar, Union
|
|
2
4
|
|
|
3
5
|
from pydantic import BaseModel, create_model
|
|
4
6
|
|
|
@@ -25,14 +27,27 @@ def typecast_to_original_model(value: Any, original_annotation: type[T]) -> T:
|
|
|
25
27
|
annotation = original_annotation
|
|
26
28
|
if get_origin(annotation) is Annotated:
|
|
27
29
|
annotation = get_args(annotation)[0]
|
|
28
|
-
|
|
30
|
+
|
|
31
|
+
origin = get_origin(annotation)
|
|
32
|
+
if origin is Union or origin is types.UnionType:
|
|
33
|
+
# Optional[Model] / Model | None: unwrap to the model member so isinstance() and
|
|
34
|
+
# model_validate()/model_construct() below run against the model class rather than
|
|
35
|
+
# the union object itself (which has neither).
|
|
36
|
+
annotation = next(
|
|
37
|
+
(arg for arg in get_args(annotation) if isinstance(arg, type) and issubclass(arg, BaseModel)),
|
|
38
|
+
annotation,
|
|
39
|
+
)
|
|
40
|
+
origin = get_origin(annotation) or annotation
|
|
41
|
+
else:
|
|
42
|
+
origin = origin or annotation
|
|
43
|
+
|
|
29
44
|
if not isinstance(value, BaseModel) or isinstance(value, origin):
|
|
30
45
|
return value
|
|
31
46
|
|
|
32
47
|
# noinspection PyBroadException
|
|
33
48
|
try:
|
|
34
|
-
return
|
|
49
|
+
return annotation.model_validate(value.model_dump())
|
|
35
50
|
except Exception:
|
|
36
51
|
# Fallback: create instance with model_construct if validation fails
|
|
37
52
|
# (e.g. required field missing but it will be filled by autoinc)
|
|
38
|
-
return
|
|
53
|
+
return annotation.model_construct(**value.model_dump())
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.6.0"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dynamicforms_fastapi_viewsets-0.6.0 → dynamicforms_fastapi_viewsets-0.6.2}/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
|
|
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
|