Revision: 7448 Author: alexsh Date: 2009-10-13 14:00:29 +0000 (Tue, 13 Oct 2009)
Log Message: ----------- Site().mediawiki_message(): disable diskcache in API mode for long time to load messages (might fix bug #2873605)
Modified Paths: -------------- trunk/pywikipedia/wikipedia.py
Modified: trunk/pywikipedia/wikipedia.py =================================================================== --- trunk/pywikipedia/wikipedia.py 2009-10-13 12:58:04 UTC (rev 7447) +++ trunk/pywikipedia/wikipedia.py 2009-10-13 14:00:29 UTC (rev 7448) @@ -5605,8 +5605,14 @@ if self.versionnumber() < 12: usePHP = True else: - if config.use_api: - api = True + try: + if config.use_api: + x = self.api_address() + del x + api = True + except NotImplementedError: + api = False + usePHP = False elementtree = True try: @@ -5622,7 +5628,7 @@ output(u'Elementtree was not found, using BeautifulSoup instead') elementtree = False
- if config.use_diskcache: + if config.use_diskcache and not api: import diskcache _dict = lambda x : diskcache.CachedReadOnlyDictI(x, prefix = "msg-%s-%s-" % (self.family.name, self.lang)) else: @@ -5632,19 +5638,19 @@ while True: if api and self.versionnumber() >= 12 or self.versionnumber() >= 16: params = { - 'action':'query', - 'meta':'allmessages', + 'action': 'query', + 'meta': 'allmessages', + 'ammessages': key, } - try: - datas = query.GetData(params, self)['query']['allmessages'] - self._mediawiki_messages = _dict([(tag['name'].lower(), tag['*']) - for tag in datas if not 'missing' in tag]) - except NotImplementedError: - api = False - continue + datas = query.GetData(params, self)['query']['allmessages'][0] + if "missing" in datas: + raise KeyError("message is not exist.") + elif datas['name'] not in self._mediawiki_messages: + self._mediawiki_messages[datas['name']] = datas['*'] + #self._mediawiki_messages = _dict([(tag['name'].lower(), tag['*']) + # for tag in datas if not 'missing' in tag]) elif usePHP: - phppage = self.getUrl(self.get_address("Special:Allmessages") - + "&ot=php") + phppage = self.getUrl(self.get_address("Special:Allmessages") + "&ot=php") Rphpvals = re.compile(r"(?ms)'([^']*)' => '(.*?[^\])',") # Previous regexp don't match empty messages. Fast workaround... phppage = re.sub("(?m)^('.*?' =>) '',", r"\1 ' ',", phppage) @@ -5652,8 +5658,7 @@ html2unicode(message.replace("\'", "'"))) for (name, message) in Rphpvals.findall(phppage)]) else: - xml = self.getUrl(self.get_address("Special:Allmessages") - + "&ot=xml") + xml = self.getUrl(self.get_address("Special:Allmessages") + "&ot=xml") # xml structure is : # <messages lang="fr"> # <message name="about">À propos</message> @@ -7839,7 +7844,7 @@ get_throttle.drop() except NameError: pass - if config.use_diskcache: + if config.use_diskcache and not config.use_api: for site in _sites.itervalues(): if site._mediawiki_messages: try:
pywikipedia-svn@lists.wikimedia.org