1
1
from datetime import datetime
2
+ from typing import Callable , Iterator
2
3
3
4
import pytest
4
5
5
6
from starlette import convertors
6
7
from starlette .convertors import Convertor , register_url_convertor
8
+ from starlette .requests import Request
7
9
from starlette .responses import JSONResponse
8
10
from starlette .routing import Route , Router
11
+ from starlette .testclient import TestClient
12
+
13
+ TestClientFactory = Callable [..., TestClient ]
9
14
10
15
11
16
@pytest .fixture (scope = "module" , autouse = True )
12
- def refresh_convertor_types ():
17
+ def refresh_convertor_types () -> Iterator [ None ] :
13
18
convert_types = convertors .CONVERTOR_TYPES .copy ()
14
19
yield
15
20
convertors .CONVERTOR_TYPES = convert_types
@@ -29,7 +34,7 @@ def to_string(self, value: datetime) -> str:
29
34
def app () -> Router :
30
35
register_url_convertor ("datetime" , DateTimeConvertor ())
31
36
32
- def datetime_convertor (request ) :
37
+ def datetime_convertor (request : Request ) -> JSONResponse :
33
38
param = request .path_params ["param" ]
34
39
assert isinstance (param , datetime )
35
40
return JSONResponse ({"datetime" : param .strftime ("%Y-%m-%dT%H:%M:%S" )})
@@ -45,7 +50,9 @@ def datetime_convertor(request):
45
50
)
46
51
47
52
48
- def test_datetime_convertor (test_client_factory , app : Router ):
53
+ def test_datetime_convertor (
54
+ test_client_factory : TestClientFactory , app : Router
55
+ ) -> None :
49
56
client = test_client_factory (app )
50
57
response = client .get ("/datetime/2020-01-01T00:00:00" )
51
58
assert response .json () == {"datetime" : "2020-01-01T00:00:00" }
@@ -57,8 +64,10 @@ def test_datetime_convertor(test_client_factory, app: Router):
57
64
58
65
59
66
@pytest .mark .parametrize ("param, status_code" , [("1.0" , 200 ), ("1-0" , 404 )])
60
- def test_default_float_convertor (test_client_factory , param : str , status_code : int ):
61
- def float_convertor (request ):
67
+ def test_default_float_convertor (
68
+ test_client_factory : TestClientFactory , param : str , status_code : int
69
+ ) -> None :
70
+ def float_convertor (request : Request ) -> JSONResponse :
62
71
param = request .path_params ["param" ]
63
72
assert isinstance (param , float )
64
73
return JSONResponse ({"float" : param })
0 commit comments