Files
janssen/Python-runner/3_download_attachments_v1.4.md
2026-06-05 21:21:30 +02:00

3.3 KiB

3_download_attachments_v1.4.py

Krok 3 pipeline — stahuje skutečné přílohy (is_inline=False) z Mongo emailů přes Graph API do /mnt/Emails/<schránka>/Attachments/. Deduplikace podle SHA256 obsahu.

Nové ve verzi 1.4

Typ přílohy @odata.type Co skript dělá
File #microsoft.graph.fileAttachment Stáhne přes /$value, uloží binárku
Item (vnořený email) #microsoft.graph.itemAttachment $expand=...itemAttachment/item, sestaví .eml z hlaviček a body vnitřní zprávy
Reference (OneDrive/SharePoint link) #microsoft.graph.referenceAttachment Žádný file — uloží jen reference_url do Mongo

Plus:

  • Retry s exponenciálním backoffem na 429/500/502/503/504 (1s, 2s, 4s; respektuje Retry-After).
  • Permanentní označení chyb v Mongo per-attachment:
    • attachment_missing: True + attachment_missing_at: <UTC> při 404 (email/příloha už neexistuje v mailboxu)
    • attachment_reference: True + reference_url: <URL> u referenceAttachment
  • Tagované přílohy se při dalším běhu automaticky přeskočí (bez --force-recheck).

Argumenty

Argument Povinný Hodnoty Default Popis
--mailbox ne e-mail (všechny) Schránka = kolekce v Mongo. Bez argumentu projede všechny kolekce mimo NON_MAILBOX_COLLECTIONS a SKIP_MAILBOXES
--limit N ne int 0 Per schránka, jen prvních N emailů (test)
--force-recheck ne flag false Znovu ověří i emaily kde přílohy mají file_hash nebo attachment_missing nebo attachment_reference
--no-indexes ne flag false Nevytváří indexy na attachments_index

SKIP_MAILBOXES (hardcoded)

Schránka Důvod
vbuzalka@its.jnj.com JNJ tenant, nemáme Graph API přístup. Bez --mailbox se tiše přeskočí. S explicitním --mailbox vbuzalka@its.jnj.com skript skončí exit kódem 2.

Statistiky per schránka

ok=N nove=N dup=N skip=N miss=N ref=N err=N
Kategorie Význam
ok emaily zpracované bez chyby (všechny přílohy hotové)
nove nové soubory uložené (NEW + NEW(eml))
dup hash už existuje (jen ref_count++)
skip S/MIME (.p7m/.p7s/...) nebo inline obrázek
miss 404 — označeno attachment_missing (nepokračuje se)
ref referenceAttachment — uložen jen URL
err tranzientní chyba (5xx, timeout) — bude retry při dalším běhu

Varianty volání

# Všechny schránky (mimo SKIP_MAILBOXES):
docker exec -it python-runner python /scripts/3_download_attachments_v1.4.py

# Jedna schránka:
docker exec -it python-runner python /scripts/3_download_attachments_v1.4.py --mailbox ordinace@buzalkova.cz

# Test 50 emailů:
docker exec -it python-runner python /scripts/3_download_attachments_v1.4.py --mailbox ordinace@buzalkova.cz --limit 50 --no-indexes

# Force-recheck (i missing/reference přepíše):
docker exec -it python-runner python /scripts/3_download_attachments_v1.4.py --mailbox ordinace@buzalkova.cz --force-recheck

# Na pozadí:
docker exec -d python-runner bash -c "python /scripts/3_download_attachments_v1.4.py > /scripts/download_attachments.log 2>&1"

Sledování průběhu

docker exec -it python-runner tail -f /scripts/download_attachments.log