3
3
import warnings
4
4
import jinja2
5
5
from collections .abc import Mapping
6
- from typing import Any , Awaitable , Callable , Dict , Iterable , Optional , cast
6
+ from typing import Any , Awaitable , Callable , Dict , Iterable , Optional , Type , Union , cast , overload
7
7
from aiohttp import web
8
8
from aiohttp .abc import AbstractView
9
9
from .helpers import GLOBAL_HELPERS
19
19
APP_KEY = 'aiohttp_jinja2_environment'
20
20
REQUEST_CONTEXT_KEY = 'aiohttp_jinja2_context'
21
21
22
+ _SimpleHandler = Callable [[web .Request ], Awaitable [web .StreamResponse ]]
23
+ _MethodHandler = Callable [[Any , web .Request ], Awaitable [web .StreamResponse ]]
24
+ _ViewHandler = Callable [[Type [AbstractView ]], Awaitable [web .StreamResponse ]]
25
+ _HandlerType = Union [_SimpleHandler , _MethodHandler , _ViewHandler ]
26
+ _TemplateReturnType = Awaitable [Union [web .StreamResponse , Mapping [str , Any ]]]
27
+ _SimpleTemplateHandler = Callable [[web .Request ], _TemplateReturnType ]
28
+ _MethodTemplateHandler = Callable [[Any , web .Request ], _TemplateReturnType ]
29
+ _ViewTemplateHandler = Callable [[AbstractView ], _TemplateReturnType ]
30
+ _TemplateHandler = Union [_SimpleTemplateHandler , _MethodTemplateHandler , _ViewTemplateHandler ]
31
+
22
32
23
33
def setup (
24
34
app : web .Application ,
@@ -56,7 +66,7 @@ def get_env(
56
66
def render_string (
57
67
template_name : str ,
58
68
request : web .Request ,
59
- context : Dict [str , Any ],
69
+ context : Mapping [str , Any ],
60
70
* ,
61
71
app_key : str = APP_KEY
62
72
) -> str :
@@ -87,7 +97,7 @@ def render_string(
87
97
def render_template (
88
98
template_name : str ,
89
99
request : web .Request ,
90
- context : Dict [str , Any ],
100
+ context : Mapping [str , Any ],
91
101
* ,
92
102
app_key : str = APP_KEY ,
93
103
encoding : str = 'utf-8' ,
@@ -109,11 +119,20 @@ def template(
109
119
app_key : str = APP_KEY ,
110
120
encoding : str = 'utf-8' ,
111
121
status : int = 200
112
- ) -> Any :
113
-
114
- def wrapper (func : Any ) -> Any :
122
+ ) -> Callable [[_TemplateHandler ], _HandlerType ]:
123
+
124
+ def wrapper (func : _TemplateHandler ) -> _HandlerType :
125
+ @overload
126
+ async def wrapped (request : web .Request ) -> web .StreamResponse :
127
+ ...
128
+ @overload
129
+ async def wrapped (view : AbstractView ) -> web .StreamResponse :
130
+ ...
131
+ @overload
132
+ async def wrapped (_self : Any , request : web .Request ) -> web .StreamResponse :
133
+ ...
115
134
@functools .wraps (func )
116
- async def wrapped (* args : Any ) -> web . StreamResponse :
135
+ async def wrapped (* args ) :
117
136
if asyncio .iscoroutinefunction (func ):
118
137
coro = func
119
138
else :
0 commit comments