База данных заблокирована при выполнении операции acreate

Я пишу тесты для своего проекта. Я попытался добавить в него некоторые асинхронные вещи. Все работает, но когда я запускаю тесты, происходит сбой:

django.db.utils.OperationalError: database is locked

await UserBill.objects.acreate(user_id=user_id, bill=total_cost, duration=rent_range)

Тест:

@pytest.mark.django_db
@override_settings(
    CELERY_TASK_EAGER_PROPAGATES=True,
    CELERY_TASK_ALWAYS_EAGER=True,
    CELERY_BROKER_URL='memory://',
    CELERY_RESULT_BACKEND='cache+memory://',
)
def test_finish_rent(django_db_blocker, django_db_setup):
    with django_db_blocker.unblock():
        user = User.objects.get(email='test2@example.com')
        bicycle = Bicycle.objects.get(name='Bicycle 2')
        finish_rent(bicycle, user)
        assert BicycleUser.objects.filter(bicycle=bicycle, user=user).exists() is False

conftest.py is:

@pytest.fixture(scope='session')
def django_db_setup(delete_db, django_db_blocker):
    with django_db_blocker.unblock():
        call_command('sqlflush')
    with django_db_blocker.unblock():
        call_command('migrate', '--noinput')
    yield

finish_rent:

def finish_rent(bicycle, user):
    bicycle_user = BicycleUser.objects.get(bicycle=bicycle, user=user)
    start_rent = bicycle_user.rent_start
    bicycle_user.delete()
    add_bill.delay(bicycle.id, user.id, start_rent)

async task:

async def add_bill_task(bicycle_id, user_id, start_rent):
    now = timezone.now()
    rent_range = (now - start_rent).total_seconds()
    rent_range = rent_range // 60
    bicycle = await Bicycle.objects.aget(id=bicycle_id)
    total_cost = bicycle.cost_per_minute * rent_range
    await UserBill.objects.acreate(user_id=user_id, bill=total_cost, duration=rent_range)


@shared_task
def add_bill(bicycle_id, user_id, start_rent):
    asyncio.run(add_bill_task(bicycle_id, user_id, start_rent))

Что не так с моим кодом, ребята?

Вернуться на верх