База данных заблокирована при выполнении операции 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))
Что не так с моим кодом, ребята?