Projet

Général

Profil

0001-general-add-options-to-automatically-retry-requests-.patch

Frédéric Péters, 28 décembre 2020 20:58

Télécharger (2,59 ko)

Voir les différences:

Subject: [PATCH] general: add options to automatically retry requests (#49764)

 passerelle/base/models.py    |  6 ++++++
 passerelle/utils/__init__.py | 14 +++++++++++++-
 2 files changed, 19 insertions(+), 1 deletion(-)
passerelle/base/models.py
142 142
    manager_form_base_class = GenericConnectorForm
143 143
    hide_description_fields = []
144 144

  
145
    # self.requests retry behaviour
146
    retry_count = 0
147
    retry_on_status = [429, 500, 502, 503, 504]
148
    retry_on_methods = ['HEAD', 'GET', 'POST', 'PUT', 'DELETE', 'OPTIONS', 'TRACE']
149
    retry_backoff_factor = 0.5
150

  
145 151
    # permission descriptions
146 152
    _can_access_description = _('Access is limited to the following API users:')
147 153

  
passerelle/utils/__init__.py
24 24

  
25 25
from requests import Session as RequestSession, Response as RequestResponse
26 26
from requests.adapters import HTTPAdapter
27
from requests.packages.urllib3.util.retry import Retry
27 28
from requests.structures import CaseInsensitiveDict
28 29
from urllib3.exceptions import InsecureRequestWarning
29 30

  
31

  
30 32
from django.conf import settings
31 33
from django.core.cache import cache
32 34
from django.core.exceptions import PermissionDenied
......
243 245
        self.resource = kwargs.pop('resource', None)
244 246
        super(Request, self).__init__(*args, **kwargs)
245 247
        if self.resource:
246
            adapter = Request.ADAPTER_REGISTRY.setdefault(type(self.resource), HTTPAdapter())
248
            if getattr(self.resource, 'retry_count', 0):
249
                retry_strategy = Retry(
250
                    total=self.resource.retry_count,
251
                    backoff_factor=self.resource.retry_backoff_factor,
252
                    status_forcelist=self.resource.retry_on_status,
253
                    method_whitelist=self.resource.retry_on_methods
254
                )
255
            else:
256
                retry_strategy = 0
257
            adapter = Request.ADAPTER_REGISTRY.setdefault(type(self.resource),
258
                    HTTPAdapter(max_retries=retry_strategy))
247 259
            self.mount('https://', adapter)
248 260
            self.mount('http://', adapter)
249 261

  
250
-