mediawiki: Add support for the revision argument

refs #1067
This commit is contained in:
Laurent Bachelier 2013-03-11 00:39:01 +01:00
commit 0b29991387
2 changed files with 15 additions and 6 deletions

View file

@ -54,12 +54,13 @@ class MediawikiBackend(BaseBackend, ICapContent):
self.config['apiurl'].get(),
username, password)
def get_content(self, _id):
def get_content(self, _id, revision=None):
_id = _id.replace(' ', '_').encode('utf-8')
content = Content(_id)
page = _id
rev = revision.id if revision else None
with self.browser:
data = self.browser.get_wiki_source(page)
data = self.browser.get_wiki_source(page, rev)
content.content = data
return content

View file

@ -55,24 +55,32 @@ class MediawikiBrowser(BaseBrowser):
return m.group(1)
else:
return page
def get_wiki_source(self, page):
def get_wiki_source(self, page, rev=None):
assert isinstance(self.apiurl, basestring)
page = self.url2page(page)
page = self.url2page(page)
data = {'action': 'query',
'prop': 'revisions|info',
'titles': page,
'rvprop': 'content|timestamp',
'rvprop': 'content|timestamp|ids',
'rvlimit': '1',
'intoken': 'edit',
}
if rev:
data['rvstartid'] = rev
result = self.API_get(data)
pageid = result['query']['pages'].keys()[0]
if pageid == "-1": # Page does not exist
return ""
if 'revisions' not in repr(result['query']['pages'][str(pageid)]):
raise APIError('Revision %s does not exist' % rev)
if rev and result['query']['pages'][str(pageid)]['revisions'][0]['revid'] != int(rev):
raise APIError('Revision %s does not exist' % rev)
return result['query']['pages'][str(pageid)]['revisions'][0]['*']
def get_token(self, page, _type):