chore: initial import

This commit is contained in:
2026-07-24 21:37:03 +02:00
commit 6b4ed9bc36
111 changed files with 95131 additions and 0 deletions
+38
View File
@@ -0,0 +1,38 @@
# -*- coding: utf-8 -*-
"""
Plugin-Adapter für den Trainingsplan- und Rezept-Editor.
Das Original ist eine Flask-Anwendung (app.py) und bleibt vollständig
unverändert. Hier wird sie lediglich
* auf ihren eigenen Datenordner data/trainingsplan/ gezeigt und
* als WSGI-App in die ASGI-Suite eingehängt.
Das Tool läuft dadurch weiterhin auch allein:
cd plugins/trainingsplan && python app.py
"""
from __future__ import annotations
import os
from a2wsgi import WSGIMiddleware
from core.loader import load_module
def create_app(ctx):
# app.py liest DATA_DIR beim Import und legt dort die Phasen an.
previous = os.environ.get("DATA_DIR")
os.environ["DATA_DIR"] = str(ctx.data_dir)
try:
module = load_module(ctx.path("app.py"), f"btp_{ctx.id}_app")
finally:
if previous is None:
os.environ.pop("DATA_DIR", None)
else:
os.environ["DATA_DIR"] = previous
# Flask erzeugt seine URLs anhand von SCRIPT_NAME; a2wsgi übernimmt dafür
# den root_path des Mounts. Damit funktionieren alle Routen unter
# /plugins/trainingsplan genauso wie vorher unter /.
return WSGIMiddleware(module.app)