Yurik has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/153852

Change subject: cleaned up api lib
......................................................................

cleaned up api lib

Change-Id: I11081c38634ce21e7ca5db3eb62d6e3d116b1ebc
---
M maintenance/api.py
1 file changed, 41 insertions(+), 35 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/ZeroPortal 
refs/changes/52/153852/1

diff --git a/maintenance/api.py b/maintenance/api.py
index 7125c87..d980ab9 100644
--- a/maintenance/api.py
+++ b/maintenance/api.py
@@ -2,9 +2,9 @@
 import json
 import requests
 from requests.structures import CaseInsensitiveDict
-from collections import Iterable
 import os
 import sys
+
 try:
     import urllib.parse as urlparse
 except ImportError:
@@ -15,6 +15,7 @@
     """
     Basic console logger. Most frameworks would probably want to implement 
their own.
     """
+
     def __init__(self, verbosity=5):
         self.verbosity = verbosity
 
@@ -32,19 +33,23 @@
     """
     Any error reported by the API is included in this exception
     """
+
     def __init__(self, message, data):
         self.message = message
         self.data = data
 
     def __str__(self):
-        return message + ': ' + json.dumps(self.data)
+        return self.message + ': ' + json.dumps(self.data)
+
 
 class ApiPagesModifiedError(ApiError):
     """
     This error is thrown by queryPage() if revision of some pages was changed 
between calls.
     """
+
     def __init__(self, data):
-        super(ApiError,self).__init__('Pages modified during iteration', data)
+        super(ApiError, self).__init__('Pages modified during iteration', data)
+
 
 class Site(object):
     """
@@ -63,9 +68,8 @@
             script = os.path.abspath(sys.modules['__main__'].__file__)
         except (KeyError, AttributeError):
             script = sys.executable
-        path, file = os.path.split(script)
-        self.headers = CaseInsensitiveDict({u'User-Agent': u'%s-%s 
BareboneMWReq/0.1' % (os.path.basename(path), file)})
-        # self.headers = {u'User-Agent': u'test'} #u'%s-%s BareboneMWReq/0.1' 
% (os.path.basename(path), file)}
+        path, f = os.path.split(script)
+        self.headers = CaseInsensitiveDict({u'User-Agent': u'%s-%s 
BareboneMWReq/0.1' % (os.path.basename(path), f)})
         if headers:
             self.headers.update(headers)
 
@@ -97,11 +101,11 @@
             if k in kwargs:
                 del kwargs[k]
 
-        for k, v in kwargs.items():
+        for k, val in kwargs.items():
             # Only support the well known types.
             # Everything else should be client's responsibility
-            if isinstance(v, list) or isinstance(v, tuple):
-                kwargs[k] = '|'.join(v)
+            if isinstance(val, list) or isinstance(val, tuple):
+                kwargs[k] = '|'.join(val)
 
         # Make server call
         kwargs['action'] = action
@@ -131,7 +135,7 @@
 
     def query(self, **kwargs):
         """
-        Call Query API with given paramaters, and yield all results returned
+        Call Query API with given parameters, and yield all results returned
         by the server, properly handling result continuation.
         """
         if 'continue' not in kwargs:
@@ -151,33 +155,33 @@
         """
         Query the server and return all page objects individually.
         """
-        incomplete={}
-        changed=set()
+        incomplete = {}
+        changed = set()
         for result in self.query(**kwargs):
             if 'pages' not in result:
                 raise ApiError('Missing pages element in query result', result)
 
             finished = incomplete.copy()
-            for id, page in result['pages'].items():
-                if id in changed:
+            for pageId, page in result['pages'].items():
+                if pageId in changed:
                     continue
-                if id in incomplete:
-                    del finished[id] # If server returned it => not finished
-                    p = incomplete[id]
+                if pageId in incomplete:
+                    del finished[pageId]  # If server returned it => not 
finished
+                    p = incomplete[pageId]
                     if 'lastrevid' in page and p['lastrevid'] != 
page['lastrevid']:
                         # someone else modified this page, it must be 
requested anew separately
-                        changed.add(id)
-                        del incomplete[id]
+                        changed.add(pageId)
+                        del incomplete[pageId]
                         continue
                     self._mergePage(p, page)
                 else:
                     p = page
-                incomplete[id] = p
-            for id, page in finished.items():
-                if id not in changed:
+                incomplete[pageId] = p
+            for pageId, page in finished.items():
+                if pageId not in changed:
                     yield page
 
-        for id, page in incomplete.items():
+        for pageId, page in incomplete.items():
             yield page
         if changed:
             # some pages have been changed between api calls, notify caller
@@ -185,22 +189,22 @@
 
     def _mergePage(self, a, b):
         """
-        Recursivelly merge two page objects
+        Recursively merge two page objects
         """
         for k in b:
-            v = b[k]
+            val = b[k]
             if k in a:
-                if isinstance(v, dict):
-                    self._mergePage(a[k], v)
-                elif isinstance(v, list):
-                    a[k] = a[k] + v
+                if isinstance(val, dict):
+                    self._mergePage(a[k], val)
+                elif isinstance(val, list):
+                    a[k] = a[k] + val
                 else:
-                    a[k] = v
+                    a[k] = val
             else:
-                a[k] = v
+                a[k] = val
 
-    def token(self, type='edit'):
-        return self('tokens', type=type)['tokens'][type+'token']
+    def token(self, tokenType='edit'):
+        return self('tokens', type=tokenType)['tokens'][tokenType + 'token']
 
     def request(self, method, forceSSL=False, headers=None, **request_kw):
         """Make either a low level request to the server"""
@@ -225,15 +229,17 @@
             self.log(5, dbg)
         return r
 
+
 def wikimedia(language='en', site='wikipedia', scheme='http', session=None, 
log=None):
     """Create a Site object for Wikimedia Foundation site in this format:
         [scheme]://[language].[site].org/w/api.php
     """
     return Site(scheme + '://' + language + '.' + site + '.org/w/api.php', 
session, log)
 
+
 if __name__ == "__main__":
     w = wikimedia()
-    #r = w.query(meta='siteinfo')
-    for v in w.queryPages(titles=('Test','API'), prop=('links','info'), 
pllimit=20):
+    # r = w.query(meta='siteinfo')
+    for v in w.queryPages(titles=('Test', 'API'), prop=('links', 'info'), 
pllimit=20):
         print(v)
     print('end')

-- 
To view, visit https://gerrit.wikimedia.org/r/153852
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I11081c38634ce21e7ca5db3eb62d6e3d116b1ebc
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/ZeroPortal
Gerrit-Branch: master
Gerrit-Owner: Yurik <yu...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to