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

Reply via email to