TCPDashboard/database/repositories/base_repository.py
2025-06-13 18:01:10 +08:00

47 lines
1.4 KiB
Python

"""Base repository for all other repository classes."""
import logging
from contextlib import contextmanager
from typing import Optional
from ..connection import get_db_manager
from utils.logger import get_logger
class DatabaseOperationError(Exception):
"""Custom exception for database operation errors."""
pass
class BaseRepository:
"""Base class for all repository classes."""
def __init__(self, logger: Optional[logging.Logger] = None):
"""Initialize repository with optional logger."""
if logger is None:
self.logger = get_logger(self.__class__.__name__)
else:
self.logger = logger
self._db_manager = get_db_manager()
self._db_manager.initialize()
def log_info(self, message: str) -> None:
"""Log info message if logger is available."""
self.logger.info(message)
def log_debug(self, message: str) -> None:
"""Log debug message if logger is available."""
self.logger.debug(message)
def log_error(self, message: str) -> None:
"""Log error message if logger is available."""
self.logger.error(message)
@contextmanager
def get_session(self):
"""Get database session with automatic cleanup."""
if not self._db_manager:
raise DatabaseOperationError("Database manager not initialized")
with self._db_manager.get_session() as session:
yield session