From d8acb2a5980b7e60087baba75344a7df37253122 Mon Sep 17 00:00:00 2001 From: Kuninori Morimoto Date: Tue, 12 Feb 2019 14:23:17 +0900 Subject: add PeriJect viewer Very simple 1st verstion Signed-off-by: Kuninori Morimoto --- scripts/view.py | 122 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100755 scripts/view.py (limited to 'scripts/view.py') diff --git a/scripts/view.py b/scripts/view.py new file mode 100755 index 0000000..b73095c --- /dev/null +++ b/scripts/view.py @@ -0,0 +1,122 @@ +#! /usr/bin/env python3 +#=============================== +# +# viewer +# +# 2019/02/07 Kuninori Morimoto +#=============================== +import yaml +import sys +import os +import re + +import base + +#==================================== +# +# viewer +# +#==================================== +class viewer(base.base): + + #-------------------- + # parse + # + # -f : with file + # --oneline: one line + #-------------------- + def parse(self, arg): + for arg in arg: + if (arg == "-f"): + self.with_file = 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.one_line = 0 + + self.parse(arg) + + #-------------------- + # make_one + # for --oneline + #-------------------- + def make_one(self, file, data): + + if (len(self.text) > 0): + self.text += "\n" + + # show "key" + self.text += "{}: {}".format( + self.color("key", data["key"]), + data["title"]) + + #-------------------- + # make_full + # for normal + #-------------------- + def make_full(self, file, data): + + if (len(self.text) > 0): + self.text += "\n" + + # show "key" + self.text += "{}, {}, {}\n".format( + self.color("key", data["key"]), + self.color("status", data["status"]), + self.color("team", data["team"])); + + # show title + self.text += "Title: {}\n".format(data["title"]) + + # show assignee + self.text += "Assignee: {}\n".format(data["assignee"]) + + if (self.with_file): + self.text += "File: {}\n".format( + os.path.abspath(file).replace("{}/".format(self.top()), "")) + + # show comments + comments = data["comments"] + if (comments): + for comment in comments: + self.text += "\n{}".format(comment) + + #-------------------- + # show + #-------------------- + def show(self): + for f in self.files: + F = open(f, "r+") + data = yaml.load(F) + F.close() + + if (self.one_line): + self.make_one(f, data) + else: + self.make_full(f, data) + + # 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() -- cgit v1.2.3 From 5b3ba7911d0d2c64da59c5020f9307c1222edc58 Mon Sep 17 00:00:00 2001 From: Kuninori Morimoto Date: Wed, 13 Feb 2019 10:39:42 +0900 Subject: view: add get_data() To support relationships, directly getting Yaml data on each function is more useful. Let's add get_data() and do it. Signed-off-by: Kuninori Morimoto --- scripts/view.py | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) (limited to 'scripts/view.py') diff --git a/scripts/view.py b/scripts/view.py index b73095c..04928e1 100755 --- a/scripts/view.py +++ b/scripts/view.py @@ -48,11 +48,22 @@ class viewer(base.base): self.parse(arg) + #-------------------- + # get_data + #-------------------- + def get_data(self, file): + F = open(file, "r+") + data = yaml.load(F) + F.close() + return data + #-------------------- # make_one # for --oneline #-------------------- - def make_one(self, file, data): + def make_one(self, file): + + data = self.get_data(file) if (len(self.text) > 0): self.text += "\n" @@ -66,7 +77,9 @@ class viewer(base.base): # make_full # for normal #-------------------- - def make_full(self, file, data): + def make_full(self, file): + + data = self.get_data(file) if (len(self.text) > 0): self.text += "\n" @@ -98,14 +111,10 @@ class viewer(base.base): #-------------------- def show(self): for f in self.files: - F = open(f, "r+") - data = yaml.load(F) - F.close() - if (self.one_line): - self.make_one(f, data) + self.make_one(f) else: - self.make_full(f, data) + self.make_full(f) # escape " -> \" # otherwise " will be disappeared -- cgit v1.2.3 From f71c04567d20617cf10b3818903159a0744092d8 Mon Sep 17 00:00:00 2001 From: Kuninori Morimoto Date: Wed, 13 Feb 2019 11:46:32 +0900 Subject: view: add -r option to show relationships Signed-off-by: Kuninori Morimoto --- scripts/view.py | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 60 insertions(+), 8 deletions(-) (limited to 'scripts/view.py') diff --git a/scripts/view.py b/scripts/view.py index 04928e1..308d1db 100755 --- a/scripts/view.py +++ b/scripts/view.py @@ -23,12 +23,15 @@ 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 @@ -44,10 +47,31 @@ class viewer(base.base): self.text = "" self.files = [] self.with_file = 0 + self.with_rel = 0 self.one_line = 0 self.parse(arg) + #-------------------- + # 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 + #-------------------- # get_data #-------------------- @@ -61,29 +85,50 @@ class viewer(base.base): # make_one # for --oneline #-------------------- - def make_one(self, file): - - data = self.get_data(file) + 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 + + data = self.get_data(file) + # show "key" self.text += "{}: {}".format( self.color("key", data["key"]), data["title"]) + # show relationships + relationships = 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, file): - - data = self.get_data(file) + 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 + + data = self.get_data(file) + # show "key" self.text += "{}, {}, {}\n".format( self.color("key", data["key"]), @@ -106,15 +151,22 @@ class viewer(base.base): for comment in comments: self.text += "\n{}".format(comment) + # show relationships + relationships = 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(f) + self.make_one(None, f) else: - self.make_full(f) + self.make_full(None, f) # escape " -> \" # otherwise " will be disappeared -- cgit v1.2.3 From 39f25bf805115fabba4290328492aa23db0d7013 Mon Sep 17 00:00:00 2001 From: Kuninori Morimoto Date: Mon, 25 Feb 2019 15:53:37 +0900 Subject: view: add set_data/get_data To be more object, let's add set_data/get_data Signed-off-by: Kuninori Morimoto --- scripts/view.py | 40 +++++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 15 deletions(-) (limited to 'scripts/view.py') diff --git a/scripts/view.py b/scripts/view.py index 308d1db..9486e51 100755 --- a/scripts/view.py +++ b/scripts/view.py @@ -51,6 +51,8 @@ class viewer(base.base): self.one_line = 0 self.parse(arg) + self.data = {} + self.file = "" #-------------------- # get_item @@ -73,13 +75,21 @@ class viewer(base.base): return data #-------------------- + # set_data # get_data #-------------------- - def get_data(self, file): + def set_data(self, file): F = open(file, "r+") - data = yaml.load(F) + self.data = yaml.load(F) F.close() - return data + self.file = file + + def get_data(self, key): + data = self.data[key] + if (data): + return data + else: + return [] #-------------------- # make_one @@ -97,15 +107,15 @@ class viewer(base.base): self.text += self.color("error", "No such task ({})".format(file)) return - data = self.get_data(file) + self.set_data(file) # show "key" self.text += "{}: {}".format( - self.color("key", data["key"]), - data["title"]) + self.color("key", self.get_data("key")), + self.get_data("title")) # show relationships - relationships = data["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()), @@ -127,32 +137,32 @@ class viewer(base.base): self.text += self.color("error", "No such task ({})".format(file)) return - data = self.get_data(file) + self.set_data(file) # show "key" self.text += "{}, {}, {}\n".format( - self.color("key", data["key"]), - self.color("status", data["status"]), - self.color("team", data["team"])); + 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(data["title"]) + self.text += "Title: {}\n".format(self.get_data("title")) # show assignee - self.text += "Assignee: {}\n".format(data["assignee"]) + self.text += "Assignee: {}\n".format(self.get_data("assignee")) if (self.with_file): self.text += "File: {}\n".format( os.path.abspath(file).replace("{}/".format(self.top()), "")) # show comments - comments = data["comments"] + comments = self.get_data("comments") if (comments): for comment in comments: self.text += "\n{}".format(comment) # show relationships - relationships = data["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()), -- cgit v1.2.3 From 17a5ae0b96fd0517bbf4546f3d20ba3484f5df24 Mon Sep 17 00:00:00 2001 From: Kuninori Morimoto Date: Wed, 6 Mar 2019 10:39:27 +0900 Subject: view: tidyup get_data() Some key might not exist on yaml data. In such case, it will be error on get_data(). This patch return [] when no data or no key case Signed-off-by: Kuninori Morimoto --- scripts/view.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'scripts/view.py') diff --git a/scripts/view.py b/scripts/view.py index 9486e51..baad0f3 100755 --- a/scripts/view.py +++ b/scripts/view.py @@ -85,11 +85,11 @@ class viewer(base.base): self.file = file def get_data(self, key): - data = self.data[key] - if (data): - return data - else: - return [] + if (key in self.data): + data = self.data[key] + if (data): + return data + return [] #-------------------- # make_one -- cgit v1.2.3 From 0afee29de0672e7d8244d65c610aa0a009243c41 Mon Sep 17 00:00:00 2001 From: Kuninori Morimoto Date: Wed, 6 Mar 2019 10:55:10 +0900 Subject: html: add NoAssignee support There are no assignee tasks, and html.py will be error at such tasks. This patch care it. Signed-off-by: Kuninori Morimoto --- scripts/view.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'scripts/view.py') diff --git a/scripts/view.py b/scripts/view.py index baad0f3..48c6f71 100755 --- a/scripts/view.py +++ b/scripts/view.py @@ -149,7 +149,9 @@ class viewer(base.base): self.text += "Title: {}\n".format(self.get_data("title")) # show assignee - self.text += "Assignee: {}\n".format(self.get_data("assignee")) + assignee = self.get_data("assignee") + if (len(assignee)): + self.text += "Assignee: {}\n".format(assignee) if (self.with_file): self.text += "File: {}\n".format( -- cgit v1.2.3