Mercurial > getan > getan
annotate getan/contrib/getan-eval.py @ 283:0746534b7f97
Add first draft for a template based getan time evaluation
At the end the getan-eval script should replace zeiterfassung.py and
wochenbericht.
author | Björn Ricks <bjoern.ricks@intevation.de> |
---|---|
date | Tue, 16 Apr 2013 09:47:07 +0200 |
parents | |
children | 3a1786947673 |
rev | line source |
---|---|
283
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
1 #!/usr/bin/env python |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
2 # -*- coding: utf-8 -*- |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
3 # |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
4 # (c) 2013 by Björn Ricks <bjoern.ricks@intevation.de> |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
5 # |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
6 # This is Free Software licensed under the terms of GPLv3 or later. |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
7 # For details see LICENSE coming with the source of 'getan'. |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
8 # |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
9 |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
10 import os.path |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
11 import sqlite3 as db |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
12 import sys |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
13 |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
14 from datetime import date, datetime, timedelta |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
15 from optparse import OptionParser |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
16 |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
17 from jinja2 import Environment, ChoiceLoader, FileSystemLoader, PackageLoader |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
18 |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
19 from getan.contrib.zeiterfassung import unix_week |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
20 |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
21 DEFAULT_DATABASE = "time.db" |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
22 |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
23 def tolerant_close(c): |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
24 if c: |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
25 try: |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
26 c.close() |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
27 except: |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
28 pass |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
29 |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
30 def main(): |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
31 parser = OptionParser() |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
32 parser.add_option("-d", "--database", dest="database", |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
33 help="getan database", metavar="DATABASE") |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
34 parser.add_option("-t", "--template", dest="template", metavar="TEMPLATE", |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
35 help="name of getan template") |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
36 parser.add_option("-u", "--user", dest="user", help="name of user") |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
37 parser.add_option("-p", "--project", dest="project", |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
38 help="key of output project") |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
39 parser.add_option("-w", "--week", type="int", dest="week", |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
40 help="week of year") |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
41 parser.add_option("-y", "--year", type="int", dest="year", help="year") |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
42 parser.add_option("-c", "--lastweek", dest="entries of last working week", |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
43 action="store_true") |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
44 |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
45 (options, args) = parser.parse_args() |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
46 |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
47 if os.path.isfile(DEFAULT_DATABASE): |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
48 database = os.path.abspath(DEFAULT_DATABASE) |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
49 else: |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
50 database = os.path.expanduser(os.path.join("~", ".getan", |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
51 DEFAULT_DATABASE)) |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
52 if options.database: |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
53 database = options.database |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
54 |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
55 if options.user: |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
56 user = options.user |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
57 else: |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
58 user = os.getenv("USER") |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
59 |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
60 year = options.year |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
61 week = options.week |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
62 u_week = None |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
63 |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
64 if not year: |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
65 year = int(date.today().strftime("%Y")) |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
66 |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
67 if week is None: |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
68 week = (datetime.now()-timedelta(7)).isocalendar()[1] |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
69 |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
70 u_week = "%02d" % unix_week(week, year) |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
71 |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
72 |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
73 if not os.path.isfile(database): |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
74 print >> sys.stderr, "'%s' does not exist or is not a file." % database |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
75 sys.exit(1) |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
76 |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
77 loader = ChoiceLoader([FileSystemLoader(os.path.expanduser(os.path.join( |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
78 "~", ".getan", "templates"))), |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
79 PackageLoader("getan")]) |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
80 env = Environment(loader=loader) |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
81 |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
82 template_name = options.template or "wochenbericht" |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
83 template = env.get_template(template_name) |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
84 |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
85 context = dict() |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
86 context["user"] = user |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
87 context["database"] = database |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
88 context["year"] = year |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
89 context["week"] = week |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
90 context["unix_week"] = u_week |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
91 |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
92 con = None |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
93 cur = None |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
94 try: |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
95 con = db.connect(database) |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
96 cur = con.cursor() |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
97 finally: |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
98 tolerant_close(cur) |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
99 tolerant_close(con) |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
100 |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
101 print template.render(context) |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
102 |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
103 if __name__ == '__main__': |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
104 main() |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
105 |
0746534b7f97
Add first draft for a template based getan time evaluation
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
106 # vim:set ts=4 sw=4 si et sta sts=4 : |