16
16
)
17
17
from asyncio .futures import Future
18
18
from collections import defaultdict , deque
19
+ from collections .abc import Awaitable , Coroutine , Iterable , Iterator
19
20
from contextlib import contextmanager , suppress
20
21
from enum import Enum
21
22
from functools import partial , wraps
29
30
TYPE_CHECKING ,
30
31
Any ,
31
32
AnyStr ,
32
- Awaitable ,
33
33
Callable ,
34
34
ClassVar ,
35
- Coroutine ,
36
35
Deque ,
37
- Dict ,
38
36
Generic ,
39
- Iterable ,
40
- Iterator ,
41
- List ,
42
37
Literal ,
43
38
Optional ,
44
- Set ,
45
- Tuple ,
46
- Type ,
47
39
TypeVar ,
48
40
Union ,
49
41
cast ,
105
97
from sanic_ext import Extend # type: ignore
106
98
from sanic_ext .extensions .base import Extension # type: ignore
107
99
except ImportError :
108
- Extend = TypeVar ("Extend" , Type ) # type: ignore
100
+ Extend = TypeVar ("Extend" , type ) # type: ignore
109
101
110
102
111
103
if OS_IS_WINDOWS : # no cov
@@ -229,7 +221,7 @@ class to use for the application. Defaults to `None`.
229
221
"websocket_tasks" ,
230
222
)
231
223
232
- _app_registry : ClassVar [Dict [str , " Sanic" ]] = {}
224
+ _app_registry : ClassVar [dict [str , Sanic ]] = {}
233
225
test_mode : ClassVar [bool ] = False
234
226
235
227
@overload
@@ -242,15 +234,15 @@ def __init__(
242
234
signal_router : Optional [SignalRouter ] = None ,
243
235
error_handler : Optional [ErrorHandler ] = None ,
244
236
env_prefix : Optional [str ] = SANIC_PREFIX ,
245
- request_class : Optional [Type [Request ]] = None ,
237
+ request_class : Optional [type [Request ]] = None ,
246
238
strict_slashes : bool = False ,
247
- log_config : Optional [Dict [str , Any ]] = None ,
239
+ log_config : Optional [dict [str , Any ]] = None ,
248
240
configure_logging : bool = True ,
249
241
dumps : Optional [Callable [..., AnyStr ]] = None ,
250
242
loads : Optional [Callable [..., Any ]] = None ,
251
243
inspector : bool = False ,
252
- inspector_class : Optional [Type [Inspector ]] = None ,
253
- certloader_class : Optional [Type [CertLoader ]] = None ,
244
+ inspector_class : Optional [type [Inspector ]] = None ,
245
+ certloader_class : Optional [type [CertLoader ]] = None ,
254
246
) -> None : ...
255
247
256
248
@overload
@@ -263,15 +255,15 @@ def __init__(
263
255
signal_router : Optional [SignalRouter ] = None ,
264
256
error_handler : Optional [ErrorHandler ] = None ,
265
257
env_prefix : Optional [str ] = SANIC_PREFIX ,
266
- request_class : Optional [Type [Request ]] = None ,
258
+ request_class : Optional [type [Request ]] = None ,
267
259
strict_slashes : bool = False ,
268
- log_config : Optional [Dict [str , Any ]] = None ,
260
+ log_config : Optional [dict [str , Any ]] = None ,
269
261
configure_logging : bool = True ,
270
262
dumps : Optional [Callable [..., AnyStr ]] = None ,
271
263
loads : Optional [Callable [..., Any ]] = None ,
272
264
inspector : bool = False ,
273
- inspector_class : Optional [Type [Inspector ]] = None ,
274
- certloader_class : Optional [Type [CertLoader ]] = None ,
265
+ inspector_class : Optional [type [Inspector ]] = None ,
266
+ certloader_class : Optional [type [CertLoader ]] = None ,
275
267
) -> None : ...
276
268
277
269
@overload
@@ -284,15 +276,15 @@ def __init__(
284
276
signal_router : Optional [SignalRouter ] = None ,
285
277
error_handler : Optional [ErrorHandler ] = None ,
286
278
env_prefix : Optional [str ] = SANIC_PREFIX ,
287
- request_class : Optional [Type [Request ]] = None ,
279
+ request_class : Optional [type [Request ]] = None ,
288
280
strict_slashes : bool = False ,
289
- log_config : Optional [Dict [str , Any ]] = None ,
281
+ log_config : Optional [dict [str , Any ]] = None ,
290
282
configure_logging : bool = True ,
291
283
dumps : Optional [Callable [..., AnyStr ]] = None ,
292
284
loads : Optional [Callable [..., Any ]] = None ,
293
285
inspector : bool = False ,
294
- inspector_class : Optional [Type [Inspector ]] = None ,
295
- certloader_class : Optional [Type [CertLoader ]] = None ,
286
+ inspector_class : Optional [type [Inspector ]] = None ,
287
+ certloader_class : Optional [type [CertLoader ]] = None ,
296
288
) -> None : ...
297
289
298
290
@overload
@@ -305,15 +297,15 @@ def __init__(
305
297
signal_router : Optional [SignalRouter ] = None ,
306
298
error_handler : Optional [ErrorHandler ] = None ,
307
299
env_prefix : Optional [str ] = SANIC_PREFIX ,
308
- request_class : Optional [Type [Request ]] = None ,
300
+ request_class : Optional [type [Request ]] = None ,
309
301
strict_slashes : bool = False ,
310
- log_config : Optional [Dict [str , Any ]] = None ,
302
+ log_config : Optional [dict [str , Any ]] = None ,
311
303
configure_logging : bool = True ,
312
304
dumps : Optional [Callable [..., AnyStr ]] = None ,
313
305
loads : Optional [Callable [..., Any ]] = None ,
314
306
inspector : bool = False ,
315
- inspector_class : Optional [Type [Inspector ]] = None ,
316
- certloader_class : Optional [Type [CertLoader ]] = None ,
307
+ inspector_class : Optional [type [Inspector ]] = None ,
308
+ certloader_class : Optional [type [CertLoader ]] = None ,
317
309
) -> None : ...
318
310
319
311
def __init__ (
@@ -325,15 +317,15 @@ def __init__(
325
317
signal_router : Optional [SignalRouter ] = None ,
326
318
error_handler : Optional [ErrorHandler ] = None ,
327
319
env_prefix : Optional [str ] = SANIC_PREFIX ,
328
- request_class : Optional [Type [Request ]] = None ,
320
+ request_class : Optional [type [Request ]] = None ,
329
321
strict_slashes : bool = False ,
330
- log_config : Optional [Dict [str , Any ]] = None ,
322
+ log_config : Optional [dict [str , Any ]] = None ,
331
323
configure_logging : bool = True ,
332
324
dumps : Optional [Callable [..., AnyStr ]] = None ,
333
325
loads : Optional [Callable [..., Any ]] = None ,
334
326
inspector : bool = False ,
335
- inspector_class : Optional [Type [Inspector ]] = None ,
336
- certloader_class : Optional [Type [CertLoader ]] = None ,
327
+ inspector_class : Optional [type [Inspector ]] = None ,
328
+ certloader_class : Optional [type [CertLoader ]] = None ,
337
329
) -> None :
338
330
super ().__init__ (name = name )
339
331
# logging
@@ -358,28 +350,28 @@ def __init__(
358
350
self ._asgi_app : Optional [ASGIApp ] = None
359
351
self ._asgi_lifespan : Optional [Lifespan ] = None
360
352
self ._asgi_client : Any = None
361
- self ._blueprint_order : List [Blueprint ] = []
362
- self ._delayed_tasks : List [str ] = []
353
+ self ._blueprint_order : list [Blueprint ] = []
354
+ self ._delayed_tasks : list [str ] = []
363
355
self ._future_registry : FutureRegistry = FutureRegistry ()
364
356
self ._inspector : Optional [Inspector ] = None
365
357
self ._manager : Optional [WorkerManager ] = None
366
358
self ._state : ApplicationState = ApplicationState (app = self )
367
- self ._task_registry : Dict [str , Union [Task , None ]] = {}
359
+ self ._task_registry : dict [str , Union [Task , None ]] = {}
368
360
self ._test_client : Any = None
369
361
self ._test_manager : Any = None
370
362
self .asgi = False
371
363
self .auto_reload = False
372
- self .blueprints : Dict [str , Blueprint ] = {}
373
- self .certloader_class : Type [CertLoader ] = (
364
+ self .blueprints : dict [str , Blueprint ] = {}
365
+ self .certloader_class : type [CertLoader ] = (
374
366
certloader_class or CertLoader
375
367
)
376
368
self .configure_logging : bool = configure_logging
377
369
self .ctx : ctx_type = cast (ctx_type , ctx or SimpleNamespace ())
378
370
self .error_handler : ErrorHandler = error_handler or ErrorHandler ()
379
- self .inspector_class : Type [Inspector ] = inspector_class or Inspector
380
- self .listeners : Dict [str , List [ListenerType [Any ]]] = defaultdict (list )
381
- self .named_request_middleware : Dict [str , Deque [Middleware ]] = {}
382
- self .named_response_middleware : Dict [str , Deque [Middleware ]] = {}
371
+ self .inspector_class : type [Inspector ] = inspector_class or Inspector
372
+ self .listeners : dict [str , list [ListenerType [Any ]]] = defaultdict (list )
373
+ self .named_request_middleware : dict [str , Deque [Middleware ]] = {}
374
+ self .named_response_middleware : dict [str , Deque [Middleware ]] = {}
383
375
self .request_class = request_class or Request
384
376
self .request_middleware : Deque [Middleware ] = deque ()
385
377
self .response_middleware : Deque [Middleware ] = deque ()
@@ -389,7 +381,7 @@ def __init__(
389
381
self .sock : Optional [socket ] = None
390
382
self .strict_slashes : bool = strict_slashes
391
383
self .websocket_enabled : bool = False
392
- self .websocket_tasks : Set [Future [Any ]] = set ()
384
+ self .websocket_tasks : set [Future [Any ]] = set ()
393
385
394
386
# Register alternative method names
395
387
self .go_fast = self .run
@@ -572,7 +564,7 @@ def register_named_middleware(
572
564
def _apply_exception_handler (
573
565
self ,
574
566
handler : FutureException ,
575
- route_names : Optional [List [str ]] = None ,
567
+ route_names : Optional [list [str ]] = None ,
576
568
):
577
569
"""Decorate a function to be registered as a handler for exceptions
578
570
@@ -595,7 +587,7 @@ def _apply_listener(self, listener: FutureListener):
595
587
596
588
def _apply_route (
597
589
self , route : FutureRoute , overwrite : bool = False
598
- ) -> List [Route ]:
590
+ ) -> list [Route ]:
599
591
params = route ._asdict ()
600
592
params ["overwrite" ] = overwrite
601
593
websocket = params .pop ("websocket" , False )
@@ -629,7 +621,7 @@ def _apply_route(
629
621
def _apply_middleware (
630
622
self ,
631
623
middleware : FutureMiddleware ,
632
- route_names : Optional [List [str ]] = None ,
624
+ route_names : Optional [list [str ]] = None ,
633
625
):
634
626
with self .amend ():
635
627
if route_names :
@@ -656,8 +648,8 @@ def dispatch(
656
648
self ,
657
649
event : str ,
658
650
* ,
659
- condition : Optional [Dict [str , str ]] = None ,
660
- context : Optional [Dict [str , Any ]] = None ,
651
+ condition : Optional [dict [str , str ]] = None ,
652
+ context : Optional [dict [str , Any ]] = None ,
661
653
fail_not_found : bool = True ,
662
654
inline : Literal [True ],
663
655
reverse : bool = False ,
@@ -668,8 +660,8 @@ def dispatch(
668
660
self ,
669
661
event : str ,
670
662
* ,
671
- condition : Optional [Dict [str , str ]] = None ,
672
- context : Optional [Dict [str , Any ]] = None ,
663
+ condition : Optional [dict [str , str ]] = None ,
664
+ context : Optional [dict [str , Any ]] = None ,
673
665
fail_not_found : bool = True ,
674
666
inline : Literal [False ] = False ,
675
667
reverse : bool = False ,
@@ -679,8 +671,8 @@ def dispatch(
679
671
self ,
680
672
event : str ,
681
673
* ,
682
- condition : Optional [Dict [str , str ]] = None ,
683
- context : Optional [Dict [str , Any ]] = None ,
674
+ condition : Optional [dict [str , str ]] = None ,
675
+ context : Optional [dict [str , Any ]] = None ,
684
676
fail_not_found : bool = True ,
685
677
inline : bool = False ,
686
678
reverse : bool = False ,
@@ -733,7 +725,7 @@ async def event(
733
725
event : Union [str , Enum ],
734
726
timeout : Optional [Union [int , float ]] = None ,
735
727
* ,
736
- condition : Optional [Dict [str , Any ]] = None ,
728
+ condition : Optional [dict [str , Any ]] = None ,
737
729
exclusive : bool = True ,
738
730
) -> None :
739
731
"""Wait for a specific event to be triggered.
@@ -890,7 +882,7 @@ def handler(request):
890
882
app.blueprint(bp, url_prefix='/blueprint')
891
883
```
892
884
""" # noqa: E501
893
- options : Dict [str , Any ] = {}
885
+ options : dict [str , Any ] = {}
894
886
if url_prefix is not None :
895
887
options ["url_prefix" ] = url_prefix
896
888
if version is not None :
@@ -903,7 +895,7 @@ def handler(request):
903
895
options ["name_prefix" ] = name_prefix
904
896
if isinstance (blueprint , (Iterable , BlueprintGroup )):
905
897
for item in blueprint :
906
- params : Dict [str , Any ] = {** options }
898
+ params : dict [str , Any ] = {** options }
907
899
if isinstance (blueprint , BlueprintGroup ):
908
900
merge_from = [
909
901
options .get ("url_prefix" , "" ),
@@ -1001,7 +993,7 @@ def url_for(self, view_name: str, **kwargs):
1001
993
# http://subdomain.example.com/view-name
1002
994
""" # noqa: E501
1003
995
# find the route by the supplied view name
1004
- kw : Dict [str , str ] = {}
996
+ kw : dict [str , str ] = {}
1005
997
# special static files url_for
1006
998
1007
999
if "." not in view_name :
@@ -1371,10 +1363,8 @@ async def handle_request(self, request: Request) -> None: # no cov
1371
1363
1372
1364
if handler is None :
1373
1365
raise ServerError (
1374
- (
1375
- "'None' was returned while requesting a "
1376
- "handler from the router"
1377
- )
1366
+ "'None' was returned while requesting a "
1367
+ "handler from the router"
1378
1368
)
1379
1369
1380
1370
# Run response handler
@@ -1499,7 +1489,7 @@ async def _websocket_handler(
1499
1489
# -------------------------------------------------------------------- #
1500
1490
1501
1491
@property
1502
- def test_client (self ) -> " SanicTestClient" : # type: ignore # noqa
1492
+ def test_client (self ) -> SanicTestClient : # type: ignore # noqa
1503
1493
"""A testing client that uses httpx and a live running server to reach into the application to execute handlers.
1504
1494
1505
1495
This property is available if the `sanic-testing` package is installed.
@@ -1519,7 +1509,7 @@ def test_client(self) -> "SanicTestClient": # type: ignore # noqa
1519
1509
return self ._test_client
1520
1510
1521
1511
@property
1522
- def asgi_client (self ) -> " SanicASGITestClient" : # type: ignore # noqa
1512
+ def asgi_client (self ) -> SanicASGITestClient : # type: ignore # noqa
1523
1513
"""A testing client that uses ASGI to reach into the application to execute handlers.
1524
1514
1525
1515
This property is available if the `sanic-testing` package is installed.
@@ -1859,15 +1849,9 @@ async def before_start(app):
1859
1849
""" # noqa: E501
1860
1850
task = self .get_task (name , raise_exception = raise_exception )
1861
1851
if task and not task .cancelled ():
1862
- args : Tuple [str , ...] = ()
1852
+ args : tuple [str , ...] = ()
1863
1853
if msg :
1864
- if sys .version_info >= (3 , 9 ):
1865
- args = (msg ,)
1866
- else : # no cov
1867
- raise RuntimeError (
1868
- "Cancelling a task with a message is only supported "
1869
- "on Python 3.9+."
1870
- )
1854
+ args = (msg ,)
1871
1855
task .cancel (* args )
1872
1856
try :
1873
1857
await task
@@ -2012,7 +1996,7 @@ def state(self) -> ApplicationState: # type: ignore
2012
1996
return self ._state
2013
1997
2014
1998
@property
2015
- def reload_dirs (self ) -> Set [Path ]:
1999
+ def reload_dirs (self ) -> set [Path ]:
2016
2000
"""The directories that are monitored for auto-reload.
2017
2001
2018
2002
Returns:
@@ -2057,9 +2041,9 @@ def ext(self) -> Extend:
2057
2041
def extend (
2058
2042
self ,
2059
2043
* ,
2060
- extensions : Optional [List [ Type [Extension ]]] = None ,
2044
+ extensions : Optional [list [ type [Extension ]]] = None ,
2061
2045
built_in_extensions : bool = True ,
2062
- config : Optional [Union [Config , Dict [str , Any ]]] = None ,
2046
+ config : Optional [Union [Config , dict [str , Any ]]] = None ,
2063
2047
** kwargs ,
2064
2048
) -> Extend :
2065
2049
"""Extend Sanic with additional functionality using Sanic Extensions.
@@ -2470,7 +2454,7 @@ async def _server_event(
2470
2454
2471
2455
def refresh (
2472
2456
self ,
2473
- passthru : Optional [Dict [str , Any ]] = None ,
2457
+ passthru : Optional [dict [str , Any ]] = None ,
2474
2458
) -> Sanic :
2475
2459
"""Refresh the application instance. **This is used internally by Sanic**.
2476
2460
0 commit comments