Example #1
0
 def eval(self):
     extras = {}
     if self.args.extra_fields:
         try:
             for item in self.args.extra_fields:
                 key, value = item.split("=")
                 if key in extras:
                     if not isinstance(extras[key], list):
                         v = [extras[key]]
                         extras[key] = v
                     extras[key].append(value)
                 else:
                     extras[key] = value
         except Exception:
             raise UsageWarning("Unknown extra fields %s" % (self.args.extra_fields))
         self.jira.update_issue(
             self.args.issue,
             **extras
         )
     if self.args.issue_comment:
         self.jira.add_comment(
             self.args.issue, self.args.issue_comment if isinstance(self.args.issue_comment, basestring) else get_text_from_editor()
         )
         print_output(self.jira.format_issue(self.jira.get_issue(self.args.issue), comments_only=True))
     elif self.args.issue_priority:
         self.jira.update_issue(
             self.args.issue,
             priority=self.jira.get_priorities()[self.args.issue_priority]["id"]
         )
     elif self.args.issue_components:
         components = dict(
             (k["name"], k["id"]) for k in self.jira.get_components(
                 self.args.issue.split("-")[0]
             )
         )
         current_components = set(k["name"] for k in self.jira.get_issue(self.args.issue)["components"])
         if not set(self.args.issue_components).issubset(current_components):
             new_components = current_components.union(self.args.issue_components)
             self.jira.update_issue(self.args.issue,
                                    components=[components[k] for k in new_components]
             )
             print_output(colorfunc(
                 'component(s): %s added to %s' % (
                     ",".join(self.args.issue_components), self.args.issue), 'green'
             ))
         else:
             raise UsageWarning("component(s):[%s] already exist in %s" % (
                 ",".join(self.args.issue_components), self.args.issue)
             )
     elif self.args.issue_transition:
         self.jira.transition_issue(self.args.issue, self.args.issue_transition.lower())
         print_output(colorfunc(
             '%s transitioned to "%s"' % (self.args.issue, self.args.issue_transition), 'green'
         ))
     elif self.args.issue_assignee:
         self.jira.assign_issue(self.args.issue, self.args.issue_assignee)
         print_output(colorfunc(
             '%s assigned to %s' % (self.args.issue, self.args.issue_assignee), 'green'
         ))
Example #2
0
    def eval(self):
        mappers = {
            "issue_types": (self.jira.get_issue_types,),
            'subtask_types': (self.jira.get_subtask_issue_types,),
            'projects': (self.jira.get_projects,),
            'priorities': (self.jira.get_priorities,),
            'statuses': (self.jira.get_statuses,),
            'resolutions': (self.jira.get_resolutions,),
            'components': (self.jira.get_components, 'project'),
            'versions': (self.jira.list_versions, 'project'),
            'transitions': (self.jira.get_available_transitions, 'issue'),
            'filters': (self.jira.get_filters,),
            'aliases': (lambda: [{"name": k, "description": v} for k, v in Config(section='alias').items().items()],)
        }
        func, arguments = mappers[self.args.type][0], mappers[self.args.type][1:]
        _ = []
        _k = {}
        for earg in arguments:
            if isinstance(earg, tuple):
                if getattr(self.args, earg[0]):
                    _k.update({earg[0]: getattr(self.args, earg[0])})
                else:
                    _k[earg[0]] = earg[1]
            else:
                if not getattr(self.args, earg):
                    raise UsageError("'--%s' is required for listing '%s'" % (earg, self.args.type))
                _.append(getattr(self.args, earg))
        found = False
        data = func(*_, **_k)
        data_dict = OrderedDict()
        if type(data) == type([]):
            for item in data:
                data_dict[item['name']] = item
        else:
            data_dict = data
        for item in data_dict.values():
            found = True
            val = item
            if self.args.debug:
                pprint.pprint(item, stream=sys.stderr)

            if type(item) == type({}):
                val = colorfunc(item['name'], 'white')
                if 'key' in item and item['key']:
                    val += " [" + colorfunc(item['key'], 'magenta') + "]"
                if 'id' in item and item['id']:
                    val += " [" + colorfunc(item['id'], 'yellow') + "]"
                if 'description' in item and item['description']:
                    val += " [" + colorfunc(item['description'], 'green') + "]"
            print_output(colorfunc(val, 'white'))
        if not found:
            raise UsageWarning("No %s found." % self.args.type)
Example #3
0
 def eval(self):
     if self.args.issue_comment:
         self.jira.add_comment(self.args.issue, get_text_from_editor())
         print_output(
             self.jira.format_issue(self.jira.get_issue(self.args.issue),
                                    comments_only=True))
     elif self.args.issue_priority:
         self.jira.update_issue(self.args.issue,
                                priority=self.jira.get_priorities()[
                                    self.args.issue_priority]["id"])
     elif self.args.issue_components:
         components = dict((k["name"], k["id"])
                           for k in self.jira.get_components(
                               self.args.issue.split("-")[0]))
         current_components = set(
             k["name"]
             for k in self.jira.get_issue(self.args.issue)["components"])
         if not set(
                 self.args.issue_components).issubset(current_components):
             new_components = current_components.union(
                 self.args.issue_components)
             self.jira.update_issue(
                 self.args.issue,
                 components=[components[k] for k in new_components])
             print_output(
                 colorfunc(
                     'component(s): %s added to %s' % (",".join(
                         self.args.issue_components), self.args.issue),
                     'green'))
         else:
             raise UsageWarning(
                 "component(s):[%s] already exist in %s" %
                 (",".join(self.args.issue_components), self.args.issue))
     elif self.args.issue_transition:
         self.jira.transition_issue(self.args.issue,
                                    self.args.issue_transition.lower())
         print_output(
             colorfunc(
                 '%s transitioned to "%s"' %
                 (self.args.issue, self.args.issue_transition), 'green'))
     elif self.args.issue_assignee:
         self.jira.update_issue(self.args.issue,
                                assignee=self.args.issue_assignee)
         print_output(
             colorfunc(
                 '%s assigned to %s' %
                 (self.args.issue, self.args.issue_assignee), 'green'))
Example #4
0
 def eval(self):
     mappers = {
         "issue_types": (self.jira.get_issue_types,),
         "subtask_types": (self.jira.get_subtask_issue_types,),
         "projects": (self.jira.get_projects,),
         "priorities": (self.jira.get_priorities,),
         "statuses": (self.jira.get_statuses,),
         "resolutions": (self.jira.get_resolutions,),
         "components": (self.jira.get_components, "project"),
         "versions": (self.jira.list_versions, "project"),
         "transitions": (self.jira.get_available_transitions, "issue"),
         "filters": (self.jira.get_filters,),
     }
     func, arguments = mappers[self.args.type][0], mappers[self.args.type][1:]
     _ = []
     _k = {}
     for earg in arguments:
         if isinstance(earg, tuple):
             if getattr(self.args, earg[0]):
                 _k.update({earg[0]: getattr(self.args, earg[0])})
             else:
                 _k[earg[0]] = earg[1]
         else:
             if not getattr(self.args, earg):
                 raise UsageError("'--%s' is required for listing '%s'" % (earg, self.args.type))
             _.append(getattr(self.args, earg))
     found = False
     data = func(*_, **_k)
     data_dict = OrderedDict()
     if type(data) == type([]):
         for item in data:
             data_dict[item["name"]] = item
     else:
         data_dict = data
     for item in data_dict.values():
         found = True
         val = item
         if type(item) == type({}):
             val = colorfunc(item["name"], "white")
             if "key" in item and item["key"]:
                 val += " [" + colorfunc(item["key"], "magenta") + "]"
             if "description" in item and item["description"]:
                 val += " [" + colorfunc(item["description"], "green") + "]"
         print_output(colorfunc(val, "white"))
     if not found:
         raise UsageWarning("No %s found." % self.args.type)
Example #5
0
 def eval(self):
     mappers = {
         "issue_types": (self.jira.get_issue_types,),
         'subtask_types': (self.jira.get_subtask_issue_types,),
         'projects': (self.jira.get_projects,),
         'priorities': (self.jira.get_priorities,),
         'statuses': (self.jira.get_statuses,),
         'resolutions': (self.jira.get_resolutions,),
         'components': (self.jira.get_components, 'project'),
         'transitions': (self.jira.get_available_transitions, 'issue'),
         'filters': (self.jira.get_filters,)
     }
     func, arguments = mappers[self.args.type][0], mappers[self.args.type][1:]
     _ = []
     _k = {}
     for earg in arguments:
         if isinstance(earg, tuple):
             if getattr(self.args, earg[0]):
                 _k.update({earg[0]: getattr(self.args, earg[0])})
             else:
                 _k[earg[0]] = earg[1]
         else:
             if not getattr(self.args, earg):
                 raise UsageError("'--%s' is required for listing '%s'" % (earg, self.args.type))
             _.append(getattr(self.args, earg))
     found = False
     data = func(*_, **_k)
     data_dict = {}
     if type(data) == type([]):
         for item in data:
             data_dict[item['name']] = item
     else:
         data_dict = data
     for item in data_dict.values():
         found = True
         val = item
         if type(item) == type({}):
             val = colorfunc(item['name'], 'white')
             if 'key' in item and item['key']:
                 val += " [" + colorfunc(item['key'], 'magenta') + "]"
             if 'description' in item and item['description']:
                 val += " [" + colorfunc(item['description'], 'green') + "]"
         print_output(colorfunc(val, 'white'))
     if not found:
         raise UsageWarning("No %s found." % self.args.type)
Example #6
0
 def eval(self):
     if self.args.issue_comment:
         self.jira.add_comment(
             self.args.issue, self.args.issue_comment if isinstance(self.args.issue_comment, basestring) else get_text_from_editor()
         )
         print_output(self.jira.format_issue(self.jira.get_issue(self.args.issue), comments_only=True))
     elif self.args.issue_priority:
         self.jira.update_issue(
             self.args.issue,
             priority=self.jira.get_priorities()[self.args.issue_priority]["id"]
         )
     elif self.args.issue_components:
         components = dict(
             (k["name"], k["id"]) for k in self.jira.get_components(
                 self.args.issue.split("-")[0]
             )
         )
         current_components = set(k["name"] for k in self.jira.get_issue(self.args.issue)["components"])
         if not set(self.args.issue_components).issubset(current_components):
             new_components = current_components.union(self.args.issue_components)
             self.jira.update_issue(self.args.issue,
                                    components=[components[k] for k in new_components]
             )
             print_output(colorfunc(
                 'component(s): %s added to %s' % (
                     ",".join(self.args.issue_components), self.args.issue), 'green'
             ))
         else:
             raise UsageWarning("component(s):[%s] already exist in %s" % (
                 ",".join(self.args.issue_components), self.args.issue)
             )
     elif self.args.issue_transition:
         self.jira.transition_issue(self.args.issue, self.args.issue_transition.lower())
         print_output(colorfunc(
             '%s transitioned to "%s"' % (self.args.issue, self.args.issue_transition), 'green'
         ))
     elif self.args.issue_assignee:
         self.jira.update_issue(self.args.issue, assignee=self.args.issue_assignee)
         print_output(colorfunc(
             '%s assigned to %s' % (self.args.issue, self.args.issue_assignee), 'green'
         ))
