copilot test

This commit is contained in:
Martin Sukany
2025-11-13 11:37:28 +01:00
parent 7ef8e20564
commit 9a7ffdeb2c
12 changed files with 356 additions and 2 deletions

View File

@@ -1,3 +1,70 @@
# Scenar-creator
# Scenar Creator
Repozitar obsahuje nastroj pro vytvareni scenaru pro zazitkove kurzy
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