feat: BreakPilot PWA - Full codebase (clean push without large binaries)
Some checks failed
Tests / Go Tests (push) Has been cancelled
Tests / Python Tests (push) Has been cancelled
Tests / Integration Tests (push) Has been cancelled
Tests / Go Lint (push) Has been cancelled
Tests / Python Lint (push) Has been cancelled
Tests / Security Scan (push) Has been cancelled
Tests / All Checks Passed (push) Has been cancelled
Security Scanning / Secret Scanning (push) Has been cancelled
Security Scanning / Dependency Vulnerability Scan (push) Has been cancelled
Security Scanning / Go Security Scan (push) Has been cancelled
Security Scanning / Python Security Scan (push) Has been cancelled
Security Scanning / Node.js Security Scan (push) Has been cancelled
Security Scanning / Docker Image Security (push) Has been cancelled
Security Scanning / Security Summary (push) Has been cancelled
CI/CD Pipeline / Go Tests (push) Has been cancelled
CI/CD Pipeline / Python Tests (push) Has been cancelled
CI/CD Pipeline / Website Tests (push) Has been cancelled
CI/CD Pipeline / Linting (push) Has been cancelled
CI/CD Pipeline / Security Scan (push) Has been cancelled
CI/CD Pipeline / Docker Build & Push (push) Has been cancelled
CI/CD Pipeline / Integration Tests (push) Has been cancelled
CI/CD Pipeline / Deploy to Staging (push) Has been cancelled
CI/CD Pipeline / Deploy to Production (push) Has been cancelled
CI/CD Pipeline / CI Summary (push) Has been cancelled
ci/woodpecker/manual/build-ci-image Pipeline was successful
ci/woodpecker/manual/main Pipeline failed
Some checks failed
Tests / Go Tests (push) Has been cancelled
Tests / Python Tests (push) Has been cancelled
Tests / Integration Tests (push) Has been cancelled
Tests / Go Lint (push) Has been cancelled
Tests / Python Lint (push) Has been cancelled
Tests / Security Scan (push) Has been cancelled
Tests / All Checks Passed (push) Has been cancelled
Security Scanning / Secret Scanning (push) Has been cancelled
Security Scanning / Dependency Vulnerability Scan (push) Has been cancelled
Security Scanning / Go Security Scan (push) Has been cancelled
Security Scanning / Python Security Scan (push) Has been cancelled
Security Scanning / Node.js Security Scan (push) Has been cancelled
Security Scanning / Docker Image Security (push) Has been cancelled
Security Scanning / Security Summary (push) Has been cancelled
CI/CD Pipeline / Go Tests (push) Has been cancelled
CI/CD Pipeline / Python Tests (push) Has been cancelled
CI/CD Pipeline / Website Tests (push) Has been cancelled
CI/CD Pipeline / Linting (push) Has been cancelled
CI/CD Pipeline / Security Scan (push) Has been cancelled
CI/CD Pipeline / Docker Build & Push (push) Has been cancelled
CI/CD Pipeline / Integration Tests (push) Has been cancelled
CI/CD Pipeline / Deploy to Staging (push) Has been cancelled
CI/CD Pipeline / Deploy to Production (push) Has been cancelled
CI/CD Pipeline / CI Summary (push) Has been cancelled
ci/woodpecker/manual/build-ci-image Pipeline was successful
ci/woodpecker/manual/main Pipeline failed
All services: admin-v2, studio-v2, website, ai-compliance-sdk, consent-service, klausur-service, voice-service, and infrastructure. Large PDFs and compiled binaries excluded via .gitignore.
This commit is contained in:
73
backend/tools/migrate_frontend_ui.py
Normal file
73
backend/tools/migrate_frontend_ui.py
Normal file
@@ -0,0 +1,73 @@
|
||||
import re
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def extract_app_ui_body(source_text: str) -> str:
|
||||
"""
|
||||
Extrahiert den HTML-Block aus der alten app_ui()-Funktion.
|
||||
"""
|
||||
match = re.search(r"def app_ui[^(]*\([^)]*\):\s*\n(\s*)return \"\"\"", source_text)
|
||||
if not match:
|
||||
raise RuntimeError("Konnte def app_ui() mit return \"\"\" nicht finden.")
|
||||
|
||||
indent = match.group(1)
|
||||
start = match.end() # direkt hinter return \"\"\" beginnt der HTML-Code
|
||||
close_pattern = "\n" + indent + '"""'
|
||||
end = source_text.find(close_pattern, start)
|
||||
|
||||
if end == -1:
|
||||
raise RuntimeError("Konnte schließende \"\"\" nicht finden.")
|
||||
|
||||
body = source_text[start:end]
|
||||
return body
|
||||
|
||||
|
||||
def build_frontend_studio_file(html_body: str) -> str:
|
||||
"""
|
||||
Baut die vollständige Datei studio.py mit APIRouter + HTML-Block.
|
||||
"""
|
||||
header = (
|
||||
"from fastapi import APIRouter\n"
|
||||
"from fastapi.responses import HTMLResponse\n\n"
|
||||
"router = APIRouter()\n\n\n"
|
||||
"@router.get(\"/app\", response_class=HTMLResponse)\n"
|
||||
"def app_ui():\n"
|
||||
" return \"\"\""
|
||||
)
|
||||
|
||||
footer = "\n \"\"\"\n"
|
||||
return header + html_body + footer
|
||||
|
||||
|
||||
def main():
|
||||
backend_dir = Path(__file__).parent
|
||||
|
||||
# 1) Sicherungsdatei bevorzugt
|
||||
backup_path = backend_dir / "frontend_app_backup.py"
|
||||
if backup_path.exists():
|
||||
source_path = backup_path
|
||||
print(f"Verwende Sicherungsdatei: {source_path}")
|
||||
else:
|
||||
# 2) Fallback auf frontend/app.py
|
||||
candidate = backend_dir / "frontend" / "app.py"
|
||||
if not candidate.exists():
|
||||
raise RuntimeError(
|
||||
"Keine Quelle gefunden: frontend_app_backup.py oder frontend/app.py fehlen."
|
||||
)
|
||||
source_path = candidate
|
||||
print(f"Verwende Datei: {source_path}")
|
||||
|
||||
source_text = source_path.read_text(encoding="utf-8")
|
||||
html_body = extract_app_ui_body(source_text)
|
||||
|
||||
studio_text = build_frontend_studio_file(html_body)
|
||||
|
||||
studio_path = backend_dir / "frontend" / "studio.py"
|
||||
studio_path.write_text(studio_text, encoding="utf-8")
|
||||
|
||||
print(f"frontend/studio.py erfolgreich erzeugt: {studio_path}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
Reference in New Issue
Block a user