cevheri's picture
feat: enhanced repository usages
3ef184a
from typing import Optional
from mongomock_motor import AsyncMongoMockClient
from app.config.db import db_config
from loguru import logger
from app.db.client import DatabaseClient
class EmbeddedMongoClient(DatabaseClient):
"""
Mock MongoDB client implementation for local machine and development environment.
This client is used to connect to a mock MongoDB instance that is running in the local machine.
It is used to test/dev/local the application without the need to have a real MongoDB instance running.
"""
def __init__(self):
logger.info("Initializing EmbeddedMongoClient")
self._client: Optional[AsyncMongoMockClient] = None
self._db = None
self._is_connected: bool = False
logger.info("EmbeddedMongoClient initialized")
@property
def client(self) -> AsyncMongoMockClient:
logger.info("Getting EmbeddedMongoClient")
if not self._client:
logger.info("Generating EmbeddedMongoClient")
self._client = AsyncMongoMockClient()
self._db = self._client[db_config.DATABASE_NAME]
logger.info(f"Returning EmbeddedMongoClient. Host: {self._client.host}")
return self._client
@property
def db(self):
logger.info("Getting EmbeddedMongoClient.db")
if not self._db:
logger.info("Generating EmbeddedMongoClient.db")
self._db = self.client[db_config.DATABASE_NAME]
logger.info(f"Returning EmbeddedMongoClient.db. Host: {self._db.host}")
return self._db
async def connect(self) -> None:
try:
if not self._is_connected:
logger.info("Connecting to EmbeddedMongoClient")
self._is_connected = True
logger.info("Connected to EmbeddedMongoClient")
except Exception as e:
self._is_connected = False
logger.error(f"Failed to connect to EmbeddedMongoClient: {e}")
raise
async def close(self) -> None:
try:
if self._is_connected and self._client is not None:
logger.info("Closing EmbeddedMongoClient connection")
self._client = None
self._db = None
self._is_connected = False
logger.info("Disconnected from EmbeddedMongoClient")
except Exception as e:
logger.warning(f"Error while closing EmbeddedMongoClient connection: {e}")
self._client = None
self._db = None
self._is_connected = False