You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

47 lines
1.4 KiB

"""Модлуль для конструирования и обработки запросов."""
from app_config import AppConfig
from aiohttp import ClientResponse
import asyncio
import aiohttp
class RequestBulder:
def __init__(self, cfg: AppConfig):
self.cfg = cfg
_conn = aiohttp.TCPConnector(limit=cfg.requests_count)
self.session = aiohttp.ClientSession(connector=_conn)
async def __check_resp(self, resp: ClientResponse) -> bool:
if not resp.status == 200:
return False
response = await resp.json()
if not response["done"]:
return False
return True
async def send_request(self, url, json_body) -> dict | bool:
"""Выполняет запрос, при успехе возвращает json с ответом, при
неудаче возвращает False."""
_url = f"{self.cfg.central_host_url}/{url}"
raw_resp = await self.session.get(_url, json=json_body)
if await self.__check_resp(raw_resp):
json_resp = await raw_resp.json()
json_resp.pop("done")
return json_resp
return False
async def wait(self) -> None:
"""Ждет frequency_sec время."""
await asyncio.sleep(self.cfg.frequency_sec)
# def __del__(self):
# if self.session is not None:
# self.session.close()