jenkins-bot has submitted this change and it was merged.
Change subject: Deprecate fetching all mediawiki_messages using *
......................................................................
Deprecate fetching all mediawiki_messages using *
Support for fetching multiple messages was added for T60944
in d209142, with b34209d allowing '*' to be used to fetch all messages.
It would be unusual to actually need to use all messages.
More usual would be to need to fetch all message names, which may
be supported using amnocontent.
Move the '*' tests to a dry site, as they are running
particularly slow on ar.wikipedia causing timeouts.
Bug: T111479
Change-Id: Ideefaa198c44bde07d90f23f53991bd3ab81585d
---
M pywikibot/site.py
M tests/site_tests.py
M tests/utils.py
3 files changed, 37 insertions(+), 12 deletions(-)
Approvals:
John Vandenberg: Looks good to me, but someone else must approve
Mpaa: Looks good to me, approved
jenkins-bot: Verified
diff --git a/pywikibot/site.py b/pywikibot/site.py
index e9d1100..d39178e 100644
--- a/pywikibot/site.py
+++ b/pywikibot/site.py
@@ -2149,7 +2149,8 @@
def mediawiki_messages(self, keys):
"""Fetch the text of a set of MediaWiki messages.
- If keys is '*' or ['*'], all messages will be fetched.
+ If keys is '*' or ['*'], all messages will be fetched.
(deprecated)
+
The returned dict uses each key to store the associated message.
@param keys: MediaWiki messages to fetch
@@ -2157,6 +2158,10 @@
@return: dict
"""
+ if keys == '*' or keys == ['*']:
+ issue_deprecation_warning('mediawiki_messages("*")',
+ 'specific messages', 2)
+
if not all(_key in self._msgcache for _key in keys):
parameters = {'meta': 'allmessages',
'ammessages': keys,
diff --git a/tests/site_tests.py b/tests/site_tests.py
index b7c7038..0e13503 100644
--- a/tests/site_tests.py
+++ b/tests/site_tests.py
@@ -157,6 +157,19 @@
self.assertOneDeprecationParts('Calling the namespaces property',
'it directly')
+ def test_messages_star(self):
+ """Test that fetching all messages is
deprecated."""
+ # Load all messages and check that '*' is not a valid key.
+ mysite = self.site
+ self.assertIsInstance(mysite.mediawiki_messages('*'), dict)
+ self.assertOneDeprecationParts('mediawiki_messages("*")',
+ 'specific messages')
+
+ self.assertEqual(len(mysite.mediawiki_messages(['*'])), 1)
+ self.assertOneDeprecation()
+ self.assertEqual(mysite.mediawiki_messages('*'), {'*': 'dummy
entry'})
+ self.assertOneDeprecation()
+
class TestBaseSiteProperties(TestCase):
@@ -315,13 +328,16 @@
for key in ns
for item in mysite.namespace(key, True)))
- def testApiMethods(self):
- """Test generic ApiSite methods."""
+ def test_user_attributes_return_types(self):
+ """Test returned types of user attributes."""
mysite = self.get_site()
self.assertIsInstance(mysite.logged_in(), bool)
self.assertIsInstance(mysite.logged_in(True), bool)
self.assertIsInstance(mysite.userinfo, dict)
+ def test_messages(self):
+ """Test MediaWiki: messages."""
+ mysite = self.get_site()
for msg in ('about', 'aboutpage', 'aboutsite',
'accesskey-n-portal'):
self.assertTrue(mysite.has_mediawiki_message(msg))
self.assertIsInstance(mysite.mediawiki_message(msg), basestring)
@@ -329,28 +345,31 @@
self.assertRaises(KeyError, mysite.mediawiki_message, "nosuchmessage")
msg = ('about', 'aboutpage')
+ about_msgs = self.site.mediawiki_messages(msg)
self.assertIsInstance(mysite.mediawiki_messages(msg), dict)
self.assertTrue(mysite.mediawiki_messages(msg))
+ self.assertEqual(len(about_msgs), 2)
+ self.assertIn(msg[0], about_msgs)
+
+ # mediawiki_messages must be given a list; using a string will split it
+ self.assertRaises(KeyError, self.site.mediawiki_messages, 'about')
msg = ("nosuchmessage1", "about", "aboutpage",
"nosuchmessage")
self.assertFalse(mysite.has_all_mediawiki_messages(msg))
self.assertRaises(KeyError, mysite.mediawiki_messages, msg)
-
- # Load all messages and check that '*' is not a valid key.
- self.assertIsInstance(mysite.mediawiki_messages('*'), dict)
- self.assertGreater(len(mysite.mediawiki_messages(['*'])), 10)
- self.assertNotIn('*', mysite.mediawiki_messages(['*']))
self.assertIsInstance(mysite.server_time(), pywikibot.Timestamp)
ts = mysite.getcurrenttimestamp()
self.assertIsInstance(ts, basestring)
self.assertRegex(ts, r'(19|20)\d\d[0-1]\d[0-3]\d[0-2]\d[0-5]\d[0-5]\d')
- self.assertIsInstance(mysite.siteinfo, pywikibot.site.Siteinfo)
self.assertIsInstance(mysite.months_names, list)
- ver = mysite.version()
- self.assertIsInstance(ver, basestring)
- self.assertIsNotNone(re.search('^\d+\.\d+.*?\d*$', ver))
+ self.assertEqual(len(mysite.months_names), 12)
+ self.assertTrue(all(isinstance(month, tuple)
+ for month in mysite.months_names))
+ self.assertTrue(all(len(month) == 2
+ for month in mysite.months_names))
+
self.assertEqual(mysite.list_to_text(('pywikibot',)),
'pywikibot')
def testEnglishSpecificMethods(self):
diff --git a/tests/utils.py b/tests/utils.py
index 79a9244..54731af 100644
--- a/tests/utils.py
+++ b/tests/utils.py
@@ -348,6 +348,7 @@
if self.family.name == 'wikisource':
extensions.append({'name': 'ProofreadPage'})
self._siteinfo._cache['extensions'] = (extensions, True)
+ self._msgcache = {'*': 'dummy entry'}
def _build_namespaces(self):
return Namespace.builtin_namespaces(case=self.siteinfo['case'])
--
To view, visit
https://gerrit.wikimedia.org/r/236245
To unsubscribe, visit
https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ideefaa198c44bde07d90f23f53991bd3ab81585d
Gerrit-PatchSet: 1
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: John Vandenberg <jayvdb(a)gmail.com>
Gerrit-Reviewer: John Vandenberg <jayvdb(a)gmail.com>
Gerrit-Reviewer: Ladsgroup <ladsgroup(a)gmail.com>
Gerrit-Reviewer: Mpaa <mpaa.wiki(a)gmail.com>
Gerrit-Reviewer: Xqt <info(a)gno.de>
Gerrit-Reviewer: jenkins-bot <>