ability to send a new revision of a wiki page

This commit is contained in:
Romain Bignon 2010-10-16 10:06:04 +02:00
commit 66335a52c8
4 changed files with 38 additions and 9 deletions

View file

@ -43,22 +43,32 @@ class RedmineBackend(BaseBackend, ICapContent):
def create_default_browser(self): def create_default_browser(self):
return self.create_browser(self.config['url'], self.config['username'], self.config['password']) return self.create_browser(self.config['url'], self.config['username'], self.config['password'])
def id2path(self, id):
return id.split('/', 2)
def get_content(self, id): def get_content(self, id):
if isinstance(id, basestring): if isinstance(id, basestring):
try:
project, _type, page = id.split('/', 2)
except ValueError:
return None
content = Content(id) content = Content(id)
else: else:
content = id content = id
id = content.id id = content.id
try:
project, _type, page = self.id2path(id)
except ValueError:
return None
with self.browser: with self.browser:
data = self.browser.get_wiki_source(project, page) data = self.browser.get_wiki_source(project, page)
content.content = data content.content = data
return content return content
def push_content(self, content): def push_content(self, content, message=None):
pass try:
project, _type, page = self.id2path(content.id)
except ValueError:
return
with self.browser:
return self.browser.set_wiki_source(project, page, content.content, message)

View file

@ -21,7 +21,7 @@ from urlparse import urlsplit
from weboob.tools.browser import BaseBrowser, BrowserIncorrectPassword from weboob.tools.browser import BaseBrowser, BrowserIncorrectPassword
from .pages.index import LoginPage, IndexPage, MyPage from .pages.index import LoginPage, IndexPage, MyPage
from .pages.wiki import WikiEditPage from .pages.wiki import WikiPage, WikiEditPage
__all__ = ['RedmineBrowser'] __all__ = ['RedmineBrowser']
@ -34,6 +34,7 @@ class RedmineBrowser(BaseBrowser):
'%s/login': LoginPage, '%s/login': LoginPage,
'%s/my/page': MyPage, '%s/my/page': MyPage,
'%s/projects/\w+/wiki/\w+/edit': WikiEditPage, '%s/projects/\w+/wiki/\w+/edit': WikiEditPage,
'%s/projects/\w+/wiki/\w*': WikiPage,
} }
is_logging = False is_logging = False
@ -73,3 +74,7 @@ class RedmineBrowser(BaseBrowser):
def get_wiki_source(self, project, page): def get_wiki_source(self, project, page):
self.location('%s/projects/%s/wiki/%s/edit' % (self.BASEPATH, project, page)) self.location('%s/projects/%s/wiki/%s/edit' % (self.BASEPATH, project, page))
return self.page.get_source() return self.page.get_source()
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)

View file

@ -22,3 +22,13 @@ from weboob.tools.parsers.lxmlparser import select
class WikiEditPage(BasePage): class WikiEditPage(BasePage):
def get_source(self): def get_source(self):
return select(self.document.getroot(), 'textarea#content_text', 1).text return select(self.document.getroot(), 'textarea#content_text', 1).text
def set_source(self, data, message):
self.browser.select_form(nr=1)
self.browser['content[text]'] = data
if message:
self.browser['content[comments]'] = message
self.browser.submit()
class WikiPage(BasePage):
pass

View file

@ -24,10 +24,14 @@ class Content(CapBaseObject):
self.add_field('title', basestring) self.add_field('title', basestring)
self.add_field('author', basestring) self.add_field('author', basestring)
self.add_field('content', basestring) self.add_field('content', basestring)
self.add_field('revision', basestring)
class ICapContent(IBaseCap): class ICapContent(IBaseCap):
def get_content(self, id): def get_content(self, id, revision=None):
raise NotImplementedError() raise NotImplementedError()
def push_content(self, content): def log_content(self, id):
raise NotImplementedError()
def push_content(self, content, message=None):
raise NotImplementedError() raise NotImplementedError()