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

Reply via email to