Files
janssen/VTMFDownloadFiles/TRASH/vtmf_pipeline_v1.4.md
T
2026-06-15 16:10:47 +02:00

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:

  1. Login do vtmf.veevavault.com (persistentní profil vault_profile/, J&J SSO, případné 2FA potvrdíte na telefonu
    • ENTER; údaje z .env v rootu projektu).
  2. Export reportu „Document Inventory Report - Study Level" (přímá URL s ID reportu 0RP000000000182 a filtrem studie 0ST000000137008) → menu ⋯ → Export to Excel → Data Only → uloží se s timestampem do WhatToDownload/, po zpracování se přesune do WhatToDownload/Zpracovano/.
  3. 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_at a stažený soubor se přejmenuje s [D] před příponou,
    • dokument se vrátí do reportu → deleted=False a [D] se ze souboru zase odebere. Výsledná sada = záznamy s deleted=False.
  4. Stažení chybějících — všechny deleted=False, downloaded≠True: doc URL → Source File → uložení do U:\Dropbox\!!!Days\Downloads Z230\VTMF-77242113UCO3001\<Type>\<Subtype>\ jako YYYY-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ěh
  • MONGO_URI/DB/COLL, DOWNLOAD_ROOT, EXCEL_DIR
  • TRACKED_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-close je 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/).