I have a mongo class for my fastAPI application:
`
from motor.motor_asyncio import AsyncIOMotorClient
from config import settings
import 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()`
I Also have some async tests to test my APIs:
This is the conftest.py:
`
import pytest
import asyncio
import pytest_asyncio
from httpx import AsyncClient
from clients.mongo import mongo_instance
@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()
`
And these are some tests for example:
`
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')
`
The problem is I don’t know how to add indices to the Mongo instance since add index needs await, and if I do await on that on my application, I will get event loop closed on my tests as well and even without tests my API does not work in Swagger.
Thanks
I tried adding await to create index function or changing conftest but did not work
Hossein is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.