diff options
Diffstat (limited to 'activity/parser/timecsv.py')
-rw-r--r-- | activity/parser/timecsv.py | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/activity/parser/timecsv.py b/activity/parser/timecsv.py new file mode 100644 index 0000000..7e988eb --- /dev/null +++ b/activity/parser/timecsv.py | |||
@@ -0,0 +1,46 @@ | |||
1 | from cStringIO import StringIO | ||
2 | from .._activitybase import Analysis, parse_rows | ||
3 | |||
4 | |||
5 | DAY_TEMPLATE_TOP = """ | ||
6 | <h2>{day}</h2> | ||
7 | <table class="timecsv"> | ||
8 | <thead> | ||
9 | <tr> | ||
10 | <th>Project</th> | ||
11 | <th>Time Spent</th> | ||
12 | </tr> | ||
13 | </thead> | ||
14 | <tbody> | ||
15 | """ | ||
16 | |||
17 | |||
18 | DAY_TEMPLATE_BOTTOM = """\ | ||
19 | </tbody> | ||
20 | </table> | ||
21 | """ | ||
22 | |||
23 | |||
24 | ROW_TEMPLATE = '\t<tr class="{active}"><td>{task}</td><td>{time}</td></tr>\n' | ||
25 | |||
26 | |||
27 | class Parser: | ||
28 | |||
29 | def __init__(self, raw, request, **kw): | ||
30 | self.request = request | ||
31 | self.analysis = Analysis(parse_rows(raw)) | ||
32 | self.analysis.process() | ||
33 | |||
34 | def format(self, formatter, **kw): | ||
35 | output = StringIO() | ||
36 | |||
37 | for day, rows in self.analysis: | ||
38 | output.write(DAY_TEMPLATE_TOP.format(day=day.strftime('%A %B %d, %Y'))) | ||
39 | |||
40 | for task, (time, still_active) in rows.items(): | ||
41 | output.write(ROW_TEMPLATE.format(task=task, time=time, | ||
42 | active='active' if still_active else '')) | ||
43 | |||
44 | output.write(DAY_TEMPLATE_BOTTOM) | ||
45 | |||
46 | self.request.write(output.getvalue()) | ||