jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/482495 )
Change subject: site.py: add generic self.querypage() to query SpecialPages
......................................................................
site.py: add generic self.querypage() to query SpecialPages
Enabler for a generic param '-querypage' for pagegenerators.
Tests added.
Change-Id: I99f9be30b523d7060abdd28eb316617b07626863
---
M pywikibot/site.py
M tests/site_tests.py
2 files changed, 45 insertions(+), 65 deletions(-)
Approvals:
Xqt: Looks good to me, approved
jenkins-bot: Verified
diff --git a/pywikibot/site.py b/pywikibot/site.py
index 1c2729b..c1cc3aa 100644
--- a/pywikibot/site.py
+++ b/pywikibot/site.py
@@ -6,7 +6,7 @@
groups of wikis on the same topic in different languages.
"""
#
-# (C) Pywikibot team, 2008-2018
+# (C) Pywikibot team, 2008-2019
#
# Distributed under the terms of the MIT license.
#
@@ -6606,6 +6606,23 @@
"""
return self.newfiles(*args, **kwargs)
+ def querypage(self, special_page, total=None):
+ """Yield Page objects retrieved from Special:{special_page}.
+
+ Generic function for all special pages supported by the site MW API.
+
+ @param special_page: Special page to query
+ @param total: number of pages to return
+ @raise AssertionError: special_page is not supported in SpecialPages.
+ """
+ param = self._paraminfo.parameter('query+querypage', 'page')
+ assert special_page in param['type'], (
+ '{0} not in {1}'.format(special_page, param['type']))
+
+ return self._generator(api.PageGenerator,
+ type_arg='querypage', gqppage=special_page,
+ total=total)
+
@deprecated_args(number='total', step=None, repeat=None)
def longpages(self, total=None):
"""Yield Pages and lengths from Special:Longpages.
@@ -6642,9 +6659,7 @@
@param total: number of pages to return
"""
- return self._generator(api.PageGenerator,
- type_arg='querypage', gqppage='Deadendpages',
- total=total)
+ return self.querypage('Deadendpages', total)
@deprecated_args(number='total', step=None, repeat=None)
def ancientpages(self, total=None):
@@ -6665,9 +6680,7 @@
@param total: number of pages to return
"""
- return self._generator(api.PageGenerator,
- type_arg='querypage', gqppage='Lonelypages',
- total=total)
+ return self.querypage('Lonelypages', total)
@deprecated_args(number='total', step=None, repeat=None)
def unwatchedpages(self, total=None):
@@ -6675,9 +6688,7 @@
@param total: number of pages to return
"""
- return self._generator(api.PageGenerator,
- type_arg='querypage', gqppage='Unwatchedpages',
- total=total)
+ return self.querypage('Unwatchedpages', total)
@need_version('1.18')
@deprecated_args(step=None)
@@ -6686,9 +6697,7 @@
@param total: number of pages to return
"""
- return self._generator(api.PageGenerator,
- type_arg='querypage', gqppage='Wantedpages',
- total=total)
+ return self.querypage('Wantedpages', total)
@need_version('1.18')
def wantedfiles(self, total=None):
@@ -6696,9 +6705,7 @@
@param total: number of pages to return
"""
- return self._generator(api.PageGenerator,
- type_arg='querypage', gqppage='Wantedfiles',
- total=total)
+ return self.querypage('Wantedfiles', total)
@need_version('1.18')
def wantedtemplates(self, total=None):
@@ -6706,9 +6713,7 @@
@param total: number of pages to return
"""
- return self._generator(api.PageGenerator,
- type_arg='querypage', gqppage='Wantedtemplates',
- total=total)
+ return self.querypage('Wantedtemplates', total)
@need_version('1.18')
@deprecated_args(number='total', step=None, repeat=None)
@@ -6717,10 +6722,7 @@
@param total: number of pages to return
"""
- return self._generator(api.PageGenerator,
- type_arg='querypage',
- gqppage='Wantedcategories',
- total=total)
+ return self.querypage('Wantedcategories', total)
@deprecated_args(number='total', step=None, repeat=None)
def uncategorizedcategories(self, total=None):
@@ -6728,10 +6730,7 @@
@param total: number of pages to return
"""
- return self._generator(api.PageGenerator,
- type_arg='querypage',
- gqppage='Uncategorizedcategories',
- total=total)
+ return self.querypage('Uncategorizedcategories', total)
@deprecated_args(number='total', step=None, repeat=None)
def uncategorizedimages(self, total=None):
@@ -6739,10 +6738,7 @@
@param total: number of pages to return
"""
- return self._generator(api.PageGenerator,
- type_arg='querypage',
- gqppage='Uncategorizedimages',
- total=total)
+ return self.querypage('Uncategorizedimages', total)
# synonym
uncategorizedfiles = uncategorizedimages
@@ -6753,10 +6749,7 @@
@param total: number of pages to return
"""
- return self._generator(api.PageGenerator,
- type_arg='querypage',
- gqppage='Uncategorizedpages',
- total=total)
+ return self.querypage('Uncategorizedpages', total)
@deprecated_args(number='total', step=None, repeat=None)
def uncategorizedtemplates(self, total=None):
@@ -6764,10 +6757,7 @@
@param total: number of pages to return
"""
- return self._generator(api.PageGenerator,
- type_arg='querypage',
- gqppage='Uncategorizedtemplates',
- total=total)
+ return self.querypage('Uncategorizedtemplates', total)
@deprecated_args(number='total', step=None, repeat=None)
def unusedcategories(self, total=None):
@@ -6775,10 +6765,7 @@
@param total: number of pages to return
"""
- return self._generator(api.PageGenerator,
- type_arg='querypage',
- gqppage='Unusedcategories',
- total=total)
+ return self.querypage('Unusedcategories', total)
@deprecated_args(extension=None, number='total', step=None, repeat=None)
def unusedfiles(self, total=None):
@@ -6786,10 +6773,7 @@
@param total: number of pages to return
"""
- return self._generator(api.PageGenerator,
- type_arg='querypage',
- gqppage='Unusedimages',
- total=total)
+ return self.querypage('Unusedimages', total)
@deprecated('Site().unusedfiles()', since='20140808')
@deprecated_args(extension=None, number='total', step=None, repeat=None)
@@ -6806,10 +6790,7 @@
@param total: number of pages to return
"""
- return self._generator(api.PageGenerator,
- type_arg='querypage',
- gqppage='Withoutinterwiki',
- total=total)
+ return self.querypage('Withoutinterwiki', total)
@need_version('1.18')
@deprecated_args(step=None)
@@ -6818,9 +6799,7 @@
@param total: number of pages to return
"""
- return self._generator(api.PageGenerator,
- type_arg='querypage', gqppage='BrokenRedirects',
- total=total)
+ return self.querypage('BrokenRedirects', total)
@need_version('1.18')
@deprecated_args(step=None)
@@ -6829,9 +6808,7 @@
@param total: number of pages to return
"""
- return self._generator(api.PageGenerator,
- type_arg='querypage', gqppage='DoubleRedirects',
- total=total)
+ return self.querypage('DoubleRedirects', total)
@need_version('1.18')
@deprecated_args(step=None)
@@ -6840,9 +6817,7 @@
@param total: number of pages to return
"""
- return self._generator(api.PageGenerator,
- type_arg='querypage', gqppage='Listredirects',
- total=total)
+ return self.querypage('Listredirects', total)
@deprecated_args(step=None)
@need_extension('WikibaseClient')
@@ -6851,10 +6826,7 @@
@param total: number of pages to return
"""
- return self._generator(api.PageGenerator,
- type_arg='querypage',
- gqppage='UnconnectedPages',
- total=total)
+ return self.querypage('UnconnectedPages', total)
@deprecated_args(lvl='level')
def protectedpages(self, namespace=0, type='edit', level=False,
diff --git a/tests/site_tests.py b/tests/site_tests.py
index c0790c3..2adb1b1 100644
--- a/tests/site_tests.py
+++ b/tests/site_tests.py
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
"""Tests for the site module."""
#
-# (C) Pywikibot team, 2008-2018
+# (C) Pywikibot team, 2008-2019
#
# Distributed under the terms of the MIT license.
#
@@ -869,6 +869,14 @@
self.assertTrue(all(isinstance(tup[2], unicode) for tup in the_list))
self.assertTrue(all(isinstance(tup[3], unicode) for tup in the_list))
+ def test_querypage(self):
+ """Test the site.querypage() method."""
+ mysite = self.get_site()
+ pages = list(mysite.querypage('Longpages', total=10))
+
+ self.assertTrue(all(isinstance(p, pywikibot.Page) for p in pages))
+ self.assertRaises(AssertionError, mysite.querypage, 'LongpageX')
+
def test_longpages(self):
"""Test the site.longpages() method."""
mysite = self.get_site()
--
To view, visit https://gerrit.wikimedia.org/r/482495
To unsubscribe, or for help writing mail filters, visit
https://gerrit.wikimedia.org/r/settings
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-MessageType: merged
Gerrit-Change-Id: I99f9be30b523d7060abdd28eb316617b07626863
Gerrit-Change-Number: 482495
Gerrit-PatchSet: 14
Gerrit-Owner: Mpaa <[email protected]>
Gerrit-Reviewer: John Vandenberg <[email protected]>
Gerrit-Reviewer: Mpaa <[email protected]>
Gerrit-Reviewer: Xqt <[email protected]>
Gerrit-Reviewer: jenkins-bot (75)
_______________________________________________
Pywikibot-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/pywikibot-commits