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]