Skip to content

Commit 6e5031d

Browse files
Merge pull request #7 from cjellick/retry-update
Add retry to update
2 parents 4a0c0e2 + 5a49ed4 commit 6e5031d

File tree

1 file changed

+16
-2
lines changed

1 file changed

+16
-2
lines changed

gdapi.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -353,11 +353,25 @@ def update_by_id(self, type, id, *args, **kw):
353353
else:
354354
url = '/'.join([url, id])
355355

356-
return self._put(url, data=self._to_dict(*args, **kw))
356+
return self._put_and_retry(url, *args, **kw)
357357

358358
def update(self, obj, *args, **kw):
359359
url = obj.links.self
360-
return self._put(url, data=self._to_dict(*args, **kw))
360+
return self._put_and_retry(url, *args, **kw)
361+
362+
def _put_and_retry(self, url, *args, **kw):
363+
retries = kw.get('retries', 3)
364+
last_error = None
365+
for i in range(retries):
366+
try:
367+
return self._put(url, data=self._to_dict(*args, **kw))
368+
except ApiError as e:
369+
if e.error.status == 409:
370+
last_error = e
371+
time.sleep(.1)
372+
else:
373+
raise e
374+
raise last_error
361375

362376
def _validate_list(self, type, **kw):
363377
if not self._strict:

0 commit comments

Comments
 (0)