diff --git a/redminecli/gen_tree.py b/redminecli/gen_tree.py new file mode 100644 index 0000000..73ede02 --- /dev/null +++ b/redminecli/gen_tree.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +class Node: + def __init__(self, value): + self.value = value + self.children = [] + +def gen_children_nodes(children_issues): + children_nodes = [] + for child_issue in children_issues: + id = child_issue['id'] + subject = child_issue['subject'] + child_node = Node("[%d] %s" % (id, subject)) + + children_nodes.append(child_node) + if 'children' in child_issue: + child_node.children = gen_children_nodes(child_issue['children']) + return children_nodes + + +def show_subtask_tree(children_issues): + main_node = Node('') + main_node.children = gen_children_nodes(children_issues) + + return show(main_node) + + +def show(node, seq_is_last_child = []): + ret = "" + if seq_is_last_child: + for b in seq_is_last_child[:-1]: + if b: + ret += u" " + else: + ret += u"│ " + if seq_is_last_child[-1]: + ret += u"└── " + else: + ret += u"├── " + ret = ret + node.value + for idx, c in enumerate(node.children): + ret = ret + u"\n" + show(c, seq_is_last_child + [idx == len(node.children)-1]) + return ret + diff --git a/redminecli/main.py b/redminecli/main.py index ce58516..e7d4c45 100755 --- a/redminecli/main.py +++ b/redminecli/main.py @@ -1,4 +1,5 @@ #!/usr/bin/env python +# -*- coding: utf-8 -*- from __future__ import print_function @@ -16,7 +17,9 @@ from configparser import ConfigParser + from . import __version__ +from . import gen_tree config_file_path = "~/.redmine-cli" @@ -95,9 +98,22 @@ def cmd_issues(args): print_issues(data) def cmd_issue(args): - data = get_json("/issues/{issue}.json".format(issue=args.issue_id)) - - print(data["issue"]["subject"]) + data = get_json("/issues/{issue}.json?include=children".format(issue=args.issue_id)) + is_verbose = args.verbose + + if is_verbose: + issue = data["issue"] + print("Title: %s" % issue["subject"]) + print("Status: %s" % issue["status"]["name"]) + print("Author: %s" % issue["author"]["name"]) + print("description:") + #TODO: description can be html/markdown etc. + print(issue["description"]) + if 'children' in issue: + print(gen_tree.show_subtask_tree(issue['children'])) + + else: + print(data["issue"]["subject"]) def cmd_query(args): data = get_json("/projects/{project}/issues.json".format(project=args.project), @@ -138,6 +154,13 @@ def main(): parser_issue = subparsers.add_parser('issue', help="show details on an issue") parser_issue.add_argument("issue_id") + parser_issue.add_argument( + "-v", + "--verbose", + action="store_true", + default=False + ) + parser_issue.set_defaults(func=cmd_issue) args = parser.parse_args()