From 4a29a246a2633cdf5fac9329f2e80f3a06271055 Mon Sep 17 00:00:00 2001 From: Romain Bignon Date: Tue, 19 Jul 2011 13:24:33 +0200 Subject: [PATCH] support changes of issue content --- weboob/applications/boobtracker/boobtracker.py | 2 ++ weboob/backends/redmine/backend.py | 11 ++++++++++- weboob/backends/redmine/pages/issues.py | 11 +++++++++++ weboob/capabilities/bugtracker.py | 11 +++++++++-- 4 files changed, 32 insertions(+), 3 deletions(-) diff --git a/weboob/applications/boobtracker/boobtracker.py b/weboob/applications/boobtracker/boobtracker.py index 85111ebb..efc67897 100644 --- a/weboob/applications/boobtracker/boobtracker.py +++ b/weboob/applications/boobtracker/boobtracker.py @@ -56,6 +56,8 @@ class IssueFormatter(IFormatter): result += '\nHistory:\n' for u in item['history']: result += '* %s%s - %s%s\n' % (self.BOLD, u.date, u.author, self.NC) + for change in u.changes: + result += ' - %s%s%s: %s -> %s\n' % (self.BOLD, change.field, self.NC, change.last, change.new) if u.message: result += html2text(u.message) return result diff --git a/weboob/backends/redmine/backend.py b/weboob/backends/redmine/backend.py index 1d0c91dc..f535d764 100644 --- a/weboob/backends/redmine/backend.py +++ b/weboob/backends/redmine/backend.py @@ -21,7 +21,9 @@ from __future__ import with_statement from weboob.capabilities.content import ICapContent, Content -from weboob.capabilities.bugtracker import ICapBugTracker, Issue, Project, User, Version, Status, Update, Attachment, Query +from weboob.capabilities.bugtracker import ICapBugTracker, Issue, Project, User, \ + Version, Status, Update, Attachment, \ + Query, Change from weboob.capabilities.collection import ICapCollection, Collection, CollectionNotFound from weboob.tools.backend import BaseBackend, BackendConfig from weboob.tools.browser import BrowserHTTPNotFound @@ -186,6 +188,13 @@ class RedmineBackend(BaseBackend, ICapContent, ICapBugTracker, ICapCollection): update.author = issue.project.find_user(*u['author']) update.date = u['date'] update.message = u['message'] + update.changes = [] + for i, (field, last, new) in enumerate(u['changes']): + change = Change(i) + change.field = field + change.last = last + change.new = new + update.changes.append(change) issue.history.append(update) issue.author = issue.project.find_user(*params['author']) issue.assignee = issue.project.find_user(*params['assignee']) diff --git a/weboob/backends/redmine/pages/issues.py b/weboob/backends/redmine/pages/issues.py index 229bf42f..d4e58552 100644 --- a/weboob/backends/redmine/pages/issues.py +++ b/weboob/backends/redmine/pages/issues.py @@ -258,6 +258,17 @@ class IssuePage(NewIssuePage): else: update['message'] = None + changes = [] + for li in self.parser.select(div, 'ul.details', 1).findall('li'): + field = li.find('strong').text.decode('utf-8') + if len(li.findall('i')) == 2: + last = li.findall('i')[0].text.decode('utf-8') + else: + last = None + new = li.findall('i')[-1].text.decode('utf-8') + changes.append((field, last, new)) + update['changes'] = changes + params['updates'].append(update) return params diff --git a/weboob/capabilities/bugtracker.py b/weboob/capabilities/bugtracker.py index 0152759a..8c9050f9 100644 --- a/weboob/capabilities/bugtracker.py +++ b/weboob/capabilities/bugtracker.py @@ -101,6 +101,13 @@ class Attachment(CapBaseObject): def __repr__(self): return '' % self.filename +class Change(CapBaseObject): + def __init__(self, id): + CapBaseObject.__init__(self, id) + self.add_field('field', unicode) + self.add_field('last', unicode) + self.add_field('new', unicode) + class Update(CapBaseObject): def __init__(self, id): CapBaseObject.__init__(self, id) @@ -108,8 +115,8 @@ class Update(CapBaseObject): self.add_field('date', datetime) self.add_field('hours', timedelta) self.add_field('message', unicode) - self.add_field('attachments', (list,tuple)) - self.add_field('changes', (list,tuple)) + self.add_field('attachments', (list,tuple)) # Attachment + self.add_field('changes', (list,tuple)) # Change def __repr__(self): return '' % self.id