From 0b299913871e21df2cc5be909f9879679b55868b Mon Sep 17 00:00:00 2001 From: Laurent Bachelier Date: Mon, 11 Mar 2013 00:39:01 +0100 Subject: [PATCH] mediawiki: Add support for the revision argument refs #1067 --- modules/mediawiki/backend.py | 5 +++-- modules/mediawiki/browser.py | 16 ++++++++++++---- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/modules/mediawiki/backend.py b/modules/mediawiki/backend.py index 33fc28b7..d50e4266 100644 --- a/modules/mediawiki/backend.py +++ b/modules/mediawiki/backend.py @@ -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 diff --git a/modules/mediawiki/browser.py b/modules/mediawiki/browser.py index fb7ce467..d15a04cd 100644 --- a/modules/mediawiki/browser.py +++ b/modules/mediawiki/browser.py @@ -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):