Skip to content

Cannot perform operation: another operation is in progress #728

Open
@erhosen

Description

@erhosen
  • GINO version: 1.0.1
  • Python version: 3.8
  • asyncpg version: 0.21.0
  • aiocontextvars version: 0.2.2
  • PostgreSQL version: 10.14

Description

My task is create some database record (via GINO Model.create()) before running test (typical pytest.fixture usage), and drop everything after.

What I Did

conftest.py

import pytest
from fastapi.testclient import TestClient

from alembic.config import main as alembic_main

from settings import settings
settings.DATABASE_NAME = 'test_db_name'
from main import app_init

@pytest.fixture
def client():
    alembic_main(["--raiseerr", "upgrade", "head"])

    with TestClient(app_init()) as client:
        yield client

    alembic_main(["--raiseerr", "downgrade", "base"])

test.py

import pytest
from models import SpecialModel

@pytest.fixture
async def special_model():
    special_model = await SpecialModel.create(
        internal_name='internal_name',
        comment='comment',
        is_active=True,
        title="Title",
        text="Text"
    )
    yield special_model

def test_get_all_special_models(client, special_model):
    response = client.get("api/get_all_models")
    data = response.json()
    assert data["success"] is True
    assert len(data["result"]) == 1

What I got:

test setup failed
@pytest.fixture
    async def special_model():
>      special_model = await SpecialModel.create(
            internal_name='internal_name',
            comment='comment',
            is_active=True,
            title="Title",
            text="Text"
        )

tests/test.py:8: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
../../.virtualenvs/deeplink-offer-service/lib/python3.8/site-packages/gino/crud.py:444: in _create_without_instance
    return await cls(**values)._create(bind=bind, timeout=timeout)
../../.virtualenvs/deeplink-offer-service/lib/python3.8/site-packages/gino/crud.py:477: in _create
    row = await bind.first(q)
../../.virtualenvs/deeplink-offer-service/lib/python3.8/site-packages/gino/engine.py:748: in first
    return await conn.first(clause, *multiparams, **params)
../../.virtualenvs/deeplink-offer-service/lib/python3.8/site-packages/gino/engine.py:147: in __aexit__
    await conn.release()
../../.virtualenvs/deeplink-offer-service/lib/python3.8/site-packages/gino/engine.py:279: in release
    await dbapi_conn.release(True)
../../.virtualenvs/deeplink-offer-service/lib/python3.8/site-packages/gino/engine.py:47: in release
    return await self._release()
../../.virtualenvs/deeplink-offer-service/lib/python3.8/site-packages/gino/engine.py:83: in _release
    await self._pool.release(conn)
../../.virtualenvs/deeplink-offer-service/lib/python3.8/site-packages/gino/dialects/asyncpg.py:232: in release
    await self._pool.release(conn)
../../.virtualenvs/deeplink-offer-service/lib/python3.8/site-packages/asyncpg/pool.py:654: in release
    return await asyncio.shield(ch.release(timeout))
../../.virtualenvs/deeplink-offer-service/lib/python3.8/site-packages/asyncpg/pool.py:216: in release
    raise ex
../../.virtualenvs/deeplink-offer-service/lib/python3.8/site-packages/asyncpg/pool.py:206: in release
    await self._con.reset(timeout=budget)
../../.virtualenvs/deeplink-offer-service/lib/python3.8/site-packages/asyncpg/connection.py:1137: in reset
    await self.execute(reset_query, timeout=timeout)
../../.virtualenvs/deeplink-offer-service/lib/python3.8/site-packages/asyncpg/connection.py:295: in execute
    return await self._protocol.query(query, timeout)
asyncpg/protocol/protocol.pyx:301: in query
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   asyncpg.exceptions._base.InterfaceError: cannot perform operation: another operation is in progress

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions