3.2 KiB
janssenpc_file_send v2.6
Odesílací skript na JNJ počítači: přejmenuje soubory ve ##JNJPrenos, zašifruje
(Fernet/AES-128) a odešle na https://msgs.buzalka.cz/upload-file, pak přesune
do Trash. Detekci nových souborů zajišťuje janssenpc_file_watch.py (v1.2).
Stahování ze serveru řeší samostatný janssenpc_file_receive (ručně) — sem nepatří.
Spuštění
Spouští se automaticky přes janssenpc_file_watch.py (watchdog). Ručně:
C:\Users\vbuzalka\OneDrive - JNJ\##JNJPrenos\Python\python.exe "...\janssenpc_file_send.py"
Co je nového v v2.6 — ošetření nedotaženého stahování z Chrome
Problém: Chrome stahuje report do dočasného souboru *.crdownload a teprve po
dokončení ho přejmenuje na finální jméno; u některých typů zapisuje rovnou do
finálního jména. Watchdog vystřelí hned na on_created, takže dřívější verze
začaly zpracovávat / odesílat i napůl stažený soubor (riziko: upload rozdělaného
.crdownload, nebo načtení neúplného CSV/XLSX).
is_ready(f) — gate před zpracováním i odesláním
Soubor projde, jen když:
- nemá dočasnou příponu (
.crdownload/.tmp/.part), - velikost je stabilní —
STABILITY_REQUIRED(3) kontrol po sobě stejná a > 0, poll poSTABILITY_INTERVAL(1 s), maxSTABILITY_TIMEOUT(120 s), - jde otevřít na zápis (
r+b) — zamčený soubor (Chrome ještě zapisuje) hodíPermissionError→ přeskočí se.
Nepřipravený soubor se v daném běhu jen přeskočí (zaloguje důvod) a zpracuje ho příští běh / další událost watcheru.
Volá se na DVOU místech: na začátku prejmenuj() (ať pandas nečte neúplný soubor)
a znovu v odesílací fázi (pojistka před uploadem).
Spolupráce s watcherem (v1.2)
- Watcher ignoruje dočasné přípony (nespouští send na
.crdownload). - Watcher debouncuje sérii událostí (vytvoření + přejmenování + zápis) do jednoho
spuštění (
DEBOUNCE_SECONDS = 5). - Vlastní „dotažení" řeší až
is_readyv file_send — watcher jen omezuje zbytečná spuštění.
Zděděno z v2.5 — podrobný logging uploadu
Funkce upload() loguje HTTP kód, finální URL, redirecty, hlavičky a tělo odpovědi;
detekuje stopy korporátního filtru (_sm_nck, cizí host, ne-JSON, HTML, neznámý Server).
Server: nginx je OČEKÁVANÉ (SWAG reverse proxy). Soubor se přesune do Trash jen
při ověřeném úspěchu (HTTP 200 + application/json + status ∈
{OK, UPLOADED, SAVED, RECEIVED}); jinak PONECHÁNO.
Vazby
- Watcher:
janssenpc_file_watch_v1.2.py. - Server:
app.py≥ v2.3, endpointPOST /upload-file(vrací{"status":"uploaded","file":...,"dropbox_path":...}). - Protějšek pro download:
janssenpc_file_receive_v1.2.
Historie
- v2.6 (2026-06-12): is_ready gate (stabilní velikost + zámek + ignor .crdownload) proti nedotaženému stahování
- v2.5 (2026-06-12): podrobný logging uploadu + detekce filtru + Trash jen při ověřeném úspěchu (ověřeno: přenos OK, filtr nevinen)
- v2.4 (2026-06-05): Fernet šifrování uploadu, endpoint
/upload-file - v2.2 (2026-06-02): odesílání bez šifrování přes
/upload-dropbox