11from __future__ import annotations
22
3- from typing import Any , TypeVar , cast
3+ from typing import Any
44
55import httpx
66
1515# are forcefully terminated after this time, so there is no point waiting longer.
1616TIMEOUT = httpx .Timeout (connect = 10.0 , read = 60.0 , write = 60.0 , pool = 10.0 )
1717
18- T = TypeVar ("T" )
19-
20-
21- def _parse_response (
22- response : httpx .Response ,
23- _result_type : type [T ] | None = None ,
24- ) -> T :
25- response .raise_for_status ()
26-
27- if response .status_code == httpx .codes .NO_CONTENT :
28- return cast ("T" , response .is_success )
29-
30- return cast ("T" , response .json ())
31-
3218
3319def get (
3420 client : httpx .Client ,
3521 url : str ,
3622 token : str | None = None ,
3723 request_id : str | None = None ,
3824 params : dict [str , Any ] | None = None ,
39- result_type : type [T ] | None = None ,
40- ) -> T :
25+ ) -> httpx .Response :
4126 headers = create_headers (token = token , request_id = request_id )
4227
4328 response = client .get (
@@ -46,8 +31,8 @@ def get(
4631 headers = headers ,
4732 timeout = TIMEOUT ,
4833 )
49-
50- return _parse_response ( response , result_type )
34+ response . raise_for_status ()
35+ return response
5136
5237
5338async def get_async (
@@ -56,8 +41,7 @@ async def get_async(
5641 token : str | None = None ,
5742 request_id : str | None = None ,
5843 params : dict [str , Any ] | None = None ,
59- result_type : type [T ] | None = None ,
60- ) -> T :
44+ ) -> httpx .Response :
6145 headers = create_headers (token = token , request_id = request_id )
6246
6347 response = await client .get (
@@ -66,8 +50,8 @@ async def get_async(
6650 headers = headers ,
6751 timeout = TIMEOUT ,
6852 )
69-
70- return _parse_response ( response , result_type )
53+ response . raise_for_status ()
54+ return response
7155
7256
7357def post (
@@ -78,19 +62,18 @@ def post(
7862 * ,
7963 params : dict [str , Any ] | None = None ,
8064 data : dict [str , Any ] | None = None ,
81- result_type : type [T ] | None = None ,
82- ) -> T :
65+ ) -> httpx .Response :
8366 headers = create_headers (token = token , request_id = request_id )
8467
8568 response = client .post (
8669 url ,
8770 headers = headers ,
88- json = data if data is not None else None ,
71+ json = data ,
8972 params = params ,
9073 timeout = TIMEOUT ,
9174 )
92-
93- return _parse_response ( response , result_type )
75+ response . raise_for_status ()
76+ return response
9477
9578
9679async def post_async (
@@ -101,19 +84,18 @@ async def post_async(
10184 * ,
10285 params : dict [str , Any ] | None = None ,
10386 data : dict [str , Any ] | None = None ,
104- result_type : type [T ] | None = None ,
105- ) -> T :
87+ ) -> httpx .Response :
10688 headers = create_headers (token = token , request_id = request_id )
10789
10890 response = await client .post (
10991 url ,
11092 headers = headers ,
111- json = data if data is not None else None ,
93+ json = data ,
11294 params = params ,
11395 timeout = TIMEOUT ,
11496 )
115-
116- return _parse_response ( response , result_type )
97+ response . raise_for_status ()
98+ return response
11799
118100
119101def delete (
@@ -122,13 +104,12 @@ def delete(
122104 token : str | None = None ,
123105 request_id : str | None = None ,
124106 params : dict [str , Any ] | None = None ,
125- ) -> bool :
107+ ) -> httpx . Response :
126108 headers = create_headers (token = token , request_id = request_id )
127109
128110 response = client .delete (url , params = params , headers = headers , timeout = TIMEOUT )
129-
130111 response .raise_for_status ()
131- return response . is_success
112+ return response
132113
133114
134115async def delete_async (
@@ -137,10 +118,18 @@ async def delete_async(
137118 token : str | None = None ,
138119 request_id : str | None = None ,
139120 params : dict [str , Any ] | None = None ,
140- ) -> bool :
121+ ) -> httpx . Response :
141122 headers = create_headers (token = token , request_id = request_id )
142123
143124 response = await client .delete (url , params = params , headers = headers , timeout = TIMEOUT )
144-
145125 response .raise_for_status ()
146- return response .is_success
126+ return response
127+
128+
129+ def response_json_dict (response : httpx .Response ) -> dict [str , Any ]:
130+ data = response .json ()
131+ if not isinstance (data , dict ):
132+ raise TypeError (
133+ f"Expected response to be a JSON object, got { type (data ).__name__ } ."
134+ )
135+ return data
0 commit comments