Mercurial > getan > getan
annotate getan/controller.py @ 499:199b3e3657aa
Every minute the time of the current entry is saved.
author | Magnus Schieder <mschieder@intevation.de> |
---|---|
date | Mon, 17 Sep 2018 20:35:36 +0200 |
parents | 463894654d77 |
children | 5ec211c172ed |
rev | line source |
---|---|
112
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
1 # -*- coding: utf-8 -*- |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
2 # |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
3 # (c) 2010 by Ingo Weinzierl <ingo.weinzierl@intevation.de> |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
4 # (c) 2011 by Björn Ricks <bjoern.ricks@intevation.de> |
488
463894654d77
Prepares for release 3.0
Magnus Schieder <mschieder@intevation.de>
parents:
479
diff
changeset
|
5 # (c) 2017, 2018 Intevation GmbH |
463894654d77
Prepares for release 3.0
Magnus Schieder <mschieder@intevation.de>
parents:
479
diff
changeset
|
6 # Authors: |
463894654d77
Prepares for release 3.0
Magnus Schieder <mschieder@intevation.de>
parents:
479
diff
changeset
|
7 # * Magnus Schieder <magnus.schieder@intevation.de> |
112
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
8 # |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
9 # A python worklog-alike to log what you have 'getan' (done). |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
10 # |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
11 # This is Free Software licensed under the terms of GPLv3 or later. |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
12 # For details see LICENSE coming with the source of 'getan'. |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
13 # |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
14 |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
15 import logging |
194
cf98dc7f9354
Move mainloop related code to GetanController
Björn Ricks <bjoern.ricks@intevation.de>
parents:
175
diff
changeset
|
16 import urwid |
cf98dc7f9354
Move mainloop related code to GetanController
Björn Ricks <bjoern.ricks@intevation.de>
parents:
175
diff
changeset
|
17 |
297
b9f4cd43f341
Fix codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents:
266
diff
changeset
|
18 from datetime import datetime |
112
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
19 |
318
27fc5f43a69b
Move setting the ProjectList and EntryList instances into the controller
Björn Ricks <bjoern.ricks@intevation.de>
parents:
316
diff
changeset
|
20 from getan.view import GetanView, ProjectList, EntryList |
112
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
21 from getan.states import PausedProjectsState |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
22 from getan.utils import format_time |
149
ac7c6594fc0e
Add the getan config to the controller
Björn Ricks <bjoern.ricks@intevation.de>
parents:
136
diff
changeset
|
23 from getan.config import Config |
112
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
24 |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
25 logger = logging.getLogger() |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
26 |
297
b9f4cd43f341
Fix codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents:
266
diff
changeset
|
27 |
136
92b7582b8f44
Use new style classes
Björn Ricks <bjoern.ricks@intevation.de>
parents:
135
diff
changeset
|
28 class GetanController(object): |
92b7582b8f44
Use new style classes
Björn Ricks <bjoern.ricks@intevation.de>
parents:
135
diff
changeset
|
29 |
318
27fc5f43a69b
Move setting the ProjectList and EntryList instances into the controller
Björn Ricks <bjoern.ricks@intevation.de>
parents:
316
diff
changeset
|
30 def __init__(self, backend): |
149
ac7c6594fc0e
Add the getan config to the controller
Björn Ricks <bjoern.ricks@intevation.de>
parents:
136
diff
changeset
|
31 self.config = Config() |
ac7c6594fc0e
Add the getan config to the controller
Björn Ricks <bjoern.ricks@intevation.de>
parents:
136
diff
changeset
|
32 |
297
b9f4cd43f341
Fix codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents:
266
diff
changeset
|
33 self.backend = backend |
112
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
34 projects, entries = self.load_projects() |
499
199b3e3657aa
Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents:
488
diff
changeset
|
35 self.load_recover() |
112
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
36 self.projects = projects |
297
b9f4cd43f341
Fix codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents:
266
diff
changeset
|
37 self.running = [] |
112
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
38 |
499
199b3e3657aa
Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents:
488
diff
changeset
|
39 |
203
1188998929bc
Init entries_view before project_view
Björn Ricks <bjoern.ricks@intevation.de>
parents:
202
diff
changeset
|
40 self.view = None |
318
27fc5f43a69b
Move setting the ProjectList and EntryList instances into the controller
Björn Ricks <bjoern.ricks@intevation.de>
parents:
316
diff
changeset
|
41 self.entries_view = EntryList(entries) |
27fc5f43a69b
Move setting the ProjectList and EntryList instances into the controller
Björn Ricks <bjoern.ricks@intevation.de>
parents:
316
diff
changeset
|
42 self.project_view = ProjectList(self, self.projects) |
112
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
43 |
297
b9f4cd43f341
Fix codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents:
266
diff
changeset
|
44 self.view = GetanView(self, self.project_view, self.entries_view) |
112
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
45 self.state = PausedProjectsState(self, self.project_view) |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
46 |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
47 def main(self): |
320
922935ebfdd5
Use the palette loaded from the config theme
Björn Ricks <bjoern.ricks@intevation.de>
parents:
318
diff
changeset
|
48 theme = self.config.get_theme() |
229
693cc3504a94
Set GetanView as main widget for MainLoop
Björn Ricks <bjoern.ricks@intevation.de>
parents:
204
diff
changeset
|
49 self.loop = urwid.MainLoop(self.view, |
320
922935ebfdd5
Use the palette loaded from the config theme
Björn Ricks <bjoern.ricks@intevation.de>
parents:
318
diff
changeset
|
50 theme.get_palette(), |
194
cf98dc7f9354
Move mainloop related code to GetanController
Björn Ricks <bjoern.ricks@intevation.de>
parents:
175
diff
changeset
|
51 screen=urwid.raw_display.Screen(), |
cf98dc7f9354
Move mainloop related code to GetanController
Björn Ricks <bjoern.ricks@intevation.de>
parents:
175
diff
changeset
|
52 input_filter=self.input_filter) |
cf98dc7f9354
Move mainloop related code to GetanController
Björn Ricks <bjoern.ricks@intevation.de>
parents:
175
diff
changeset
|
53 self.loop.run() |
112
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
54 |
479
75131561d098
Add a redraw function on key Control-L.
Magnus Schieder <mschieder@intevation.de>
parents:
471
diff
changeset
|
55 def redraw(self): |
75131561d098
Add a redraw function on key Control-L.
Magnus Schieder <mschieder@intevation.de>
parents:
471
diff
changeset
|
56 self.loop.stop() |
75131561d098
Add a redraw function on key Control-L.
Magnus Schieder <mschieder@intevation.de>
parents:
471
diff
changeset
|
57 self.loop.start() |
75131561d098
Add a redraw function on key Control-L.
Magnus Schieder <mschieder@intevation.de>
parents:
471
diff
changeset
|
58 self.loop.screen_size = None |
75131561d098
Add a redraw function on key Control-L.
Magnus Schieder <mschieder@intevation.de>
parents:
471
diff
changeset
|
59 self.loop.draw_screen() |
75131561d098
Add a redraw function on key Control-L.
Magnus Schieder <mschieder@intevation.de>
parents:
471
diff
changeset
|
60 |
112
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
61 def input_filter(self, input, raw_input): |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
62 if 'window resize' in input: |
255
fcd0a8b09fcf
Fix: Don't crash when the console window is resized
Björn Ricks <bjoern.ricks@intevation.de>
parents:
240
diff
changeset
|
63 self.loop.screen_size = None |
fcd0a8b09fcf
Fix: Don't crash when the console window is resized
Björn Ricks <bjoern.ricks@intevation.de>
parents:
240
diff
changeset
|
64 self.loop.draw_screen() |
112
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
65 else: |
199
3fa4ab9146dd
Implement three phase user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents:
198
diff
changeset
|
66 input = self.state.input_filter(input, raw_input) |
3fa4ab9146dd
Implement three phase user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents:
198
diff
changeset
|
67 self.loop.process_input(input) |
3fa4ab9146dd
Implement three phase user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents:
198
diff
changeset
|
68 self.state.handle_input(input) |
112
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
69 |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
70 def load_projects(self): |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
71 projects = self.backend.load_projects() |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
72 if projects: |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
73 entries = self.backend.load_entries(projects[0].id) |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
74 else: |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
75 entries = [] |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
76 return (projects, entries) |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
77 |
499
199b3e3657aa
Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents:
488
diff
changeset
|
78 def load_recover(self): |
199b3e3657aa
Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents:
488
diff
changeset
|
79 self.backend.load_recover() |
199b3e3657aa
Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents:
488
diff
changeset
|
80 |
112
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
81 def update_entries(self, project): |
297
b9f4cd43f341
Fix codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents:
266
diff
changeset
|
82 logger.debug("GetanController: update entries for project %s." % |
b9f4cd43f341
Fix codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents:
266
diff
changeset
|
83 project.id) |
314
05cb2e7e705f
Fix updating the entries of the project when one ore more entries are deleted
Björn Ricks <bjoern.ricks@intevation.de>
parents:
297
diff
changeset
|
84 |
362
90c09cca49c3
Fix loading entries of a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
320
diff
changeset
|
85 project.load_entries() |
314
05cb2e7e705f
Fix updating the entries of the project when one ore more entries are deleted
Björn Ricks <bjoern.ricks@intevation.de>
parents:
297
diff
changeset
|
86 |
204
921e98f9aa87
Only update_entries if view is set
Björn Ricks <bjoern.ricks@intevation.de>
parents:
203
diff
changeset
|
87 if self.view: |
362
90c09cca49c3
Fix loading entries of a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
320
diff
changeset
|
88 self.view.update_entries(project.entries) |
112
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
89 |
238
e48d6052688f
Add controller move_entries method
Björn Ricks <bjoern.ricks@intevation.de>
parents:
234
diff
changeset
|
90 def move_entries(self, entries, project): |
e48d6052688f
Add controller move_entries method
Björn Ricks <bjoern.ricks@intevation.de>
parents:
234
diff
changeset
|
91 old_project = self.project_by_id(entries[0].project_id) |
e48d6052688f
Add controller move_entries method
Björn Ricks <bjoern.ricks@intevation.de>
parents:
234
diff
changeset
|
92 self.backend.move_entries(entries, project.id) |
e48d6052688f
Add controller move_entries method
Björn Ricks <bjoern.ricks@intevation.de>
parents:
234
diff
changeset
|
93 self.update_entries(old_project) |
471
3853cf82ca3c
Update project time when moving an entrie.
Magnus Schieder <mschieder@intevation.de>
parents:
453
diff
changeset
|
94 self.update_projects() |
238
e48d6052688f
Add controller move_entries method
Björn Ricks <bjoern.ricks@intevation.de>
parents:
234
diff
changeset
|
95 self.project_view.update_rows() |
471
3853cf82ca3c
Update project time when moving an entrie.
Magnus Schieder <mschieder@intevation.de>
parents:
453
diff
changeset
|
96 open_project = self.project_by_id(old_project.id) |
3853cf82ca3c
Update project time when moving an entrie.
Magnus Schieder <mschieder@intevation.de>
parents:
453
diff
changeset
|
97 open_project.open = True |
238
e48d6052688f
Add controller move_entries method
Björn Ricks <bjoern.ricks@intevation.de>
parents:
234
diff
changeset
|
98 |
112
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
99 def delete_entries(self, entry_nodes): |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
100 if not entry_nodes: |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
101 return |
314
05cb2e7e705f
Fix updating the entries of the project when one ore more entries are deleted
Björn Ricks <bjoern.ricks@intevation.de>
parents:
297
diff
changeset
|
102 proj_id = entry_nodes[0].project_id |
05cb2e7e705f
Fix updating the entries of the project when one ore more entries are deleted
Björn Ricks <bjoern.ricks@intevation.de>
parents:
297
diff
changeset
|
103 proj = self.project_by_id(proj_id) |
05cb2e7e705f
Fix updating the entries of the project when one ore more entries are deleted
Björn Ricks <bjoern.ricks@intevation.de>
parents:
297
diff
changeset
|
104 if proj: |
05cb2e7e705f
Fix updating the entries of the project when one ore more entries are deleted
Björn Ricks <bjoern.ricks@intevation.de>
parents:
297
diff
changeset
|
105 entries = entry_nodes |
05cb2e7e705f
Fix updating the entries of the project when one ore more entries are deleted
Björn Ricks <bjoern.ricks@intevation.de>
parents:
297
diff
changeset
|
106 self.backend.delete_entries(entries) |
05cb2e7e705f
Fix updating the entries of the project when one ore more entries are deleted
Björn Ricks <bjoern.ricks@intevation.de>
parents:
297
diff
changeset
|
107 self.update_entries(proj) |
112
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
108 |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
109 def project_by_key(self, key): |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
110 for proj in self.projects: |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
111 if proj.key == key: |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
112 return proj |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
113 return None |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
114 |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
115 def project_by_id(self, id): |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
116 for proj in self.projects: |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
117 if proj.id == id: |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
118 return proj |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
119 return None |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
120 |
154
a620eb6e1fb0
Add controller method to find projects by key
Björn Ricks <bjoern.ricks@intevation.de>
parents:
149
diff
changeset
|
121 def find_projects_by_key(self, key): |
a620eb6e1fb0
Add controller method to find projects by key
Björn Ricks <bjoern.ricks@intevation.de>
parents:
149
diff
changeset
|
122 projects = [] |
a620eb6e1fb0
Add controller method to find projects by key
Björn Ricks <bjoern.ricks@intevation.de>
parents:
149
diff
changeset
|
123 for proj in self.projects: |
a620eb6e1fb0
Add controller method to find projects by key
Björn Ricks <bjoern.ricks@intevation.de>
parents:
149
diff
changeset
|
124 if proj.key.startswith(key): |
a620eb6e1fb0
Add controller method to find projects by key
Björn Ricks <bjoern.ricks@intevation.de>
parents:
149
diff
changeset
|
125 projects.append(proj) |
a620eb6e1fb0
Add controller method to find projects by key
Björn Ricks <bjoern.ricks@intevation.de>
parents:
149
diff
changeset
|
126 return projects |
a620eb6e1fb0
Add controller method to find projects by key
Björn Ricks <bjoern.ricks@intevation.de>
parents:
149
diff
changeset
|
127 |
112
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
128 def start_project(self, project): |
135
ce707fbb9666
Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents:
112
diff
changeset
|
129 if not project: |
ce707fbb9666
Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents:
112
diff
changeset
|
130 return |
112
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
131 self.running.append(project) |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
132 project.start = datetime.now() |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
133 logger.info("Start project '%s' at %s." |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
134 % (project.desc, format_time(datetime.now()))) |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
135 self.view.set_footer_text(" Running on '%s'" % project.desc, 'running') |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
136 logger.debug('All running projects: %r' % self.running) |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
137 |
316
b9fcd8771c85
Allow empty descriptions for project entires
Björn Ricks <bjoern.ricks@intevation.de>
parents:
314
diff
changeset
|
138 def stop_project(self, desc=None, display=True): |
b9fcd8771c85
Allow empty descriptions for project entires
Björn Ricks <bjoern.ricks@intevation.de>
parents:
314
diff
changeset
|
139 desc = desc or '-no description-' |
135
ce707fbb9666
Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents:
112
diff
changeset
|
140 if not self.running: |
ce707fbb9666
Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents:
112
diff
changeset
|
141 return |
112
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
142 project = self.running.pop() |
135
ce707fbb9666
Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents:
112
diff
changeset
|
143 if not project: |
ce707fbb9666
Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents:
112
diff
changeset
|
144 return |
112
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
145 logger.info("Stop project '%s' at %s." |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
146 % (project.desc, format_time(datetime.now()))) |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
147 project.stop = datetime.now() |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
148 self.backend.insert_project_entry(project, datetime.now(), desc) |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
149 if display: |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
150 self.update_entries(project) |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
151 logger.debug('Still running projects: %r' % self.running) |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
152 |
499
199b3e3657aa
Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents:
488
diff
changeset
|
153 def save_recovery_data(self): |
199b3e3657aa
Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents:
488
diff
changeset
|
154 desc = '-no description-' |
199b3e3657aa
Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents:
488
diff
changeset
|
155 if not self.running: |
199b3e3657aa
Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents:
488
diff
changeset
|
156 return |
199b3e3657aa
Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents:
488
diff
changeset
|
157 project = self.running[-1] |
199b3e3657aa
Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents:
488
diff
changeset
|
158 if not project: |
199b3e3657aa
Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents:
488
diff
changeset
|
159 return |
199b3e3657aa
Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents:
488
diff
changeset
|
160 project.stop = datetime.now() |
199b3e3657aa
Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents:
488
diff
changeset
|
161 self.backend.insert_recover(project, datetime.now(), desc) |
199b3e3657aa
Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents:
488
diff
changeset
|
162 |
112
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
163 def add_project(self, key, description): |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
164 if not key or not description: |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
165 return |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
166 self.backend.insert_project(key, description) |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
167 self.update_projects() |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
168 |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
169 def update_entry(self, entry): |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
170 self.backend.update_entry(entry) |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
171 |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
172 def shutdown(self): |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
173 for project in self.running: |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
174 self.stop_project(display=False) |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
175 |
175
5e069074b1c9
Add Controller method to update a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
154
diff
changeset
|
176 def update_project(self, project): |
5e069074b1c9
Add Controller method to update a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
154
diff
changeset
|
177 self.backend.update_project(project) |
5e069074b1c9
Add Controller method to update a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
154
diff
changeset
|
178 self.update_projects() |
5e069074b1c9
Add Controller method to update a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
154
diff
changeset
|
179 |
112
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
180 def update_projects(self): |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
181 projects, entries = self.load_projects() |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
182 self.projects = projects |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
183 self.project_view.load_rows(projects) |
266
c5baa934b24d
Update total time when project list is updated
Björn Ricks <bjoern.ricks@intevation.de>
parents:
265
diff
changeset
|
184 self.project_view.total_time() |
149
ac7c6594fc0e
Add the getan config to the controller
Björn Ricks <bjoern.ricks@intevation.de>
parents:
136
diff
changeset
|
185 |
ac7c6594fc0e
Add the getan config to the controller
Björn Ricks <bjoern.ricks@intevation.de>
parents:
136
diff
changeset
|
186 def get_config(self): |
ac7c6594fc0e
Add the getan config to the controller
Björn Ricks <bjoern.ricks@intevation.de>
parents:
136
diff
changeset
|
187 return self.config |
194
cf98dc7f9354
Move mainloop related code to GetanController
Björn Ricks <bjoern.ricks@intevation.de>
parents:
175
diff
changeset
|
188 |
202
3ed024299214
Add a GetanController set_state method
Björn Ricks <bjoern.ricks@intevation.de>
parents:
201
diff
changeset
|
189 def set_state(self, state): |
3ed024299214
Add a GetanController set_state method
Björn Ricks <bjoern.ricks@intevation.de>
parents:
201
diff
changeset
|
190 self.state = state |
3ed024299214
Add a GetanController set_state method
Björn Ricks <bjoern.ricks@intevation.de>
parents:
201
diff
changeset
|
191 |
194
cf98dc7f9354
Move mainloop related code to GetanController
Björn Ricks <bjoern.ricks@intevation.de>
parents:
175
diff
changeset
|
192 def exit(self): |
cf98dc7f9354
Move mainloop related code to GetanController
Björn Ricks <bjoern.ricks@intevation.de>
parents:
175
diff
changeset
|
193 logger.info("GetanController: exit.") |
cf98dc7f9354
Move mainloop related code to GetanController
Björn Ricks <bjoern.ricks@intevation.de>
parents:
175
diff
changeset
|
194 raise urwid.ExitMainLoop() |