From c35389d77608fa78affe4eee331970897707bc97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20P=C3=A9rez-Cerezo?= Date: Fri, 6 Jul 2018 17:34:38 +0200 Subject: first commit --- hemiptera_html.py | 117 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 hemiptera_html.py (limited to 'hemiptera_html.py') diff --git a/hemiptera_html.py b/hemiptera_html.py new file mode 100644 index 0000000..6596c13 --- /dev/null +++ b/hemiptera_html.py @@ -0,0 +1,117 @@ +#!/usr/bin/python + +## HTML exporter for hemiptera +from hemiptera_common import * +import glob + +from email.utils import parsedate_tz, mktime_tz, formatdate, parsedate_to_datetime +from jinja2 import Environment, FileSystemLoader +templatedir = os.path.join(os.path.dirname(os.path.realpath(__file__)), "templates") +file_loader = FileSystemLoader(templatedir) + +env = Environment(loader=file_loader) +template = env.get_template("main_page.html") +buglist = env.get_template("buglist.html") +bugt = env.get_template("bug.html") +from hemiptera_avatar_gen import generate_avatar +export = opj(basedir, "export") + +## TODO: Choose template system, create nice template +class Project() : + pass +class Bug() : + pass +### https://stackoverflow.com/questions/410221/natural-relative-days-in-python +import datetime +def prettydate(d): + if not d.tzname() : + d = d.replace(tzinfo=datetime.timezone.utc) + diff = datetime.datetime.utcnow().replace(tzinfo=datetime.timezone.utc) - d + s = diff.seconds + if diff.days > 7 or diff.days < 0: + return d.strftime('%Y-%m-%d') + elif diff.days == 1: + return '1 day ago' + elif diff.days > 1: + return '{} days ago'.format(diff.days) + elif s <= 1: + return 'just now' + elif s < 60: + return '{} seconds ago'.format(s) + elif s < 120: + return '1 minute ago' + elif s < 3600: + return '{} minutes ago'.format(s//60) + elif s < 7200: + return '1 hour ago' + else: + return '{} hours ago'.format(s//3600) + + + +def create_project_list() : + projects = [] + for i in os.listdir(opj(basedir, "projects")) : + k = Project() + k.name = i + k.count = len(os.listdir(opj(basedir, "projects", i))) -1 + projects.append(k) + bugs =[] + os.makedirs(opj(export, i), exist_ok=True) + devs = get_devs(i) + for j in glob.glob(opj(basedir, "projects", i, "[0-9]*")) : + b = Bug() + b.closed = os.path.exists(opj(j, "closed")) + if b.closed : + b.closeddate = open(opj(j,"closed"), "r").read() + + b.id = os.path.basename(j) + r = glob.glob(opj(j, "[0-9]*")) + r.sort() + b.replies = len(r) + f = open(r[0], "rb") + m = BytesParser(policy=policy.default).parse(f) + b.subject = m["Subject"] + if not b.subject : + b.subject = "No subject" + bugs.append(b) + replies = [] + for k in r : + f = open(k, "rb") + m = BytesParser(policy=policy.default).parse(f) + m["Avatar"] = generate_avatar(m["From"]) + replies.append(m) + b.created = replies[0]["Date"] + if b.created : + b.nicecreated = prettydate(parsedate_to_datetime(b.created)) + else : + b.nicecreated = "unknown" + b.last_reply = replies[-1]["Date"] + if b.last_reply : + b.nicereply = prettydate(parsedate_to_datetime(b.last_reply)) + else : + b.nicereply = "unknown" + f = open(opj(export, i, str(b.id)+".html"), "w") + f.write(bugt.render(DOMAIN=DOMAIN, replies=replies, prname=i, bug=b, devs=devs)) + bugs.sort(key=lambda b: int(b.id), reverse=True) + bugs.sort(key=lambda b: int(b.closed)) + f = open(opj(export, i, "index.html"), "w") + f.write(buglist.render(DOMAIN=DOMAIN, bugs=bugs, prname=i)) + f.close() + f = open(opj(export, "index.html"), "w") + f.write(template.render(DOMAIN=DOMAIN, projects=projects)) + ## Create the project list + + +def create_buglist(project) : + ## Create bug list for project + pass + +def show_bug(bug_nr): + ## Display all the replies to bug with number bug_nr + pass + + + +if __name__ == "__main__" : + create_project_list() -- cgit v1.2.3