[Pywikipedia-l] SVN: [6014] branches/rewrite/pywikibot/site.py
russblau at svn.wikimedia.org
russblau at svn.wikimedia.org
Thu Oct 23 21:56:01 UTC 2008
Revision: 6014
Author: russblau
Date: 2008-10-23 21:56:01 +0000 (Thu, 23 Oct 2008)
Log Message:
-----------
better handling of sysop accounts; add new randompages parameter
Modified Paths:
--------------
branches/rewrite/pywikibot/site.py
Modified: branches/rewrite/pywikibot/site.py
===================================================================
--- branches/rewrite/pywikibot/site.py 2008-10-23 21:55:14 UTC (rev 6013)
+++ branches/rewrite/pywikibot/site.py 2008-10-23 21:56:01 UTC (rev 6014)
@@ -100,7 +100,7 @@
# to implement a specific interface, define a Site class that inherits
# from this
- def __init__(self, code, fam=None, user=None):
+ def __init__(self, code, fam=None, user=None, sysop=None):
"""
@param code: the site's language code
@type code: str
@@ -108,6 +108,8 @@
@type fam: str or Family
@param user: bot user name (optional)
@type user: str
+ @param sysop: sysop account user name (optional)
+ @type sysop: str
"""
self.__code = code.lower()
@@ -133,7 +135,7 @@
raise NoSuchSite("Language %s does not exist in family %s"
% (self.__code, self.__family.name))
- self._username = user
+ self._username = [user, sysop]
# following are for use with lock_page and unlock_page methods
self._pagemutex = threading.Lock()
@@ -184,8 +186,10 @@
def user(self):
"""Return the currently-logged in bot user, or None."""
- if self.logged_in():
- return self._username
+ if self.logged_in(True):
+ return self._username[True]
+ elif self.logged_in(False):
+ return self._username[False]
return None
def __getattr__(self, attr):
@@ -480,7 +484,7 @@
@param sysop: if True, require sysop privileges.
"""
- if self.userinfo['name'] != self._username:
+ if self.userinfo['name'] != self._username[sysop]:
return False
return (not sysop) or 'sysop' in self.userinfo['groups']
@@ -499,13 +503,13 @@
self._getsiteinfo()
# check whether a login cookie already exists for this user
if hasattr(self, "_userinfo"):
- if self.userinfo['name'] == self._username:
+ if self.userinfo['name'] == self._username[sysop]:
return
if not self.logged_in(sysop):
loginMan = api.LoginManager(site=self, sysop=sysop,
- user=self._username)
+ user=self._username[sysop])
if loginMan.login(retry = True):
- self._username = loginMan.username
+ self._username[sysop] = loginMan.username
if hasattr(self, "_userinfo"):
del self._userinfo
self.getuserinfo()
@@ -526,8 +530,10 @@
- blockinfo: present if user is blocked (dict)
"""
- if not hasattr(self, "_userinfo") or "rights" not in self._userinfo \
- or self._userinfo['name'] != self._username:
+ if (not hasattr(self, "_userinfo")
+ or "rights" not in self._userinfo
+ or self._userinfo['name']
+ != self._username["sysop" in self._userinfo["groups"]]):
uirequest = api.Request(
site=self,
action="query",
@@ -1854,7 +1860,7 @@
usprop="blockinfo|groups|editcount|registration")
return usgen
- def randompages(self, limit=1, namespaces=None):
+ def randompages(self, limit=1, namespaces=None, redirects=False):
"""Iterate a number of random pages.
Pages are listed in a fixed sequence, only the starting point is
@@ -1862,6 +1868,8 @@
@param limit: the maximum number of pages to iterate (default: 1)
@param namespaces: only iterate pages in these namespaces.
+ @param redirects: if True, include only redirect pages in results
+ (default: include only non-redirects)
"""
rngen = api.PageGenerator("random", site=self)
@@ -1871,6 +1879,8 @@
for ns in namespaces)
elif namespaces is not None:
rngen.request["grnnamespace"] = str(namespaces)
+ if redirects:
+ rngen.request["grnredirect"] = ""
return rngen
# catalog of editpage error codes, for use in generating messages
More information about the Pywikipedia-l
mailing list