summaryrefslogtreecommitdiff
path: root/hemiptera_html.py
blob: 39146e73d77740398b317682f95866a287d31577 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#!/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
    
        projects.append(k)
        bugs  =[]
        k.bugs = bugs
        os.makedirs(opj(export, i), exist_ok=True)
        devs = get_devs(i)
        dev_avatars = [ generate_avatar(i) for i in devs ]
        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)-1
            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 l in r :
                f = open(l, "rb")
                m = BytesParser(policy=policy.default).parse(f)
                m["Avatar"] = generate_avatar(m["From"])
                replies.append(m)
            b.created = replies[0]["Date"]
            b.avatar = replies[0]["Avatar"]
            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, dev_avatars=dev_avatars))
        f.close()
        k.count = len(k.bugs)
        k.opencount = len([ i for i in k.bugs if not i.closed ])

    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()