1
1
import json
2
2
from typing import Any
3
+ from typing_extensions import override
3
4
4
5
import httpx
5
6
12
13
class AsyncHTTP (AbstractHTTP [httpx .AsyncClient , httpx .Response ]):
13
14
session : httpx .AsyncClient
14
15
16
+ @override
15
17
async def download (self , url : str , dest : str ) -> None :
16
18
async with self .session .stream ('GET' , url , timeout = None ) as resp :
17
19
resp .raise_for_status ()
18
20
with open (dest , 'wb' ) as fd :
19
21
async for chunk in resp .aiter_bytes ():
20
22
fd .write (chunk )
21
23
24
+ @override
22
25
async def request (self , method : Method , url : str , ** kwargs : Any ) -> 'Response' :
23
26
return Response (await self .session .request (method , url , ** kwargs ))
24
27
28
+ @override
25
29
def open (self ) -> None :
26
30
self .session = httpx .AsyncClient (** self .session_kwargs )
27
31
32
+ @override
28
33
async def close (self ) -> None :
29
34
if self .should_close ():
30
35
await self .session .aclose ()
@@ -45,15 +50,19 @@ class Response(AbstractResponse[httpx.Response]):
45
50
__slots__ = ()
46
51
47
52
@property
53
+ @override
48
54
def status (self ) -> int :
49
55
return self .original .status_code
50
56
51
57
@property
58
+ @override
52
59
def headers (self ) -> httpx .Headers :
53
60
return self .original .headers
54
61
62
+ @override
55
63
async def json (self , ** kwargs : Any ) -> Any :
56
64
return json .loads (await self .original .aread (), ** kwargs )
57
65
66
+ @override
58
67
async def text (self , ** kwargs : Any ) -> str :
59
68
return '' .join ([part async for part in self .original .aiter_text (** kwargs )])
0 commit comments