Revision: 7394
Author:   alexsh
Date:     2009-10-08 21:27:56 +0000 (Thu, 08 Oct 2009)

Log Message:
-----------
User().block() re-organize

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

Modified: trunk/pywikipedia/userlib.py
===================================================================
--- trunk/pywikipedia/userlib.py        2009-10-08 17:49:23 UTC (rev 7393)
+++ trunk/pywikipedia/userlib.py        2009-10-08 21:27:56 UTC (rev 7394)
@@ -9,7 +9,7 @@
 
 
 
-class AutoblockUserError(wikipedia.Error):
+class AutoblockUser(wikipedia.Error):
     """
     The class AutoblockUserError is an exception that is raised whenever
     an action is requested on a virtual autoblock user that's not available
@@ -18,13 +18,13 @@
 
 class BlockError(wikipedia.Error): pass
 
-class AlreadyBlockedError(BlockError): pass
+class AlreadyBlocked(BlockError): pass
 
 class UnblockError(wikipedia.Error): pass
 
 class BlockIDError(UnblockError): pass
 
-class AlreadyUnblockedError(UnblockError): pass
+class AlreadyUnblocked(UnblockError): pass
 
 class User(object):
     """
@@ -52,6 +52,12 @@
         self._registrationTime = -1
         #if self.site().versionnumber() >= 16:
         #    self._urToken = None
+        if name[0] == '#':
+            #This user is probably being queried for purpose of lifting an 
autoblock.
+            wikipedia.output("This is an autoblock ID, you can only use to 
unblock it.")
+            
+            
+
     
     def site(self):
         return self._site
@@ -83,6 +89,8 @@
             self._registrationTime = 0
         
         self._blocked = ('blockedby' in data)
+        #if self._blocked: #Get block ID
+        
     
     def registrationTime(self, force = False):
         if not hasattr(self, '_registrationTime') or force:
@@ -108,7 +116,7 @@
         if self.name()[0] == '#':
             #This user is probably being queried for purpose of lifting
             #an autoblock, so has no user pages per se.
-            raise AutoblockUserError
+            raise AutoblockUser
         if subpage:
             subpage = '/' + subpage
         return wikipedia.Page(self.site(), self.name() + subpage, 
defaultNamespace=2)
@@ -117,7 +125,7 @@
         if self.name()[0] == '#':
             #This user is probably being queried for purpose of lifting
             #an autoblock, so has no user talk pages per se.
-            raise AutoblockUserError
+            raise AutoblockUser
         if subpage:
             subpage = '/' + subpage
         return wikipedia.Page(self.site(), self.name() + subpage, 
defaultNamespace=3)
@@ -178,7 +186,7 @@
         if self.name()[0] == '#':
             #This user is probably being queried for purpose of lifting
             #an autoblock, so has no contribs.
-            raise AutoblockUserError
+            raise AutoblockUser
 
         #
         #TODO: fix contribRX regex
@@ -228,7 +236,7 @@
     
     def uploadedImages(self, number = 10):
         try:
-            if config.use_api and self.site().versionnumber() >= 11:
+            if wikipedia.config.use_api and self.site().versionnumber() >= 11:
                 apitest = self.site().api_address()
                 del apitest
             else:
@@ -239,11 +247,11 @@
             return
         
         params = {
-            'action':'query',
-            'list':'logevents',
-            'letype':'upload',
-            'leuser':self.name(),
-            'lelimit':int(number),
+            'action': 'query',
+            'list': 'logevents',
+            'letype': 'upload',
+            'leuser': self.name(),
+            'lelimit': int(number),
         }
         count = 0
         while True:
@@ -287,8 +295,8 @@
 
             yield wikipedia.ImagePage(self.site(), image), date, comment, 
deleted
     
-    def block(self, expiry=None, reason = None, anonOnly = True, noSignup = 
False,
-          enableAutoblock = False, emailBan = False, watchUser = False, 
allowUsertalk = True,
+    def block(self, expiry = None, reason = None, anon= True, noCreate = False,
+          onAutoblock = False, banMail = False, watchUser = False, 
allowUsertalk = True,
           reBlock = False):
         """
         Block the user by API.
@@ -310,58 +318,73 @@
         if self.name()[0] == '#':
             #This user is probably being queried for purpose of lifting
             #an autoblock, so can't be blocked.
-            raise AutoblockUserError
-        sefl.site()._getActionUser('block', sysop=True)
+            raise AutoblockUser
+        if self.isBlocked() and not reBlock:
+            raise AlreadyBlocked()
         
-        if expiry is None:
-            expiry = input(u'Please enter the expiry time for the block:')
-        if reason is None:
-            reason = input(u'Please enter a reason for the block:')
+        self.site()._getActionUser('block', sysop=True)
         
+        if not expiry:
+            expiry = wikipedia.input(u'Please enter the expiry time for the 
block:')
+        if not reason:
+            reason = wikipedia.input(u'Please enter a reason for the block:')
+        
         try:
-            if config.use_api and self.site().versionnumber() >= 12:
+            if wikipedia.config.use_api and self.site().versionnumber() >= 12:
                 x = self.site().api_address()
                 del x
             else:
                 raise NotImplementedError
         except NotImplementedError:
-            return self._blockOld(expiry, reason, anonOnly, noSignup, 
enableAutoblock, emailBan, watchUser, allowUsertalk)
+            return self._blockOld(expiry, reason, anon, noCreate,
+              onAutoblock, banMail, watchUser, allowUsertalk, reBlock)
         
-        token = self.site().getToken(self, sysop = True)
-        boolStr = ['0','1']
-        
         params = {
             'action': 'block',
             'user': self.name(),
-            'token':token,
-            'reason':reason,
-            'expiry':expiry,
+            'token': self.site().getToken(self, sysop = True),
+            'reason': reason,
             #'':'',
         }
-        if anonOnly:
+        if expiry:
+            params['expiry'] = expiry
+        if anon:
             params['anononly'] = 1
-        if noSignup:
+        if noCreate:
             params['nocreate'] = 1
-        if enableAutoblock:
+        if onAutoblock:
             params['autoblock'] = 1
-        if emailBan:
+        if banMail:
             params['noemail'] = 1
         #if watchUser:
         #    
+        if reBlock:
+            params['reblock'] = 1
         if allowUsertalk:
             params['allowusertalk'] = 1
+        
         data = query.GetData(params, self.site(), sysop=True)
         if 'error' in data: #error occured
             errCode = data['error']['code']
             if errCode == 'alreadyblocked':
-                raise AlreadyBlockedError
+                raise AlreadyBlocked()
+            elif errCode == 'blockedasrange':
+                raise AlreadyBlocked("Range Blocked")
+            #elif errCode == 'invalidrange':
+            #    pass
+            elif errCode == 'invalidexpiry':
+                raise BlockError("Invaild expiry")
+            elif errCode == 'pastexpiry ':
+                raise BlockError("expiry time is the past")
+            elif errCode == 'cantblock-email':
+                raise BlockError("You don't have permission to ban mail")
             
-            raise BlockError
         elif 'block' in data: #success
                 return True
         else:
             wikipedia.output("Unknown Error, result: %s" % data)
             raise BlockError
+        raise False
 
     def _blockOld(self, expiry, reason, anonOnly, noSignup, enableAutoblock, 
emailBan,
                 watchUser, allowUsertalk):
@@ -373,7 +396,7 @@
         if self.name()[0] == '#':
             #This user is probably being queried for purpose of lifting
             #an autoblock, so can't be blocked.
-            raise AutoblockUserError
+            raise AutoblockUser
         sefl.site()._getActionUser('block', sysop=True)
         
         if expiry is None:



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

Reply via email to