This repository has been archived on 2026-02-15. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
breakpilot-pwa/backend/alembic/env.py
Benjamin Admin 21a844cb8a fix: Restore all files lost during destructive rebase
A previous `git pull --rebase origin main` dropped 177 local commits,
losing 3400+ files across admin-v2, backend, studio-v2, website,
klausur-service, and many other services. The partial restore attempt
(660295e2) only recovered some files.

This commit restores all missing files from pre-rebase ref 98933f5e
while preserving post-rebase additions (night-scheduler, night-mode UI,
NightModeWidget dashboard integration).

Restored features include:
- AI Module Sidebar (FAB), OCR Labeling, OCR Compare
- GPU Dashboard, RAG Pipeline, Magic Help
- Klausur-Korrektur (8 files), Abitur-Archiv (5+ files)
- Companion, Zeugnisse-Crawler, Screen Flow
- Full backend, studio-v2, website, klausur-service
- All compliance SDKs, agent-core, voice-service
- CI/CD configs, documentation, scripts

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 09:51:32 +01:00

108 lines
2.5 KiB
Python

"""
Alembic Environment Configuration fuer Classroom Engine.
Laedt die DB-Konfiguration und Models fuer Migrationen.
"""
import os
from logging.config import fileConfig
from sqlalchemy import engine_from_config
from sqlalchemy import pool
from alembic import context
# Alembic Config
config = context.config
# Logging Setup
if config.config_file_name is not None:
fileConfig(config.config_file_name)
# Import unserer Models fuer autogenerate
from classroom_engine.database import Base
from classroom_engine.db_models import (
LessonSessionDB,
PhaseHistoryDB,
TeacherSettingsDB,
)
# Alerts Agent Models (nutzt gleiche Base)
from alerts_agent.db.models import (
AlertTopicDB,
AlertItemDB,
AlertRuleDB,
AlertProfileDB,
)
# Test Registry Models
try:
from api.tests.db_models import (
TestRunDB,
TestResultDB,
FailedTestBacklogDB,
TestFixHistoryDB,
TestServiceStatsDB,
)
except ImportError:
# Models noch nicht vorhanden - wird bei Migration erstellt
pass
target_metadata = Base.metadata
# Database URL aus Umgebungsvariable oder Config
_raw_url = os.getenv(
"DATABASE_URL",
config.get_main_option("sqlalchemy.url")
)
# SQLAlchemy 2.0 erfordert "postgresql://" statt "postgres://"
DATABASE_URL = _raw_url.replace("postgres://", "postgresql://", 1) if _raw_url and _raw_url.startswith("postgres://") else _raw_url
def run_migrations_offline() -> None:
"""
Run migrations in 'offline' mode.
Generiert SQL-Skripte ohne DB-Verbindung.
"""
url = DATABASE_URL
context.configure(
url=url,
target_metadata=target_metadata,
literal_binds=True,
dialect_opts={"paramstyle": "named"},
)
with context.begin_transaction():
context.run_migrations()
def run_migrations_online() -> None:
"""
Run migrations in 'online' mode.
Fuehrt Migrationen direkt auf der DB aus.
"""
configuration = config.get_section(config.config_ini_section)
configuration["sqlalchemy.url"] = DATABASE_URL
connectable = engine_from_config(
configuration,
prefix="sqlalchemy.",
poolclass=pool.NullPool,
)
with connectable.connect() as connection:
context.configure(
connection=connection,
target_metadata=target_metadata,
)
with context.begin_transaction():
context.run_migrations()
if context.is_offline_mode():
run_migrations_offline()
else:
run_migrations_online()