diff options
Diffstat (limited to 'scripts/view.py')
-rwxr-xr-x | scripts/view.py | 195 |
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() |