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

Change subject: pagegenerators: Reuse Wikidata dbname
......................................................................

pagegenerators: Reuse Wikidata dbname

Resolve the target site's database name once for the lifetime of the Wikidata 
page generator.

Reuse it across batched requests and sitelink filtering.

Change-Id: I806fb5afecf77875eef31094e8d9c7afd35113e6
---
M pywikibot/pagegenerators/_generators.py
M tests/pagegenerators_tests.py
2 files changed, 32 insertions(+), 3 deletions(-)

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




diff --git a/pywikibot/pagegenerators/_generators.py 
b/pywikibot/pagegenerators/_generators.py
index 456b262..ca95234 100644
--- a/pywikibot/pagegenerators/_generators.py
+++ b/pywikibot/pagegenerators/_generators.py
@@ -1297,17 +1297,18 @@
     :param site: Site for generator results.
     """
     repo = site.data_repository()
+    dbname = site.dbName()
     for batch in batched(gen, 50):
         req = {'ids': [item.id for item in batch],
-               'sitefilter': site.dbName(),
+               'sitefilter': dbname,
                'action': 'wbgetentities',
                'props': 'sitelinks'}

         wbrequest = repo.simple_request(**req)
         wbdata = wbrequest.submit()
         entities = (item for item in wbdata['entities'].values() if
-                    'sitelinks' in item and site.dbName() in item['sitelinks'])
-        sitelinks = (item['sitelinks'][site.dbName()]['title']
+                    'sitelinks' in item and dbname in item['sitelinks'])
+        sitelinks = (item['sitelinks'][dbname]['title']
                      for item in entities)
         for sitelink in sitelinks:
             yield pywikibot.Page(site, sitelink)
diff --git a/tests/pagegenerators_tests.py b/tests/pagegenerators_tests.py
index cd5f87d..d0146a1 100755
--- a/tests/pagegenerators_tests.py
+++ b/tests/pagegenerators_tests.py
@@ -91,6 +91,34 @@
         gen = pagegenerators.PagesFromTitlesGenerator(self.titles, self.site)
         self.assertPageTitlesEqual(gen, self.titles)

+    def test_wikidata_page_generator_reuses_dbname(self) -> None:
+        """Test that the site database name is resolved once."""
+        site = mock.Mock()
+        site.dbName.return_value = 'enwiki'
+        repo = site.data_repository.return_value
+        requests = [mock.Mock(), mock.Mock()]
+        requests[0].submit.return_value = {
+            'entities': {
+                'Q1': {'sitelinks': {'enwiki': {'title': 'First'}}},
+            },
+        }
+        requests[1].submit.return_value = {
+            'entities': {
+                'Q51': {'sitelinks': {'enwiki': {'title': 'Second'}}},
+            },
+        }
+        repo.simple_request.side_effect = requests
+        items = [mock.Mock(id=f'Q{i}') for i in range(1, 52)]
+
+        with mock.patch.object(pywikibot, 'Page',
+                               side_effect=lambda _, title: title):
+            pages = list(pagegenerators.WikidataPageFromItemGenerator(
+                items, site))
+
+        self.assertEqual(pages, ['First', 'Second'])
+        self.assertEqual(repo.simple_request.call_count, 2)
+        site.dbName.assert_called_once_with()
+
     def test_NamespaceFilterPageGenerator(self) -> None:
         """Test NamespaceFilterPageGenerator."""
         self.assertFunction('NamespaceFilterPageGenerator')

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