summaryrefslogtreecommitdiff
path: root/gitlab
diff options
context:
space:
mode:
authorMax Wittig <max.wittig@siemens.com>2019-01-13 12:01:07 +0100
committerGitHub <noreply@github.com>2019-01-13 12:01:07 +0100
commit89679ce5ee502e57dbe7cec2b78f4f70b85fd3a5 (patch)
treebb14b5569d330e84b6b21cf3fdca9cc2fe7a2e36 /gitlab
parentce2c8356cdd0e086ec67a1bf73adc2d0ea251971 (diff)
parent16bda20514e036e51bef210b565671174cdeb637 (diff)
downloadgitlab-89679ce5ee502e57dbe7cec2b78f4f70b85fd3a5.tar.gz
Merge pull request #678 from appian/backoff-requests
Fix missing "Retry-After" header and fix integration tests
Diffstat (limited to 'gitlab')
-rw-r--r--gitlab/__init__.py14
1 files changed, 11 insertions, 3 deletions
diff --git a/gitlab/__init__.py b/gitlab/__init__.py
index 01f9426..c280974 100644
--- a/gitlab/__init__.py
+++ b/gitlab/__init__.py
@@ -477,6 +477,10 @@ class Gitlab(object):
# obey the rate limit by default
obey_rate_limit = kwargs.get("obey_rate_limit", True)
+ # set max_retries to 10 by default, disable by setting it to -1
+ max_retries = kwargs.get("max_retries", 10)
+ cur_retries = 0
+
while True:
result = self.session.send(prepped, timeout=timeout, **settings)
@@ -486,9 +490,13 @@ class Gitlab(object):
return result
if 429 == result.status_code and obey_rate_limit:
- wait_time = int(result.headers["Retry-After"])
- time.sleep(wait_time)
- continue
+ if max_retries == -1 or cur_retries < max_retries:
+ wait_time = 2 ** cur_retries * 0.1
+ if "Retry-After" in result.headers:
+ wait_time = int(result.headers["Retry-After"])
+ cur_retries += 1
+ time.sleep(wait_time)
+ continue
error_message = result.content
try: