Revision: 7117 Author: alexsh Date: 2009-08-06 10:45:42 +0000 (Thu, 06 Aug 2009)
Log Message: ----------- *Site()._getUserData(): add description for collect data from API. *Page().delete(): Add API option to delete page.(tested on redirect.py broken, could reduce more time to load delete page.)
Modified Paths: -------------- trunk/pywikipedia/wikipedia.py
Modified: trunk/pywikipedia/wikipedia.py =================================================================== --- trunk/pywikipedia/wikipedia.py 2009-08-06 07:15:41 UTC (rev 7116) +++ trunk/pywikipedia/wikipedia.py 2009-08-06 10:45:42 UTC (rev 7117) @@ -2396,50 +2396,71 @@ answer = 'y' self.site()._noDeletePrompt = True if answer == 'y': - host = self.site().hostname() - address = self.site().delete_address(self.urlname()) - - reason = reason.encode(self.site().encoding()) + token = self.site().getToken(self, sysop = True) - predata = { - 'wpDeleteReasonList': 'other', - 'wpReason': reason, - 'wpComment': reason, - 'wpConfirm': '1', - 'wpConfirmB': '1' - } - if token: - predata['wpEditToken'] = token - if self.site().hostname() in config.authenticate.keys(): - predata['Content-type'] = 'application/x-www-form-urlencoded' - predata['User-agent'] = useragent - data = self.site().urlEncode(predata) - response = urllib2.urlopen(urllib2.Request(self.site().protocol() + '://' + self.site().hostname() + address, data)) - data = u'' - else: - response, data = self.site().postForm(address, predata, sysop = True) - if data: - self.site().checkBlocks(sysop = True) - if self.site().mediawiki_message('actioncomplete') in data: + + if config.use_api and self.site().versionnumber() >= 12: + params = { + 'action': 'delete', + 'title': self.title(), + 'token': token, + 'reason': reason, + } + datas = query.GetData(params, self.site(), sysop = True) + if datas.has_key('delete'): output(u'Page %s deleted' % self.aslink(forceInterwiki = True)) return True - elif self.site().mediawiki_message('cannotdelete') in data: - output(u'Page %s could not be deleted - it doesn't exist' % self.aslink(forceInterwiki = True)) - return False else: - output(u'Deletion of %s failed for an unknown reason. The response text is:' % self.aslink(forceInterwiki = True)) - try: - ibegin = data.index('<!-- start content -->') + 22 - iend = data.index('<!-- end content -->') - except ValueError: - # if begin/end markers weren't found, show entire HTML file - output(data) + if datas['error']['code'] == 'missingtitle': + output(u'Page %s could not be deleted - it doesn't exist' % self.aslink(forceInterwiki = True)) + return False else: - # otherwise, remove the irrelevant sections - data = data[ibegin:iend] - output(data) - return False + output(u'Deletion of %s failed for an unknown reason. The response text is:' % self.aslink(forceInterwiki = True)) + output('%s' % datas) + else: + host = self.site().hostname() + address = self.site().delete_address(self.urlname())
+ reason = reason.encode(self.site().encoding()) + predata = { + 'wpDeleteReasonList': 'other', + 'wpReason': reason, + 'wpComment': reason, + 'wpConfirm': '1', + 'wpConfirmB': '1' + } + if token: + predata['wpEditToken'] = token + if self.site().hostname() in config.authenticate.keys(): + predata['Content-type'] = 'application/x-www-form-urlencoded' + predata['User-agent'] = useragent + data = self.site().urlEncode(predata) + response = urllib2.urlopen(urllib2.Request(self.site().protocol() + '://' + self.site().hostname() + address, data)) + data = u'' + else: + response, data = self.site().postForm(address, predata, sysop = True) + if data: + self.site().checkBlocks(sysop = True) + if self.site().mediawiki_message('actioncomplete') in data: + output(u'Page %s deleted' % self.aslink(forceInterwiki = True)) + return True + elif self.site().mediawiki_message('cannotdelete') in data: + output(u'Page %s could not be deleted - it doesn't exist' % self.aslink(forceInterwiki = True)) + return False + else: + output(u'Deletion of %s failed for an unknown reason. The response text is:' % self.aslink(forceInterwiki = True)) + try: + ibegin = data.index('<!-- start content -->') + 22 + iend = data.index('<!-- end content -->') + except ValueError: + # if begin/end markers weren't found, show entire HTML file + output(data) + else: + # otherwise, remove the irrelevant sections + data = data[ibegin:iend] + output(data) + return False + def loadDeletedRevisions(self): """Retrieve all deleted revisions for this Page from Special/Undelete.
@@ -4879,8 +4900,7 @@ index = self._userIndex(sysop)
if type(text) == dict: #text is dict, query from API - # Check for blocks - but only if version is 1.11 (userinfo is available) - # and the user data was not yet loaded + # Check for blocks if text.has_key('blockedby') and not self._isBlocked[index]: # Write a warning if not shown earlier if sysop: @@ -4890,7 +4910,7 @@ output(u'WARNING: %s on %s is blocked. Editing using this account will stop the run.' % (account, self)) self._isBlocked[index] = text.has_key('blockedby')
- # Check for new messages, show key 'messages' in dict. + # Check for new messages, the data must had key 'messages' in dict. if text.has_key('messages'): if not self._messages[index]: # User has *new* messages @@ -4907,16 +4927,16 @@ return
# Get username. - # anonymous mode will show key 'anon' + # The data in anonymous mode had key 'anon' + # if 'anon' exist, username is IP address, not to collect it right now if not text.has_key('anon'): self._isLoggedIn[index] = True self._userName[index] = text['name'] else: self._isLoggedIn[index] = False - # No idea what is the user name, and it isn't important self._userName[index] = None
- # Check user groups and rights + # Get user groups and rights if text.has_key('groups') and text['groups'] != []: self._rights[index] = text['groups'] self._rights[index].extend(text['rights']) @@ -4933,7 +4953,7 @@ if sysop and 'sysop' not in self._rights[index]: output(u'WARNING: Your sysop account on %s does not seem to have sysop rights. You may not be able to perform any sysop-restricted actions using it.' % self) else: - # key groups is not exists, setup a default rights + # 'groups' is not exists, set default rights self._rights[index] = [] if self._isLoggedIn[index]: # Logged in user @@ -4948,13 +4968,13 @@ #remove Duplicate rights self._rights[index] = list(set(self._rights[index]))
- # Search for a token + # Get token if text.has_key('preferencestoken') and len(text['preferencestoken']) > 2: # anonymous token is '+\', check len('+\') = 2 # if preferencestoken > 2, it must be loggedin. self._token[index] = text['preferencestoken'] if self._rights[index] is not None: - # In this case, token and rights are loaded - user data is now loaded + # Token and rights are loaded - user data is now loaded self._userData[index] = True else: output(u'WARNING: Token not found on %s. You will not be able to edit any page.' % self) @@ -5213,6 +5233,7 @@ config.use_api = False
# Get data + # API Userinfo is available from version 1.11 if config.use_api and self.versionnumber() >= 11: #Query userinfo params = {