Example #7
0
    def format_issue(self, issue, mode=0, formatter=None, comments_only=False):
        fields = {}
        status_color = "blue"
        status_string = JiraBridge.object_from_key(
            issue.setdefault('status', '1'),
            self.get_statuses
        )["name"].lower()

        if status_string in ["resolved", "closed", "done"]:
            status_color = "green"
        elif status_string in ["open", "unassigned", "reopened", "to do"]:
            status_color = "red"

        special_fields = {
            "status": self.get_statuses,
            "priority": self.get_priorities,
            "type": self.get_issue_types
        }

        if formatter:
            groups = re.compile("(%([\w]+))").findall(formatter)
            ret_str = formatter
            for k, v in groups:
                if v.lower() in special_fields.keys():
                    key=issue[v.lower()]
                    data = "" or JiraBridge.object_from_key(key, special_fields[v.lower()])["name"]
                    ret_str = ret_str.replace(k, data)
                else:
                    ret_str = ret_str.replace(k, str(issue.setdefault(v.lower(),"")))
            return ret_str

        if mode >= 0:
            # minimal
            fields["issue"] = issue["key"]
            fields["status"] = colorfunc(JiraBridge.object_from_key(issue["status"], self.get_statuses)["name"], status_color)
            fields["reporter"] = issue.setdefault("reporter","")
            fields["assignee"] = issue.setdefault("assignee","")
            fields["summary"] = issue.setdefault("summary","")
            fields["link"] = colorfunc(
                "%s/browse/%s" % (
                    self.base_url, issue["key"]
                ), "white", attrs=["underline"]
            )
        if mode == 1 or comments_only:
            fields["description"] = issue.setdefault("description","") or ""
            if not issue.get("priority", ""):
                self.fields["priority"] = ""
            else:
                fields["priority"] = JiraBridge.object_from_key(issue["priority"], self.get_priorities)["name"]
            fields["type"] = JiraBridge.object_from_key(
                issue["type"],
                self.get_issue_types if 'parent' not in issue else self.get_subtask_issue_types
            )["name"]
            fields["comments"] = "\n"
            comments = self.get_issue_comments(issue["key"])
            for comment in comments:
                comment_str =  comment["body"].strip()
                fields["comments"] += "%s %s : %s\n" % ( colorfunc(comment["created"], "blue"), colorfunc(comment["author"], "green"), comment_str )
        children_string = ""
        if mode > 1:
            description = (issue.setdefault("description", "") or "").split("\n")
            fields["description"] = "\n".join([description[0]] + [" "*23 + k for k in description[1:]])


            for child in self.search_issues_jql("parent=%s" % issue["key"]):
                child_type = JiraBridge.object_from_key(child["type"], self.get_subtask_issue_types)["name"].lower()
                key = ("%s" % child_type).ljust(20)
                value = "%s (%s) %s" % (
                    child["key"], child["summary"], colorfunc("%s/browse/%s" % (self.base_url, child["key"]), "white", attrs=['underline'])
                )
                children_string += "%s : %s\n" % (key, value)
        if comments_only:
            return fields["comments"].strip()
        elif mode < 0:
            url_str = colorfunc(parse.urljoin(self.base_url, "/browse/%s" % (issue["key"])), "white", attrs=["underline"])
            ret_str = colorfunc(issue["key"], status_color) + " " + issue.setdefault("summary", "") + " " + url_str
            if not COLOR:
                ret_str += " [%s] " % self.get_statuses()[issue["status"]]
            return ret_str
        for k, v in fields.items():
            if not v:
                fields[k] = ""
        formatted = "\n".join(" : ".join((k.ljust(20), v)) for k, v in fields.items() if not k == 'comments') + "\n"
        formatted += children_string
        if "comments" in fields:
            formatted += fields["comments"]
        return formatted
Example #8
0
    def format_issue(self, issue, mode=0, formatter=None, comments_only=False):
        fields = {}
        status_color = "blue"
        status_from_id = JiraBridge.object_from_key(
            issue.setdefault('status', '1'),
            self.get_statuses
        )
        if not status_from_id:
            status_from_id = self.get_status(issue.setdefault('status', '1'))

        status_string = (status_from_id and status_from_id['name']) or 'unknown'

        status_category = status_from_id.get('statusCategory', {})
        if status_category:
            status_color = status_category.get('colorName')
            if status_color:
                status_color = status_color.split("-")[0]
            if status_color not in termcolor.COLORS:
                status_color = None
        if not status_color:
            if status_string.lower() in ["resolved", "closed", "done"]:
                status_color = "green"
            elif status_string.lower() in ["open", "unassigned", "reopened", "to do"]:
                status_color = "red"
        list_fields = set(['versions', 'fixversions'])

        special_fields = {
            "status": self.get_statuses,
            "priority": self.get_priorities,
            "type": lambda: dict(list(self.get_issue_types().items()) + list(self.get_subtask_issue_types().items()))
        }
        special_field_fallback = {
            "status": self.get_status,
            "type": self.get_issue_type
        }
        if formatter:
            groups = re.compile("(%([\w]+))").findall(formatter)
            ret_str = formatter
            for k, v in groups:
                if v.lower() in special_fields.keys():
                    key = issue[v.lower()]
                    data = "" or JiraBridge.object_from_key(key, special_fields[v.lower()]).get("name")
                    if not data and v.lower() in special_field_fallback:
                        data = special_field_fallback[v.lower()](key).get("name")
                    ret_str = ret_str.replace(k, data)
                elif v.lower() in list_fields:
                    fix_versions = ", ".join(v.name for v in issue.get('fixVersions', []))
                    ret_str = ret_str.replace(k, fix_versions)
                else:
                    ret_str = ret_str.replace(k, str(issue.setdefault(v.lower(), "")))
            return ret_str

        if mode >= 0:
            # minimal
            fields["issue"] = issue["key"]
            fields["status"] = colorfunc(
                JiraBridge.object_from_key(
                    issue["status"],
                    self.get_statuses
                ).get("name", self.get_status(issue["status"])['name'])
                , status_color
            )
            fields["reporter"] = issue.setdefault("reporter","")
            fields["assignee"] = issue.setdefault("assignee","")
            fields["summary"] = issue.setdefault("summary","")
            fields["link"] = colorfunc(
                "%s/browse/%s" % (
                    self.base_url, issue["key"]
                ), "white", attrs=["underline"]
            )
        if mode == 1 or comments_only:
            fields["description"] = issue.setdefault("description","") or ""
            if not issue.get("priority", ""):
                fields["priority"] = ""
            else:
                fields["priority"] = JiraBridge.object_from_key(issue["priority"], self.get_priorities)["name"]
            fields["type"] = JiraBridge.object_from_key(
                issue["type"],
                self.get_issue_types if 'parent' not in issue else self.get_subtask_issue_types
            ).get("name",  self.get_issue_type(issue["type"]))
            fields["comments"] = "\n"
            comments = self.get_issue_comments(issue["key"])
            for comment in comments:
                comment_str =  comment["body"].strip()
                fields["comments"] += "%s %s : %s\n" % ( colorfunc(comment["created"], "blue"), colorfunc(comment["author"], "green"), comment_str )
        children_string = ""
        if mode > 1:
            description = (issue.setdefault("description", "") or "").split("\n")
            fields["description"] = "\n".join([description[0]] + [" "*23 + k for k in description[1:]])

            for child in self.search_issues_jql("parent=%s" % issue["key"]):
                child_type = JiraBridge.object_from_key(child["type"], self.get_subtask_issue_types)["name"].lower()
                key = ("%s" % child_type).ljust(20)
                value = "%s (%s) %s" % (
                    child["key"], child["summary"], colorfunc("%s/browse/%s" % (self.base_url, child["key"]), "white", attrs=['underline'])
                )
                children_string += "%s : %s\n" % (key, value)
        if comments_only:
            return fields["comments"].strip()
        elif mode < 0:
            url_str = colorfunc(parse.urljoin(self.base_url, "/browse/%s" % (issue["key"])), "white", attrs=["underline"])
            ret_str = colorfunc(issue["key"], status_color) + " " + issue.setdefault("summary", "") + " " + url_str
            if not COLOR:
                ret_str += " [%s] " % status_string
            return ret_str
        for k, v in fields.items():
            if not v:
                fields[k] = ""
        formatted = ""
        for k, v in fields.items():
            if not k == 'comments':
                formatted += ' : '.join((k.ljust(20), str(v))) + '\n'
        formatted += children_string
        if "comments" in fields:
            formatted += fields["comments"]
        return formatted
