44from pathlib import Path
55
66import aiofiles
7- from aiohttp import ClientSession , FormData
7+ from aiohttp import ClientResponse , ClientSession , FormData
88from yarl import URL
99
1010from bunkrr_uploader .api .files import FileInfo
1919
2020logger = logging .getLogger ("bunkr-uploader" )
2121
22+ API_ENTRYPOINT = URL ("https://dash.bunkr.cr/api/" )
23+
2224DEFAULT_HEADERS = {
2325 "Accept" : "application/json, text/plain, */*" ,
2426 "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:136.0) Gecko/20100101 Firefox/136.0" ,
3234}
3335
3436
37+ def _log_resp (resp : ClientResponse , response : dict ) -> None :
38+ record = {"url" : str (resp .url ), "headers" : dict (resp .headers ), "response" : response }
39+ logger .debug (f"response: \n { json .dumps (record , indent = 4 )} " )
40+
41+
3542class BunkrrAPI :
3643 RATE_LIMIT = 50
3744
3845 def __init__ (self , token : str , chunk_size : int | None = None ):
3946 self ._token = token
40- self ._api_entrypoint = URL ("https://dash.bunkr.cr/api/" )
4147 self ._session_headers = DEFAULT_HEADERS | {"token" : self ._token }
42- self ._session = ClientSession (self . _api_entrypoint , headers = self ._session_headers )
48+ self ._session = ClientSession (API_ENTRYPOINT , headers = self ._session_headers )
4349 self ._chunk_size : int = chunk_size or 0
4450 self ._info = None
4551 self ._semaphore = asyncio .Semaphore (self .RATE_LIMIT )
@@ -57,12 +63,13 @@ async def _get_json(self, path: str) -> dict:
5763 async with self ._semaphore , self ._session .get (path ) as resp :
5864 resp .raise_for_status ()
5965 response : dict = await resp .json ()
60- record = {"url" : str (resp .url ), "headers" : dict (resp .headers ), "response" : response }
61- logger .debug (f"response: \n { json .dumps (record , indent = 4 , ensure_ascii = False )} " )
66+ _log_resp (resp , response )
6267 return response
6368
64- async def _post (self , path : str , * , data : FormData | dict | None = None , server : URL | None = None ) -> dict :
65- data = data or {}
69+ async def _post (
70+ self , path : str , * , data : FormData | dict | None = None , server : URL | None = None , ** kwargs
71+ ) -> dict :
72+ data = data or kwargs
6673 if isinstance (data , dict ) and "finishchunks" not in path :
6774 data ["token" ] = data .get ("token" ) or self ._token
6875
@@ -76,8 +83,7 @@ async def _post(self, path: str, *, data: FormData | dict | None = None, server:
7683 async with self ._semaphore , session .post (path , data = data , headers = headers ) as resp :
7784 resp .raise_for_status ()
7885 response = await resp .json ()
79- record = {"url" : str (resp .url ), "headers" : dict (resp .headers ), "response" : response }
80- logger .debug (f"response: \n { json .dumps (record , indent = 4 )} " )
86+ _log_resp (resp , response )
8187 return response
8288
8389 async def startup (self ):
@@ -109,7 +115,7 @@ async def get_node(self) -> NodeResponse:
109115 return NodeResponse (** response )
110116
111117 async def verify_token (self , * , token : str | None = None ) -> VerifyTokenResponse :
112- response = await self ._post ("tokens/verify" , data = { " token" : token } )
118+ response = await self ._post ("tokens/verify" , token = token )
113119 return VerifyTokenResponse (** response )
114120
115121 async def get_albums (self ) -> AlbumsResponse :
@@ -124,8 +130,7 @@ async def create_album(
124130 public : bool = True ,
125131 download : bool = True ,
126132 ) -> CreateAlbumResponse :
127- data = {"name" : name , "description" : description , "public" : public , "download" : download }
128- response = await self ._post ("albums" , data = data )
133+ response = await self ._post ("albums" , name = name , description = description , public = public , download = download )
129134 return CreateAlbumResponse (** response )
130135
131136 async def upload (self , file : FileInfo | Path , server : URL , album_id : str | None = None ) -> UploadResponse :
0 commit comments