2.4 KiB
2.4 KiB
cf-zeiten
Eine FastAPI-Anwendung zur dynamischen Anzeige von Öffnungszeiten und Bemerkungen, die direkt aus Google Sheets gespeist werden.
Features
- Google Sheets Integration: Daten werden via CSV-Export aus Google Sheets geladen.
- Automatisches Caching: Daten werden für 60 Minuten zwischengespeichert, um API-Anfragen zu minimieren.
- Admin-Interface: Zentrale Verwaltungsoberfläche zum Bearbeiten der Tabellen, Löschen des Caches und Testen der Ansicht.
- Dynamische Filterung: Anzeige kann über URL-Parameter nach Tagen (
?days=X) oder Zeilen (?lines=X) gefiltert werden. - Typografische Optimierungen:
- Automatisches Ersetzen von Bindestrichen durch En-Dashes (–) in Zeitangaben.
- UTF-8 Unterstützung für korrekte Darstellung deutscher Umlaute (z.B. "März").
- Unterstützung von Markdown in den Bemerkungsfeldern.
- Custom Fonts: Einbindung der "Brittany Signature" Schriftart für Monatsüberschriften.
Installation
- Repository klonen:
git clone <repository-url>
cd cf-zeiten
- Virtuelle Umgebung erstellen und aktivieren:
python -m venv venv
source venv/bin/activate # Linux/macOS
# oder
venv\Scripts\activate # Windows
- Abhängigkeiten installieren:
pip install -r requirements.txt
Konfiguration
Die Konfiguration erfolgt über die config.yaml im Hauptverzeichnis. Hier müssen die Google Sheet ID und die GIDs der einzelnen Tabellenblätter hinterlegt werden: YAML
google_sheet:
sheet_id: "DEINE_SHEET_ID"
gid_times: "GID_DER_ZEITEN"
gid_remarks: "GID_DER_BEMERKUNGEN"
date_column: "Datum"
processing:
days_to_show: 14
server:
host: "0.0.0.0"
port: 8000
Verwendung
Server starten
python main.py
Endpunkte
- Admin-Bereich:
http://localhost:8000/ - Öffentliche Tabelle:
http://localhost:8000/zeiten - Cache manuell leeren:
http://localhost:8000/cache-clear
URL-Parameter für /zeiten
test=1: Aktiviert einen dunklen Testhintergrund zur Vorschau.days=X: Zeigt die Einträge der nächsten X Tage an.lines=X: Zeigt exakt X Zeilen an (hat Vorrang vor days).
Projektstruktur
main.py: Einstiegspunkt der Anwendung.core/: Logik für Konfiguration und Datenverarbeitung (data_processor.py).routers/: Definition der Web-Routen.static/: Statische Dateien (Fonts, CSS).templates/: Jinja2-Templates für Admin- und Tabellenansicht.