33import logging
44import os
55import sys
6- from typing import Any
6+ from typing import Any , Self
77
8- from aiohttp import ClientResponse , ClientSession
9- from yarl import URL
8+ from httpx import AsyncClient
9+ from httpx import Response as ClientResponse
1010
1111from .components import Callback , HttpComponent , MetablockResponseError
1212from .extensions import Extension , Extensions , Plugin , Plugins
@@ -30,13 +30,14 @@ def __init__(
3030 url : str | None = None ,
3131 auth_key : str = "" ,
3232 auth_key_name : str = "x-metablock-api-key" ,
33- session : ClientSession | None = None ,
33+ session : AsyncClient | None = None ,
3434 user_agent : str = DEFAULT_USER_AGENT ,
3535 ) -> None :
3636 self .url : str = url if url is not None else self .url
3737 self .auth_key : str = auth_key or self .auth_key
3838 self .auth_key_name = auth_key_name
3939 self .session = session
40+ self .session_owner = session is None
4041 self .default_headers : dict [str , str ] = {
4142 "user-agent" : user_agent ,
4243 "accept" : "application/json" ,
@@ -49,18 +50,14 @@ def __init__(
4950 self .domains = Domains (self )
5051 self .services = self .blocks
5152
52- def __repr__ (self ) -> str :
53- return self .url
54-
55- __str__ = __repr__
56-
5753 @property
58- def cli (self ) -> Metablock :
54+ def cli (self ) -> Self :
5955 return self
6056
6157 async def close (self ) -> None :
62- if self .session :
63- await self .session .close ()
58+ if self .session and self .session_owner :
59+ await self .session .aclose ()
60+ self .session = None
6461
6562 async def __aenter__ (self ) -> Metablock :
6663 return self
@@ -71,37 +68,37 @@ async def __aexit__(self, exc_type: type, exc_val: Any, exc_tb: Any) -> None:
7168 async def spec (self ) -> dict :
7269 return await self .request (f"{ self .url } /spec" )
7370
74- async def get (self , url : str | URL , ** kwargs : Any ) -> Any :
71+ async def get (self , url : str , ** kwargs : Any ) -> Any :
7572 kwargs ["method" ] = "GET"
7673 return await self .request (url , ** kwargs )
7774
78- async def patch (self , url : str | URL , ** kwargs : Any ) -> Any :
75+ async def patch (self , url : str , ** kwargs : Any ) -> Any :
7976 kwargs ["method" ] = "PATCH"
8077 return await self .request (url , ** kwargs )
8178
82- async def post (self , url : str | URL , ** kwargs : Any ) -> Any :
79+ async def post (self , url : str , ** kwargs : Any ) -> Any :
8380 kwargs ["method" ] = "POST"
8481 return await self .request (url , ** kwargs )
8582
86- async def put (self , url : str | URL , ** kwargs : Any ) -> Any :
83+ async def put (self , url : str , ** kwargs : Any ) -> Any :
8784 kwargs ["method" ] = "PUT"
8885 return await self .request (url , ** kwargs )
8986
90- async def delete (self , url : str | URL , ** kwargs : Any ) -> Any :
87+ async def delete (self , url : str , ** kwargs : Any ) -> Any :
9188 kwargs ["method" ] = "DELETE"
9289 return await self .request (url , ** kwargs )
9390
9491 async def request (
9592 self ,
96- url : str | URL ,
93+ url : str ,
9794 method : str = "" ,
9895 headers : dict [str , str ] | None = None ,
9996 callback : Callback | None = None ,
10097 wrap : Any = None ,
10198 ** kw : Any ,
10299 ) -> Any :
103100 if not self .session :
104- self .session = ClientSession ()
101+ self .session = AsyncClient ()
105102 method = method or "GET"
106103 headers_ = self .get_default_headers ()
107104 headers_ .update (headers or ())
@@ -112,16 +109,16 @@ async def request(
112109 return await self .handle_response (response , wrap = wrap )
113110
114111 async def handle_response (self , response : ClientResponse , wrap : Any = None ) -> Any :
115- if response .status == 204 :
112+ if response .status_code == 204 :
116113 return True
117- if response .status >= 400 :
114+ if response .status_code >= 400 :
118115 try :
119- data = await response .json ()
116+ data = response .json ()
120117 except Exception :
121- data = await response .text ()
118+ data = response .text
122119 raise MetablockResponseError (response , data )
123120 response .raise_for_status ()
124- data = await response .json ()
121+ data = response .json ()
125122 return wrap (data ) if wrap else data
126123
127124 async def get_user (self , ** kw : Any ) -> User :
0 commit comments