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 mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/pywikipedia-svn