antragstracker/backend/src/tracker/db/session.py
Dotty Dotter 17606ab237 feat: Initial commit — Antragstracker Hagen
Vollständige Pipeline zur Analyse kommunaler Vorlagen aus ALLRIS:
- OParl-Import: 20.149 Vorlagen
- PDF-Extraktion: 10.045 Volltexte (adaptives Throttling)
- KI-Zusammenfassungen: 10.026 via Qwen Plus (parallelisiert)
- Beratungsfolge-Scraper: Beschlusstexte + Wortprotokolle
- Abstimmungs-Analyse mit Koalitionsmatrix
- Georeferenzierung (Nominatim)

Stack: FastAPI + SvelteKit + SQLite
Deployment: Docker + Traefik auf VServer

Daten (DB, Logs) nicht im Repo — siehe Restic-Backup.
Repo-Setup: scripts/setup.sh für Neuaufbau aus OParl-API.
2026-03-30 16:37:58 +02:00

28 lines
766 B
Python

"""SQLite database connection management."""
import os
import sqlite3
from contextlib import contextmanager
from pathlib import Path
# Use environment variable or default to relative path
DB_PATH = Path(os.environ.get("DATABASE_PATH", Path(__file__).resolve().parents[4] / "data" / "tracker.db"))
def get_connection(db_path: Path | str | None = None) -> sqlite3.Connection:
path = str(db_path or DB_PATH)
conn = sqlite3.connect(path, detect_types=0)
conn.row_factory = sqlite3.Row
conn.execute("PRAGMA journal_mode = WAL")
conn.execute("PRAGMA foreign_keys = ON")
return conn
@contextmanager
def get_db(db_path: Path | str | None = None):
conn = get_connection(db_path)
try:
yield conn
finally:
conn.close()