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

Change subject: pagegenerators: Add depth to PetScanPageGenerator
......................................................................

pagegenerators: Add depth to PetScanPageGenerator

Expose PetScan's category depth option through PetScanPageGenerator and
buildQuery(). Keep zero as the default so existing direct-category
behavior is unchanged.

Preserve extra_options as the final override layer.

Bug: T334299
Change-Id: I59e9146282a02776f2f294061b5c1709b855f58a
---
M pywikibot/pagegenerators/_generators.py
M tests/pagegenerators_tests.py
2 files changed, 34 insertions(+), 6 deletions(-)

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




diff --git a/pywikibot/pagegenerators/_generators.py 
b/pywikibot/pagegenerators/_generators.py
index ca95234..5eb3f45 100644
--- a/pywikibot/pagegenerators/_generators.py
+++ b/pywikibot/pagegenerators/_generators.py
@@ -1383,6 +1383,8 @@
     .. version-added:: 3.0
     .. version-changed:: 7.6
        subclassed from :class:`tools.collections.GeneratorWrapper`
+    .. version-changed:: 11.8
+       The *depth* parameter was added.
     """

     def __init__(
@@ -1391,7 +1393,9 @@
         subset_combination: bool = True,
         namespaces: Iterable[int | pywikibot.site.Namespace] | None = None,
         site: BaseSite | None = None,
-        extra_options: dict[Any, Any] | None = None
+        extra_options: dict[Any, Any] | None = None,
+        *,
+        depth: int = 0
     ) -> None:
         """Initializer.

@@ -1403,19 +1407,22 @@
             None, meaning all namespaces)
         :param site: Site to operate on (default is the default site
             from the user config)
-        :param extra_options: Dictionary of extra options to use
-            (optional)
+        :param extra_options: Additional PetScan query parameters. These
+            options override values supplied by named parameters.
+        :param depth: Number of subcategory levels to include (default
+            is 0, meaning only direct category members)
         """
         if site is None:
             site = pywikibot.Site()

         self.site = site
         self.opts = self.buildQuery(categories, subset_combination,
-                                    namespaces, extra_options)
+                                    namespaces, extra_options, depth=depth)

     def buildQuery(self, categories: Sequence[str], subset_combination: bool,
                    namespaces: Iterable[int | pywikibot.site.Namespace] | None,
-                   extra_options: dict[Any, Any] | None) -> dict[str, Any]:
+                   extra_options: dict[Any, Any] | None, *,
+                   depth: int = 0) -> dict[str, Any]:
         """Get the querystring options to query PetScan.

         :param categories: List of categories (as strings)
@@ -1423,7 +1430,9 @@
             the intersection of the results of the categories, else
             returns the union of the results of the categories
         :param namespaces: List of namespaces to search in
-        :param extra_options: Dictionary of extra options to use
+        :param extra_options: Additional PetScan query parameters. These
+            options override values supplied by named parameters.
+        :param depth: Number of subcategory levels to include
         :return: Dictionary of querystring parameters to use in the
             query
         """
@@ -1432,6 +1441,7 @@
         query = {
             'language': self.site.code,
             'project': self.site.hostname().split('.')[-2],
+            'depth': depth,
             'combination': 'subset' if subset_combination else 'union',
             'categories': '\r\n'.join(categories),
             'format': 'json',
diff --git a/tests/pagegenerators_tests.py b/tests/pagegenerators_tests.py
index 99c424f..d63a043 100755
--- a/tests/pagegenerators_tests.py
+++ b/tests/pagegenerators_tests.py
@@ -85,6 +85,24 @@
         """Test module import."""
         self.assertIn('pywikibot.pagegenerators', sys.modules)

+    def test_petscan_depth(self) -> None:
+        """Test the PetScan category depth option."""
+        gen = pagegenerators.PetScanPageGenerator(
+            ['Pywikibot'], site=self.site)
+        self.assertEqual(gen.opts['depth'], 0)
+
+        gen = pagegenerators.PetScanPageGenerator(
+            ['Pywikibot'], site=self.site, depth=1)
+        self.assertEqual(gen.opts['depth'], 1)
+        query = gen.buildQuery(
+            ['Pywikibot'], True, None, None, depth=2)
+        self.assertEqual(query['depth'], 2)
+
+        gen = pagegenerators.PetScanPageGenerator(
+            ['Pywikibot'], site=self.site, extra_options={'depth': 2},
+            depth=1)
+        self.assertEqual(gen.opts['depth'], 2)
+
     def test_PagesFromTitlesGenerator(self) -> None:
         """Test PagesFromTitlesGenerator."""
         self.assertFunction('PagesFromTitlesGenerator')

--
To view, visit 
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1328323?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: I59e9146282a02776f2f294061b5c1709b855f58a
Gerrit-Change-Number: 1328323
Gerrit-PatchSet: 3
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