Skip to content
Snippets Groups Projects
Commit 4b384e10 authored by Bryan Tong Minh's avatar Bryan Tong Minh
Browse files

Handle badtoken

parent 76fbe3e9
No related branches found
No related tags found
No related merge requests found
......@@ -8,6 +8,7 @@ Mwclient 0.6.4 is unreleased.
* Added prop=duplicatefiles
* Properly fix detection of alpha versions
* Added support for builtin json library
* Handle badtoken once
== Changes in version 0.6.3 ==
* Added domain parameter to login.
......
......@@ -131,23 +131,38 @@ class Page(object):
data.update(kwargs)
try:
def do_edit():
result = self.site.api('edit', title = self.name, text = text,
summary = summary, token = self.get_token('edit'),
**data)
**data)
if result['edit'].get('result').lower() == 'failure':
raise errors.EditError(self, result['edit'])
return result
try:
result = do_edit()
except errors.APIError, e:
if e.code == 'editconflict':
raise errors.EditError(self, text, summary, e.info)
elif e.code in ('protectedtitle', 'cantcreate', 'cantcreate-anon', 'noimageredirect-anon',
'noimageredirect', 'noedit-anon', 'noedit'):
raise errors.ProtectedPageError(self, e.code, e.info)
if e.code == 'badtoken':
# Retry, but only once to avoid an infinite loop
self.get_token('edit', force = True)
try:
result = do_edit()
except errors.APIError, e:
self.handle_edit_error(e, summary)
else:
raise
self.handle_edit_error(e, summary)
if result['edit'] == 'Success':
self.last_rev_time = client.parse_timestamp(result['newtimestamp'])
return result['edit']
def handle_edit_error(self, e, summary):
if e.code == 'editconflict':
raise errors.EditError(self, summary, e.info)
elif e.code in ('protectedtitle', 'cantcreate', 'cantcreate-anon', 'noimageredirect-anon',
'noimageredirect', 'noedit-anon', 'noedit'):
raise errors.ProtectedPageError(self, e.code, e.info)
else:
raise
def get_expanded(self):
self.site.require(1, 12)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment