summaryrefslogtreecommitdiff
path: root/scripts/view.py
diff options
context:
space:
mode:
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>2019-07-22 09:44:47 +0900
committerKuninori Morimoto <kuninori.morimoto.gx@renesas.com>2019-07-22 09:44:47 +0900
commit1c36067654b64e5233248aba5ce9867d59c15fd3 (patch)
tree71f25d91c027cf6c6a53fd4ab0189fa6806b0296 /scripts/view.py
parent1f3b1462200ad21cea1d9917ad88f709ba2e03b2 (diff)
parentfb3832fcf446c5e1e52322e254a1d01f77967c77 (diff)
Merge branch 'viewer' into HEAD
Diffstat (limited to 'scripts/view.py')
-rwxr-xr-xscripts/view.py195
1 files changed, 195 insertions, 0 deletions
diff --git a/scripts/view.py b/scripts/view.py
new file mode 100755
index 0000000..48c6f71
--- /dev/null
+++ b/scripts/view.py
@@ -0,0 +1,195 @@
+#! /usr/bin/env python3
+#===============================
+#
+# viewer
+#
+# 2019/02/07 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
+#===============================
+import yaml
+import sys
+import os
+import re
+
+import base
+
+#====================================
+#
+# viewer
+#
+#====================================
+class viewer(base.base):
+
+ #--------------------
+ # parse
+ #
+ # -f : with file
+ # -r : with relationships
+ # --oneline: one line
+ #--------------------
+ def parse(self, arg):
+ for arg in arg:
+ if (arg == "-f"):
+ self.with_file = 1
+ elif (arg == "-r"):
+ self.with_rel = 1
+ elif (arg == "--oneline"):
+ self.one_line = 1
+ elif (os.path.exists(arg) and
+ re.match("{}/projects".format(self.top()),
+ os.path.abspath(arg))):
+ self.files += [arg]
+
+ #--------------------
+ # __init__
+ #--------------------
+ def __init__(self, arg):
+
+ self.text = ""
+ self.files = []
+ self.with_file = 0
+ self.with_rel = 0
+ self.one_line = 0
+
+ self.parse(arg)
+ self.data = {}
+ self.file = ""
+
+ #--------------------
+ # get_item
+ #--------------------
+ def get_item(self, data):
+ # Ughhhh
+ # All Yaml data is "dictionary", and not simple to getting data !!
+ # ( `⌒´)d I hate you !!
+ return list(data)[0]
+
+ #--------------------
+ # get_related_file
+ #--------------------
+ def get_related_file(self, data):
+ file = self.run("egrep -l \"key:\s+{}\" -r {}/projects".\
+ format(data, self.top()))
+ if (file):
+ return file
+ else:
+ return data
+
+ #--------------------
+ # set_data
+ # get_data
+ #--------------------
+ def set_data(self, file):
+ F = open(file, "r+")
+ self.data = yaml.load(F)
+ F.close()
+ self.file = file
+
+ def get_data(self, key):
+ if (key in self.data):
+ data = self.data[key]
+ if (data):
+ return data
+ return []
+
+ #--------------------
+ # make_one
+ # for --oneline
+ #--------------------
+ def make_one(self, tag, file):
+
+ if (len(self.text) > 0):
+ self.text += "\n"
+
+ if (tag):
+ self.text += "{:<22}".format(self.color("tag", tag))
+
+ if (not os.path.exists(file)):
+ self.text += self.color("error", "No such task ({})".format(file))
+ return
+
+ self.set_data(file)
+
+ # show "key"
+ self.text += "{}: {}".format(
+ self.color("key", self.get_data("key")),
+ self.get_data("title"))
+
+ # show relationships
+ relationships = self.get_data("relationships")
+ if ((not tag) and self.with_rel and relationships):
+ for d in relationships:
+ self.make_one(self.get_item(d.keys()),
+ self.get_related_file(self.get_item(d.values())))
+
+ #--------------------
+ # make_full
+ # for normal
+ #--------------------
+ def make_full(self, tag, file):
+
+ if (len(self.text) > 0):
+ self.text += "\n"
+
+ if (tag):
+ self.text += "{:<22}".format(self.color("tag", tag))
+
+ if (not os.path.exists(file)):
+ self.text += self.color("error", "No such task ({})".format(file))
+ return
+
+ self.set_data(file)
+
+ # show "key"
+ self.text += "{}, {}, {}\n".format(
+ self.color("key", self.get_data("key")),
+ self.color("status", self.get_data("status")),
+ self.color("team", self.get_data("team")));
+
+ # show title
+ self.text += "Title: {}\n".format(self.get_data("title"))
+
+ # show assignee
+ assignee = self.get_data("assignee")
+ if (len(assignee)):
+ self.text += "Assignee: {}\n".format(assignee)
+
+ if (self.with_file):
+ self.text += "File: {}\n".format(
+ os.path.abspath(file).replace("{}/".format(self.top()), ""))
+
+ # show comments
+ comments = self.get_data("comments")
+ if (comments):
+ for comment in comments:
+ self.text += "\n{}".format(comment)
+
+ # show relationships
+ relationships = self.get_data("relationships")
+ if ((not tag) and self.with_rel and relationships):
+ for d in relationships:
+ self.make_full(self.get_item(d.keys()),
+ self.get_related_file(self.get_item(d.values())))
+
+ #--------------------
+ # show
+ #--------------------
+ def show(self):
+ for f in self.files:
+ if (self.one_line):
+ self.make_one(None, f)
+ else:
+ self.make_full(None, f)
+
+ # escape " -> \"
+ # otherwise " will be disappeared
+ self.text = self.text.replace("\"", "\\\"");
+ self.do("echo \"{}\" | {}".format(
+ self.text, self.config("viewer")))
+
+#====================================
+#
+# As command
+#
+#====================================
+if __name__=='__main__':
+ viewer(sys.argv).show()