Lihan3301
@Lihan3301

Как правильно в таком коде закрыть сессию aiohttp?

Есть бот на aiogram, в нем есть функции где нужно делать запросы к API, я вынес все в отдельный класс:

class TestAPI:
    def __init__(self, api_key):
        self.api_key = api_key

    async def _post_request(self, url, payload, api_key):
        headers = {
            'merchant': 123,
            'sign': 123,
            'Content-Type': 'application/json'
        }

        async with aiohttp.ClientSession() as session:
            async with session.post(url, headers=headers, json=payload, ssl=False) as response:
                ...
    
    async def create_payout(self, order_id):
        url = "https://api.example.com/v1/payout"
        payload = {}
        result = await self._post_request(url, payload, self.api_key)
        ...


При работе с классом через aiogram все работает хорошо, но в проекте есть еще обработчик вебхуков на FastAPI и когда он обращается к классу и отправляет запрос через aiohttp, то сессия не закрывается и я получаю предупреждение

02/11/2024 00:00:00 PM : base_events.py line - 1757 : default_exception_handler : asyncio : ERROR : Unclosed connector
connections: ['[(<aiohttp.client_proto.ResponseHandler object at 0x7f7ccbe0e510>, 7870.742849551)]']
connector: <aiohttp.connector.TCPConnector object at 0x7f7ccbdb9090>


С классом в FastAPI работаю как и в aiogram, вот пример:
from utils.api_clients.test import TestAPI

async def processing_payment(order_id):
    api = TestAPI(api_key=api_key)
    payout = await api.create_payout(order_id)


Как правильно закрыть сессию при работе FastAPI? С вебхуками работаю первый раз, буду рад любой помощи, заранее спасибо!
  • Вопрос задан
  • 54 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы