def add_worklog(tce): def log(): started = toggl_strptime(tce.entry['start']) return jira.add_worklog( tce.ticket, timeSpentSeconds=tce.entry['duration'], comment=tce.comment, started=started, ) try: worklog = log() except JIRAError as e: ticket = jira.issue(tce.ticket) status_id = ticket.fields.status.id if status_id != COMPLETE: print bcolors.fail('Invalid status %s' % status_id) raise reclose_transition = get_transition_id(status_id) jira.transition_issue(ticket, reopen_transition(ticket)) worklog = log() jira.transition_issue(ticket, reclose_transition(ticket)) return worklog
def ensure_open_ticket(ticket_id): """ Allows us to reopen a ticket once, and log against it a bunch of times. :param ticket_id: :return: """ # TODO: This gives race conditions if someone updates a ticket while we are logging time. ticket = jira.issue(ticket_id) status_id = ticket.fields.status.id if status_id == COMPLETE: reclose_transition = get_transition_id(status_id) jira.transition_issue(ticket, reopen_transition(ticket)) print bcolors.warning('Reopening ticket') try: yield finally: print bcolors.warning('Reclosing ticket') jira.transition_issue(ticket, reclose_transition(ticket)) else: # ticket is in a mutable state on jira, so we can just log away yield