22import functools
33import warnings
44import jinja2
5- from collections import Mapping
5+ from collections .abc import Mapping
6+ from typing import Any , Awaitable , Callable , Dict , Iterable , Optional , cast
67from aiohttp import web
78from aiohttp .abc import AbstractView
89from .helpers import GLOBAL_HELPERS
1819REQUEST_CONTEXT_KEY = 'aiohttp_jinja2_context'
1920
2021
21- def setup (app , * args , app_key = APP_KEY , context_processors = (),
22- filters = None , default_helpers = True , autoescape = True ,
23- ** kwargs ):
24- env = jinja2 .Environment (* args , autoescape = autoescape , ** kwargs )
22+ def setup (
23+ app : web .Application ,
24+ * args : Any ,
25+ app_key : str = APP_KEY ,
26+ context_processors : Iterable [Callable [[web .Request ], Dict [str , Any ]]] = (),
27+ filters : Optional [Iterable [Callable [..., str ]]] = None ,
28+ default_helpers : bool = True ,
29+ ** kwargs : Any
30+ ) -> jinja2 .Environment :
31+ kwargs .setdefault ("autoescape" , True )
32+ env = jinja2 .Environment (* args , ** kwargs )
2533 if default_helpers :
2634 env .globals .update (GLOBAL_HELPERS )
2735 if filters is not None :
@@ -36,11 +44,21 @@ def setup(app, *args, app_key=APP_KEY, context_processors=(),
3644 return env
3745
3846
39- def get_env (app , * , app_key = APP_KEY ):
40- return app .get (app_key )
47+ def get_env (
48+ app : web .Application ,
49+ * ,
50+ app_key : str = APP_KEY
51+ ) -> jinja2 .Environment :
52+ return cast (jinja2 .Environment , app .get (app_key ))
4153
4254
43- def render_string (template_name , request , context , * , app_key = APP_KEY ):
55+ def render_string (
56+ template_name : str ,
57+ request : web .Request ,
58+ context : Dict [str , Any ],
59+ * ,
60+ app_key : str = APP_KEY
61+ ) -> str :
4462 env = request .config_dict .get (app_key )
4563 if env is None :
4664 text = ("Template engine is not initialized, "
@@ -65,8 +83,15 @@ def render_string(template_name, request, context, *, app_key=APP_KEY):
6583 return text
6684
6785
68- def render_template (template_name , request , context , * ,
69- app_key = APP_KEY , encoding = 'utf-8' , status = 200 ):
86+ def render_template (
87+ template_name : str ,
88+ request : web .Request ,
89+ context : Dict [str , Any ],
90+ * ,
91+ app_key : str = APP_KEY ,
92+ encoding : str = 'utf-8' ,
93+ status : int = 200
94+ ) -> web .Response :
7095 response = web .Response (status = status )
7196 if context is None :
7297 context = {}
@@ -77,11 +102,17 @@ def render_template(template_name, request, context, *,
77102 return response
78103
79104
80- def template (template_name , * , app_key = APP_KEY , encoding = 'utf-8' , status = 200 ):
105+ def template (
106+ template_name : str ,
107+ * ,
108+ app_key : str = APP_KEY ,
109+ encoding : str = 'utf-8' ,
110+ status : int = 200
111+ ) -> Any :
81112
82- def wrapper (func ) :
113+ def wrapper (func : Any ) -> Any :
83114 @functools .wraps (func )
84- async def wrapped (* args ) :
115+ async def wrapped (* args : Any ) -> web . StreamResponse :
85116 if asyncio .iscoroutinefunction (func ):
86117 coro = func
87118 else :
@@ -107,7 +138,10 @@ async def wrapped(*args):
107138
108139
109140@web .middleware
110- async def context_processors_middleware (request , handler ):
141+ async def context_processors_middleware (
142+ request : web .Request ,
143+ handler : Callable [[web .Request ], Awaitable [web .StreamResponse ]]
144+ ) -> web .StreamResponse :
111145
112146 if REQUEST_CONTEXT_KEY not in request :
113147 request [REQUEST_CONTEXT_KEY ] = {}
@@ -116,5 +150,5 @@ async def context_processors_middleware(request, handler):
116150 return await handler (request )
117151
118152
119- async def request_processor (request ) :
153+ async def request_processor (request : web . Request ) -> Dict [ str , web . Request ] :
120154 return {'request' : request }
0 commit comments