1212
1313 Json = dict [str , "Json" ] | list ["Json" ] | str | int | float | bool | None
1414
15+ # Timeouts for requests.
16+ #
17+ # 10 seconds for connecting is a recurring default and adheres to python-requests's
18+ # recommendation of picking a value slightly larger than a multiple of 3.
19+ #
20+ # 60 seconds for reading aligns with Todoist's own internal timeout. All requests are
21+ # forcefully terminated after this time, so there is no point waiting any longer.
22+ TIMEOUT = (10 , 60 )
23+
1524
1625def get (
1726 session : Session ,
1827 url : str ,
1928 token : str | None = None ,
2029 params : dict [str , Any ] | None = None ,
2130) -> Json | bool :
22- response = session .get (url , params = params , headers = create_headers (token = token ))
31+ response = session .get (
32+ url , params = params , headers = create_headers (token = token ), timeout = TIMEOUT
33+ )
2334
2435 if response .status_code == codes .OK :
2536 return response .json ()
@@ -41,9 +52,7 @@ def post(
4152 )
4253
4354 response = session .post (
44- url ,
45- headers = headers ,
46- data = json .dumps (data ) if data else None ,
55+ url , headers = headers , data = json .dumps (data ) if data else None , timeout = TIMEOUT
4756 )
4857
4958 if response .status_code == codes .OK :
@@ -63,10 +72,7 @@ def delete(
6372
6473 headers = create_headers (token = token , request_id = request_id )
6574
66- response = session .delete (
67- url ,
68- headers = headers ,
69- )
75+ response = session .delete (url , headers = headers , timeout = TIMEOUT )
7076
7177 response .raise_for_status ()
7278 return response .ok
0 commit comments