jenkins-bot submitted this change.

View Change

Approvals: jenkins-bot: Verified Xqt: Looks good to me, approved
[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(-)

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'])

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

Gerrit-MessageType: merged
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Change-Id: If4affa04fb41dfddfa90fdcbe65f39b89c585426
Gerrit-Change-Number: 1073861
Gerrit-PatchSet: 4
Gerrit-Owner: Xqt <info@gno.de>
Gerrit-Reviewer: Xqt <info@gno.de>
Gerrit-Reviewer: jenkins-bot
Gerrit-CC: Mirji <mirji@dismail.de>