Revision: 4776 Author: rotem Date: 2007-12-29 07:47:42 +0000 (Sat, 29 Dec 2007)
Log Message: ----------- Move retries to Special:Allmessages, to avoid problems when the MediaWiki messages don't exist and don't have a textarea.
Modified Paths: -------------- trunk/pywikipedia/wikipedia.py
Modified: trunk/pywikipedia/wikipedia.py =================================================================== --- trunk/pywikipedia/wikipedia.py 2007-12-29 00:56:31 UTC (rev 4775) +++ trunk/pywikipedia/wikipedia.py 2007-12-29 07:47:42 UTC (rev 4776) @@ -3978,33 +3978,19 @@ global mwpage, tree if key not in self._mediawiki_messages.keys() \ and not hasattr(self, "_phploaded"): - retry_idle_time = 1 - while True: - get_throttle() - mwpage = self.getUrl("%s?title=%s:%s&action=edit" - % (self.path(), urllib.quote( - self.namespace(8).replace(' ', '_').encode( - self.encoding())), - key)) - tree = BeautifulSoup(mwpage, - convertEntities=BeautifulSoup.HTML_ENTITIES, - parseOnlyThese=SoupStrainer("textarea")) - if tree.textarea is None: - # We assume that the server is down. - # Wait some time, then try again. - output( -u"""WARNING: No text area found on %s%s?title=MediaWiki:%s&action=edit. -Maybe the server is down. Retrying in %i minutes...""" - % (self.hostname(), self.path(), key, retry_idle_time) - ) - time.sleep(retry_idle_time * 60) - # Next time wait longer, but not longer than half an hour - retry_idle_time *= 2 - if retry_idle_time > 30: - retry_idle_time = 30 - continue - break - value = tree.textarea.string.strip() + get_throttle() + mwpage = self.getUrl("%s?title=%s:%s&action=edit" + % (self.path(), urllib.quote( + self.namespace(8).replace(' ', '_').encode( + self.encoding())), + key)) + tree = BeautifulSoup(mwpage, + convertEntities=BeautifulSoup.HTML_ENTITIES, + parseOnlyThese=SoupStrainer("textarea")) + if tree.textarea is not None: + value = tree.textarea.string.strip() + else: + value = None if value: self._mediawiki_messages[key] = value else: @@ -4013,12 +3999,28 @@ if verbose: output( u"Retrieving mediawiki messages from Special:Allmessages") - get_throttle() - phppage = self.getUrl(self.get_address("Special:Allmessages") + retry_idle_time = 1 + while True: + get_throttle() + phppage = self.getUrl(self.get_address("Special:Allmessages") + "&ot=php") - Rphpvals = re.compile(r"(?ms)'([^']*)' => '(.*?[^\])',") - for (phpkey, phpval) in Rphpvals.findall(phppage): - self._mediawiki_messages[str(phpkey)] = phpval + Rphpvals = re.compile(r"(?ms)'([^']*)' => '(.*?[^\])',") + count = 0 + for (phpkey, phpval) in Rphpvals.findall(phppage): + count += 1 + self._mediawiki_messages[str(phpkey)] = phpval + if count == 0: + # No messages could be added. + # We assume that the server is down. + # Wait some time, then try again. + output('WARNING: No messages found it Special:Allmessages. Maybe the server is down. Retrying in %i minutes...' % retry_idle_time) + time.sleep(retry_idle_time * 60) + # Next time wait longer, but not longer than half an hour + retry_idle_time *= 2 + if retry_idle_time > 30: + retry_idle_time = 30 + continue + break self._phploaded = True
if self._mediawiki_messages[key] is None:
pywikipedia-l@lists.wikimedia.org