jenkins-bot has submitted this change. ( 
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1334092?usp=email )

Change subject: pagegenerators: Apply title filters first
......................................................................

pagegenerators: Apply title filters first

Apply title regex filters before filters which may load page data. Pages
rejected by title are discarded without redirect, claim, quality or category
lookups.

Change-Id: I09a8210651f38199e2ecc32663c6c938735b6962
---
M pywikibot/pagegenerators/_factory.py
M tests/pagegenerators_tests.py
2 files changed, 32 insertions(+), 8 deletions(-)

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




diff --git a/pywikibot/pagegenerators/_factory.py 
b/pywikibot/pagegenerators/_factory.py
index f7aab25..c01c43e 100644
--- a/pywikibot/pagegenerators/_factory.py
+++ b/pywikibot/pagegenerators/_factory.py
@@ -284,6 +284,15 @@
             combine = roundrobin_generators if self.limit else itertools.chain
             dupfiltergen = _filter_unique_pages(combine(*self.gens))

+        # Apply title-only filters before filters which may load page data.
+        if self.titlefilter_list:
+            dupfiltergen = RegexFilterPageGenerator(
+                dupfiltergen, self.titlefilter_list)
+
+        if self.titlenotfilter_list:
+            dupfiltergen = RegexFilterPageGenerator(
+                dupfiltergen, self.titlenotfilter_list, 'none')
+
         # Add on subpage filter generator
         if self.subpage_max_depth is not None:
             dupfiltergen = SubpageFilterGenerator(
@@ -305,14 +314,6 @@
             dupfiltergen = QualityFilterPageGenerator(
                 dupfiltergen, self.qualityfilter_list)

-        if self.titlefilter_list:
-            dupfiltergen = RegexFilterPageGenerator(
-                dupfiltergen, self.titlefilter_list)
-
-        if self.titlenotfilter_list:
-            dupfiltergen = RegexFilterPageGenerator(
-                dupfiltergen, self.titlenotfilter_list, 'none')
-
         if self.catfilter_list:
             dupfiltergen = CategoryFilterPageGenerator(
                 dupfiltergen, self.catfilter_list)
diff --git a/tests/pagegenerators_tests.py b/tests/pagegenerators_tests.py
index d63a043..29b7f4f 100755
--- a/tests/pagegenerators_tests.py
+++ b/tests/pagegenerators_tests.py
@@ -808,6 +808,29 @@

     dry = True

+    def test_title_filters_run_before_redirect_filter(self) -> None:
+        """Test title filters discard pages before redirect checks."""
+        site = self.get_site()
+        keep = pywikibot.Page(site, 'Keep this')
+        pages = [
+            pywikibot.Page(site, 'Drop this'),
+            pywikibot.Page(site, 'Keep excluded'),
+            keep,
+        ]
+        gf = pagegenerators.GeneratorFactory(site=site)
+        gf.gens = [pages]
+        gf.titlefilter_list = ['^Keep']
+        gf.titlenotfilter_list = ['excluded']
+        gf.redirectfilter = False
+
+        with mock.patch.object(
+                pywikibot.Page, 'isRedirectPage', return_value=False
+        ) as is_redirect:
+            result = list(gf.getCombinedGenerator())
+
+        self.assertEqual(result, [keep])
+        is_redirect.assert_called_once_with()
+
     def test_one_namespace(self) -> None:
         """Test one namespace."""
         gf = pagegenerators.GeneratorFactory(site=self.get_site())

--
To view, visit 
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1334092?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.wikimedia.org/r/settings?usp=email

Gerrit-MessageType: merged
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Change-Id: I09a8210651f38199e2ecc32663c6c938735b6962
Gerrit-Change-Number: 1334092
Gerrit-PatchSet: 2
Gerrit-Owner: Mahveotm <[email protected]>
Gerrit-Reviewer: Xqt <[email protected]>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
Pywikibot-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to