spakky-fastapi 1.7.0__py3-none-any.whl → 2.0.1__py3-none-any.whl
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.
- spakky_fastapi/error.py +21 -32
- spakky_fastapi/main.py +11 -0
- spakky_fastapi/middlewares/error_handling.py +6 -12
- spakky_fastapi/middlewares/manage_context.py +26 -0
- spakky_fastapi/post_processors/add_builtin_middlewares.py +34 -0
- spakky_fastapi/post_processors/register_routes.py +104 -0
- spakky_fastapi/routes/__init__.py +21 -0
- spakky_fastapi/routes/delete.py +62 -0
- spakky_fastapi/routes/get.py +62 -0
- spakky_fastapi/routes/head.py +62 -0
- spakky_fastapi/routes/options.py +62 -0
- spakky_fastapi/routes/patch.py +62 -0
- spakky_fastapi/routes/post.py +62 -0
- spakky_fastapi/routes/put.py +62 -0
- spakky_fastapi/routes/route.py +112 -0
- spakky_fastapi/routes/websocket.py +28 -0
- spakky_fastapi/stereotypes/api_controller.py +2 -500
- {spakky_fastapi-1.7.0.dist-info → spakky_fastapi-2.0.1.dist-info}/METADATA +2 -2
- spakky_fastapi-2.0.1.dist-info/RECORD +26 -0
- spakky_fastapi-2.0.1.dist-info/entry_points.txt +3 -0
- spakky_fastapi/aspects/authenticate.py +0 -107
- spakky_fastapi/plugins/__init__.py +0 -0
- spakky_fastapi/plugins/authenticate.py +0 -13
- spakky_fastapi/plugins/fast_api.py +0 -24
- spakky_fastapi/post_processor.py +0 -69
- spakky_fastapi-1.7.0.dist-info/RECORD +0 -16
- /spakky_fastapi/{aspects → post_processors}/__init__.py +0 -0
- {spakky_fastapi-1.7.0.dist-info → spakky_fastapi-2.0.1.dist-info}/WHEEL +0 -0
@@ -0,0 +1,62 @@
|
|
1
|
+
from typing import Any, Callable, Sequence
|
2
|
+
|
3
|
+
from fastapi import Response, params
|
4
|
+
from fastapi.responses import JSONResponse
|
5
|
+
from fastapi.routing import APIRoute
|
6
|
+
from spakky.core.types import FuncT
|
7
|
+
from starlette.routing import Route as StarletteRoute
|
8
|
+
|
9
|
+
from spakky_fastapi.routes.route import DictIntStrAny, HTTPMethod, SetIntStr, route
|
10
|
+
|
11
|
+
|
12
|
+
def post(
|
13
|
+
path: str,
|
14
|
+
response_model: type[Any] | None = None,
|
15
|
+
status_code: int | None = None,
|
16
|
+
tags: list[str] | None = None,
|
17
|
+
dependencies: Sequence[params.Depends] | None = None,
|
18
|
+
summary: str | None = None,
|
19
|
+
description: str | None = None,
|
20
|
+
response_description: str = "Successful Response",
|
21
|
+
responses: dict[int | str, dict[str, Any]] | None = None,
|
22
|
+
deprecated: bool | None = None,
|
23
|
+
operation_id: str | None = None,
|
24
|
+
response_model_include: SetIntStr | DictIntStrAny | None = None,
|
25
|
+
response_model_exclude: SetIntStr | DictIntStrAny | None = None,
|
26
|
+
response_model_by_alias: bool = True,
|
27
|
+
response_model_exclude_unset: bool = False,
|
28
|
+
response_model_exclude_defaults: bool = False,
|
29
|
+
response_model_exclude_none: bool = False,
|
30
|
+
include_in_schema: bool = True,
|
31
|
+
response_class: type[Response] = JSONResponse,
|
32
|
+
name: str | None = None,
|
33
|
+
route_class_override: type[APIRoute] | None = None,
|
34
|
+
callbacks: list[StarletteRoute] | None = None,
|
35
|
+
openapi_extra: dict[str, Any] | None = None,
|
36
|
+
) -> Callable[[FuncT], FuncT]:
|
37
|
+
return route(
|
38
|
+
path=path,
|
39
|
+
methods=[HTTPMethod.POST],
|
40
|
+
response_model=response_model,
|
41
|
+
status_code=status_code,
|
42
|
+
tags=tags,
|
43
|
+
dependencies=dependencies,
|
44
|
+
summary=summary,
|
45
|
+
description=description,
|
46
|
+
response_description=response_description,
|
47
|
+
responses=responses,
|
48
|
+
deprecated=deprecated,
|
49
|
+
operation_id=operation_id,
|
50
|
+
response_model_include=response_model_include,
|
51
|
+
response_model_exclude=response_model_exclude,
|
52
|
+
response_model_by_alias=response_model_by_alias,
|
53
|
+
response_model_exclude_unset=response_model_exclude_unset,
|
54
|
+
response_model_exclude_defaults=response_model_exclude_defaults,
|
55
|
+
response_model_exclude_none=response_model_exclude_none,
|
56
|
+
include_in_schema=include_in_schema,
|
57
|
+
response_class=response_class,
|
58
|
+
name=name,
|
59
|
+
route_class_override=route_class_override,
|
60
|
+
callbacks=callbacks,
|
61
|
+
openapi_extra=openapi_extra,
|
62
|
+
)
|
@@ -0,0 +1,62 @@
|
|
1
|
+
from typing import Any, Callable, Sequence
|
2
|
+
|
3
|
+
from fastapi import Response, params
|
4
|
+
from fastapi.responses import JSONResponse
|
5
|
+
from fastapi.routing import APIRoute
|
6
|
+
from spakky.core.types import FuncT
|
7
|
+
from starlette.routing import Route as StarletteRoute
|
8
|
+
|
9
|
+
from spakky_fastapi.routes.route import DictIntStrAny, HTTPMethod, SetIntStr, route
|
10
|
+
|
11
|
+
|
12
|
+
def put(
|
13
|
+
path: str,
|
14
|
+
response_model: type[Any] | None = None,
|
15
|
+
status_code: int | None = None,
|
16
|
+
tags: list[str] | None = None,
|
17
|
+
dependencies: Sequence[params.Depends] | None = None,
|
18
|
+
summary: str | None = None,
|
19
|
+
description: str | None = None,
|
20
|
+
response_description: str = "Successful Response",
|
21
|
+
responses: dict[int | str, dict[str, Any]] | None = None,
|
22
|
+
deprecated: bool | None = None,
|
23
|
+
operation_id: str | None = None,
|
24
|
+
response_model_include: SetIntStr | DictIntStrAny | None = None,
|
25
|
+
response_model_exclude: SetIntStr | DictIntStrAny | None = None,
|
26
|
+
response_model_by_alias: bool = True,
|
27
|
+
response_model_exclude_unset: bool = False,
|
28
|
+
response_model_exclude_defaults: bool = False,
|
29
|
+
response_model_exclude_none: bool = False,
|
30
|
+
include_in_schema: bool = True,
|
31
|
+
response_class: type[Response] = JSONResponse,
|
32
|
+
name: str | None = None,
|
33
|
+
route_class_override: type[APIRoute] | None = None,
|
34
|
+
callbacks: list[StarletteRoute] | None = None,
|
35
|
+
openapi_extra: dict[str, Any] | None = None,
|
36
|
+
) -> Callable[[FuncT], FuncT]:
|
37
|
+
return route(
|
38
|
+
path=path,
|
39
|
+
methods=[HTTPMethod.PUT],
|
40
|
+
response_model=response_model,
|
41
|
+
status_code=status_code,
|
42
|
+
tags=tags,
|
43
|
+
dependencies=dependencies,
|
44
|
+
summary=summary,
|
45
|
+
description=description,
|
46
|
+
response_description=response_description,
|
47
|
+
responses=responses,
|
48
|
+
deprecated=deprecated,
|
49
|
+
operation_id=operation_id,
|
50
|
+
response_model_include=response_model_include,
|
51
|
+
response_model_exclude=response_model_exclude,
|
52
|
+
response_model_by_alias=response_model_by_alias,
|
53
|
+
response_model_exclude_unset=response_model_exclude_unset,
|
54
|
+
response_model_exclude_defaults=response_model_exclude_defaults,
|
55
|
+
response_model_exclude_none=response_model_exclude_none,
|
56
|
+
include_in_schema=include_in_schema,
|
57
|
+
response_class=response_class,
|
58
|
+
name=name,
|
59
|
+
route_class_override=route_class_override,
|
60
|
+
callbacks=callbacks,
|
61
|
+
openapi_extra=openapi_extra,
|
62
|
+
)
|
@@ -0,0 +1,112 @@
|
|
1
|
+
from dataclasses import dataclass
|
2
|
+
from enum import Enum
|
3
|
+
from typing import Any, Callable, Sequence, TypeAlias
|
4
|
+
|
5
|
+
from fastapi import Response, params
|
6
|
+
from fastapi.responses import JSONResponse
|
7
|
+
from fastapi.routing import APIRoute
|
8
|
+
from spakky.core.annotation import FunctionAnnotation
|
9
|
+
from spakky.core.types import FuncT
|
10
|
+
from starlette.routing import Route as StarletteRoute
|
11
|
+
|
12
|
+
SetIntStr: TypeAlias = set[int | str]
|
13
|
+
DictIntStrAny: TypeAlias = dict[int | str, Any]
|
14
|
+
|
15
|
+
|
16
|
+
class HTTPMethod(str, Enum):
|
17
|
+
GET = "GET"
|
18
|
+
POST = "POST"
|
19
|
+
PUT = "PUT"
|
20
|
+
PATCH = "PATCH"
|
21
|
+
DELETE = "DELETE"
|
22
|
+
HEAD = "HEAD"
|
23
|
+
OPTIONS = "OPTIONS"
|
24
|
+
TRACE = "TRACE"
|
25
|
+
|
26
|
+
def __repr__(self) -> str:
|
27
|
+
return self.value
|
28
|
+
|
29
|
+
|
30
|
+
@dataclass
|
31
|
+
class Route(FunctionAnnotation):
|
32
|
+
path: str
|
33
|
+
response_model: type[Any] | None = None
|
34
|
+
status_code: int | None = None
|
35
|
+
tags: list[str] | None = None
|
36
|
+
dependencies: Sequence[params.Depends] | None = None
|
37
|
+
summary: str | None = None
|
38
|
+
description: str | None = None
|
39
|
+
response_description: str = "Successful Response"
|
40
|
+
responses: dict[int | str, dict[str, Any]] | None = None
|
41
|
+
deprecated: bool | None = None
|
42
|
+
methods: set[HTTPMethod] | list[HTTPMethod] | None = None
|
43
|
+
operation_id: str | None = None
|
44
|
+
response_model_include: SetIntStr | DictIntStrAny | None = None
|
45
|
+
response_model_exclude: SetIntStr | DictIntStrAny | None = None
|
46
|
+
response_model_by_alias: bool = True
|
47
|
+
response_model_exclude_unset: bool = False
|
48
|
+
response_model_exclude_defaults: bool = False
|
49
|
+
response_model_exclude_none: bool = False
|
50
|
+
include_in_schema: bool = True
|
51
|
+
response_class: type[Response] = JSONResponse
|
52
|
+
name: str | None = None
|
53
|
+
route_class_override: type[APIRoute] | None = None
|
54
|
+
callbacks: list[StarletteRoute] | None = None
|
55
|
+
openapi_extra: dict[str, Any] | None = None
|
56
|
+
|
57
|
+
|
58
|
+
def route(
|
59
|
+
path: str,
|
60
|
+
response_model: type[Any] | None = None,
|
61
|
+
status_code: int | None = None,
|
62
|
+
tags: list[str] | None = None,
|
63
|
+
dependencies: Sequence[params.Depends] | None = None,
|
64
|
+
summary: str | None = None,
|
65
|
+
description: str | None = None,
|
66
|
+
response_description: str = "Successful Response",
|
67
|
+
responses: dict[int | str, dict[str, Any]] | None = None,
|
68
|
+
deprecated: bool | None = None,
|
69
|
+
methods: set[HTTPMethod] | list[HTTPMethod] | None = None,
|
70
|
+
operation_id: str | None = None,
|
71
|
+
response_model_include: SetIntStr | DictIntStrAny | None = None,
|
72
|
+
response_model_exclude: SetIntStr | DictIntStrAny | None = None,
|
73
|
+
response_model_by_alias: bool = True,
|
74
|
+
response_model_exclude_unset: bool = False,
|
75
|
+
response_model_exclude_defaults: bool = False,
|
76
|
+
response_model_exclude_none: bool = False,
|
77
|
+
include_in_schema: bool = True,
|
78
|
+
response_class: type[Response] = JSONResponse,
|
79
|
+
name: str | None = None,
|
80
|
+
route_class_override: type[APIRoute] | None = None,
|
81
|
+
callbacks: list[StarletteRoute] | None = None,
|
82
|
+
openapi_extra: dict[str, Any] | None = None,
|
83
|
+
) -> Callable[[FuncT], FuncT]:
|
84
|
+
def wrapper(method: FuncT) -> FuncT:
|
85
|
+
return Route(
|
86
|
+
path=path,
|
87
|
+
response_model=response_model,
|
88
|
+
status_code=status_code,
|
89
|
+
tags=tags,
|
90
|
+
dependencies=dependencies,
|
91
|
+
summary=summary,
|
92
|
+
description=description,
|
93
|
+
response_description=response_description,
|
94
|
+
responses=responses,
|
95
|
+
deprecated=deprecated,
|
96
|
+
methods=methods,
|
97
|
+
operation_id=operation_id,
|
98
|
+
response_model_include=response_model_include,
|
99
|
+
response_model_exclude=response_model_exclude,
|
100
|
+
response_model_by_alias=response_model_by_alias,
|
101
|
+
response_model_exclude_unset=response_model_exclude_unset,
|
102
|
+
response_model_exclude_defaults=response_model_exclude_defaults,
|
103
|
+
response_model_exclude_none=response_model_exclude_none,
|
104
|
+
include_in_schema=include_in_schema,
|
105
|
+
response_class=response_class,
|
106
|
+
name=name,
|
107
|
+
route_class_override=route_class_override,
|
108
|
+
callbacks=callbacks,
|
109
|
+
openapi_extra=openapi_extra,
|
110
|
+
)(method)
|
111
|
+
|
112
|
+
return wrapper
|
@@ -0,0 +1,28 @@
|
|
1
|
+
from dataclasses import dataclass
|
2
|
+
from typing import Any, Callable, Sequence, TypeAlias
|
3
|
+
|
4
|
+
from fastapi import params
|
5
|
+
from spakky.core.annotation import FunctionAnnotation
|
6
|
+
from spakky.core.types import FuncT
|
7
|
+
|
8
|
+
SetIntStr: TypeAlias = set[int | str]
|
9
|
+
DictIntStrAny: TypeAlias = dict[int | str, Any]
|
10
|
+
|
11
|
+
|
12
|
+
@dataclass
|
13
|
+
class WebSocketRoute(FunctionAnnotation):
|
14
|
+
path: str
|
15
|
+
name: str | None = None
|
16
|
+
dependencies: Sequence[params.Depends] | None = None
|
17
|
+
|
18
|
+
|
19
|
+
def websocket(
|
20
|
+
path: str,
|
21
|
+
name: str | None = None,
|
22
|
+
dependencies: Sequence[params.Depends] | None = None,
|
23
|
+
) -> Callable[[FuncT], FuncT]:
|
24
|
+
return WebSocketRoute(
|
25
|
+
path=path,
|
26
|
+
name=name,
|
27
|
+
dependencies=dependencies,
|
28
|
+
)
|