WhiteApfel / pyQiwiP2P

Simple wrapper for comfortable work with the API of payment system for individuals QiwiP2P
Mozilla Public License 2.0
55 stars 12 forks source link

Заменить close на aclose; пофиксить закрытие клиента (добавив loop аргументом при инициализации) #25

Closed Woxazu closed 2 years ago

Woxazu commented 2 years ago
  1. В модуле AioQiwip2p в функции __aexit__ вместо self.client.aclose() стоит self.client.close(), как будто клиент синхронный. Приводит к ошибке 'AsyncClient' object has no attribute 'close'. После замены я заметил другую ошибку:
  2. если у меня есть модуль, в котором происходит инициализация клиента p2p = AioQiwiP2P(auth_key=qiwi_key) и несколько async функций, внутри которых with, например:
async def bill(bill_id, amount, lifetime= bill_lifetime):
    async with p2p:
        new_bill = await p2p.bill(bill_id= bill_id, amount= amount, lifetime= lifetime, comment= bill_id)
        return new_bill.pay_url, new_bill.bill_id

async def close_bill(bill_id):
    async with p2p:
        return await p2p.reject(bill_id= bill_id)

То при обращении к первой соответсвенно срабатывает with и триггерится aexit после окончания код блока, и это вроде логично. Но тогда при обращении ко второй функции из другого модуля этот клиент уже закрывается: RuntimeError: Cannot send a request, as the client has been closed. Если написать аналогичный код на httpx или другой асинк либе, то инициализированный клиент, очевидно, не умрет. Фиксится добавлением аргумента loop при инициализации, чтобы узнать в каком мы цикле и не убивать сущность. Да и в целом создавать клиент каждый раз при новом обращении против мануалов httpx из-за неэффективности

WhiteApfel commented 2 years ago

По поводу первого: https://github.com/WhiteApfel/pyQiwiP2P/blob/master/pyqiwip2p/AioQiwip2p.py#L80

Всё адекватненько

WhiteApfel commented 2 years ago

Клиент создаётся один раз: при инициализации объекта AioQiwiP2P или QiwiP2P

Можно использовать await p2p.client.aclose(), если планируется использовать множество раз, конструкция async with сделана для незабывания о закрытии и имеет право не использоваться

Woxazu commented 2 years ago

image клянусь, это было после команды pip install...

Woxazu commented 2 years ago

по поводу второго, тогда это скорее не баг а enhancement от меня. вопросов больше не осталось

WhiteApfel commented 2 years ago

pip install...

Стабильная версия (stable, v1.0.1) не имеет асинхронного клиента.

Версия 2.* (master) с асинхронным клиентом находится в статусе ленивой разработки и является нестабильной. Для установки нестабильных (альфа, бета и прочие) версий используется команда

python -m pip install --pre -U pyqiwip2p

Актуальная на данный момент версия v2.0a14 (pypi) ошибки из первого пунта не содержит