fix(client): validate Retry-After header (cap, fallback, edge cases)
- Ajoute try/except autour du float() pour gérer les dates HTTP RFC 7231 - Cap à 30s pour éviter un blocage indéfini sur valeur énorme - Plancher à _RETRY_DELAY pour Retry-After: 0 ou négatif (FINDING-R2) - 4 nouveaux tests : date HTTP, valeur zéro, valeur énorme, health check partiel Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -59,7 +59,17 @@ class GiteaClient:
|
||||
if attempt < self._MAX_RETRIES:
|
||||
retry_after = resp.headers.get("Retry-After")
|
||||
if retry_after is not None:
|
||||
delay = float(retry_after)
|
||||
try:
|
||||
# Cap a 30s pour eviter un blocage indefini.
|
||||
# max() assure un plancher au backoff lineaire
|
||||
# (protege contre Retry-After: 0 ou negatif).
|
||||
delay = min(float(retry_after), 30.0)
|
||||
delay = max(delay, self._RETRY_DELAY)
|
||||
except (ValueError, TypeError):
|
||||
# Retry-After peut etre une date HTTP RFC 7231
|
||||
# (ex: "Wed, 21 Oct 2025 07:28:00 GMT") :
|
||||
# on retombe sur le backoff lineaire standard.
|
||||
delay = self._RETRY_DELAY * (attempt + 1)
|
||||
else:
|
||||
delay = self._RETRY_DELAY * (attempt + 1)
|
||||
time.sleep(delay)
|
||||
|
||||
Reference in New Issue
Block a user