jenkins-bot has submitted this change and it was merged.
Change subject: Bug 58944 - site.mediawiki_message: support multiple messages ......................................................................
Bug 58944 - site.mediawiki_message: support multiple messages
Added site.mediawiki_messages() added to handle request of several messages.
https://bugzilla.wikimedia.org/show_bug.cgi?id=58944
Change-Id: I64710f67c04a0d2b93c70d9edd472f8bab4ce309 --- M pywikibot/site.py M tests/site_tests.py 2 files changed, 42 insertions(+), 14 deletions(-)
Approvals: Mpaa: Looks good to me, but someone else must approve Xqt: Looks good to me, approved Merlijn van Deen: Looks good to me, but someone else must approve jenkins-bot: Verified
diff --git a/pywikibot/site.py b/pywikibot/site.py index a090d04..d51ae54 100644 --- a/pywikibot/site.py +++ b/pywikibot/site.py @@ -997,24 +997,42 @@ self.login(sysop) return 'hasmsg' in self._userinfo
+ def mediawiki_messages(self, keys): + """Return the MediaWiki message text for each 'key' in keys + in a dict: + -. dict['key'] = text message + + """ + + if not all(_key in self._msgcache for _key in keys): + msg_query = api.QueryGenerator( + site=self, + meta="allmessages", + ammessages='|'.join(keys), + ) + for _key in keys: + for msg in msg_query: + if msg['name'] == _key and not 'missing' in msg: + self._msgcache[_key] = msg['*'] + break + else: + raise KeyError("Site %(self)s has no message '%(_key)s'" + % locals()) + + return dict((_key, self._msgcache[_key]) for _key in keys) + def mediawiki_message(self, key): - """Return the MediaWiki message text for key "key" """ - if not key in self._msgcache: - msg_query = api.QueryGenerator(site=self, meta="allmessages", - ammessages=key) - for msg in msg_query: - if msg['name'] == key and not 'missing' in msg: - self._msgcache[key] = msg['*'] - break - else: - raise KeyError("Site %(self)s has no message '%(key)s'" - % locals()) - return self._msgcache[key] + """Return the MediaWiki message text for key 'key' """ + return self.mediawiki_messages([key])[key]
def has_mediawiki_message(self, key): - """Return True iff this site defines a MediaWiki message for 'key'.""" + """Return True if this site defines a MediaWiki message for 'key' """ + return self.has_all_mediawiki_messages([key]) + + def has_all_mediawiki_messages(self, keys): + """Return True if this site defines MediaWiki messages for all 'keys'; False otherwise.""" try: - v = self.mediawiki_message(key) + v = self.mediawiki_messages(keys) return True except KeyError: return False diff --git a/tests/site_tests.py b/tests/site_tests.py index ce7b930..ee86e70 100644 --- a/tests/site_tests.py +++ b/tests/site_tests.py @@ -144,12 +144,22 @@ except pywikibot.NoUsername: pywikibot.warning( "Cannot test Site methods for sysop; no sysop account configured.") + for msg in ("1movedto2", "about", "aboutpage", "aboutsite", "accesskey-n-portal"): self.assertTrue(mysite.has_mediawiki_message(msg)) self.assertType(mysite.mediawiki_message(msg), basestring) self.assertFalse(mysite.has_mediawiki_message("nosuchmessage")) self.assertRaises(KeyError, mysite.mediawiki_message, "nosuchmessage") + + msg = ("1movedto2", "about", "aboutpage") + self.assertType(mysite.mediawiki_messages(msg), dict) + self.assertTrue(mysite.mediawiki_messages(msg)) + + msg = ("1movedto2", "about", "aboutpage", "nosuchmessage") + self.assertFalse(mysite.has_all_mediawiki_messages(msg)) + self.assertRaises(KeyError, mysite.mediawiki_messages, msg) + self.assertType(mysite.getcurrenttimestamp(), basestring) self.assertType(mysite.siteinfo, dict) self.assertType(mysite.case(), basestring)
pywikibot-commits@lists.wikimedia.org