Skip to content

Commit 5443498

Browse files
committed
enh: use HTTPAdapter with urlib3's Retry to handle connection issues
1 parent a2053b9 commit 5443498

2 files changed

Lines changed: 20 additions & 2 deletions

File tree

CHANGELOG

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
1.1.3
2+
- enh: use `HTTPAdapter` with `urlib3`'s `Retry` to handle connection issues
3+
- enh: use `requests.Session` when caching is disabled
24
- enh: print UTC time in error messages to make debugging easier
35
1.1.2
46
- fix: archiving to BagIt format circle selection did not include all circles

dcoraid/api/ckan_api.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@
99
import random
1010
import traceback
1111
import urllib.parse
12-
12+
from urllib3.util.retry import Retry
1313

1414
from dclab.external.packaging import parse as parse_version
1515
import requests
16+
from requests.adapters import HTTPAdapter
1617
import requests_cache
1718

1819
from .._version import version
@@ -34,6 +35,18 @@
3435
#: List of supported resource suffixes
3536
SERVER_RSUFFIX = {}
3637

38+
# Configure retry strategy
39+
retry_strategy = Retry(
40+
total=3, # Total retries
41+
backoff_factor=1.5, # {backoff factor} * (2 ** ({number prev. retries}))
42+
connect=3, # Handle connection errors (e.g. because the server is busy)
43+
read=0, # Fail on read errors
44+
redirect=False, # implies raise_on_redirect=False
45+
status=0, # Fail on bad status codes
46+
allowed_methods=["HEAD", "GET", "OPTIONS"] # Retry only for safe methods
47+
)
48+
adapter = HTTPAdapter(max_retries=retry_strategy)
49+
3750

3851
class CKANAPI:
3952
def __init__(self,
@@ -107,7 +120,10 @@ def __init__(self,
107120
},
108121
**kwargs)
109122
else:
110-
self.req_ses = requests
123+
self.req_ses = requests.Session()
124+
125+
self.req_ses.mount("https://", adapter)
126+
self.req_ses.mount("http://", adapter)
111127

112128
def __repr__(self):
113129
return f"<CKANAPI {self.api_url} at {hex(id(self))}>"

0 commit comments

Comments
 (0)