spakky-fastapi 1.7.0__py3-none-any.whl → 2.0.0__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.
@@ -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
+ )