Асинхронный декоратор python3 .6 - PullRequest
0 голосов
/ 16 марта 2020

У меня есть следующий код для установления соединения PG.

class Engine:
@property
async def engine(self):
          self._engine = await asyncpg.create_pool(PG_URI)

          return self._engine




@async_generator.asynccontextmanager
async def transaction(self, *args, **kwargs):
    engine = self.engine
    conn = await self.engine()
    async with conn.acquire() as txn:
        await txn.execute("EXECUTE-SOMETHING-TO CHANGE PG TIMEEOUT")
        yield txn

def __call__(self):
    """Retry a transaction on an OperationalError."""

    def t(f):
        @wraps(f)
        async def g(*args, **kwargs):
            async with self.transaction(f.__name__) as txn:
                return f(txn, *args, **kwargs)
        return g

    return t

В другом модуле произнесите model.py

engine = Engine()
@engine()
async def retry_delivery(txn):
try:
    result = await txn.fetchrow("EXECUTE SOME QUERY")

    if result is None:
        return []
    else:
        return [dict(result)["id"]]
finally:
    txn.close()

Когда я пытаюсь позвонить retry_delivery Я получаю ошибку TypeError: 'coroutine' object is not iterable. Я достиг этой точки после того, как много гуглил. Пожалуйста, предложите, где я не прав или какой-либо лучший способ реализовать это. Спасибо!

...