DeepResearchAgent / app /database.py
M4h1m4's picture
Deploy Deep Research Agent to HF Spaces (main @ 25c5a3e)
967afff
Raw History Blame Contribute Delete
2.13 kB
import sqlite3
from sqlalchemy import create_engine, event
from sqlalchemy.engine import Engine
from sqlalchemy.orm import sessionmaker, Session
from typing import Generator
from config import settings
from config.logging_config import get_logger
from app.models import Base
logger = get_logger(__name__)
@event.listens_for(Engine, "connect")
def _set_sqlite_wal(dbapi_connection, connection_record):
if isinstance(dbapi_connection, sqlite3.Connection):
cursor = dbapi_connection.cursor()
cursor.execute("PRAGMA journal_mode=WAL")
cursor.close()
class Database:
def __init__(self):
logger.info(
"Initializing the database connection",
extra={"database_url": settings.database_url.split("@")[-1] if "@" in settings.database_url
else settings.database_url }
)
self.engine = create_engine(
settings.database_url,
connect_args = {"check_same_thread": False} if "sqlite" in settings.database_url else {}
)
self.SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=self.engine)
"""sessionmaker creates a factory that generates sessions
Each session represents a database transaction
sessions manage database transaction.
autocommit and autoflush are set to false to give manual control over transactions
"""
logger.info("Database engine and session factory created")
def create_tables(self):
"""Create all database tables."""
logger.info("Creating database tables")
Base.metadata.create_all(bind=self.engine)
logger.info("Database tables are created successfully")
def get_session(self) -> Generator[Session, None, None]:
"""Get database session."""
session = self.SessionLocal()
#SessionLocal creates a session in local
try:
yield session
finally:
session.close()
db = Database()
def get_db() -> Generator[Session, None, None]:
"""Dependency for FastAPI to get database session."""
yield from db.get_session()