Example #9
0
    def format_issue(self, issue, mode=0, formatter=None, comments_only=False):
        fields = {}
        status_color = "blue"
        status_string = JiraBridge.object_from_key(
            issue.setdefault('status', '1'),
            self.get_statuses)["name"].lower()

        if status_string in ["resolved", "closed", "done"]:
            status_color = "green"
        elif status_string in ["open", "unassigned", "reopened", "to do"]:
            status_color = "red"

        special_fields = {
            "status": self.get_statuses,
            "priority": self.get_priorities,
            "type": self.get_issue_types
        }

        if formatter:
            groups = re.compile("(%([\w]+))").findall(formatter)
            ret_str = formatter
            for k, v in groups:
                if v.lower() in special_fields.keys():
                    key = issue[v.lower()]
                    data = "" or JiraBridge.object_from_key(
                        key, special_fields[v.lower()])["name"]
                    ret_str = ret_str.replace(k, data)
                else:
                    ret_str = ret_str.replace(
                        k, str(issue.setdefault(v.lower(), "")))
            return ret_str

        if mode >= 0:
            # minimal
            fields["issue"] = issue["key"]
            fields["status"] = colorfunc(
                JiraBridge.object_from_key(issue["status"],
                                           self.get_statuses)["name"],
                status_color)
            fields["reporter"] = issue.setdefault("reporter", "")
            fields["assignee"] = issue.setdefault("assignee", "")
            fields["summary"] = issue.setdefault("summary", "")
            fields["link"] = colorfunc(parse.urljoin(
                self.base_url, "/browse/%s" % (issue["key"])),
                                       "white",
                                       attrs=["underline"])
        if mode == 1 or comments_only:
            fields["description"] = issue.setdefault("description", "") or ""
            if not issue.get("priority", ""):
                self.fields["priority"] = ""
            else:
                fields["priority"] = JiraBridge.object_from_key(
                    issue["priority"], self.get_priorities)["name"]
            fields["type"] = JiraBridge.object_from_key(
                issue["type"], self.get_issue_types)["name"]
            fields["comments"] = "\n"
            comments = self.get_issue_comments(issue["key"])
            for comment in comments:
                comment_str = comment["body"].strip()
                fields["comments"] += "%s %s : %s\n" % (
                    colorfunc(comment["created"], "blue"),
                    colorfunc(comment["author"], "green"), comment_str)
        children_string = ""
        if mode > 1:
            description = (issue.setdefault("description", "")
                           or "").split("\n")
            fields["description"] = "\n".join(
                [description[0]] + [" " * 23 + k for k in description[1:]])

            for child in self.search_issues_jql("parent=%s" % issue["key"]):
                child_type = JiraBridge.object_from_key(
                    child["type"],
                    self.get_subtask_issue_types)["name"].lower()
                key = ("%s" % child_type).ljust(20)
                value = "%s (%s) %s" % (child["key"], child["summary"],
                                        colorfunc(
                                            "%s/browse/%s" %
                                            (self.base_url, child["key"]),
                                            "white",
                                            attrs=['underline']))
                children_string += "%s : %s\n" % (key, value)
        if comments_only:
            return fields["comments"].strip()
        elif mode < 0:
            url_str = colorfunc(parse.urljoin(self.base_url,
                                              "/browse/%s" % (issue["key"])),
                                "white",
                                attrs=["underline"])
            ret_str = colorfunc(issue["key"],
                                status_color) + " " + issue.setdefault(
                                    "summary", "") + " " + url_str
            if not COLOR:
                ret_str += " [%s] " % self.get_statuses()[issue["status"]]
            return ret_str
        for k, v in fields.items():
            if not v:
                fields[k] = ""
        formatted = "\n".join(" : ".join((k.ljust(20), v))
                              for k, v in fields.items()
                              if not k == 'comments') + "\n"
        formatted += children_string
        if "comments" in fields:
            formatted += fields["comments"]
        return formatted
Example #10
0
 def eval(self):
     if self.args.extra_fields:
         extras = self.extract_extras()
         self.jira.update_issue(self.args.issue, **extras)
     if self.args.issue_comment:
         self.jira.add_comment(
             self.args.issue,
             self.args.issue_comment if isinstance(self.args.issue_comment, basestring) else get_text_from_editor(),
         )
         print_output(self.jira.format_issue(self.jira.get_issue(self.args.issue), comments_only=True))
     elif self.args.issue_priority:
         self.jira.update_issue(self.args.issue, priority=self.jira.get_priorities()[self.args.issue_priority]["id"])
     elif self.args.issue_components:
         components = dict((k["name"], k["id"]) for k in self.jira.get_components(self.args.issue.split("-")[0]))
         current_components = set(k["name"] for k in self.jira.get_issue(self.args.issue)["components"])
         if not set(self.args.issue_components).issubset(current_components):
             new_components = current_components.union(self.args.issue_components)
             self.jira.update_issue(self.args.issue, components=[components[k] for k in new_components])
             print_output(
                 colorfunc(
                     "component(s): %s added to %s" % (",".join(self.args.issue_components), self.args.issue),
                     "green",
                 )
             )
         else:
             raise UsageWarning(
                 "component(s):[%s] already exist in %s" % (",".join(self.args.issue_components), self.args.issue)
             )
     elif self.args.issue_transition:
         self.jira.transition_issue(self.args.issue, self.args.issue_transition.lower(), self.args.resolution)
         print_output(colorfunc('%s transitioned to "%s"' % (self.args.issue, self.args.issue_transition), "green"))
     elif self.args.issue_assignee:
         self.jira.assign_issue(self.args.issue, self.args.issue_assignee)
         print_output(colorfunc("%s assigned to %s" % (self.args.issue, self.args.issue_assignee), "green"))
     elif self.args.labels:
         self.jira.add_labels(self.args.issue, self.args.labels, True)
         print_output(colorfunc("%s labelled with %s" % (self.args.issue, ",".join(self.args.labels)), "green"))
     if self.args.affects_version:
         self.jira.add_versions(self.args.issue, self.args.affects_version, "affects")
         print_output(
             colorfunc(
                 "Added affected version(s) %s to %s" % (",".join(self.args.affects_version), self.args.issue),
                 "green",
             )
         )
     if self.args.remove_affects_version:
         self.jira.remove_versions(self.args.issue, self.args.remove_affects_version, "affects")
         print_output(
             colorfunc(
                 "Removed affected version(s) %s from %s"
                 % (",".join(self.args.remove_affects_version), self.args.issue),
                 "blue",
             )
         )
     if self.args.fix_version:
         self.jira.add_versions(self.args.issue, self.args.fix_version, "fix")
         print_output(
             colorfunc(
                 "Added fixed version(s) %s to %s" % (",".join(self.args.fix_version), self.args.issue), "green"
             )
         )
     if self.args.remove_fix_version:
         self.jira.remove_versions(self.args.issue, self.args.remove_fix_version, "fix")
         print_output(
             colorfunc(
                 "Removed fixed version(s) %s from %s" % (",".join(self.args.remove_fix_version), self.args.issue),
                 "blue",
             )
         )
