This commit is contained in:
2026-06-12 15:29:57 +02:00
parent 39e578af2d
commit 35e6310dac
79 changed files with 27428 additions and 0 deletions
@@ -0,0 +1,73 @@
# download_vault_v2.0 — Dávkové stažení source files z Veeva Vault (J&J V-TMF)
**Verze:** 2.0 · **Datum:** 2026-06-12
Playwright skript pro dávkové stažení source-file dokumentů z Veeva
Vault (vtmf.veevavault.com) podle Excelu, s perzistentní session,
ručním potvrzením 2FA, průběžným stavem (resume) a přejmenováním
souborů podle VTMF čísla.
**Změny v2.0 oproti v1.x** (jednodokumentové verze v TRASH/):
seznam dokumentů se čte z Excelu ve `WhatToDownload/`, průběžný stav
v `download_state.csv` (přerušený běh naváže, hotové se přeskakují),
retry 2× na dokument, volitelný filtr Document Status.
## Vstupní Excel
Skript vezme **nejnovější `.xlsx`** ze složky `WhatToDownload/`
(typicky „Document Inventory Report - Study Level.xlsx" z Vaultu).
Očekávané sloupce: `Document Name`, `Document Number`,
`Document Status`. Sloupec Document Number obsahuje vzorec
`=HYPERLINK("https://vtmf.veevavault.com/ui/#doc_info/<id>/<maj>/<min>", "VTMF-XXXXXXXX")`
— skript z něj regexem bere přímou doc URL i VTMF číslo (ošetřen je
i „pravý" hyperlink přes cell.hyperlink a oříznutí rozbité URL).
Pozor: report z Vaultu má rozbité deklarované rozměry listu (tváří se
jako 1×1) — skript proto iteruje řádky přímo a nespoléhá na
max_row/max_column.
## Co skript dělá
1. Načte přihlašovací údaje z `.env` v rootu projektu
(`VAULT_USER`/`VAULT_PASS`); když chybí, založí/doplní šablonu
v `.env`, vyzve k doplnění a skončí.
2. Načte dokumenty z Excelu, odečte už stažené podle
`download_state.csv`.
3. Otevře viditelný maximalizovaný Chromium s perzistentním profilem
(`vault_profile/`), přihlásí se přes J&J SSO; případné 2FA
potvrdíte na telefonu a stisknete ENTER.
4. Zavře maintenance/login dialog — kliká na viditelné OK
(`.ui-dialog a.ok.vv_button`; křížek v titulku je display:none
a nejde na něj klikat). Dialog se objevuje se zpožděním, čeká se
na něj 8 s na home, 2 s na stránkách dokumentů.
5. Pro každý dokument: otevře doc URL, klikne na ikonu **Source
File**, stažený soubor uloží do `U:\Dropbox\!!!Days\Downloads Z230\`
jako `původní název [VTMF-XXXXXXXX].přípona`. Při chybě 1 retry
po 5 s; výsledek se ihned zapíše do `download_state.csv`.
6. Na konci vypíše souhrn (staženo/chyb) a čeká na ENTER.
## Průběžný stav a navázání
`download_state.csv` (vedle skriptu): sloupce `vtmf, result, file,
timestamp`. Dokumenty s `result=ok` se při dalším běhu přeskakují;
chybové se zkusí znovu. Běh jde kdykoli přerušit (Ctrl+C nebo
zavření okna) — stav se zapisuje po každém dokumentu.
Pro úplně nový běh od nuly soubor smažte (resp. přesuňte do TRASH/).
## Konfigurace (konstanty nahoře ve skriptu)
- `EXCEL_DIR``WhatToDownload/` (bere se nejnovější .xlsx)
- `STATE_FILE``download_state.csv`
- `DOWNLOAD_DIR``U:\Dropbox\!!!Days\Downloads Z230`
- `STATUS_FILTER``None` = stahovat vše; např. `{"Approved"}`
pro jen schválené dokumenty
- `MAX_ATTEMPTS` / `RETRY_PAUSE_MS` / `BETWEEN_DOCS_MS` — retry a pauzy
## Spuštění
```powershell
& "U:\PythonProject\Janssen\.venv\Scripts\python.exe" "U:\PythonProject\Janssen\VTMFDownloadFiles\download_vault_v2.0.py"
```
Společný venv projektu už obsahuje playwright i Chromium; jinak
`pip install -r requirements.txt` a `playwright install chromium`.