5.5 KiB
vtmf_pipeline_v1.4 — Kompletní V-TMF workflow (report → Mongo → download)
Verze: 1.4 · Datum: 2026-06-15
Změny v1.1: oprava tichého selhání — výjimka kteréhokoli kroku se vypíše jako „PIPELINE SELHALA" + exit kód 2 (v1.0 končila zavádějícím souhrnem „0 staženo, 0 chyb"). Export reportu robustnější: menu ⋯, položka Export to Excel i tlačítko Export se hledají přes víc selektorů a ve všech frames; při nenalezení se automaticky uloží diagnostika stránky do debug/<čas>report* (screenshot, HTML všech frames, výpis title/aria-label atributů) — z ní se dá určit přesný selektor.
Změny v1.2: selektory exportu ověřené na živém DOM (Claude in
Chrome; žádný iframe na celé stránce): menu ⋯ =
.actionMenuContainer .dropDown.vv_dropdown_toggle button.vv-icon-button
(button má prázdný title!); menu se načítá asynchronně (AJAX) →
po kliknutí se čeká na položku a.ReportAction[data-action-name='ExcelExport'];
„Data Only" = radio name=requiredRadioField value=STANDARD, defaultně
checked (pojistka přes .check()); tlačítko Export = React <button>
s emotion class hash → selektovat jen přes roli+text.
Změny v1.3: na konci běhu se prohlížeč i konzole zavřou automaticky (žádné čekání na ENTER); interaktivní vstup zůstává jen u 2FA a u ručně nezavřitelného dialogu.
Změny v1.4: detekce placeholder dokumentů — Vault zobrazuje text
„This placeholder has no content", dokument nemá žádný Source File ke
stažení. Při detekci se zapíše placeholder=True, downloaded=True do
Mongo a dokument se přeskočí bez chyby. Souhrn na konci běhu uvádí
počet placeholderů zvlášť.
Jeden běh skriptu udělá celé workflow pro studii 77242113UCO3001:
- Login do vtmf.veevavault.com (persistentní profil
vault_profile/, J&J SSO, případné 2FA potvrdíte na telefonu- ENTER; údaje z
.envv rootu projektu).
- ENTER; údaje z
- Export reportu „Document Inventory Report - Study Level"
(přímá URL s ID reportu
0RP000000000182a filtrem studie0ST000000137008) → menu ⋯ → Export to Excel → Data Only → uloží se s timestampem doWhatToDownload/, po zpracování se přesune doWhatToDownload/Zpracovano/. - Parse + sync do MongoDB — Tower
mongodb://192.168.1.76:27017, db VTMF, kolekce documents, klíč_id = "VTMF-xxx|vY.Z"(VTMF číslo + verze, unikátní index na dvojici):- nový dokument → založí se (first_seen, deleted=False, downloaded=False),
- změna sledovaných polí (name, status, type, subtype, desc,
date, url, studies) → promítne se + záznam do
history[](timestamp + old/new), - dokument chybí v reportu →
deleted=True, deleted_ata stažený soubor se přejmenuje s[D]před příponou, - dokument se vrátí do reportu →
deleted=Falsea[D]se ze souboru zase odebere. Výsledná sada = záznamy sdeleted=False.
- Stažení chybějících — všechny
deleted=False, downloaded≠True: doc URL → Source File → uložení doU:\Dropbox\!!!Days\Downloads Z230\VTMF-77242113UCO3001\<Type>\<Subtype>\jakoYYYY-MM-DD Description [VTMF-xxx] [vY.Z].<skutečná přípona>. Výsledek (cesta, čas, případně chyba) se ihned zapisuje do Mongo — běh jde kdykoli přerušit a příště naváže. Placeholder dokumenty (stránka s textem „This placeholder has no content") se přeskočí a označíplaceholder=True, downloaded=True.
Mongo schéma (kolekce documents)
_id: "VTMF-19077748|v1.0"
vtmf, version, url, name, status, type, subtype, desc, date, studies
first_seen, last_seen # kdy poprvé/naposledy v reportu
deleted, deleted_at # není ve výsledné sadě reportu
downloaded, file, downloaded_at
placeholder # True = Vault placeholder bez obsahu
last_error, error_at # poslední chyba stahování
history: [{ts, changes: {pole: {old, new}}}]
Migrace starého stavu
Při prvním běhu se download_state.csv (z download_vault v2.x)
jednorázově namigruje: záznamy ok se k odpovídajícímu VTMF zapíší
jako downloaded=True + cesta. CSV se přejmenuje na
download_state.csv.imported.
Konfigurace (konstanty nahoře)
REPORT_URL— ID reportu + filtr studie (pro jinou studii se mění jen tato dvě ID)LIMIT— None = stáhnout vše zbývající; číslo = dávka na běhMONGO_URI/DB/COLL,DOWNLOAD_ROOT,EXCEL_DIRTRACKED_FIELDS,MAX_ATTEMPTS,RETRY_PAUSE_MS,BETWEEN_DOCS_MS
Ověřené technické detaily (nesahat bez ověření)
- Maintenance dialog: zavírat POUZE přes
.ui-dialog a.ok.vv_button(křížek.ui-dialog-titlebar-closeje display:none); objevuje se se zpožděním → wait_for visible 8 s (home) / 2-4 s (jinde). - Report Excel má rozbité deklarované rozměry → přímá iterace řádků.
- Document Name/Number/Status jsou =HYPERLINK vzorce → regex.
- Export kliknout právě jednou; 503/redirecty v network logu ignorovat, rozhoduje expect_download.
- Placeholder detekce:
page.locator("div.vv_placeholder_text")(uvnitřdiv.vv_placeholder_pane > div.vv_placeholder_container > div.vv-placeholder-drag-and-drop-container) se testuje před hledáním Source File ikony — CSS selektor je spolehlivější než text match.
Spuštění
& "U:\PythonProject\Janssen\.venv\Scripts\python.exe" "U:\PythonProject\Janssen\VTMFDownloadFiles\vtmf_pipeline_v1.4.py"
Předchůdce: vtmf_pipeline_v1.3 (TRASH/).