Files
scenar-creator/README.md
Martin Sukany b7b56fe15f
Some checks failed
Build & Push Docker / build (push) Has been cancelled
Refactor: Oddělení business logiky + inline editor
- Nový modul scenar/core.py (491 řádků čisté logiky)
- Refactored cgi-bin/scenar.py (450 řádků CGI wrapper)
- Inline editor s JavaScript row managementem
- Custom exceptions (ScenarsError, ValidationError, TemplateError)
- Kompletní test coverage (10 testů, všechny )
- Fixed Dockerfile (COPY scenar/, requirements.txt)
- Fixed requirements.txt (openpyxl==3.1.5)
- Fixed pytest.ini (pythonpath = .)
- Nové testy: test_http_inline.py, test_inline_builder.py
- HTTP testy označeny jako @pytest.mark.integration
- Build script: scripts/build_image.sh
- Dokumentace: COMPLETION.md
2025-11-13 16:06:32 +01:00

259 lines
6.6 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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)
1) **Klonuj a připrav prostředí:**
```bash
git clone <repo>
cd scenar-creator
python -m venv .venv
source .venv/bin/activate # na Windows: .venv\Scripts\activate
pip install -r requirements.txt
```
2) **Spusť s jednoduchým CGI serverem:**
```bash
python -m http.server --cgi 8000
# Otevři v prohlížeči: http://localhost:8000/cgi-bin/scenar.py
```
3) **Spusť testy:**
```bash
pytest -q
# Bez integračních testů (Docker):
pytest -q -m "not integration"
```
### Podman/Docker (produkční)
1) **Postav image:**
```bash
./scripts/build_image.sh
# nebo ručně:
podman build -t scenar-creator:latest .
```
2) **Spusť kontejner:**
```bash
./scripts/start_scenar.sh
# Aplikace bude dostupná na http://127.0.0.1:8080/
```
3) **Zastavit kontejner:**
```bash
./scripts/stop_scenar.sh
```
## Git Hooks (pre-commit)
Aplikace obsahuje git hooks, které spouští testy před commitem.
**Jednorazová instalace hooků:**
```bash
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):
```bash
git commit -m "..." # Spustí: pytest -q -m "not integration"
```
- Commit s integračními testy (Podman):
```bash
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ů, validace
- `create_timetable(...)` — Tvorba OpenPyXL sešitu s timetablem
- `validate_inputs(title, detail, file_size)` — Bezpečnostní validace vstupů
Chybové typy:
- `ScenarsError` — obecná chyba
- `ValidationError` — vstupní validace
- `TemplateError` — problém s Excel šablonou
### CGI wrapper (`cgi-bin/scenar.py`)
Komunikace s webem:
- `step=1`: Domovská stránka s formulářem
- `step=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:%M` nebo `%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í
```bash
# 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):**
```bash
podman machine start
```
**ImportError scenar.core:**
```bash
export PYTHONPATH="/path/to/repo:$PYTHONPATH"
```
**Testy selhávají:**
```bash
source .venv/bin/activate
pip install -r requirements.txt
pytest -q
```
## Kontakt
Autor: **Martin Sukaný** — martin@sukany.cz