[docs]classAiohttpClient(ABCHttpClient):"""Http-client based on aiohttp."""__slots__=("_session",)def__init__(self,session:ClientSession|None=None)->None:self._session=session
[docs]asyncdefrequest(self,method:str,url:str,data:object=None,**kwargs)->str|None:""" Make an aiohttp request. :param method: method for the request :param url: request url :param data: query string, defaults to None :return: response raw data """ifnotself._session:self._session=ClientSession()response=awaitself._session.request(method=method,url=url,data=data,**kwargs)returnawaitresponse.text()
[docs]asyncdefrequest_json(self,method:str,url:str,data:object=None,**kwargs)->dict|list|str|int:""" Make an aiohttp json request. :param method: method for the request :param url: request url :param data: query string, defaults to None :raises CHSUApiUnauthorizedError: auth token is expired :raises CHSUApiResponseError: invalid response :return: response json data """ifnotself._session:self._session=ClientSession()response=awaitself._session.request(method=method,url=url,data=data,**kwargs)if"Пожалуйста авторизуйтесь"inawaitresponse.text():raiseCHSUApiUnauthorizedErrorifresponse.content_type!="application/json":raiseCHSUApiResponseError(response.status,"Invalid response content type",response.content_type,)returnawaitresponse.json()