jenkins-bot has submitted this change and it was merged.
Change subject: override ItemPage.getRedirectTarget() ......................................................................
override ItemPage.getRedirectTarget()
* Added 'ns' argument to ItemPage.__init__() defaulting to the site's item_namespace; * Expanded docstring of APISite.getredirtarget(); * Added a line to wikibase_tests.py.
Change-Id: I571490fddfe426efc83fde655031a3b40676b327 --- M pywikibot/page.py M pywikibot/site.py M tests/wikibase_tests.py 3 files changed, 32 insertions(+), 5 deletions(-)
Approvals: Xqt: Looks good to me, approved jenkins-bot: Verified
diff --git a/pywikibot/page.py b/pywikibot/page.py index 08eddc3..2853387 100644 --- a/pywikibot/page.py +++ b/pywikibot/page.py @@ -3089,7 +3089,7 @@ been looked up, the item is then defined by the qid. """
- def __init__(self, site, title=None): + def __init__(self, site, title=None, ns=None): """ Constructor.
@@ -3098,15 +3098,19 @@ @param title: id number of item, "Q###", -1 or None for an empty item. @type title: str + @type ns: namespace + @type ns: Namespace instance, or int, or None + for default item_namespace """ + if ns is None: + ns = site.item_namespace # Special case for empty item. if title is None or title == '-1': - super(ItemPage, self).__init__(site, u'-1', ns=site.item_namespace) + super(ItemPage, self).__init__(site, u'-1', ns=ns) self.id = u'-1' return
- super(ItemPage, self).__init__(site, title, - ns=site.item_namespace) + super(ItemPage, self).__init__(site, title, ns=ns)
# Link.__init__, called from Page.__init__, has cleaned the title # stripping whitespace and uppercasing the first letter according @@ -3223,6 +3227,15 @@ 'claims': self.claims }
+ def getRedirectTarget(self): + target = super(ItemPage, self).getRedirectTarget() + cmodel = target.content_model + if cmodel != 'wikibase-item': + raise pywikibot.Error(u'%s has redirect target %s with content ' + u'model %s instead of wikibase-item' % + (self, target, cmodel)) + return self.__class__(target.site, target.title(), target.namespace()) + def toJSON(self, diffto=None): data = super(ItemPage, self).toJSON(diffto=diffto)
diff --git a/pywikibot/site.py b/pywikibot/site.py index 3a994c3..16fe681 100644 --- a/pywikibot/site.py +++ b/pywikibot/site.py @@ -2364,7 +2364,20 @@ return page._isredir
def getredirtarget(self, page): - """Return Page object for the redirect target of page.""" + """ + Return page object for the redirect target of page. + + @param page: page to search redirects for + @type page: BasePage + @return: redirect target of page + @rtype: BasePage + + @raise IsNotRedirectPage: page is not a redirect + @raise RuntimeError: no redirects found + @raise CircularRedirect: page is a circular redirect + @raise InterwikiRedirectPage: the redirect target is + on another site + """ if not self.page_isredirect(page): raise IsNotRedirectPage(page) if hasattr(page, '_redirtarget'): diff --git a/tests/wikibase_tests.py b/tests/wikibase_tests.py index caf3b30..c07a03f 100644 --- a/tests/wikibase_tests.py +++ b/tests/wikibase_tests.py @@ -464,6 +464,7 @@ target = pywikibot.ItemPage(wikidata, 'Q8422626') self.assertTrue(item.isRedirectPage()) self.assertEqual(item.getRedirectTarget(), target) + self.assertIsInstance(item.getRedirectTarget(), pywikibot.ItemPage)
class TestPropertyPage(WikidataTestCase):