[MediaWiki-commits] [Gerrit] pywikibot/core[master]: FilePage: add API query=globalusage support

2017-08-19 Thread jenkins-bot (Code Review)
jenkins-bot has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/371659 )

Change subject: FilePage: add API query=globalusage support
..


FilePage: add API query=globalusage support

Raise UnknownExtension if GlobalUsage is not installed on wiki.

Bug: T168317
Change-Id: Id634380c2692411611dfe9414f9be2fe42c55c11
---
M pywikibot/page.py
M pywikibot/site.py
M tests/page_tests.py
3 files changed, 68 insertions(+), 0 deletions(-)

Approvals:
  jenkins-bot: Verified
  Xqt: Looks good to me, approved



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 1debbda..0e5efbd 100644
--- a/pywikibot/site.py
+++ b/pywikibot/site.py
@@ -3004,6 +3004,45 @@
 )
 self._update_page(page, query)
 
+@need_extension('Global Usage')
+def globalusage(self, page, total=None):
+"""Iterate global image usage for a given FilePage.
+
+@param page: the page to return global image usage for.
+@type image: FilePage
+@param total: iterate no more than this number of pages in total.
+@raises TypeError: input page is not a FilePage.
+@raises SiteDefinitionError: Site could not be defined for a returned
+entry in API response.
+"""
+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 globalusage response lacks 'globalusage' key"
+for entry in pageitem['globalusage']:
+try:
+gu_site = pywikibot.Site(url=entry['url'])
+except SiteDefinitionError:
+pywikibot.warning('Site could not be defined for global'
+  ' usage for {0}: {1}.'.format(page, 
entry))
+continue
+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 3c74326..9b7377b 100644
--- a/tests/page_tests.py
+++ b/tests/page_tests.py
@@ -628,6 +628,25 @@
 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, key):
+"""Test globalusage generator."""
+page = pywikibot.FilePage(self.site, 'File:Example.jpg')
+gen = page.globalusage(total=3)
+pages = list(gen)
+self.assertEqual(len(pages), 3)
+self.assertTrue(any(isinstance(p), pywikibot.Page) for p in pages)
+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: merged
Gerrit-Change-Id: Id634380c2692411611dfe9414f9be2fe42c55c11
Gerrit-PatchSet: 6
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: Mpaa 
Gerrit-Reviewer: John Vandenberg 
Gerrit-Reviewer: Mpaa 
Gerrit-Reviewer: Multichill 
Gerrit-Reviewer: Xqt 
Gerrit-Reviewer: jenkins-bot <>

___

[MediaWiki-commits] [Gerrit] pywikibot/core[master]: FilePage: add API query=globalusage support

2017-08-12 Thread Mpaa (Code Review)
Mpaa has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/371659 )

Change subject: FilePage: add API query=globalusage support
..

FilePage: add API query=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 

___
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits