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.
Files changed (34) hide show
  1. {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/PKG-INFO +1 -1
  2. dynamicforms_fastapi_viewsets-0.3.6/fastapi_viewsets/__init__.py +1 -0
  3. {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/decorators/celery_viewset/client.py +13 -5
  4. {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/decorators/celery_viewset/server.py +1 -1
  5. dynamicforms_fastapi_viewsets-0.3.5/fastapi_viewsets/__init__.py +0 -1
  6. {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/.gitignore +0 -0
  7. {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/LICENSE +0 -0
  8. {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/README.md +0 -0
  9. {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/action_configuration.py +0 -0
  10. {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/collection_viewset.py +0 -0
  11. {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/conf.py +0 -0
  12. {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/context/__init__.py +0 -0
  13. {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/context/auth/__init__.py +0 -0
  14. {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/context/auth/django.py +0 -0
  15. {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/context/auth/jwt.py +0 -0
  16. {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/context/auth/static.py +0 -0
  17. {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/decorators/__init__.py +0 -0
  18. {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/decorators/build_schema.py +0 -0
  19. {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/decorators/celery_viewset/__init__.py +0 -0
  20. {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/decorators/celery_viewset/result_reader.py +0 -0
  21. {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/decorators/lifecycle_runner.py +0 -0
  22. {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/decorators/primary_key_model_helper.py +0 -0
  23. {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/decorators/route_viewset.py +0 -0
  24. {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/middleware/__init__.py +0 -0
  25. {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/middleware/auth/__init__.py +0 -0
  26. {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/middleware/auth/authorization.py +0 -0
  27. {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/middleware/rate_limiter.py +0 -0
  28. {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/mixins.py +0 -0
  29. {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/py.typed +0 -0
  30. {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/response_classes.py +0 -0
  31. {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/save_state/__init__.py +0 -0
  32. {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/save_state/save_state.py +0 -0
  33. {dynamicforms_fastapi_viewsets-0.3.5 → dynamicforms_fastapi_viewsets-0.3.6}/fastapi_viewsets/save_state/serialize_state.py +0 -0
  34. {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.5
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=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"