|
1 | 1 | from __future__ import annotations |
2 | 2 |
|
3 | 3 | import os |
4 | | -import sys |
5 | 4 | from collections.abc import AsyncGenerator |
6 | 5 | from collections.abc import Awaitable |
7 | | -from collections.abc import Iterator |
8 | | -from collections.abc import Mapping |
9 | | -from collections.abc import Sequence |
| 6 | +from collections.abc import Callable |
10 | 7 | from contextlib import AbstractAsyncContextManager |
11 | 8 | from datetime import datetime |
12 | 9 | from datetime import timedelta |
13 | 10 | from http.cookiejar import CookieJar |
14 | 11 | from types import TracebackType |
15 | 12 | from typing import Any |
16 | 13 | from typing import AnyStr |
17 | | -from typing import Callable |
18 | | -from typing import Optional |
| 14 | +from typing import Protocol |
19 | 15 | from typing import TYPE_CHECKING |
20 | | -from typing import Union |
21 | 16 |
|
22 | 17 | from hypercorn.typing import ASGIReceiveCallable |
23 | 18 | from hypercorn.typing import ASGISendCallable |
|
27 | 22 |
|
28 | 23 | from .datastructures import FileStorage |
29 | 24 |
|
30 | | -if sys.version_info >= (3, 10): |
31 | | - from typing import Protocol |
32 | | -else: |
33 | | - from typing_extensions import Protocol |
34 | | - |
35 | 25 | if TYPE_CHECKING: |
36 | 26 | from werkzeug.datastructures import Authorization # noqa: F401 |
37 | 27 | from werkzeug.datastructures import Headers # noqa: F401 |
38 | | - from werkzeug.wrappers import Response as WerkzeugResponse |
39 | 28 |
|
40 | 29 | from .app import Quart |
41 | 30 | from .sessions import SessionMixin |
42 | 31 | from .wrappers.response import Response # noqa: F401 |
43 | 32 |
|
44 | | -FilePath = Union[bytes, str, os.PathLike] |
| 33 | +FilePath = bytes | str | os.PathLike |
45 | 34 |
|
46 | 35 | # The possible types that are directly convertible or are a Response object. |
47 | | -ResponseValue = Union[ |
48 | | - "Response", |
49 | | - "WerkzeugResponse", |
50 | | - bytes, |
51 | | - str, |
52 | | - Mapping[str, Any], # any jsonify-able dict |
53 | | - list[Any], # any jsonify-able list |
54 | | - Iterator[bytes], |
55 | | - Iterator[str], |
56 | | -] |
| 36 | +ResponseValue = ( |
| 37 | + "Response" |
| 38 | + " | WerkzeugResponse" |
| 39 | + " | bytes" |
| 40 | + " | str" |
| 41 | + " | Mapping[str, Any]" # any jsonify-able dict |
| 42 | + " | list[Any]" # any jsonify-able list |
| 43 | + " | Iterator[bytes]" |
| 44 | + " | Iterator[str]" |
| 45 | +) |
57 | 46 | StatusCode = int |
58 | 47 |
|
59 | 48 | # the possible types for an individual HTTP header |
60 | 49 | HeaderName = str |
61 | | -HeaderValue = Union[str, list[str], tuple[str, ...]] |
| 50 | +HeaderValue = str | list[str] | tuple[str, ...] |
62 | 51 |
|
63 | 52 | # the possible types for HTTP headers |
64 | | -HeadersValue = Union[ |
65 | | - "Headers", |
66 | | - Mapping[HeaderName, HeaderValue], |
67 | | - Sequence[tuple[HeaderName, HeaderValue]], |
68 | | -] |
| 53 | +HeadersValue = ( |
| 54 | + "Headers" |
| 55 | + " | Mapping[HeaderName, HeaderValue]" |
| 56 | + " | Sequence[tuple[HeaderName, HeaderValue]]" |
| 57 | +) |
69 | 58 |
|
70 | 59 | # The possible types returned by a route function. |
71 | | -ResponseReturnValue = Union[ |
72 | | - ResponseValue, |
73 | | - tuple[ResponseValue, HeadersValue], |
74 | | - tuple[ResponseValue, StatusCode], |
75 | | - tuple[ResponseValue, StatusCode, HeadersValue], |
76 | | -] |
77 | | - |
78 | | -ResponseTypes = Union["Response", "WerkzeugResponse"] |
79 | | - |
80 | | -AppOrBlueprintKey = Optional[str] # The App key is None, whereas blueprints are named |
81 | | -AfterRequestCallable = Union[ |
82 | | - Callable[[ResponseTypes], ResponseTypes], |
83 | | - Callable[[ResponseTypes], Awaitable[ResponseTypes]], |
84 | | -] |
85 | | -AfterServingCallable = Union[Callable[[], None], Callable[[], Awaitable[None]]] |
86 | | -AfterWebsocketCallable = Union[ |
87 | | - Callable[[Optional[ResponseTypes]], Optional[ResponseTypes]], |
88 | | - Callable[[Optional[ResponseTypes]], Awaitable[Optional[ResponseTypes]]], |
89 | | -] |
90 | | -BeforeRequestCallable = Union[ |
91 | | - Callable[[], Optional[ResponseReturnValue]], |
92 | | - Callable[[], Awaitable[Optional[ResponseReturnValue]]], |
93 | | -] |
94 | | -BeforeServingCallable = Union[Callable[[], None], Callable[[], Awaitable[None]]] |
95 | | -BeforeWebsocketCallable = Union[ |
96 | | - Callable[[], Optional[ResponseReturnValue]], |
97 | | - Callable[[], Awaitable[Optional[ResponseReturnValue]]], |
98 | | -] |
99 | | -ErrorHandlerCallable = Union[ |
100 | | - Callable[[Any], ResponseReturnValue], |
101 | | - Callable[[Any], Awaitable[ResponseReturnValue]], |
102 | | -] |
| 60 | +ResponseReturnValue = ( |
| 61 | + "ResponseValue" |
| 62 | + " | tuple[ResponseValue, HeadersValue]" |
| 63 | + " | tuple[ResponseValue, StatusCode]" |
| 64 | + " | tuple[ResponseValue, StatusCode, HeadersValue]" |
| 65 | +) |
| 66 | + |
| 67 | +ResponseTypes = "Response | WerkzeugResponse" |
| 68 | + |
| 69 | +AppOrBlueprintKey = str | None # The App key is None, whereas blueprints are named |
| 70 | +AfterRequestCallable = ( |
| 71 | + "Callable[[ResponseTypes], ResponseTypes]" |
| 72 | + " | Callable[[ResponseTypes], Awaitable[ResponseTypes]]" |
| 73 | +) |
| 74 | +AfterServingCallable = Callable[[], None] | Callable[[], Awaitable[None]] |
| 75 | +AfterWebsocketCallable = ( |
| 76 | + "Callable[[ResponseTypes | None], ResponseTypes | None]" |
| 77 | + " | Callable[[ResponseTypes | None], Awaitable[ResponseTypes | None]]" |
| 78 | +) |
| 79 | + |
| 80 | +BeforeRequestCallable = ( |
| 81 | + "Callable[[], ResponseReturnValue | None]" |
| 82 | + " | Callable[[], Awaitable[ResponseReturnValue | None]]" |
| 83 | +) |
| 84 | + |
| 85 | +BeforeServingCallable = Callable[[], None] | Callable[[], Awaitable[None]] |
| 86 | +BeforeWebsocketCallable = ( |
| 87 | + "Callable[[], ResponseReturnValue | None]" |
| 88 | + " | Callable[[], Awaitable[ResponseReturnValue | None]]" |
| 89 | +) |
| 90 | +ErrorHandlerCallable = ( |
| 91 | + "Callable[[Any], ResponseReturnValue]" |
| 92 | + " | Callable[[Any], Awaitable[ResponseReturnValue]]" |
| 93 | +) |
103 | 94 | ShellContextProcessorCallable = Callable[[], dict[str, Any]] |
104 | | -TeardownCallable = Union[ |
105 | | - Callable[[Optional[BaseException]], None], |
106 | | - Callable[[Optional[BaseException]], Awaitable[None]], |
107 | | -] |
108 | | -TemplateContextProcessorCallable = Union[ |
109 | | - Callable[[], dict[str, Any]], Callable[[], Awaitable[dict[str, Any]]] |
110 | | -] |
| 95 | +TeardownCallable = ( |
| 96 | + "Callable[[BaseException | None], None]" |
| 97 | + " | Callable[[BaseException | None], Awaitable[None]]" |
| 98 | +) |
| 99 | +TemplateContextProcessorCallable = ( |
| 100 | + Callable[[], dict[str, Any]] | Callable[[], Awaitable[dict[str, Any]]] |
| 101 | +) |
111 | 102 | TemplateFilterCallable = Callable[[Any], Any] |
112 | 103 | TemplateGlobalCallable = Callable[[Any], Any] |
113 | 104 | TemplateTestCallable = Callable[[Any], bool] |
114 | 105 | URLDefaultCallable = Callable[[str, dict], None] |
115 | | -URLValuePreprocessorCallable = Callable[[Optional[str], Optional[dict]], None] |
| 106 | +URLValuePreprocessorCallable = Callable[[str | None, dict | None], None] |
116 | 107 | WhileServingCallable = Callable[[], AsyncGenerator[None, None]] |
117 | 108 |
|
118 | | -RouteCallable = Union[ |
119 | | - Callable[..., ResponseReturnValue], |
120 | | - Callable[..., Awaitable[ResponseReturnValue]], |
121 | | -] |
122 | | -WebsocketCallable = Union[ |
123 | | - Callable[..., Optional[ResponseReturnValue]], |
124 | | - Callable[..., Awaitable[Optional[ResponseReturnValue]]], |
125 | | -] |
| 109 | +RouteCallable = ( |
| 110 | + "Callable[..., ResponseReturnValue] | Callable[..., Awaitable[ResponseReturnValue]]" |
| 111 | +) |
| 112 | +WebsocketCallable = ( |
| 113 | + "Callable[..., ResponseReturnValue | None]" |
| 114 | + " | Callable[..., Awaitable[ResponseReturnValue | None]]" |
| 115 | +) |
126 | 116 |
|
127 | 117 |
|
128 | 118 | class ASGIHTTPProtocol(Protocol): |
|
0 commit comments