WODL ProgressionsDoku

WODL in eigene Apps einbauen

WODL ist Open Source (MIT) und läuft komplett bei dir. Für die meisten Fälle reicht die Python-Bibliothek, für andere Sprachen die Kommandozeile, und wer die Web-App selbst betreiben will, startet sie als Docker-Container.

Python

Installieren:

pip install git+https://github.com/oxscience/wodl

Einen Plan lesen und weitergeben:

from wodl import parse, to_json, to_markdown

plan = parse(open("plan.wodl", encoding="utf-8").read())

for w in plan.warnings:          # unbekannte Übungen, kaputte Zeilen
    print("Hinweis:", w)

print(to_json(plan))             # Struktur für Apps, siehe JSON-Format
print(to_markdown(plan))         # Tabellen für Doku oder E-Mail

Für eigene Datenstrukturen gibt es to_dict(plan), das dasselbe wie das JSON als Python-Dictionary liefert.

Phasen und Blöcke stehen an jeder Einheit in phase ("Phase 3", "Block 1", sonst None). So holst du dir wie die Phasen-Auswahl der App nur die aktuelle Phase, dazu Einheiten ohne Phase wie ein Gehprogramm:

aktuell = [s for s in plan.sessions if s.phase in (None, "Phase 3")]

Progression aus Python

Dieselbe Engine wie im Reiter Progression, Woche für Woche als gültiges WODL:

from wodl import parse
from wodl.progression import ProgressionConfig, progress_plan

plan = parse(open("plan.wodl", encoding="utf-8").read())
config = ProgressionConfig(weeks=6, goal="ausdauer", deload_rhythm="last")

for week in progress_plan(plan, config):
    print(week.label)
    print(week.text)             # wieder WODL, also auch wieder parsebar

Als Ziel gibt es hypertrophie, kraft und ausdauer, die übrigen Stellschrauben stehen in ProgressionConfig.

Kommandozeile

Nach der Installation steht das Kommando wodl bereit:

wodl plan.wodl              # prüfen und Zusammenfassung zeigen
wodl plan.wodl --json       # JSON ausgeben
wodl plan.wodl --markdown   # Tabellen ausgeben
wodl --list                 # alle bekannten Übungen

Andere Sprachen

Wer nicht in Python arbeitet, ruft die Kommandozeile auf und liest das JSON, zum Beispiel in Node:

const { execFileSync } = require("node:child_process");
const plan = JSON.parse(execFileSync("wodl", ["plan.wodl", "--json"], { encoding: "utf8" }));
console.log(plan.sessions.map((s) => s.name));

Brauchst du WODL als HTTP-Dienst in deinem eigenen Netz, reichen ein paar Zeilen Flask:

from flask import Flask, jsonify, request
from wodl import parse, to_dict

app = Flask(__name__)

@app.post("/wodl")
def wodl_json():
    return jsonify(to_dict(parse(request.get_data(as_text=True))))

Die Web-App selbst betreiben

git clone https://github.com/oxscience/wodl
cd wodl
docker build -t wodl .
docker run -p 5051:5051 wodl

Danach läuft WODL Progressions unter http://localhost:5051, mit Bibliothek, Progression und Teilen-Links, nur eben auf deinem Rechner oder Server.

Was es bewusst nicht gibt

Eine öffentliche API auf wodl.outoftheb-ox.de gibt es nicht, da sie Wartung und Verfügbarkeit verspräche, die ein kleines Open-Source-Projekt nicht halten kann. Die Bibliothek, die Kommandozeile oder die eigene Installation liefern dieselben Ergebnisse und laufen dort, wo deine Daten ohnehin liegen.