annotate getan @ 0:7eb7886ed8fd

Initial import.
author Sascha L. Teichmann <teichmann@intevation.de>
date Mon, 28 Jul 2008 22:33:36 +0200
parents
children a3fe8e4e9184
rev   line source
0
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
1 #!/usr/bin/env python
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
3 #
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
4 # getan
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
5 # -----
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
6 # (c) 2008 by Sascha L. Teichmann <sascha.teichmann@intevation.de>
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
7 #
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
8 # A python worklog-alike to log what you have 'getan' (done).
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
9 #
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
10 # This is Free Software licensed under the terms of GPLv3 or later.
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
11 # For details see LICENSE coming with the source of 'getan'.
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
12 #
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
13 import sys
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
14 import re
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
15 import curses
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
16 import curses.ascii
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
17 import traceback
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
18 import signal
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
19
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
20 from datetime import datetime, timedelta
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
21
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
22 from pysqlite2 import dbapi2 as db
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
23
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
24 PAUSED = 0
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
25 RUNNING = 1
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
26 PRE_EXIT = 2
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
27 PAUSED_ESC = 3
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
28 RUNNING_ESC = 4
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
29
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
30 SPACE = re.compile("[\\t ]+")
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
31
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
32 DEFAULT_DATABASE = "time.db"
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
33
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
34 LOAD_ACTIVE_PROJECTS = '''
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
35 SELECT id, key, description, total
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
36 FROM projects LEFT JOIN
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
37 (SELECT
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
38 project_id,
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
39 sum(strftime('%s', stop_time) - strftime('%s', start_time)) AS total
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
40 FROM entries
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
41 GROUP BY project_id) ON project_id = id
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
42 WHERE active
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
43 '''
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
44
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
45 WRITE_LOG = '''
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
46 INSERT INTO entries (project_id, start_time, stop_time, description)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
47 VALUES(:project_id, :start_time, :stop_time, :description)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
48 '''
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
49
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
50 CREATE_PROJECT = '''
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
51 INSERT INTO projects (key, description) VALUES (:key, :description)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
52 '''
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
53
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
54 LAST_PROJECT_ID = '''
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
55 SELECT last_insert_rowid()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
56 '''
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
57
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
58 RENAME_PROJECT = '''
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
59 UPDATE projects set key = :key, description = :description WHERE id = :id
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
60 '''
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
61
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
62 ASSIGN_LOGS = '''
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
63 UPDATE entries SET project_id = :new_id WHERE project_id = :old_id
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
64 '''
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
65
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
66 DELETE_PROJECT = '''
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
67 DELETE FROM projects WHERE id = :id
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
68 '''
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
69
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
70 worklog = None
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
71 stdscr = None
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
72
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
73 orig_vis = None
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
74
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
75 def cursor_visible(flag):
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
76 global orig_vis
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
77 try:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
78 old = curses.curs_set(flag)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
79 if orig_vis is None: orig_vis = old
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
80 return old
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
81 except:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
82 pass
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
83 return 1
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
84
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
85 def restore_cursor():
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
86 global orig_vis
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
87 if not orig_vis is None:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
88 curses.curs_set(orig_vis)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
89
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
90 def render_header(ofs=0):
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
91 global stdscr
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
92 stdscr.attron(curses.A_BOLD)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
93 stdscr.addstr(ofs, 5, "getan v0.1")
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
94 stdscr.addstr(ofs+1, 3, "--------------")
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
95 stdscr.attroff(curses.A_BOLD)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
96 return ofs + 2
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
97
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
98 def render_quit(ofs=0):
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
99 global stdscr
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
100 stdscr.addstr(ofs + 2, 3, "Press DEL once more to quit")
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
101 return ofs + 3
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
102
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
103 def tolerantClose(cur):
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
104 if cur:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
105 try: cur.close()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
106 except: pass
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
107
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
108 def ifNull(v, d):
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
109 if v is None: return d
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
110 return v
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
111
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
112 def human_time(delta):
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
113 seconds = delta.seconds
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
114 s = seconds % 60
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
115 if delta.microseconds >= 500000: s += 1
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
116 seconds /= 60
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
117 m = seconds % 60
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
118 seconds /= 60
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
119 out = "%02d:%02d:%02d" % (seconds, m, s)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
120 if delta.days:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
121 out = "%dd %s" % (delta.days, out)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
122 return out
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
123
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
124 class Project:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
125
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
126 def __init__(self, id = None, key = None, desc = None, total = 0):
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
127 self.id = id
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
128 self.key = key
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
129 self.desc = desc
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
130 self.total = timedelta(seconds = ifNull(total, 0))
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
131 self.start_time = None
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
132
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
133 def checkExistence(self, cur):
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
134 if self.id is None:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
135 cur.execute(CREATE_PROJECT, {
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
136 'key' : self.key,
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
137 'description': self.desc})
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
138 cur.execute(LAST_PROJECT_ID)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
139 row = cur.fetchone()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
140 cur.connection.commit()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
141 self.id = row[0]
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
142
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
143 def writeLog(self, cur, description = None):
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
144 if self.start_time is None: return
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
145 self.checkExistence(cur)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
146 now = datetime.now()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
147 cur.execute(WRITE_LOG, {
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
148 'project_id' : self.id,
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
149 'start_time' : self.start_time,
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
150 'stop_time' : now,
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
151 'description': description})
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
152 self.total += now-self.start_time
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
153 return now
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
154
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
155 def getId(self, cur):
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
156 self.checkExistence(cur)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
157 return self.id
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
158
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
159 def rename(self, cur, key, desc):
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
160 self.key = key
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
161 self.desc = desc
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
162 self.checkExistence(cur)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
163 cur.execute(RENAME_PROJECT, {
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
164 'key' : key,
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
165 'description': desc,
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
166 'id' : self.id })
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
167 cur.connection.commit()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
168
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
169 def assignLogs(self, cur, anon):
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
170 self.total += anon.total
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
171 anon.total = timedelta(seconds=0)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
172 old_id = anon.getId(cur)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
173 new_id = self.getId(cur)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
174 cur.execute(ASSIGN_LOGS, {
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
175 'new_id': new_id,
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
176 'old_id': old_id})
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
177 cur.connection.commit()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
178
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
179 def delete(self, cur):
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
180 id = self.getId(cur)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
181 cur.execute(DELETE_PROJECT, { 'id': id })
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
182 cur.connection.commit()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
183
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
184 class Worklog:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
185
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
186 def __init__(self, database):
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
187 self.initDB(database)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
188 self.loadProjects()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
189 self.state = PAUSED
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
190 self.current_project = None
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
191
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
192 def initDB(self, database):
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
193 self.con = db.connect(database)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
194
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
195 def loadProjects(self):
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
196 cur = None
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
197 try:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
198 cur = self.con.cursor()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
199 cur.execute(LOAD_ACTIVE_PROJECTS)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
200 self.projects = [Project(*row) for row in cur.fetchall()]
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
201 finally:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
202 tolerantClose(cur)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
203
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
204 def shutdown(self):
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
205 self.con.close()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
206
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
207 def findProject(self, key):
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
208 key_lower = key.lower()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
209 lower = None
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
210
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
211 for p in self.projects:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
212 if p.key == key:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
213 return p
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
214 if p.key and p.key.lower() == key_lower:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
215 lower = p
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
216
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
217 return lower
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
218
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
219 def findAnonymProject(self, num):
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
220 count = 0
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
221 for p in self.projects:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
222 if p.key is None:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
223 if count == num:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
224 return p
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
225 count += 1
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
226 return None
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
227
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
228 def renameAnonymProject(self, num, key, description):
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
229 project = self.findAnonymProject(num)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
230 if project:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
231 cur = None
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
232 try:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
233 cur = self.con.cursor()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
234 project.rename(cur, key, description)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
235 finally:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
236 tolerantClose(cur)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
237
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
238 def assignLogs(self, num, key):
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
239 anon = self.findAnonymProject(num)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
240 if anon is None: return
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
241 project = self.findProject(key)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
242 if project is None: return
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
243 cur = None
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
244 try:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
245 cur = self.con.cursor()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
246 project.assignLogs(cur, anon)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
247 self.projects.remove(anon)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
248 anon.delete(cur)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
249 finally:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
250 tolerantClose(cur)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
251
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
252 def isRunning(self):
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
253 return self.state in (RUNNING, RUNNING_ESC)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
254
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
255 def render(self, ofs=0):
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
256 ofs = render_header(ofs)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
257 ml = max([len(p.desc and p.desc or "unknown") for p in self.projects])
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
258 unknown = 0
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
259
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
260 if self.current_project and self.current_project.start_time:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
261 current_delta = datetime.now() - self.current_project.start_time
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
262 current_time_str = "%s " % human_time(current_delta)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
263 current_time_space = " " * len(current_time_str)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
264 else:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
265 current_time_str = ""
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
266 current_time_space = ""
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
267
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
268 for project in self.projects:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
269 is_current = project == self.current_project
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
270 pref = is_current and " -> " or " "
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
271 if project.key is None:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
272 key = "^%d" % unknown
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
273 unknown += 1
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
274 else:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
275 key = " %s" % project.key
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
276 desc = project.desc is None and "unknown" or project.desc
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
277 stdscr.attron(curses.A_BOLD)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
278 stdscr.addstr(ofs, 0, "%s%s" % (pref, key))
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
279 stdscr.attroff(curses.A_BOLD)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
280 stdscr.addstr(" %s" % desc)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
281
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
282 diff = ml - len(desc) + 1
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
283 stdscr.addstr(" " * diff)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
284 if is_current: stdscr.attron(curses.A_UNDERLINE)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
285
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
286 if is_current:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
287 stdscr.addstr("%s(%s)" % (
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
288 current_time_str,
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
289 human_time(project.total + current_delta)))
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
290 else:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
291 stdscr.addstr("%s(%s)" % (
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
292 current_time_space,
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
293 human_time(project.total)))
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
294
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
295 if is_current: stdscr.attroff(curses.A_UNDERLINE)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
296 ofs += 1
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
297
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
298 return ofs
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
299
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
300 def writeLog(self, description = None):
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
301 if self.current_project is None:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
302 return datetime.now()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
303 cur = None
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
304 try:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
305 cur = self.con.cursor()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
306 now = self.current_project.writeLog(cur, description)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
307 self.con.commit()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
308 return now
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
309 finally:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
310 tolerantClose(cur)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
311
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
312 def run(self):
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
313 global stdscr
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
314
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
315 stdscr.erase()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
316 ofs = self.render()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
317 stdscr.refresh()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
318
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
319 while True:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
320 c = stdscr.getch()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
321 if c == -1: continue
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
322
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
323 if self.state == PAUSED:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
324
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
325 if c == curses.KEY_DC:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
326 stdscr.erase()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
327 ofs = render_quit(self.render())
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
328 stdscr.refresh()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
329 self.state = PRE_EXIT
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
330
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
331 elif c == curses.ascii.ESC:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
332 self.state = PAUSED_ESC
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
333
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
334 elif curses.ascii.isascii(c):
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
335 nproject = self.findProject(chr(c))
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
336 if nproject is None: continue
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
337 self.current_project = nproject
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
338 nproject.start_time = datetime.now()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
339 stdscr.erase()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
340 ofs = self.render()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
341 stdscr.refresh()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
342 self.state = RUNNING
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
343 signal.signal(signal.SIGALRM, alarm_handler)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
344 signal.alarm(1)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
345
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
346 elif self.state == RUNNING:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
347 if c == curses.ascii.ESC:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
348 self.state = RUNNING_ESC
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
349
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
350 elif c == curses.ascii.NL:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
351 signal.signal(signal.SIGALRM, signal.SIG_IGN)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
352 self.state = PAUSED
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
353 stdscr.erase()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
354 ofs = self.render()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
355 old_cur = cursor_visible(1)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
356 curses.echo()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
357 stdscr.addstr(ofs + 1, 3, "Description: ")
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
358 description = stdscr.getstr()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
359 curses.noecho()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
360 cursor_visible(old_cur)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
361 self.writeLog(description)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
362 self.current_project = None
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
363 stdscr.erase()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
364 ofs = self.render()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
365 stdscr.refresh()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
366
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
367 elif curses.ascii.isascii(c):
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
368 nproject = self.findProject(chr(c))
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
369 if nproject is None or nproject == self.current_project:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
370 continue
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
371 nproject.start_time = self.writeLog()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
372 self.current_project = nproject
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
373 stdscr.erase()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
374 ofs = self.render()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
375 stdscr.refresh()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
376
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
377 elif self.state == PAUSED_ESC:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
378 if curses.ascii.isdigit(c):
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
379 pnum = c - ord('0')
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
380 nproject = self.findAnonymProject(pnum)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
381 if nproject is None:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
382 nproject = Project()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
383 self.projects.append(nproject)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
384
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
385 nproject.start_time = self.writeLog()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
386 self.current_project = nproject
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
387 self.state = RUNNING
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
388 stdscr.erase()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
389 ofs = self.render()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
390 stdscr.refresh()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
391 signal.signal(signal.SIGALRM, alarm_handler)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
392 signal.alarm(1)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
393 elif curses.ascii.isalpha(c):
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
394 if c == ord('n'):
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
395 stdscr.erase()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
396 ofs = self.render()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
397 old_cur = cursor_visible(1)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
398 curses.echo()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
399 stdscr.addstr(ofs + 1, 3, "<num> <key> <description>: ")
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
400 stdscr.refresh()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
401 description = stdscr.getstr()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
402 curses.noecho()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
403 cursor_visible(old_cur)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
404
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
405 description = description.strip()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
406 if description:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
407 num, key, description = SPACE.split(description, 2)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
408 try:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
409 num = int(num)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
410 self.renameAnonymProject(num, key, description)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
411 except ValueError:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
412 pass
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
413
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
414 stdscr.erase()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
415 ofs = self.render()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
416 stdscr.refresh()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
417 self.state = PAUSED
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
418
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
419 elif c == ord('a'):
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
420 stdscr.erase()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
421 ofs = self.render()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
422 old_cur = cursor_visible(1)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
423 curses.echo()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
424 stdscr.addstr(ofs + 1, 3, "<num> <key>: ")
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
425 stdscr.refresh()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
426 key = stdscr.getstr()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
427 curses.noecho()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
428 cursor_visible(old_cur)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
429
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
430 key = key.strip()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
431 if key:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
432 num, key = SPACE.split(key, 1)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
433 try:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
434 num = int(num)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
435 self.assignLogs(num, key)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
436 except ValueError:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
437 pass
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
438
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
439 stdscr.erase()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
440 ofs = self.render()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
441 stdscr.refresh()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
442 self.state = PAUSED
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
443
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
444 else:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
445 self.state = PAUSED
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
446 pass
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
447 else:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
448 self.state = PAUSED
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
449
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
450 elif self.state == RUNNING_ESC:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
451 if curses.ascii.isdigit(c):
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
452 signal.signal(signal.SIGALRM, signal.SIG_IGN)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
453 pnum = c - ord('0')
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
454 nproject = self.findAnonymProject(pnum)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
455 if nproject is None:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
456 nproject = Project()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
457 self.projects.append(nproject)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
458
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
459 nproject.start_time = self.writeLog()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
460 self.current_project = nproject
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
461 self.state = RUNNING
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
462 stdscr.erase()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
463 ofs = self.render()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
464 stdscr.refresh()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
465 signal.signal(signal.SIGALRM, alarm_handler)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
466 signal.alarm(1)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
467 else:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
468 self.state = RUNNING
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
469
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
470 elif self.state == PRE_EXIT:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
471 if c == curses.KEY_DC:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
472 break
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
473 else:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
474 stdscr.erase()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
475 ofs = self.render()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
476 stdscr.refresh()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
477 self.state = PAUSED
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
478
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
479
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
480
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
481 def alarm_handler(flag, frame):
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
482 global worklog
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
483 global stdscr
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
484
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
485 stdscr.erase()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
486 worklog.render()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
487 stdscr.refresh()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
488 if worklog.isRunning():
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
489 signal.alarm(1)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
490
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
491 def exit_handler(flag, frame):
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
492 exit_code = 0
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
493 global worklog
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
494 try:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
495 worklog.shutdown()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
496 except:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
497 traceback.print_exc(file=sys.stderr)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
498 exit_code = 1
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
499
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
500 restore_cursor()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
501 curses.nocbreak()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
502 stdscr.keypad(0)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
503 curses.echo()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
504 curses.endwin()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
505 sys.exit(exit_code)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
506
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
507 def main():
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
508
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
509 database = len(sys.argv) < 2 and DEFAULT_DATABASE or sys.argv[1]
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
510 # TODO: create database file if it does not exist.
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
511
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
512 global worklog
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
513 try:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
514 worklog = Worklog(database)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
515 except:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
516 traceback.print_exc(file=sys.stderr)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
517 sys.exit(1)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
518
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
519 global stdscr
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
520 stdscr = curses.initscr()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
521 curses.noecho()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
522 curses.cbreak()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
523 stdscr.keypad(1)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
524 cursor_visible(0)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
525
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
526 signal.signal(signal.SIGHUP, exit_handler)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
527 signal.signal(signal.SIGINT, exit_handler)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
528 signal.signal(signal.SIGQUIT, exit_handler)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
529 signal.signal(signal.SIGTERM, exit_handler)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
530
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
531 try:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
532 try:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
533 worklog.run()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
534 except:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
535 traceback.print_exc(file=sys.stderr)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
536 finally:
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
537 exit_handler(0, None)
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
538
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
539 if __name__ == '__main__':
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
540 main()
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
541
7eb7886ed8fd Initial import.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
542 # vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8:
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)