Spaces:
Sleeping
Sleeping
feat: Implement core gazette parsing, data extraction, and foundational AI auditor system components.
f0c339c
| # Database connection and session management | |
| from sqlalchemy import create_engine | |
| from sqlalchemy.orm import sessionmaker, Session | |
| from contextlib import contextmanager | |
| from typing import Generator | |
| import os | |
| from models import Base | |
| from config import config | |
| class Database: | |
| """Database connection manager.""" | |
| def __init__(self, database_url: str = None): | |
| """Initialize database connection.""" | |
| self.database_url = database_url or config.get_database_url() | |
| self.engine = create_engine( | |
| self.database_url, | |
| echo=False, | |
| connect_args={"check_same_thread": False} # SQLite specific | |
| ) | |
| self.SessionLocal = sessionmaker( | |
| autocommit=False, | |
| autoflush=False, | |
| bind=self.engine | |
| ) | |
| def create_tables(self): | |
| """Create all database tables.""" | |
| Base.metadata.create_all(bind=self.engine) | |
| def drop_tables(self): | |
| """Drop all database tables.""" | |
| Base.metadata.drop_all(bind=self.engine) | |
| def get_session(self) -> Generator[Session, None, None]: | |
| """Get a database session with automatic cleanup.""" | |
| session = self.SessionLocal() | |
| try: | |
| yield session | |
| session.commit() | |
| except Exception: | |
| session.rollback() | |
| raise | |
| finally: | |
| session.close() | |
| def get_session_direct(self) -> Session: | |
| """Get a database session (caller must manage lifecycle).""" | |
| return self.SessionLocal() | |
| # Global database instance | |
| db = Database() | |
| # Auto-initialize tables on import | |
| db.create_tables() | |
| def init_database(): | |
| """Initialize the database and create tables.""" | |
| db.create_tables() | |
| return db | |
| def get_db_session() -> Session: | |
| """Get a database session for use in Streamlit.""" | |
| return db.get_session_direct() | |