Revision: 7730
Author:   alexsh
Date:     2009-12-03 09:57:03 +0000 (Thu, 03 Dec 2009)

Log Message:
-----------
Site().siteinfo(): add dump for return all info, mass siprop single output 
handle.

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

Modified: trunk/pywikipedia/wikipedia.py
===================================================================
--- trunk/pywikipedia/wikipedia.py      2009-12-02 16:50:10 UTC (rev 7729)
+++ trunk/pywikipedia/wikipedia.py      2009-12-03 09:57:03 UTC (rev 7730)
@@ -5210,6 +5210,7 @@
                 raise NoSuchSite("Language %s does not exist in family 
%s"%(self.lang,self.family.name))
 
         self._mediawiki_messages = {}
+        self._info = {}
         self.nocapitalize = self.lang in self.family.nocapitalize
         self.user = user
         self._userData = [False, False]
@@ -6064,42 +6065,61 @@
                 # Token not found
                 output(u'WARNING: Token not found on %s. You will not be able 
to edit any page.' % self)
     
-    def siteinfo(self, key = 'general', force = False): #, dump = False
+    def siteinfo(self, key = 'general', force = False, dump = False):
         """Get Mediawiki Site informations by API
            dump - return all siteinfo datas
+            
+           some siprop params is huge data for MediaWiki, they take long times 
to read by testment.
+           these params could get, but only one by one.
+           
         """
-        if hasattr(self, '_info') and key in self._info and not force:
-            return self._info[key]
+        # protection for key in other datatype
+        if type(key) not in [str, unicode]:
+           key = 'general'
         
+        if self._info and key in self._info and not force:
+            if dump:
+                return self._info
+            else:
+                return self._info[key]
+        
         params = {
             'action':'query',
             'meta':'siteinfo',
             'siprop':['general', 'namespaces', ],
         }
+        #ver 1.10 handle
         if self.versionnumber() > 10:
             params['siprop'].extend(['statistics', ])
-            #'specialpagealiases', 'interwikimap', 'namespacealiases', 
'usergroups', 
+            if key in ['specialpagealiases', 'interwikimap', 
'namespacealiases', 'usergroups', ]:
+                if verbose: print 'getting huge siprop %s...' % key
+                params['siprop'] = [key]
+        
+        #ver 1.13 handle
         if self.versionnumber() > 13:
-            params['siprop'].extend(['fileextensions', 'rightsinfo', ])
-            #'magicwords', 'extensions', 
+            if key not in ['specialpagealiases', 'interwikimap', 
'namespacealiases', 'usergroups', ]:
+                params['siprop'].extend(['fileextensions', 'rightsinfo', ])
+            if key in ['magicwords', 'extensions', ]:
+                if verbose: print 'getting huge siprop %s...' % key
+                params['siprop'] = [key]
         try:
             data = query.GetData(params, self)['query']
-            if not hasattr(self, '_info'):
-                self._info = data
+        except NotImplementedError:
+            return None
+        
+        if not hasattr(self, '_info'):
+            self._info = data
+        else:
+            for k, v in data.iteritems():
+                self._info[k] = v 
+        #data pre-process
+        try:
+            if dump:
+                return self._info
             else:
-                for k, v in data.iteritems():
-                    #if k in self._info:  
-                    #    if v != self._info[k]: self._info[k] = v 
-                    #else:
-                    self._info[k] = v 
-                    
-            try:
                 return self._info[key]
-            except KeyError:
-                return None
-        except NotImplementedError:
-            self._info = {}
-            return False
+        except KeyError:
+            return None
         
     
     def mediawiki_message(self, key, forceReload = False):



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

Reply via email to