jenkins-bot has submitted this change. ( https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1073861?usp=email )
Change subject: [IMPR] add User.renamed_target() method ......................................................................
[IMPR] add User.renamed_target() method
- User.renamed_target() gives the User object for a user was renamed to. - Also add NoRenameTargetError exception which is raised if the source user wasn't renamed. - update documentation
Change-Id: If4affa04fb41dfddfa90fdcbe65f39b89c585426 --- M pywikibot/exceptions.py M pywikibot/page/_basepage.py M pywikibot/page/_user.py 3 files changed, 61 insertions(+), 7 deletions(-)
Approvals: jenkins-bot: Verified Xqt: Looks good to me, approved
diff --git a/pywikibot/exceptions.py b/pywikibot/exceptions.py index 9104e7b..ec403e2 100644 --- a/pywikibot/exceptions.py +++ b/pywikibot/exceptions.py @@ -22,6 +22,7 @@ | +-- IsRedirectPageError | +-- NoMoveTargetError | +-- NoPageError + | +-- NoRenameTargetError | +-- NotEmailableError | +-- PageLoadRelatedError | | +-- InconsistentTitleError @@ -104,6 +105,7 @@ - InvalidPageError: Page is invalid e.g. without history - NotEmailableError: The target user has disabled email - NoMoveTargetError: An expected move target page does not exist + - NoRenameTargetError: An expected rename target user does not exist
PageLoadRelatedError: any exception which happens while loading a Page. - InconsistentTitleError: Page receives a title inconsistent with query @@ -371,6 +373,16 @@ message = 'Move target page of {} not found.'
+class NoRenameTargetError(PageRelatedError): + + """Expected rename target user not found. + + .. versionadded:: 9.4 + """ + + message = 'Rename target user of {} not found.' + + class PageLoadRelatedError(PageRelatedError):
"""Loading the contents of a Page object has failed.""" diff --git a/pywikibot/page/_basepage.py b/pywikibot/page/_basepage.py index beaf75e..1d675fe 100644 --- a/pywikibot/page/_basepage.py +++ b/pywikibot/page/_basepage.py @@ -1826,8 +1826,10 @@ .. versionadded:: 9.3 *ignore_section* parameter
- .. seealso:: :meth:`Site.getredirtarget() - <pywikibot.site._apisite.APISite.getredirtarget>` + .. seealso:: + * :meth:`Site.getredirtarget() + <pywikibot.site._apisite.APISite.getredirtarget>` + * :meth:`moved_target`
:param ignore_section: do not include section to the target even the link has one @@ -1842,15 +1844,15 @@ """ return self.site.getredirtarget(self, ignore_section=ignore_section)
- def moved_target(self): - """ - Return a Page object for the target this Page was moved to. + def moved_target(self) -> pywikibot.page.Page: + """Return a Page object for the target this Page was moved to.
If this page was not moved, it will raise a NoMoveTargetError. This method also works if the source was already deleted.
- :rtype: pywikibot.page.Page - :raises pywikibot.exceptions.NoMoveTargetError: page was not moved + .. seealso:: :meth:`getRedirectTarget` + + :raises NoMoveTargetError: page was not moved """ gen = iter(self.site.logevents(logtype='move', page=self, total=1)) try: diff --git a/pywikibot/page/_user.py b/pywikibot/page/_user.py index 8047772..01ed5e6 100644 --- a/pywikibot/page/_user.py +++ b/pywikibot/page/_user.py @@ -11,6 +11,7 @@ from pywikibot.exceptions import ( APIError, AutoblockUserError, + NoRenameTargetError, NotEmailableError, UserRightsError, ) @@ -451,3 +452,42 @@ :phab:`T57401#2216861` and :phab:`T120753#1863894`. """ return self.isRegistered() and 'bot' not in self.groups() + + def renamed_target(self) -> User: + """Return a User object for the target this user was renamed to. + + If this user was not renamed, it will raise a + :exc:`NoRenameTargetError`. + + **Usage:** + + >>> site = pywikibot.Site('wikipedia:de') + >>> user = pywikibot.User(site, 'Foo') + >>> user.isRegistered() + False + >>> target = user.renamed_target() + >>> target.isRegistered() + True + >>> target.title(with_ns=False) + 'Foo~dewiki' + >>> target.renamed_target() + Traceback (most recent call last): + ... + pywikibot.exceptions.NoRenameTargetError: Rename target user ... + + .. seealso:: + * :meth:`BasePage.moved_target` + * :meth:`BasePage.getRedirectTarget` + + .. versionadded:: 9.4 + + :raises NoRenameTargetError: user was not renamed + """ + gen = iter(self.site.logevents(logtype='renameuser', + page=self, total=1)) + try: + renamed = next(gen) + except StopIteration: + raise NoRenameTargetError(self) + + return User(self.site, renamed.params['newuser'])
pywikibot-commits@lists.wikimedia.org