jenkins-bot has submitted this change. ( https://gerrit.wikimedia.org/r/c/pywikibot/core/+/643491 )
Change subject: [bugfix] _is_wikibase_error_retryable rewritten ......................................................................
[bugfix] _is_wikibase_error_retryable rewritten
Check for 'wbeditentity' action with 'edit-already-exists' error only (Bug: T48535)
Bug: T268645 Change-Id: Ie6487c140684eb03f8fa204c304997c992a8da66 --- M pywikibot/data/api.py 1 file changed, 15 insertions(+), 10 deletions(-)
Approvals: Multichill: Looks good to me, approved jenkins-bot: Verified
diff --git a/pywikibot/data/api.py b/pywikibot/data/api.py index 40dee1a..c9f69a7 100644 --- a/pywikibot/data/api.py +++ b/pywikibot/data/api.py @@ -1479,12 +1479,13 @@ return {action: {'result': 'Success', 'nochange': ''}} return None
- @staticmethod - def _is_wikibase_error_retryable(error): - ERR_MSG = ( - 'edit-already-exists', - 'actionthrottledtext', # T192912 - ) + def _is_wikibase_error_retryable(self, error): + # dict of error message and current action. + # Value is True if action type is to be ignored + ERR_MSG = { + 'edit-already-exists': 'wbeditentity', + 'actionthrottledtext': True, # T192912, T268645 + } messages = error.get('messages') message = None # bug T68619; after Wikibase breaking change 1ca9cee change we have a @@ -1492,14 +1493,19 @@ if isinstance(messages, list): for item in messages: message = item['name'] - if message in ERR_MSG: + action = ERR_MSG.get(message) + if action is True or action == self.action: return True - elif isinstance(messages, dict): + else: + return False + + if isinstance(messages, dict): try: # behaviour before gerrit 124323 breaking change message = messages['0']['name'] except KeyError: # unsure the new output is always a list message = messages['name'] - return message in ERR_MSG + action = ERR_MSG.get(message) + return action is True or action == self.action
@staticmethod def _generate_mime_part(key, content, keytype=None, headers=None): @@ -1935,7 +1941,6 @@
# Phab. tickets T48535, T64126, T68494, T68619 if code == 'failed-save' and \ - self.action == 'wbeditentity' and \ self._is_wikibase_error_retryable(result['error']): self.wait() continue