From e3f46ac7515f4558af5e953652ac550ece40521b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Schreiner?= Date: Tue, 1 Feb 2011 13:47:13 +0100 Subject: [PATCH] Adds support for previewing modifications on redmine's wiki pages. Status: draft (needs further work to be really useful) --- weboob/backends/redmine/backend.py | 11 +++++++++++ weboob/backends/redmine/browser.py | 8 ++++++++ weboob/backends/redmine/pages/wiki.py | 6 ++++++ weboob/capabilities/content.py | 3 +++ 4 files changed, 28 insertions(+) diff --git a/weboob/backends/redmine/backend.py b/weboob/backends/redmine/backend.py index 57ce2e17..608e4c03 100644 --- a/weboob/backends/redmine/backend.py +++ b/weboob/backends/redmine/backend.py @@ -72,3 +72,14 @@ class RedmineBackend(BaseBackend, ICapContent): with self.browser: return self.browser.set_wiki_source(project, page, content.content, message) + + def preview_content(self, content): + try: + _type, project, page = self.id2path(content.id) + except ValueError: + return + + with self.browser: + return self.browser.get_wiki_preview(project, page, content.content) + + diff --git a/weboob/backends/redmine/browser.py b/weboob/backends/redmine/browser.py index 4a3e4328..c5b03d28 100644 --- a/weboob/backends/redmine/browser.py +++ b/weboob/backends/redmine/browser.py @@ -17,6 +17,7 @@ from urlparse import urlsplit +import urllib from weboob.tools.browser import BaseBrowser, BrowserIncorrectPassword @@ -74,3 +75,10 @@ class RedmineBrowser(BaseBrowser): def set_wiki_source(self, project, page, data, message): self.location('%s/projects/%s/wiki/%s/edit' % (self.BASEPATH, project, page)) self.page.set_source(data, message) + + def get_wiki_preview(self, project, page, data): + url = '%s/projects/%s/wiki/%s/preview' % (self.BASEPATH, project, page) + params = {} + params['content[text]'] = data.encode('utf-8') + params['authenticity_token'] = "%s" % self.page.get_authenticity_token() + return self.readurl(url, urllib.urlencode(params)) diff --git a/weboob/backends/redmine/pages/wiki.py b/weboob/backends/redmine/pages/wiki.py index db31b310..afc1c0b7 100644 --- a/weboob/backends/redmine/pages/wiki.py +++ b/weboob/backends/redmine/pages/wiki.py @@ -30,5 +30,11 @@ class WikiEditPage(BasePage): self.browser['content[comments]'] = message.encode('utf-8') self.browser.submit() + def get_authenticity_token(self): + wiki_form = select(self.document.getroot(), 'form#wiki_form', 1) + return wiki_form.xpath('div/input')[0].get('value') + + + class WikiPage(BasePage): pass diff --git a/weboob/capabilities/content.py b/weboob/capabilities/content.py index 2e7d02d1..d7bb1c82 100644 --- a/weboob/capabilities/content.py +++ b/weboob/capabilities/content.py @@ -35,3 +35,6 @@ class ICapContent(IBaseCap): def push_content(self, content, message=None): raise NotImplementedError() + + def preview_content(self, content): + raise NotImplementedError()