ability to log spent time on an issue

This commit is contained in:
Romain Bignon 2011-07-19 13:11:18 +02:00
commit b9bba5924a
4 changed files with 26 additions and 4 deletions

View file

@ -234,7 +234,10 @@ class RedmineBackend(BaseBackend, ICapContent, ICapBugTracker, ICapCollection):
issue = issue.id
with self.browser:
return self.browser.update_issue(issue, update.message)
if update.hours:
return self.browser.logtime_issue(issue, update.hours, update.message)
else:
return self.browser.comment_issue(issue, update.message)
def remove_issue(self, issue):
"""

View file

@ -26,7 +26,8 @@ from weboob.tools.browser import BaseBrowser, BrowserIncorrectPassword
from .pages.index import LoginPage, IndexPage, MyPage, ProjectsPage
from .pages.wiki import WikiPage, WikiEditPage
from .pages.issues import IssuesPage, IssuePage, NewIssuePage
from .pages.issues import IssuesPage, IssuePage, NewIssuePage, IssueLogTimePage, \
IssueTimeEntriesPage
__all__ = ['RedmineBrowser']
@ -47,6 +48,8 @@ class RedmineBrowser(BaseBrowser):
'https?://[^/]+/projects/[\w-]+/issues': IssuesPage,
'https?://[^/]+/issues(|/?\?.*)': IssuesPage,
'https?://[^/]+/issues/(\d+)': IssuePage,
'https?://[^/]+/issues/(\d+)/time_entries/new': IssueLogTimePage,
'https?://[^/]+/projects/[\w-]+/time_entries': IssueTimeEntriesPage,
}
def __init__(self, url, *args, **kwargs):
@ -146,7 +149,13 @@ class RedmineBrowser(BaseBrowser):
assert self.is_on_page(IssuePage)
return self.page.get_params()
def update_issue(self, id, message):
def logtime_issue(self, id, hours, message):
self.location('/issues/%s/time_entries/new' % id)
assert self.is_on_page(IssueLogTimePage)
self.page.logtime(hours.seconds/3600, message)
def comment_issue(self, id, message):
self.location('/issues/%s' % id)
assert self.is_on_page(IssuePage)

View file

@ -262,4 +262,13 @@ class IssuePage(NewIssuePage):
return params
class IssueLogTimePage(BasePage):
def logtime(self, hours, message):
self.browser.select_form(predicate=lambda form: form.attrs.get('action', '').endswith('/edit'))
self.browser['time_entry[hours]'] = '%.2f' % hours
self.browser['time_entry[comments]'] = message.encode('utf-8')
self.browser['time_entry[activity_id]'] = ['8']
self.browser.submit()
class IssueTimeEntriesPage(BasePage):
pass

View file

@ -15,7 +15,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
from datetime import datetime
from datetime import datetime, timedelta
from .base import IBaseCap, CapBaseObject
@ -106,6 +106,7 @@ class Update(CapBaseObject):
CapBaseObject.__init__(self, id)
self.add_field('author', User)
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))