4.9 KiB
4.9 KiB
Účel
Krátké, konkrétní instrukce pro AI agenta pracujícího v tomto repozitáři. Cílem je rychle pochopit architekturu, běžné konvence a kde dělat bezpečné úpravy.
Velký obraz (architektura)
- Jedna hlavní aplikace:
cgi-bin/scenar.py— jednosouborová CGI aplikace, která vykresluje HTML formuláře a generuje výsledný Excel soubor. - Statické soubory a šablona:
templates/(obsahujescenar_template.xlsx). - Webroot a temp:
DOCROOTaTMP_DIRjsou vcgi-bin/scenar.py(výchozí/var/www/htdocsa/var/www/htdocs/tmp). Dockerfile také nastavuje DocumentRoot na/var/www/htdocsa vytváří/var/www/htdocs/tmp.
Důležité soubory
cgi-bin/scenar.py— hlavní logika (upload, parsování Excelu pomocí pandas, tvorba Excelu pomocí openpyxl, HTML formuláře). Hledejte: funkceread_excel,create_timetable,get_program_types, konstantyDOCROOT,TMP_DIR.templates/scenar_template.xlsx— excelová šablona, kterou UI nabízí ke stažení.Dockerfile— ukazuje produkční runtime (Python 3.12-slim, instalacepandasaopenpyxl, Apache s CGI, DocumentRoot/var/www/htdocs, port 8080).
Datový a HTTP tok (konkrétně z kódu)
- Kroková sekvence přes POST parameter
step(1 → 2 → 3):step=1: zobrazí formulář s nahráním Excelu (polefile).step=2: načte Excel (pandas), zjistí unikátní typy (Typ) a zobrazí formulář pro zadánítype_code_{i},desc_{i},color_{i}.step=3: vytvoří výsledný sešit, uloží ho doTMP_DIRa odkaz vrátí jako/tmp/<safe_name>.
Pole formuláře a pojmenování
- Upload: pole
file(vstep=1). - Základní metadatová pole:
title,detail,debug(checkbox dává ladicí výstup),step. - Dynamické pole pro typy:
type_code_{i},desc_{i},color_{i}— exportované z dat a pak poskytnuté vstep=2. - Interně pro krok 3 se používá
file_content_base64k bezpečnému přenosu obsahu mezi kroky.
Konvence projektu
- HTML šablony nejsou separátní (JS/templating) — jsou inline v
scenar.py. Upravujte opatrně: změny stylu/inl. HTML jsou v blocíchif step == '1'/step == '2'. - Soubor s výsledkem se ukládá s „safe“ jménem: povolena jsou alfanumerická znaky,
. _ -a mezera. Pokud měníte pojmenování, ověřte odkazy/tmp/<name>. - Barvy pro OpenPyXL: kód se převádí na formát AARRGGBB (
'FF' + raw_color.lstrip('#')).
Chyby, logika validací a okrajové případy
- Parsování času: funkce
normalize_timepodporuje formáty%H:%Ma%H:%M:%S. read_excelvaliduje datum/časy a sbíráerror_rows. Překryvy časů detekuje a tyto řádky vyřadí (vizoverlap_errors).- Pokud chybí definice typu (Typ v Excelu není přiřazen v UI), skript formou HTML vrací chybu.
Závislosti a runtime
- Python: Dockerfile používá
python:3.12-slim(projekt tedy cílí na moderní 3.12). Lokálně bude fungovat i Python 3.10+ (exports v repozitáři naznačují 3.10/3.9 přítomnost), ale pro přesnost použijte 3.12. - Klíčové Python balíčky:
pandas,openpyxl. Jsou instalovány vDockerfile.
Vývojové workflow (rychlé ověření lokálně)
-
Rychlý způsob pro lokální testování bez Dockeru (repo má
cgi-bin/):-
Spusť z kořene repozitáře Python simple CGI server (vytvoří
cgi-bin/endpointy):python -m http.server --cgi 8000
-
Otevři v prohlížeči: http://localhost:8000/cgi-bin/scenar.py
-
-
Pro produkční podobu použij
Dockerfile(Apache + CGI) — Dockerfile vystavuje port 8080.
Co upravovat a kde (rychlé reference)
- Změny chování Excelu / parsování: uprav
read_excelanormalize_timevcgi-bin/scenar.py. - Změny vzhledu formulářů: uprav HTML stringy v
if step == '1'aif step == '2'. - Cesty a přístupová práva: pokud měníš DocumentRoot/TMP, uprav i
DOCROOT/TMP_DIRvscenar.pya odpovídající část vDockerfile.
Příklady (konkrétní ukázky z kódu)
- Detekce typů:
for key in form.keys(): if key.startswith('type_code_'):— při rozšiřování formulářů zachovat tuto konvenci. - Barva pro openpyxl:
color_hex = 'FF' + raw_color.lstrip('#'). - Safe filename:
safe_name = "".join(ch if ch.isalnum() or ch in "._- " else "_" for ch in filename).
Poznámky pro agenta
- Buď konkrétní: ukaž přesné linie/názvy funkcí, pokud navrhuješ změnu. Např. "Uprav
calculate_row_heightvcreate_timetablekdyž měníš rozměry řádků". - Nevkládej náhodné závislosti — kontroluj
importvcgi-bin/scenar.pyaDockerfile. - Pokud budeš navrhovat CLI nebo refaktor na framework (Flask apod.), nejprve vyznač migraci: oddělit HTML do šablon a nasadit routy místo CGI.
Pokud chceš, upravím instrukci na míru (více/ méně detailů) nebo přidám krátký seznam rychlých úkolů (např. přidat requirements.txt, unit testy pro read_excel).