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]