Files
janssen/EmailsImport/janssenpc_file_send_v2.6.md
T
2026-06-12 15:29:57 +02:00

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ž:

  1. nemá dočasnou příponu (.crdownload / .tmp / .part),
  2. velikost je stabilníSTABILITY_REQUIRED (3) kontrol po sobě stejná a > 0, poll po STABILITY_INTERVAL (1 s), max STABILITY_TIMEOUT (120 s),
  3. 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_ready v 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, endpoint POST /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