jenkins-bot merged this change.

View Change

Approvals: Framawiki: Looks good to me, approved jenkins-bot: Verified
[IMPR] Add new page generators

Added/enabled following page generators:
-wantedpages
-wantedfiles
-wantedcategories
-wantedtemplates

Also add some tests.

Signed-off-by: xqt <info@gno.de>
Bug: T56557
Bug: T150222
Change-Id: I7d5cba11c2534b8ff90d10205cc399a06ce83590
---
M pywikibot/pagegenerators.py
M pywikibot/site.py
M tests/pagegenerators_tests.py
3 files changed, 100 insertions(+), 2 deletions(-)

diff --git a/pywikibot/pagegenerators.py b/pywikibot/pagegenerators.py
index 7be9948..b8aea84 100644
--- a/pywikibot/pagegenerators.py
+++ b/pywikibot/pagegenerators.py
@@ -252,6 +252,22 @@
is the string to look for, or "-searchitem:lang:text",
where lang is the langauge to search items in.

+-wantedpages Work on pages that are linked, but do not exist;
+ may be given as "-wantedpages:n" where n is the maximum
+ number of articles to work on.
+
+-wantedcategories Work on categories that are used, but do not exist;
+ may be given as "-wantedcategories:n" where n is the
+ maximum number of categories to work on.
+
+-wantedfiles Work on files that are used, but do not exist;
+ may be given as "-wantedfiles:n" where n is the maximum
+ number of files to work on.
+
+-wantedtemplates Work on templates that are used, but do not exist;
+ may be given as "-wantedtemplates:n" where n is the
+ maximum number of templates to work on.
+
-random Work on random pages returned by [[Special:Random]].
Can also be given as "-random:n" where n is the number
of pages to be returned.
@@ -737,6 +753,22 @@
return UnwatchedPagesPageGenerator(
total=_int_none(value), site=self.site)

+ def _handle_wantedpages(self, value):
+ """Handle `-wantedpages` argument."""
+ return self.site.wantedpages(total=_int_none(value))
+
+ def _handle_wantedfiles(self, value):
+ """Handle `-wantedfiles` argument."""
+ return self.site.wantedfiles(total=_int_none(value))
+
+ def _handle_wantedtemplates(self, value):
+ """Handle `-wantedtemplates` argument."""
+ return self.site.wantedtemplates(total=_int_none(value))
+
+ def _handle_wantedcategories(self, value):
+ """Handle `-wantedcategories` argument."""
+ return self.site.wantedcategories(total=_int_none(value))
+
def _handle_property(self, value):
"""Handle `-property` argument."""
if not value:
@@ -2427,6 +2459,7 @@
return site.pages_with_property(name, total=total)


+@deprecated('Site.wantedpages', since='20180803')
def WantedPagesPageGenerator(total=100, site=None):
"""
Wanted page generator.
@@ -2438,8 +2471,7 @@
"""
if site is None:
site = pywikibot.Site()
- for page in site.wantedpages(total=total):
- yield page
+ return site.wantedpages(total=total)


@deprecated_args(number="total", repeat=None)
diff --git a/pywikibot/site.py b/pywikibot/site.py
index 304dcdc..29f3799 100644
--- a/pywikibot/site.py
+++ b/pywikibot/site.py
@@ -6653,6 +6653,7 @@
type_arg='querypage', gqppage='Unwatchedpages',
total=total)

+ @need_version('1.18')
@deprecated_args(step=None)
def wantedpages(self, total=None):
"""Yield Pages from Special:Wantedpages.
@@ -6663,6 +6664,27 @@
type_arg='querypage', gqppage='Wantedpages',
total=total)

+ @need_version('1.18')
+ def wantedfiles(self, total=None):
+ """Yield Pages from Special:Wantedfiles.
+
+ @param total: number of pages to return
+ """
+ return self._generator(api.PageGenerator,
+ type_arg='querypage', gqppage='Wantedfiles',
+ total=total)
+
+ @need_version('1.18')
+ def wantedtemplates(self, total=None):
+ """Yield Pages from Special:Wantedtemplates.
+
+ @param total: number of pages to return
+ """
+ return self._generator(api.PageGenerator,
+ type_arg='querypage', gqppage='Wantedtemplates',
+ total=total)
+
+ @need_version('1.18')
@deprecated_args(number='total', step=None, repeat=None)
def wantedcategories(self, total=None):
"""Yield Pages from Special:Wantedcategories.
diff --git a/tests/pagegenerators_tests.py b/tests/pagegenerators_tests.py
index e846b3c..fa6b956 100755
--- a/tests/pagegenerators_tests.py
+++ b/tests/pagegenerators_tests.py
@@ -1256,6 +1256,50 @@
self.assertPagesInNamespaces(gen, 1)


+class TestWantedFactoryGenerator(DefaultSiteTestCase):
+
+ """Test pagegenerators.GeneratorFactory for wanted pages."""
+
+ def setUp(self):
+ """Setup tests."""
+ super(TestWantedFactoryGenerator, self).setUp()
+ self.gf = pagegenerators.GeneratorFactory(site=self.site)
+
+ def _generator_with_tests(self):
+ """Test generator."""
+ gen = self.gf.getCombinedGenerator()
+ self.assertIsNotNone(gen)
+ pages = list(gen)
+ self.assertLessEqual(len(pages), 5)
+ for page in pages:
+ yield page
+
+ def test_wanted_pages(self):
+ """Test wantedpages generator."""
+ self.gf.handleArg('-wantedpages:5')
+ for page in self._generator_with_tests():
+ self.assertIsInstance(page, pywikibot.Page)
+
+ def test_wanted_files(self):
+ """Test wantedfiles generator."""
+ self.gf.handleArg('-wantedfiles:5')
+ for page in self._generator_with_tests():
+ self.assertIsInstance(page, pywikibot.FilePage)
+
+ def test_wanted_templates(self):
+ """Test wantedtemplates generator."""
+ self.gf.handleArg('-wantedtemplates:5')
+ for page in self._generator_with_tests():
+ self.assertIsInstance(page, pywikibot.Page)
+ self.assertEqual(page.namespace(), 10)
+
+ def test_wanted_categories(self):
+ """Test wantedcategories generator."""
+ self.gf.handleArg('-wantedcategories:5')
+ for page in self._generator_with_tests():
+ self.assertIsInstance(page, pywikibot.Category)
+
+
class TestFactoryGeneratorWikibase(WikidataTestCase):

"""Test pagegenerators.GeneratorFactory on Wikibase site."""

To view, visit change 321089. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-MessageType: merged
Gerrit-Change-Id: I7d5cba11c2534b8ff90d10205cc399a06ce83590
Gerrit-Change-Number: 321089
Gerrit-PatchSet: 13
Gerrit-Owner: XXN <dan10real@gmail.com>
Gerrit-Reviewer: Framawiki <framawiki@tools.wmflabs.org>
Gerrit-Reviewer: Magul <tomasz.magulski@gmail.com>
Gerrit-Reviewer: Merlijn van Deen <valhallasw@arctus.nl>
Gerrit-Reviewer: Mpaa <mpaa.wiki@gmail.com>
Gerrit-Reviewer: Multichill <maarten@mdammers.nl>
Gerrit-Reviewer: XZise <CommodoreFabianus@gmx.de>
Gerrit-Reviewer: Xqt <info@gno.de>
Gerrit-Reviewer: jenkins-bot (75)
Gerrit-CC: Matěj Suchánek <matejsuchanek97@gmail.com>