jenkins-bot has submitted this change. ( https://gerrit.wikimedia.org/r/c/pywikibot/core/+/640437 )
Change subject: [IMPR] revertbot.py: use site.rollbackpage() method ......................................................................
[IMPR] revertbot.py: use site.rollbackpage() method
Bug: T106646 Change-Id: I159b7792b095b4fbb8c77a811aee6bc2ce272303 --- M pywikibot/site/__init__.py M scripts/revertbot.py 2 files changed, 26 insertions(+), 25 deletions(-)
Approvals: Meno25: Looks good to me, but someone else must approve Xqt: Looks good to me, approved jenkins-bot: Verified
diff --git a/pywikibot/site/__init__.py b/pywikibot/site/__init__.py index 9526291..ee5f949 100644 --- a/pywikibot/site/__init__.py +++ b/pywikibot/site/__init__.py @@ -4871,27 +4871,30 @@ one that is not by the same user who made the last edit.
@param page: the Page to be rolled back (must exist) - + @keyword user: the last user to be rollbacked; + default is page.latest_revision.user """ if len(page._revisions) < 2: raise Error( - 'Rollback of %s aborted; load revision history first.' - % page.title(as_link=True)) - last_rev = page.latest_revision - last_user = last_rev.user + 'Rollback of {} aborted; load revision history first.' + .format(page)) + + user = kwargs.pop('user', page.latest_revision.user) for rev in sorted(page._revisions.values(), reverse=True, key=lambda r: r.timestamp): # start with most recent revision first - if rev.user != last_user: + if rev.user != user: break else: raise Error( - 'Rollback of %s aborted; only one user in revision history.' - % page.title(as_link=True)) - parameters = merge_unique_dicts(kwargs, action='rollback', + 'Rollback of {} aborted; only one user in revision history.' + .format(page)) + + parameters = merge_unique_dicts(kwargs, + action='rollback', title=page, token=self.tokens['rollback'], - user=last_user) + user=user) self.lock_page(page) req = self._simple_request(**parameters) try: diff --git a/scripts/revertbot.py b/scripts/revertbot.py index 38c071c..a5f5819 100755 --- a/scripts/revertbot.py +++ b/scripts/revertbot.py @@ -46,6 +46,8 @@ import pywikibot
from pywikibot.bot import OptionHandler +from pywikibot.data import api +from pywikibot.exceptions import Error from pywikibot import i18n from pywikibot.tools import deprecate_arg from pywikibot.tools.formatter import color_format @@ -123,25 +125,21 @@ page.save(comment) return comment
- params = { - 'action': 'rollback', - 'title': page, - 'user': self.user, - 'token': self.site.tokens['rollback'], - 'markbot': True, - } try: - r = pywikibot.data.api.Request(self.site, parameters=params) - r.submit() - except pywikibot.data.api.APIError as e: + self.site.rollbackpage(page, user=self.user, markbot=True) + except api.APIError as e: if e.code == 'badtoken': pywikibot.error( 'There was an API token error rollbacking the edit') - else: - pywikibot.exception() - return False - return 'The edit(s) made in {} by {} was rollbacked'.format( - page.title(), self.user) + return False + except Error: + pass + else: + return 'The edit(s) made in {} by {} was rollbacked'.format( + page.title(), self.user) + + pywikibot.exception() + return False
def log(self, msg) -> None: """Log the message msg."""
pywikibot-commits@lists.wikimedia.org