74 lines
3.4 KiB
Markdown
74 lines
3.4 KiB
Markdown
# 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`.
|