Example #11
0
 def eval(self):
     if self.args.extra_fields:
         extras = self.extract_extras()
         self.jira.update_issue(self.args.issue, **extras)
     if self.args.issue_comment:
         self.jira.add_comment(
             self.args.issue, self.args.issue_comment if isinstance(
                 self.args.issue_comment, basestring) else
             get_text_from_editor())
         print_output(
             self.jira.format_issue(self.jira.get_issue(self.args.issue),
                                    comments_only=True))
     elif self.args.issue_priority:
         self.jira.update_issue(self.args.issue,
                                priority=self.jira.get_priorities()[
                                    self.args.issue_priority]["id"])
     elif self.args.issue_components:
         components = dict((k["name"], k["id"])
                           for k in self.jira.get_components(
                               self.args.issue.split("-")[0]))
         current_components = set(
             k["name"]
             for k in self.jira.get_issue(self.args.issue)["components"])
         if not set(
                 self.args.issue_components).issubset(current_components):
             new_components = current_components.union(
                 self.args.issue_components)
             self.jira.update_issue(
                 self.args.issue,
                 components=[components[k] for k in new_components])
             print_output(
                 colorfunc(
                     'component(s): %s added to %s' % (",".join(
                         self.args.issue_components), self.args.issue),
                     'green'))
         else:
             raise UsageWarning(
                 "component(s):[%s] already exist in %s" %
                 (",".join(self.args.issue_components), self.args.issue))
     elif self.args.issue_transition:
         self.jira.transition_issue(self.args.issue,
                                    self.args.issue_transition.lower(),
                                    self.args.resolution)
         print_output(
             colorfunc(
                 '%s transitioned to "%s"' %
                 (self.args.issue, self.args.issue_transition), 'green'))
     elif self.args.issue_assignee:
         self.jira.assign_issue(self.args.issue, self.args.issue_assignee)
         print_output(
             colorfunc(
                 '%s assigned to %s' %
                 (self.args.issue, self.args.issue_assignee), 'green'))
     elif self.args.labels:
         self.jira.add_labels(self.args.issue, self.args.labels, True)
         print_output(
             colorfunc(
                 '%s labelled with %s' %
                 (self.args.issue, ",".join(self.args.labels)), 'green'))
     if self.args.affects_version:
         self.jira.add_versions(self.args.issue, self.args.affects_version,
                                'affects')
         print_output(
             colorfunc(
                 'Added affected version(s) %s to %s' %
                 (",".join(self.args.affects_version), self.args.issue),
                 'green'))
     if self.args.remove_affects_version:
         self.jira.remove_versions(self.args.issue,
                                   self.args.remove_affects_version,
                                   'affects')
         print_output(
             colorfunc(
                 'Removed affected version(s) %s from %s' % (",".join(
                     self.args.remove_affects_version), self.args.issue),
                 'blue'))
     if self.args.fix_version:
         self.jira.add_versions(self.args.issue, self.args.fix_version,
                                'fix')
         print_output(
             colorfunc(
                 'Added fixed version(s) %s to %s' %
                 (",".join(self.args.fix_version), self.args.issue),
                 'green'))
     if self.args.remove_fix_version:
         self.jira.remove_versions(self.args.issue,
                                   self.args.remove_fix_version, 'fix')
         print_output(
             colorfunc(
                 'Removed fixed version(s) %s from %s' %
                 (",".join(self.args.remove_fix_version), self.args.issue),
                 'blue'))