60 lines
3.2 KiB
Markdown
60 lines
3.2 KiB
Markdown
# 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`
|