71 lines
2.8 KiB
Markdown
71 lines
2.8 KiB
Markdown
# 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.py` načte Excel s řádky obsahujícími Datum, Začátek, Konec, Program, Typ, Garant, Poznámka.
|
|
- Na základě polí `Typ` vytvoří 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)
|
|
|
|
1) V kořeni repozitáře spusť jednoduchý CGI server (vyžaduje Python):
|
|
|
|
```bash
|
|
python -m http.server --cgi 8000
|
|
# Otevři v prohlížeči: http://localhost:8000/cgi-bin/scenar.py
|
|
```
|
|
|
|
2) Alternativně připrav virtuální prostředí a spusť testy:
|
|
|
|
```bash
|
|
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í:
|
|
|
|
```bash
|
|
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šit
|
|
- `get_program_types(form)` — načítání dynamických polí `type_code_{i}`, `desc_{i}`, `color_{i}`
|
|
- `templates/scenar_template.xlsx` — šablona pro uživatele
|
|
- `tmp/` — 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` (sekce `if 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_time` podporuje `%H:%M` a `%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.py` do importovatelného modulu (např. `scenar_core.py`) pro snazší testování a údržbu.
|
|
- Přidat GitHub Actions workflow, který spouští `pytest` na PR.
|
|
|
|
## Kontakt
|
|
|
|
Autor: Martin Sukaný — martin@sukany.cz
|