def status(jira, args): m = re.match(r'(\w+-\d+) (.*)', args) if not m: return utils.not_valid_args(args) issue_key = m.group(1) issue_status = m.group(2) try: issue = jira.issue(issue_key) statuses = jira.statuses() if issue_status not in [s.name for s in statuses]: return utils.error('Status {} does not exist'.format(issue_status)) if issue_status == issue.fields.status.name: return utils.error('Status {} already set'.format(issue_status)) transitions = jira.transitions(issue) transition_id = utils.get_transition(transitions, issue_status) if not transition_id: return utils.error('Operation not permitted') jira.transition_issue(issue, transition_id) issue = jira.issue(issue_key) return utils.issue_info(issue) except JIRAError as e: response = utils.error('{} {}'.format(str(e.status_code), str(e.text))) return response
def close(jira, args): m = re.match(r'(\w+-\d+) ?(.*)', args) if not m: return utils.not_valid_args(args) issue_key = m.group(1) issue_status = 'Closed' comment = m.group(2) try: issue = jira.issue(issue_key) transitions = jira.transitions(issue) transition_id = utils.get_transition(transitions, issue_status) if issue_status == issue.fields.status.name: return utils.error('Issue already closed') if not transition_id: return utils.error('Operation not permitted') jira.transition_issue(issue, transition_id, comment=comment) issue = jira.issue(issue_key) return utils.issue_info(issue) except JIRAError as e: if e.status_code == 500: return utils.error('operation not permitted') response = utils.error('{} {}'.format(str(e.status_code), str(e.text))) return response