[ka6] fix connecteur sysco: relances sur timeout/coupure réseau pour les POST (base.py) — un ReadTimeout ponctuel de l'API liste Workday avortait tout le sync; get() avait déjà son filet (escalade), post() n'en avait aucun
1 changed file +18 −1
modified
jobka/connectors/base.py
+18 −1
@@ -5,7 +5,7 @@ | |||||
| 5 | # Fichier : jobka/connectors/base.py | 5 | # Fichier : jobka/connectors/base.py | ||
| 6 | # Rôle : Classe de base des connecteurs + backends de fetch (requests | 6 | # Rôle : Classe de base des connecteurs + backends de fetch (requests | ||
| 7 | # direct, Scrapfly pour les pages carrières JS / derrière anti-bot) | 7 | # direct, Scrapfly pour les pages carrières JS / derrière anti-bot) | ||
| 8 | −# Créé : 2026-08-17 Modifié : 2026-08-17 | 8 | +# Créé : 2026-08-17 Modifié : 2026-08-26 | ||
| 9 | # ============================================================================= | 9 | # ============================================================================= | ||
| 10 | from __future__ import annotations | 10 | from __future__ import annotations | ||
| 11 | 11 | ||||
@@ -236,6 +236,23 @@ if not getattr(BaseConnector, "_KA_RESILIENT_WRAPPED", False): | |||||
| 236 | country=country, render_js=render_js, | 236 | country=country, render_js=render_js, | ||
| 237 | headers=headers) | 237 | headers=headers) | ||
| 238 | 238 | ||||
| 239 | + _ka_orig_post = BaseConnector.post | ||||
| 240 | + | ||||
| 241 | + def _ka_resilient_post(self, url, **kw): | ||||
| 242 | + """POST avec relances : un timeout/coupure ponctuel (ex. Workday lent | ||||
| 243 | + sur l'API liste) ne doit pas avorter tout le sync de la source — la | ||||
| 244 | + chaîne d'escalade proxy est GET-only, on relance donc en direct.""" | ||||
| 245 | + last_exc = None | ||||
| 246 | + for attempt in range(3): | ||||
| 247 | + try: | ||||
| 248 | + return _ka_orig_post(self, url, **kw) | ||||
| 249 | + except (_ka_requests.ConnectionError, _ka_requests.Timeout) as exc: | ||||
| 250 | + last_exc = exc | ||||
| 251 | + if attempt < 2: | ||||
| 252 | + time.sleep(5 * (attempt + 1)) | ||||
| 253 | + raise last_exc | ||||
| 254 | + | ||||
| 239 | BaseConnector.get = _ka_resilient_get | 255 | BaseConnector.get = _ka_resilient_get | ||
| 256 | + BaseConnector.post = _ka_resilient_post | ||||
| 240 | BaseConnector.get_resilient = _ka_get_resilient | 257 | BaseConnector.get_resilient = _ka_get_resilient | ||
| 241 | BaseConnector._KA_RESILIENT_WRAPPED = True | 258 | BaseConnector._KA_RESILIENT_WRAPPED = True | ||
| 242 | 259 | ||||