| 5 | # Fichier : jobka/connectors/workday.py |
5 | # Fichier : jobka/connectors/workday.py |
| 6 | # Rôle : Classe de plateforme Workday (API JSON publique wday/cxs) — un |
6 | # Rôle : Classe de plateforme Workday (API JSON publique wday/cxs) — un |
| 7 | # employeur = une sous-classe de ~10 lignes (TENANT, HOST, SITE) |
7 | # employeur = une sous-classe de ~10 lignes (TENANT, HOST, SITE) |
| 8 | −# Créé : 2026-08-17 Modifié : 2026-09-28 |
8 | +# Créé : 2026-08-17 Modifié : 2026-10-10 |
| 9 | # ============================================================================= |
9 | # ============================================================================= |
| 10 | """Plateforme Workday. |
10 | """Plateforme Workday. |
| 11 | |
11 | |
| 90 | time.sleep(10 * (attempt + 1)) |
90 | time.sleep(10 * (attempt + 1)) |
| 91 | if resp is None: |
91 | if resp is None: |
| 92 | raise RuntimeError(f"Workday 5xx après 3 essais : {last}") |
92 | raise RuntimeError(f"Workday 5xx après 3 essais : {last}") |
| |
93 | + # Maintenance PLANIFIÉE de la plateforme Workday (fenêtre hebdo du |
| |
94 | + # samedi matin, constatée 2026-10-10 ~02h-? EDT sur TOUS les tenants) : |
| |
95 | + # le POST cxs répond 303 -> community.workday.com/maintenance-page, |
| |
96 | + # requests suit la redirection et reçoit la page HTML en 200. Nommer |
| |
97 | + # la cause dans sync_log évite de diagnostiquer chaque tenant comme |
| |
98 | + # une panne « non-JSON » distincte ; transitoire, repart seul. |
| |
99 | + if "maintenance" in (resp.url or ""): |
| |
100 | + raise RuntimeError( |
| |
101 | + f"Workday en maintenance planifiée (redirigé vers {resp.url}) " |
| |
102 | + "— transitoire, repart seul en fin de fenêtre") |
| 93 | raise RuntimeError( |
103 | raise RuntimeError( |
| 94 | f"Workday non-JSON après 3 essais (HTTP {resp.status_code}, " |
104 | f"Workday non-JSON après 3 essais (HTTP {resp.status_code}, " |
| 95 | f"{resp.headers.get('content-type')}) : {last}") |
105 | f"{resp.headers.get('content-type')}) : {last}") |
| 96 | |
106 | |