Revision: 6008 Author: russblau Date: 2008-10-21 14:51:23 +0000 (Tue, 21 Oct 2008)
Log Message: ----------- merge to trunk, and fix bare except: clause
Modified Paths: -------------- branches/rewrite/pywikibot/login.py
Property Changed: ---------------- branches/rewrite/pywikibot/login.py
Modified: branches/rewrite/pywikibot/login.py =================================================================== --- branches/rewrite/pywikibot/login.py 2008-10-21 12:50:30 UTC (rev 6007) +++ branches/rewrite/pywikibot/login.py 2008-10-21 14:51:23 UTC (rev 6008) @@ -81,7 +81,7 @@ try: self.username = config.sysopnames\ [self.site.family.name][self.site.code] - except: + except KeyError: raise NoUsername( u"""ERROR: Sysop username for %(fam_name)s:%(wiki_code)s is undefined. If you have a sysop account for that site, please add a line to user-config.py: @@ -120,33 +120,45 @@ return True return False else: - # No bot policies on other + # No bot policies on other return True
- def getCookie(self, remember=True, captchaId=None, captchaAnswer=None): - """Login to the site. + def getCookie(self, remember=True, captcha = None): + """ + Login to the site.
remember Remember login (default: True) - captchaId The id number of the captcha, if any - captcha The word displayed in the captcha, if any + captchaId A dictionary containing the captcha id and answer, if any
Returns cookie data if succesful, None otherwise.
""" - predata = { - "wpName": self.username.encode(self.site.encoding()), - "wpPassword": self.password, - "wpLoginattempt": "Aanmelden & Inschrijven", # dutch button label seems to work for all wikis - "wpRemember": str(int(bool(remember))) - } - if captchaId: - predata["wpCaptchaId"] = captchaId - predata["wpCaptchaWord"] = captchaAnswer - address = self.site.login_address() + if config.use_api_login: + predata = { + 'action': 'login', + 'lgname': self.username.encode(self.site.encoding()), + 'lgpassword': self.password, + 'lgdomain': self.site.family.ldapDomain, + } + address = self.site.api_address() + else: + predata = { + "wpName": self.username.encode(self.site.encoding()), + "wpPassword": self.password, + "wpDomain": self.site.family.ldapDomain, # VistaPrint fix + "wpLoginattempt": "Aanmelden & Inschrijven", # dutch button label seems to work for all wikis + "wpRemember": str(int(bool(remember))), + "wpSkipCookieCheck": '1' + } + if captcha: + predata["wpCaptchaId"] = captcha['id'] + predata["wpCaptchaWord"] = captcha['answer'] + login_address = self.site.login_address() + address = login_address + '&action=submit'
if self.site.hostname() in config.authenticate.keys(): headers = { - "Content-type": "application/x-www-form-urlencoded", + "Content-type": "application/x-www-form-urlencoded", "User-agent": wikipedia.useragent } data = self.site.urlEncode(predata) @@ -158,44 +170,29 @@ wikipedia.cj.save(wikipedia.COOKIEFILE) return "Ok" else: - response, data = self.site.postForm(address, predata, - useCookie=False) - n = 0 + response, data = self.site.postData(address, self.site.urlEncode(predata)) Reat=re.compile(': (.*?);') L = []
for eat in response.msg.getallmatchingheaders('set-cookie'): m = Reat.search(eat) if m: - n += 1 L.append(m.group(1))
- log_data = [] + got_token = got_user = False for Ldata in L: - if (re.match('.*_session=.*', Ldata)): - log_data.append(Ldata) - elif (re.match('.*UserID=.*', Ldata)): - log_data.append(Ldata) - elif (re.match('.*UserName=.*', Ldata)): - log_data.append(Ldata) - elif (re.match('.*Token=.*', Ldata)): - log_data.append(Ldata) + if 'Token=' in Ldata: + got_token = True + if 'User=' in Ldata or 'UserName=' in Ldata: + got_user = True
- if len(log_data) == 4: + if got_token and got_user: return "\n".join(L) - elif not captchaAnswer: - captchaR = re.compile('<input type="hidden" name="wpCaptchaId" id="wpCaptchaId" value="(?P<id>\d+)" />') - match = captchaR.search(data) - if match: - id = match.group('id') - if not config.solve_captcha: - raise CaptchaError(id) - url = self.site.protocol() + '://' + self.site.hostname() + self.site.captcha_image_address(id) - answer = wikipedia.ui.askForCaptcha(url) - return self.getCookie(remember=remember, captchaId=id, - captchaAnswer=answer) - else: - return None + elif not captcha: + solve = self.site.solveCaptcha(data) + if solve: + return self.getCookie(remember = remember, captcha = solve) + return None
def storecookiedata(self, data): """ @@ -308,12 +305,16 @@ namedict = config.usernames for familyName in namedict.iterkeys(): for lang in namedict[familyName].iterkeys(): - site = pywikibot.getSite(code=lang, fam=familyName) - if not forceLogin and site.loggedInAs(sysop = sysop) != None: - logger.info(u'Already logged in on %(site)s' % locals()) - else: - loginMan = LoginManager(password, sysop=sysop, site=site) - loginMan.login() + try: + site = wikipedia.getSite(code=lang, fam=familyName) + if not forceLogin and site.loggedInAs(sysop = sysop) != None: + wikipedia.output(u'Already logged in on %s' % site) + else: + loginMan = LoginManager(password, sysop = sysop, site = site) + loginMan.login() + except wikipedia.NoSuchSite: + wikipedia.output(lang+ u'.' + familyName + u' is not a valid site, please remove it from your config') + else: loginMan = LoginManager(password, sysop=sysop) loginMan.login()
Property changes on: branches/rewrite/pywikibot/login.py ___________________________________________________________________ Added: svn:mergeinfo + /trunk/pywikipedia/login.py:4976-6007
pywikipedia-l@lists.wikimedia.org