Xqt has submitted this change. ( 
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1332201?usp=email )

Change subject: pagegenerators: Keep preload group size per site
......................................................................

pagegenerators: Keep preload group size per site

Keep the requested size unchanged when a site's API limit is lower.

Calculate effective batch sizes independently for each site's buffer.

Change-Id: I1c809208a25c8f88a884bc0aec0b29870a496f1e
---
M pywikibot/pagegenerators/__init__.py
M tests/pagegenerators_tests.py
2 files changed, 34 insertions(+), 4 deletions(-)

Approvals:
  Xqt: Verified; Looks good to me, approved




diff --git a/pywikibot/pagegenerators/__init__.py 
b/pywikibot/pagegenerators/__init__.py
index 575f242..06acdec 100644
--- a/pywikibot/pagegenerators/__init__.py
+++ b/pywikibot/pagegenerators/__init__.py
@@ -689,16 +689,18 @@
         site = page.site
         sites.setdefault(site, []).append(page)

-        groupsize = min(groupsize, site.maxlimit)
-        if len(sites[site]) >= groupsize:
+        site_groupsize = min(groupsize, site.maxlimit)
+        if len(sites[site]) >= site_groupsize:
             # if this site is at the groupsize, process it
             group = sites.pop(site)
-            yield from site.preloadpages(group, groupsize=groupsize,
+            yield from site.preloadpages(group, groupsize=site_groupsize,
                                          quiet=quiet)

     for site, pages in sites.items():
         # process any leftover sites that never reached the groupsize
-        yield from site.preloadpages(pages, groupsize=groupsize, quiet=quiet)
+        site_groupsize = min(groupsize, site.maxlimit)
+        yield from site.preloadpages(pages, groupsize=site_groupsize,
+                                     quiet=quiet)


 def DequePreloadingGenerator(
diff --git a/tests/pagegenerators_tests.py b/tests/pagegenerators_tests.py
index e4d6f5a..99c424f 100755
--- a/tests/pagegenerators_tests.py
+++ b/tests/pagegenerators_tests.py
@@ -634,6 +634,34 @@
             self._run_test(12, 13)


+class TestDryPreloadingGenerator(TestCase):
+
+    """Dry tests for PreloadingGenerator."""
+
+    net = False
+
+    def test_groupsize_per_site(self) -> None:
+        """Test that each site keeps its own preload group size."""
+        low_site = mock.Mock(maxlimit=2)
+        high_site = mock.Mock(maxlimit=5)
+        low_site.preloadpages.side_effect = (
+            lambda pages, **kwargs: iter(pages))
+        high_site.preloadpages.side_effect = (
+            lambda pages, **kwargs: iter(pages))
+
+        low_pages = [mock.Mock(site=low_site) for _ in range(2)]
+        high_pages = [mock.Mock(site=high_site) for _ in range(3)]
+        pages = [low_pages[0], high_pages[0], low_pages[1],
+                 *high_pages[1:]]
+
+        list(PreloadingGenerator(pages, groupsize=5))
+
+        low_site.preloadpages.assert_called_once_with(
+            low_pages, groupsize=2, quiet=False)
+        high_site.preloadpages.assert_called_once_with(
+            high_pages, groupsize=5, quiet=False)
+
+
 class TestPreloadingGenerator(DefaultSiteTestCase):

     """Test preloading generator on lists."""

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