jenkins-bot merged this change.
[IMPR] Upcast getRedirectTarget result
- return the appropriate page subclass with getRedirectTarget
- update tests accordingly
Bug: T233392
Change-Id: Ic6e9f9d1ef771628340c48358c921991e9697fc1
---
M pywikibot/site.py
M tests/page_tests.py
2 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/pywikibot/site.py b/pywikibot/site.py
index 48ccbb5..5643e6c 100644
--- a/pywikibot/site.py
+++ b/pywikibot/site.py
@@ -3238,7 +3238,6 @@
# target_title is the ultimate target
target = pywikibot.Page(self, pagedata['title'], pagedata['ns'])
api.update_page(target, pagedata, ['info'])
- page._redirtarget = target
else:
# Target is an intermediate redirect -> double redirect.
# Do not bypass double-redirects and return the ultimate target;
@@ -3246,7 +3245,16 @@
# This handles also redirects to sections, as sametitle()
# does not ignore sections.
target = pywikibot.Page(self, target_title)
- page._redirtarget = target
+
+ # Upcast to proper Page subclass.
+ ns = target.namespace()
+ if ns == 2:
+ target = pywikibot.User(target)
+ elif ns == 6:
+ target = pywikibot.FilePage(target)
+ elif ns == 14:
+ target = pywikibot.Category(target)
+ page._redirtarget = target
return page._redirtarget
diff --git a/tests/page_tests.py b/tests/page_tests.py
index 7aa8008..b6c6152 100644
--- a/tests/page_tests.py
+++ b/tests/page_tests.py
@@ -927,7 +927,9 @@
p1 = pywikibot.Page(site, 'User:Legoktm/R1')
p2 = pywikibot.Page(site, 'User:Legoktm/R2')
self.assertTrue(p1.isRedirectPage())
- self.assertEqual(p1.getRedirectTarget(), p2)
+ p3 = p1.getRedirectTarget()
+ self.assertEqual(p3, p2)
+ self.assertIsInstance(p3, pywikibot.User)
def testPageGet(self):
"""Test C{Page.get()} on different types of pages."""
To view, visit change 538378. To unsubscribe, or for help writing mail filters, visit settings.