9a7ffdeb2c01418a014ed9255071efda3ccc6743
Scenar Creator
Jednoduchá CGI aplikace pro vytváření časových plánů (Excel) z nahraného Excelu se seznamem programů.
Krátký, praktický popis, jak projekt spustit, testovat a kde hledat důležité části kódu.
Co to dělá
cgi-bin/scenar.pynačte Excel s řádky obsahujícími Datum, Začátek, Konec, Program, Typ, Garant, Poznámka.- Na základě polí
Typvytvoří HTML formulář pro přiřazení popisů a barev, a nakonec vygeneruje výsledný sešit (OpenPyXL) s časovou osou.
Rychlý start (lokálně, bez Dockeru)
- V kořeni repozitáře spusť jednoduchý CGI server (vyžaduje Python):
python -m http.server --cgi 8000
# Otevři v prohlížeči: http://localhost:8000/cgi-bin/scenar.py
- Alternativně připrav virtuální prostředí a spusť testy:
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
pytest -q
Docker (produkční přiblížení)
Dockerfile vytváří image na python:3.12-slim, instaluje pandas a openpyxl, nastaví Apache s povoleným CGI a DocumentRoot na /var/www/htdocs. Nasazení:
docker build -t scenar-creator .
docker run -p 8080:8080 scenar-creator
# Pak otevři: http://localhost:8080/
Testy
- Testy jsou v
tests/a používajípytest. - Přidal jsem testy pro funkci
read_excel(happy path + invalid time). Spuštění viz výše.
Struktura projektu (klíčové soubory)
cgi-bin/scenar.py— hlavní CGI skript (HTML generováno inline). Hledej funkce:read_excel(file_content)— parsování vstupního xlsx (pandas) → vrací (valid_data, error_rows)create_timetable(...)— vytváří OpenPyXL sešitget_program_types(form)— načítání dynamických polítype_code_{i},desc_{i},color_{i}
templates/scenar_template.xlsx— šablona pro uživateletmp/— místo, kam se výsledné soubory ukládají při běhu (v Dockeru/var/www/htdocs/tmp).github/copilot-instructions.md— instrukce pro AI agenty (přehled konvencí a místa úprav)
Konvence a poznámky pro vývojáře
- HTML jsou inline stringy v
scenar.py(sekceif step == '1',if step == '2',if step == '3'). Pokud budeš měnit UI, uprav tyto bloky. - Výstupní soubor se ukládá s "safe" jménem: povolena písmena, čísla a
. _ -a mezera. - Barvy pro OpenPyXL: v kódu se převádějí na AARRGGBB pomocí
'FF' + raw_color.lstrip('#'). - Parsování času:
normalize_timepodporuje%H:%Ma%H:%M:%S.
Doporučené další kroky
- Přidat
requirements.txt(hotovo) s pevnými verzemi pro deterministické buildy. - Přesunout jádro logiky z
cgi-bin/scenar.pydo importovatelného modulu (např.scenar_core.py) pro snazší testování a údržbu. - Přidat GitHub Actions workflow, který spouští
pytestna PR.
Kontakt
Autor: Martin Sukaný — martin@sukany.cz
Description
Languages
Python
95.1%
Shell
2.5%
Dockerfile
2.4%