Je suis en train d'utiliser zeep. Le service que j'utilise génère des erreurs de délai d'expiration de temps en temps, et je veux utiliser une fonctionnalité de réessay automatique.
Je tente d'utiliser une session de réessay Requests, mais l'exception de délai d'expiration n'est pas capturée et aucun réessay n'est tenté.
J'ai mis en place une session de réessay Requests (ci-dessous) et j'ai configuré l'attribut client de ma classe (actuellement avec une valeur de délai d'expiration pour provoquer des erreurs):
session = requests_retry_session()
transport = Transport(session=session,timeout=20,operation_timeout=.001)
self.client = Client(self.wsdl_url,transport=transport)
...
def requests_retry_session(
retries=10,
backoff_factor=0.3,
status_forcelist=(500, 502, 503, 504),
session=None,
) -> requests.Session:
session = session or requests.Session()
retry = Retry(
total=retries,
read=retries,
connect=retries,
backoff_factor=backoff_factor,
status_forcelist=status_forcelist,
)
adapter = HTTPAdapter(max_retries=retry)
session.mount('http://', adapter)
session.mount('https://', adapter)
return session
Je reçois une requests.exceptions.ReadTimeout (je suppose que cette erreur est la même que celle que j'obtiens en réalité, mais avec un délai de 20s, mes journaux ne sont pas encore assez bons pour en être sûr)
L'exception n'est pas gérée par la session.
Pourquoi?
EDIT : zeep envoie une requête POST quelque part, ce que je n'ai pas trouvé avec mes propres debugging mais en activant les journaux de débogage dans Requests, on le voit.
Le réessay ne fonctionne pas par défaut sur les POST.
https://urllib3.readthedocs.io/en/latest/reference/urllib3.util.html
J'ai mis method_whitelist=False pour changer cela, et maintenant je déclenche des réessay.