0002-retry-HTTP-requests-3-times-fixes-21783.patch
src/authentic2_auth_fc/utils.py | ||
---|---|---|
5 | 5 |
import datetime |
6 | 6 |
import uuid |
7 | 7 | |
8 |
import requests |
|
9 |
from requests.adapters import HTTPAdapter |
|
10 |
from requests.packages.urllib3.util.retry import Retry |
|
11 | ||
8 | 12 |
from django.core.urlresolvers import reverse |
9 | 13 |
from django.conf import settings |
10 | 14 |
from django.shortcuts import resolve_url |
... | ... | |
158 | 162 |
tags.add(mapping['tag']) |
159 | 163 |
if save_user: |
160 | 164 |
user.save() |
165 | ||
166 | ||
167 |
def requests_retry_session( |
|
168 |
retries=3, |
|
169 |
backoff_factor=0.5, |
|
170 |
status_forcelist=(500, 502, 504), |
|
171 |
session=None, |
|
172 |
): |
|
173 |
'''Create a requests session which retries after 0.5s then 1s''' |
|
174 |
session = session or requests.Session() |
|
175 |
retry = Retry( |
|
176 |
total=retries, |
|
177 |
read=retries, |
|
178 |
connect=retries, |
|
179 |
backoff_factor=backoff_factor, |
|
180 |
status_forcelist=status_forcelist, |
|
181 |
) |
|
182 |
adapter = HTTPAdapter(max_retries=retry) |
|
183 |
session.mount('http://', adapter) |
|
184 |
session.mount('https://', adapter) |
|
185 |
return session |
src/authentic2_auth_fc/views.py | ||
---|---|---|
1 | 1 |
import uuid |
2 |
import requests |
|
3 | 2 |
import logging |
4 | 3 |
import json |
5 | 4 |
import urlparse |
6 | 5 |
import urllib |
6 |
import requests |
|
7 | 7 | |
8 | 8 |
from requests_oauthlib import OAuth2Session |
9 | 9 | |
... | ... | |
86 | 86 |
} |
87 | 87 |
logger.debug('access token request %s', data) |
88 | 88 |
try: |
89 |
response = requests.post( |
|
89 |
session = utils.requests_retry_session() |
|
90 |
response = session.post( |
|
90 | 91 |
app_settings.token_url, data=data, |
91 | 92 |
verify=app_settings.verify_certificate, |
92 |
allow_redirects=False, timeout=10)
|
|
93 |
allow_redirects=False, timeout=3)
|
|
93 | 94 |
if response.status_code != 200: |
94 | 95 |
try: |
95 | 96 |
data = response.json() |
... | ... | |
270 | 271 |
self.logger.debug('fc id_token %s', self.id_token) |
271 | 272 |
for key in self.id_token: |
272 | 273 |
setattr(self, key, self.id_token[key]) |
273 |
self.oauth_session = lambda: OAuth2Session( |
|
274 |
app_settings.client_id, token=self.token) |
|
274 |
self.oauth_session = lambda: utils.requests_retry_session( |
|
275 |
session=OAuth2Session( |
|
276 |
app_settings.client_id, token=self.token)) |
|
275 | 277 |
self.user_info = self.get_user_info() |
276 | 278 |
if not self.user_info: |
277 | 279 |
msg = 'userinfo resolution failed : {}'.format(self.token) |
278 |
- |