Revision: 7512
Author:   alexsh
Date:     2009-10-19 16:06:13 +0000 (Mon, 19 Oct 2009)

Log Message:
-----------
fix _load() ver 1.11 query bug, newpages dict and combine randompage and 
randomredirectpage

Modified Paths:
--------------
    trunk/pywikipedia/wikipedia.py

Modified: trunk/pywikipedia/wikipedia.py
===================================================================
--- trunk/pywikipedia/wikipedia.py      2009-10-19 15:36:45 UTC (rev 7511)
+++ trunk/pywikipedia/wikipedia.py      2009-10-19 16:06:13 UTC (rev 7512)
@@ -5823,8 +5823,7 @@
         if (not self._mediawiki_messages) or forceReload:
             api = False
             if verbose:
-                output(
-                  u"Retrieving mediawiki messages from Special:Allmessages")
+                output(u"Retrieving mediawiki messages from 
Special:Allmessages")
             # Only MediaWiki r27393/1.12 and higher support XML output for 
Special:Allmessages
             if self.versionnumber() < 12:
                 usePHP = True
@@ -5860,7 +5859,7 @@
 
             retry_idle_time = 1
             while True:
-                if api and self.versionnumber() >= 12 or self.versionnumber() 
>= 16:
+                if api and self.versionnumber() >= 12:
                     params = {
                         'action': 'query',
                         'meta': 'allmessages',
@@ -5964,17 +5963,22 @@
         # Get data
         # API Userinfo is available from version 1.11
         # preferencetoken available from 1.14
-        if config.use_api and self.versionnumber() >= 12:
+        if config.use_api and self.versionnumber() >= 11:
             #Query userinfo
             params = {
                 'action': 'query',
                 'meta': 'userinfo',
-                'uiprop': 
['blockinfo','groups','rights','hasmsg','ratelimits'],
+                'uiprop': ['blockinfo','groups','rights','hasmsg'],
             }
+            if self.versionnumber() >= 12:
+                params['uiprop'].append('ratelimits')
             if self.versionnumber() >= 14:
                 params['uiprop'].append('preferencestoken')
 
-            text = query.GetData(params, self, 
sysop=sysop)['query']['userinfo']
+            if self.versionnumber() == 11:
+                text = query.GetData(params, self, sysop=sysop)['userinfo']
+            else:
+                text = query.GetData(params, self, 
sysop=sysop)['query']['userinfo']
             self._getUserData(text, sysop = sysop, force = force)
         else:
             url = self.edit_address('Non-existing_page')
@@ -6058,18 +6062,16 @@
                     if np['pageid'] not in seen:
                         seen.add(np['pageid'])
                         page = Page(self, np['title'], 
defaultNamespace=np['ns'])
-                        yield page, np['timestamp'], np['timestamp'], u'', 
np['user'], np['comment']
+                        yield page, np['timestamp'], np['newlen'], u'', 
np['user'], np['comment']
             else:
                 path = self.newpages_address(n=number, namespace=namespace)
                 # The throttling is important here, so always enabled.
                 get_throttle()
                 html = self.getUrl(path)
 
-                entryR = re.compile(
-'<li[^>]*>(?P<date>.+?) \S*?<a href=".+?"'
-' title="(?P<title>.+?)">.+?</a>.+?[\(\[](?P<length>[\d,.]+)[^\)\]]*[\)\]]'
-' .?<a href=".+?" title=".+?:(?P<username>.+?)">'
-                                    )
+                entryR = re.compile('<li[^>]*>(?P<date>.+?) \S*?<a href=".+?"'
+                    ' 
title="(?P<title>.+?)">.+?</a>.+?[\(\[](?P<length>[\d,.]+)[^\)\]]*[\)\]]'
+                    ' .?<a href=".+?" title=".+?:(?P<username>.+?)">')
                 for m in entryR.finditer(html):
                     date = m.group('date')
                     title = m.group('title')
@@ -6179,8 +6181,7 @@
             path = self.ancientpages_address(n=number)
             get_throttle()
             html = self.getUrl(path)
-            entryR = re.compile(
-'<li><a href=".+?" title="(?P<title>.+?)">.+?</a> (?P<date>.+?)</li>')
+            entryR = re.compile('<li><a href=".+?" 
title="(?P<title>.+?)">.+?</a> (?P<date>.+?)</li>')
             for m in entryR.finditer(html):
                 title = m.group('title')
                 date = m.group('date')
@@ -6468,7 +6469,7 @@
             if not repeat:
                 break
 
-    def randompage(self):
+    def randompage(self, redirect = False):
         if config.use_api and self.versionnumber() >= 12:
             params = {
                 'action': 'query',
@@ -6477,32 +6478,24 @@
                 'rnlimit': '1',
                 #'': '',
             }
+            if redirect:
+                params['rnredirect'] = 1
+            
             data = query.GetData(params, self)
             return Page(self, data['query']['random'][0]['title'])
         else:
-            """Yield random page via Special:Random"""
-            html = self.getUrl(self.random_address())
+            if redirect:
+                """Yield random redirect page via Special:RandomRedirect."""
+                html = self.getUrl(self.randomredirect_address())
+            else:
+                """Yield random page via Special:Random"""
+                html = self.getUrl(self.random_address())
             m = re.search('var wgPageName = "(?P<title>.+?)";', html)
             if m is not None:
                 return Page(self, m.group('title'))
 
     def randomredirectpage(self):
-        if config.use_api and self.versionnumber() >= 12:
-            params = {
-                'action': 'query',
-                'list': 'random',
-                #'rnnamespace': '0',
-                'rnlimit': '1',
-                'rnredirect': '1',
-            }
-            data = query.GetData(params, self)
-            return Page(self, data['query']['random'][0]['title'])
-        else:
-            """Yield random redirect page via Special:RandomRedirect."""
-            html = self.getUrl(self.randomredirect_address())
-            m = re.search('var wgPageName = "(?P<title>.+?)";', html)
-            if m is not None:
-                return Page(self, m.group('title'))
+        return self.randompage(redirect = True)
 
     def allpages(self, start='!', namespace=None, includeredirects=True,
                  throttle=True):
@@ -6615,8 +6608,7 @@
                 iend = returned_html.index(end_s,ibegin + 3)
             except ValueError:
                 if monobook_error:
-                    raise ServerError(
-"Couldn't extract allpages special page. Make sure you're using MonoBook 
skin.")
+                    raise ServerError("Couldn't extract allpages special page. 
Make sure you're using MonoBook skin.")
                 else:
                     # No list of wikilinks
                     break



_______________________________________________
Pywikipedia-svn mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/pywikipedia-svn

Reply via email to