Mpaa has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/371659 )
Change subject: FilePage: add API query&prop=globalusage support ...................................................................... FilePage: add API query&prop=globalusage support Bug: T168317 Change-Id: Id634380c2692411611dfe9414f9be2fe42c55c11 --- M pywikibot/page.py M pywikibot/site.py M tests/page_tests.py 3 files changed, 59 insertions(+), 0 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/pywikibot/core refs/changes/59/371659/1 diff --git a/pywikibot/page.py b/pywikibot/page.py index 3fbcf79..f815f53 100644 --- a/pywikibot/page.py +++ b/pywikibot/page.py @@ -2693,6 +2693,16 @@ pywikibot.warning('Unsuccesfull request (%s): %s' % (req.status, req.uri)) return False + def globalusage(self, total=None): + """ + Iterate all global usage for this page. + + @param total: iterate no more than this number of pages in total + @return: a generator that yields Pages also on sites different from + self.site. + @rtype: generator + """ + return self.site.globalusage(self, total=total) wrapper = _ModuleDeprecationWrapper(__name__) wrapper._add_deprecated_attr('ImagePage', FilePage) diff --git a/pywikibot/site.py b/pywikibot/site.py index 2e282d1..56156e1 100644 --- a/pywikibot/site.py +++ b/pywikibot/site.py @@ -3004,6 +3004,37 @@ ) self._update_page(page, query) + def globalusage(self, page, total=None): + """Iterate global image usage for a given FilePage. + + @param page: the page to return global image usage for; nothing is + returned if page is not a FilePage. + @type image: FilePage + @param total: iterate no more than this number of pages in total + """ + if not isinstance(page, pywikibot.FilePage): + raise TypeError('Page %s must be a FilePage.' % page) + + title = page.title(withSection=False) + args = {'titles': title, + 'gufilterlocal': False, + } + query = self._generator(api.PropertyGenerator, + type_arg='globalusage', + guprop=['url', 'pageid', 'namespace'], + total=total, # will set gulimit=total in api, + **args) + + self._update_page(page, query) + for pageitem in query: + assert 'globalusage' in pageitem, \ + "API userinfo response lacks 'globalusage' key" + for entry in pageitem['globalusage']: + url = entry['url'].replace(entry['title'], '') + gu_site = pywikibot.Site(url=url) + gu_page = pywikibot.Page(gu_site, entry['title']) + yield gu_page + def loadimageinfo(self, page, history=False, url_width=None, url_height=None, url_param=None): """Load image info from api and save in page attributes. diff --git a/tests/page_tests.py b/tests/page_tests.py index 17c69ef..ddc3652 100644 --- a/tests/page_tests.py +++ b/tests/page_tests.py @@ -629,6 +629,24 @@ self.site.loadimageinfo.assert_called_once_with(page, history=True) +class TestFilePage(DefaultSiteTestCase): + + """Test methods of the FilePage class.""" + + family = 'commons' + code = 'commons' + + cached = True + + def test_globalusage(self): + """Test globalusage generator.""" + page = pywikibot.FilePage(self.site, 'File:Albert_Einstein.jpg') + gen = page.globalusage(total=3) + pages = list(gen) + self.assertEqual(len(pages), 3) + self.assertTrue(any(p.site != self.site for p in pages)) + + class TestPageRepr(TestPageBaseUnicode): """Test for Page's repr implementation.""" -- To view, visit https://gerrit.wikimedia.org/r/371659 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Id634380c2692411611dfe9414f9be2fe42c55c11 Gerrit-PatchSet: 1 Gerrit-Project: pywikibot/core Gerrit-Branch: master Gerrit-Owner: Mpaa <mpaa.w...@gmail.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits