Some checks failed
Build & Push Docker / build (push) Has been cancelled
Problém:
- V kroku 2 uživatel nastavoval barvy, ale ty se neaplikovaly v kroku 3
- Zbytečný mezikrok kde uživatel musel klikat 'Generovat' nebo 'Upravit'
Řešení:
- Step 2 nyní přímo zobrazuje inline editor s načtenými daty z Excelu
- Uživatel může upravit řádky, typy a nastavit barvy přímo v jednom kroku
- Odstraněn step 2b (duplikát) a step 3 (již nepotřebný)
- Zjednodušen workflow: Import Excel -> Inline editor -> Generovat
Změny:
- cgi-bin/scenar.py: Step 2 nyní renderuje inline editor přímo
- Odstraněny nepotřebné kroky 2b a 3
- Barvy se nyní nastavují přímo v inline editoru u typů programu
Testy: 18/18 unit testů prošlo ✅
Scenar Creator
Moderní CGI aplikace pro vytváření časových plánů (timetablů) z Excelu nebo přímé editace v prohlížeči.
Co to dělá
Scenar Creator je webová aplikace, která vám pomáhá vytvářet a spravovat timetably (časové plány) pro konference, školení a další akce. Aplikace podporuje:
- ✅ Import z Excelu — načtení seznamu programů/přednášek a automatické vytvoření timetablu
- ✅ Inline editor — přímá editace programu v prohlížeči bez Excelu (JavaScript row management)
- ✅ Validace dat — kontrola překryvů, chybějících polí, neplatných časů
- ✅ Export do Excelu — vygenerovaný timetable se stáhne v profesionálním formátu
- ✅ Barevné rozlišení — jednotlivé typy programu s vlastními barvami
- ✅ Plná test coverage — 10 testů jednotek + integrace s Docker/Podman
Instalace a spuštění
Lokálně (bez Dockeru)
- Klonuj a připrav prostředí:
git clone <repo>
cd scenar-creator
python -m venv .venv
source .venv/bin/activate # na Windows: .venv\Scripts\activate
pip install -r requirements.txt
- Spusť s jednoduchým CGI serverem:
python -m http.server --cgi 8000
# Otevři v prohlížeči: http://localhost:8000/cgi-bin/scenar.py
- Spusť testy:
pytest -q
# Bez integračních testů (Docker):
pytest -q -m "not integration"
Podman/Docker (produkční)
- Postav image:
./scripts/build_image.sh
# nebo ručně:
podman build -t scenar-creator:latest .
- Spusť kontejner:
./scripts/start_scenar.sh
# Aplikace bude dostupná na http://127.0.0.1:8080/
- Zastavit kontejner:
./scripts/stop_scenar.sh
Git Hooks (pre-commit)
Aplikace obsahuje git hooks, které spouští testy před commitem.
Jednorazová instalace hooků:
chmod +x scripts/install_hooks.sh
./scripts/install_hooks.sh
# nebo ručně:
git config core.hooksPath .githooks
Použití:
-
Běžný commit — spustí se rychlé testy (bez Dockeru):
git commit -m "..." # Spustí: pytest -q -m "not integration" -
Commit s integračními testy (Podman):
RUN_INTEGRATION=1 git commit -m "..."
Workflow — Jak používat aplikaci
1️⃣ Import z Excelu (klasicky)
1. Otevři http://localhost:8000/cgi-bin/scenar.py
2. Klikni na tab "Importovat Excel"
3. Stáhni šablonu (scenar_template.xlsx)
4. Vyplň tabulku:
- Datum (YYYY-MM-DD)
- Začátek (HH:MM)
- Konec (HH:MM)
- Program (název přednášky)
- Typ (kategorie: WORKSHOP, LECTURE, atd.)
- Garant (vedoucí, autor)
- Poznámka (dodatečné info)
5. Uploaduj soubor
6. Zadej popis typů a barvy
7. Stáhni Excel timetable
2️⃣ Inline Editor (bez Excelu)
1. Otevři http://localhost:8000/cgi-bin/scenar.py
2. Klikni na tab "Vytvořit inline"
3. Vyplň název a detail akce
4. V tabulce "Program (řádky)":
- Přidej řádky tlačítkem "+ Přidat řádek"
- Vyplň Datum, Začátek, Konec, Program, Typ, Garant, Poznámka
- Smažování řádku: klikni "Smazat"
5. V sekci "Typy programu":
- Přidej typy tlačítkem "+ Přidat typ"
- Vyplň název typu, popis a zvolíkona barvu
- Barvy se aplikují na timetable
6. Generuj scénář a stáhni Excel
Workflow — Jak používat aplikaci
Import z Excelu (nejčastěji)
1. Otevři http://localhost:8000/cgi-bin/scenar.py
2. Stáhni šablonu (scenar_template.xlsx)
3. Vyplň tabulku:
- Datum: 2025-11-14
- Začátek: 09:00
- Konec: 10:00
- Program: Úvodní přednáška
- Typ: PŘEDNÁŠKA
- Garant: Jméno lektora
- Poznámka: Volitelně
4. Nahraj upravený Excel
5. Vyplň název a detail akce
6. Přiřaď barvy jednotlivým typům programu
7. Stáhni vygenerovaný timetable (Excel)
Struktura projektu
.
├── .github/copilot-instructions.md # AI instrukce pro agenty
├── .githooks/
│ └── pre-commit # Git hook se spuštěním testů
├── cgi-bin/
│ └── scenar.py # Hlavní CGI aplikace (UI)
├── scenar/
│ ├── __init__.py
│ └── core.py # Jádro logiky (bez CGI)
├── scripts/
│ ├── build_image.sh # Postav Podman image
│ ├── start_scenar.sh # Spusť kontejner
│ ├── stop_scenar.sh # Zastavit kontejner
│ └── install_hooks.sh # Instaluj git hooks
├── templates/
│ └── scenar_template.xlsx # Excel šablona
├── tests/
│ ├── test_read_excel.py # Testy parsování
│ └── test_docker_integration.py # Docker build test
├── tmp/ # Výstupní soubory (gitignored)
├── Dockerfile # Runtime pro produkci
├── requirements.txt # Python balíčky (verze)
└── pytest.ini # Pytest konfigurace
Architektura
Core logika (scenar/core.py)
Obsahuje importovatelné funkce bez CGI závislostí:
read_excel(file_content)— Parsování Excelu (pandas), detekce překryvů, validacecreate_timetable(...)— Tvorba OpenPyXL sešitu s timetablemvalidate_inputs(title, detail, file_size)— Bezpečnostní validace vstupů
Chybové typy:
ScenarsError— obecná chybaValidationError— vstupní validaceTemplateError— problém s Excel šablonou
CGI wrapper (cgi-bin/scenar.py)
Komunikace s webem:
step=1: Domovská stránka s formulářemstep=2: Načtení Excelu, extrakce typůstep=3: Generování timetablu a stažení
Podman/Docker
- Obraz: Python 3.12-slim + Apache2 + CGI
- Port: 8080
- DocumentRoot:
/var/www/htdocs
Vývoj
Editace
- UI formuláře (HTML):
cgi-bin/scenar.py - Logika (bez CGI):
scenar/core.py - Šablona:
templates/scenar_template.xlsx
Konvence
- Časy:
%H:%Mnebo%H:%M:%S - Excel sloupce:
Datum, Zacatek, Konec, Program, Typ, Garant, Poznamka - Barvy: CSS hex → OpenPyXL AARRGGBB
- Bezpečnost: všechny vstupy validovány a escaped
Testování
# Unit testy
pytest tests/test_read_excel.py -v
# Integrační (Podman build):
pytest tests/test_docker_integration.py -v
# Všechno:
pytest -v
Troubleshooting
Podman machine (macOS):
podman machine start
ImportError scenar.core:
export PYTHONPATH="/path/to/repo:$PYTHONPATH"
Testy selhávají:
source .venv/bin/activate
pip install -r requirements.txt
pytest -q
Kontakt
Autor: Martin Sukaný — martin@sukany.cz
Description
Languages
Python
95.1%
Shell
2.5%
Dockerfile
2.4%