Добавьте индекс в AsyncIOMotorClient при наличии асинхронных тестов.Python

Программы на Python
Anonymous
Добавьте индекс в AsyncIOMotorClient при наличии асинхронных тестов.

Сообщение Anonymous »

У меня есть класс mongo для моего приложения fastAPI:
`
из Motor.motor_asyncio импортировать AsyncIOMotorClient
из настроек импорта конфигурации
импортировать asyncio

Код: Выделить всё

 class Mongo:
def __init__(self):
client = AsyncIOMotorClient(
host=settings.MONGO_HOST,
port=settings.MONGO_PORT,
username=settings.MONGO_USER,
password=settings.MONGO_PASS,
authSource=settings.MONGO_DB,
retryWrites=False
)

db = client[settings.MONGO_DB]

self.services_col = db["services"]
self.access_keys_col = db["access-keys"]
self.categories_col = db["categories"]
self.roles_col = db['roles']

self.collections = {
"services": self.services_col,
"access-keys": self.access_keys_col,
"categories": self.categories_col,
"roles": self.roles_col
}

async def create_indexes(self):
# Create indexes on the services collection
await self.services_col.create_index("name")
await self.services_col.create_index("dashboardPath")

# Create indexes on the categories collection
await self.categories_col.create_index("name")
await self.categories_col.create_index("dashboardPath")

mongo_instance = Mongo()`
У меня также есть несколько асинхронных тестов для проверки моих API:
Это conftest.py:

Код: Выделить всё

 @pytest.yield_fixture(scope="session")
def event_loop(request):
"""Create an instance of the default event loop for each test
case."""
loop = asyncio.get_event_loop_policy().new_event_loop()
yield loop
loop.close()
А вот, например, несколько тестов:

Код: Выделить всё

 import pytest
from httpx import AsyncClient
import pytest_asyncio
import asyncio
from tests.utils import *

@pytest.mark.asyncio
async def test_add_service(async_client):
await remove_entity('test_category', 'categories')
await remove_entity('test_service', 'services')

current_services = await count_entities('services')
`
Проблема в том, что я не знаю, как добавить индексы в экземпляр Mongo, поскольку добавление индекса требует ожидания, и если я жду, при этом в моем приложении я также закрою цикл событий в своих тестах, и даже без тестов мой API не работает в Swagger.
Спасибо
Я пробовал добавить ожидание для создания индексной функции или изменить конфигурацию, но не помогло

Подробнее здесь: https://stackoverflow.com/questions/785 ... sync-tests

Вернуться в «Python»