jenkins-bot submitted this change.

View Change

Approvals: Matěj Suchánek: Looks good to me, but someone else must approve Xqt: Looks good to me, approved jenkins-bot: Verified
[IMPR] Double the wait time if ratelimit exceeded

Bug: T270912
Change-Id: I85bab755f0caa713bce26acb40c8106489bc6f50
---
M pywikibot/data/api.py
1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/pywikibot/data/api.py b/pywikibot/data/api.py
index 932e5ae..48d376d 100644
--- a/pywikibot/data/api.py
+++ b/pywikibot/data/api.py
@@ -981,6 +981,7 @@
self.max_retries = pywikibot.config.max_retries
else:
self.max_retries = max_retries
+ self.current_retries = 0
if retry_wait is None:
self.retry_wait = pywikibot.config.retry_wait
else:
@@ -1871,15 +1872,18 @@

def wait(self, delay=None):
"""Determine how long to wait after a failed request."""
- self.max_retries -= 1
- if self.max_retries < 0:
+ self.current_retries += 1
+ if self.current_retries > self.max_retries:
raise TimeoutError('Maximum retries attempted without success.')
+
+ # double the next wait, but do not exceed config.retry_max seconds
delay = delay or self.retry_wait
+ delay *= 2 ** (self.current_retries - 1)
+ delay = min(delay, config.retry_max)
+
pywikibot.warning('Waiting {:.1f} seconds before retrying.'
.format(delay))
pywikibot.sleep(delay)
- # double the next wait, but do not exceed config.retry_max seconds
- self.retry_wait = min(config.retry_max, self.retry_wait * 2)


class CachedRequest(Request):

To view, visit change 697589. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Change-Id: I85bab755f0caa713bce26acb40c8106489bc6f50
Gerrit-Change-Number: 697589
Gerrit-PatchSet: 1
Gerrit-Owner: Xqt <info@gno.de>
Gerrit-Reviewer: JJMC89 <JJMC89.Wikimedia@gmail.com>
Gerrit-Reviewer: Matěj Suchánek <matejsuchanek97@gmail.com>
Gerrit-Reviewer: Xqt <info@gno.de>
Gerrit-Reviewer: jenkins-bot
Gerrit-MessageType: merged