dynamicforms-fastapi-viewsets 0.5.6__tar.gz → 0.5.7__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.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/PKG-INFO +1 -1
- dynamicforms_fastapi_viewsets-0.5.7/fastapi_viewsets/__init__.py +1 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/middleware/auth/authorization.py +15 -9
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/mux_ws/protocol.py +2 -2
- dynamicforms_fastapi_viewsets-0.5.6/fastapi_viewsets/__init__.py +0 -1
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/.gitignore +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/LICENSE +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/README.md +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/action_configuration.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/backends/__init__.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/backends/django_orm.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/collection_viewset.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/conf.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/context/__init__.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/context/auth/__init__.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/context/auth/django.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/context/auth/jwt.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/context/auth/static.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/cursor.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/decorators/__init__.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/decorators/build_schema.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/decorators/celery_viewset/__init__.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/decorators/celery_viewset/client.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/decorators/celery_viewset/result_reader.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/decorators/celery_viewset/server.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/decorators/conftest.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/decorators/lifecycle_runner.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/decorators/primary_key_model_helper.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/decorators/route_viewset.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/endpoint_docs.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/filters/__init__.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/filters/base.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/filters/declaration.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/filters/operators.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/filters/registry.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/list_query.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/list_shapes.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/middleware/__init__.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/middleware/auth/__init__.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/middleware/rate_limiter.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/mixins.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/mux_ws/__init__.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/mux_ws/asgi.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/mux_ws/registry.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/mux_ws/server.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/mux_ws/transports.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/py.typed +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/response_classes.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/save_state/__init__.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/save_state/save_state.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/fastapi_viewsets/save_state/serialize_state.py +0 -0
- {dynamicforms_fastapi_viewsets-0.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/pyproject.toml +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: dynamicforms-fastapi-viewsets
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.7
|
|
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.5.7"
|
|
@@ -23,14 +23,18 @@ class Authorization(Middleware):
|
|
|
23
23
|
- If it's callable, it's evaluated as `check(request, cls, context)` (sync or async) in
|
|
24
24
|
`depends()` - bridged onto FastAPI's own `Depends()` by route_viewset - a falsy result
|
|
25
25
|
rejects the request with 403 before `perform_*` (or even FastAPI's own body parsing) ever
|
|
26
|
-
runs. Use this for checks that don't need a specific record (e.g. a role check).
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
26
|
+
runs. Use this for checks that don't need a specific record (e.g. a role check). A callable
|
|
27
|
+
config is consumed entirely by `depends()` and never reaches `context.authorization` - there
|
|
28
|
+
is nothing left for `perform_*` to do with the check function itself, and a bare function
|
|
29
|
+
isn't something a `celery_viewset` worker could receive anyway.
|
|
30
|
+
- Otherwise (non-callable, or unconfigured/`None`), nothing is enforced by the middleware
|
|
31
|
+
itself; the value is made available as `context.authorization` (set in `__call__`, in the
|
|
32
|
+
onion chain - there's no reject decision here, so there's no benefit to doing this any
|
|
33
|
+
earlier) - `perform_*` can inspect it once it has whatever record-specific info a check
|
|
34
|
+
needs (e.g. the object a `pk` resolved to) and reject itself (`raise HTTPException(403,
|
|
35
|
+
...)`) if it decides to. This is the "no hook in the middleware layer needed" case - just
|
|
36
|
+
raise, same as anywhere else in the pipeline (see docs/guide/action-configuration.md's
|
|
37
|
+
"Rejecting a request: just raise").
|
|
34
38
|
|
|
35
39
|
Unconfigured (no `@action_configuration` entry for `Authorization` at all): nothing is
|
|
36
40
|
enforced, `context.authorization` resolves to `None`.
|
|
@@ -63,5 +67,7 @@ class Authorization(Middleware):
|
|
|
63
67
|
context: "Context",
|
|
64
68
|
call_next: Callable[[], Awaitable[ViewSetResult]],
|
|
65
69
|
) -> ViewSetResult:
|
|
66
|
-
|
|
70
|
+
config = self.config_from(context)
|
|
71
|
+
if not callable(config):
|
|
72
|
+
context.set("authorization", config)
|
|
67
73
|
return await call_next()
|
|
@@ -37,8 +37,6 @@ consume the whole body before learning whether it was an error at all.
|
|
|
37
37
|
from typing import Any
|
|
38
38
|
from urllib.parse import urlencode
|
|
39
39
|
|
|
40
|
-
from muxws.frames import ABSENT
|
|
41
|
-
|
|
42
40
|
METHOD_KEY = ":method"
|
|
43
41
|
PATH_KEY = ":path"
|
|
44
42
|
QUERY_KEY = ":query"
|
|
@@ -120,4 +118,6 @@ def build_response_meta(status: int, headers: dict[str, str]) -> dict[str, Any]:
|
|
|
120
118
|
|
|
121
119
|
def body_to_payload(body: Any) -> Any:
|
|
122
120
|
"""`ABSENT` is muxws' "no payload at all", which is a different frame from a null payload."""
|
|
121
|
+
from muxws.frames import ABSENT
|
|
122
|
+
|
|
123
123
|
return ABSENT if body is None else body
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.5.6"
|
|
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.5.6 → dynamicforms_fastapi_viewsets-0.5.7}/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
|