Mercurial > getan > getan
annotate getan/controller.py @ 318:27fc5f43a69b
Move setting the ProjectList and EntryList instances into the controller
It doesn't make sense to pass classes for both to the GetanController
constructor. Be don't have different implementations for these classes.
author | Björn Ricks <bjoern.ricks@intevation.de> |
---|---|
date | Fri, 11 Oct 2013 14:12:03 +0200 |
parents | b9fcd8771c85 |
children | 922935ebfdd5 |
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> |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
5 # |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
6 # 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
|
7 # |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
8 # 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
|
9 # 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
|
10 # |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
11 |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
12 import logging |
194
cf98dc7f9354
Move mainloop related code to GetanController
Björn Ricks <bjoern.ricks@intevation.de>
parents:
175
diff
changeset
|
13 import urwid |
cf98dc7f9354
Move mainloop related code to GetanController
Björn Ricks <bjoern.ricks@intevation.de>
parents:
175
diff
changeset
|
14 |
297
b9f4cd43f341
Fix codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents:
266
diff
changeset
|
15 from datetime import datetime |
112
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
16 |
318
27fc5f43a69b
Move setting the ProjectList and EntryList instances into the controller
Björn Ricks <bjoern.ricks@intevation.de>
parents:
316
diff
changeset
|
17 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
|
18 from getan.states import PausedProjectsState |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
19 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
|
20 from getan.config import Config |
112
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
21 |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
22 logger = logging.getLogger() |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
23 |
297
b9f4cd43f341
Fix codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents:
266
diff
changeset
|
24 |
136
92b7582b8f44
Use new style classes
Björn Ricks <bjoern.ricks@intevation.de>
parents:
135
diff
changeset
|
25 class GetanController(object): |
92b7582b8f44
Use new style classes
Björn Ricks <bjoern.ricks@intevation.de>
parents:
135
diff
changeset
|
26 |
318
27fc5f43a69b
Move setting the ProjectList and EntryList instances into the controller
Björn Ricks <bjoern.ricks@intevation.de>
parents:
316
diff
changeset
|
27 def __init__(self, backend): |
149
ac7c6594fc0e
Add the getan config to the controller
Björn Ricks <bjoern.ricks@intevation.de>
parents:
136
diff
changeset
|
28 self.config = Config() |
ac7c6594fc0e
Add the getan config to the controller
Björn Ricks <bjoern.ricks@intevation.de>
parents:
136
diff
changeset
|
29 |
297
b9f4cd43f341
Fix codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents:
266
diff
changeset
|
30 self.backend = backend |
112
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
31 projects, entries = self.load_projects() |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
32 self.projects = projects |
297
b9f4cd43f341
Fix codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents:
266
diff
changeset
|
33 self.running = [] |
112
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
34 |
203
1188998929bc
Init entries_view before project_view
Björn Ricks <bjoern.ricks@intevation.de>
parents:
202
diff
changeset
|
35 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
|
36 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
|
37 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
|
38 |
297
b9f4cd43f341
Fix codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents:
266
diff
changeset
|
39 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
|
40 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
|
41 |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
42 def main(self): |
229
693cc3504a94
Set GetanView as main widget for MainLoop
Björn Ricks <bjoern.ricks@intevation.de>
parents:
204
diff
changeset
|
43 self.loop = urwid.MainLoop(self.view, |
194
cf98dc7f9354
Move mainloop related code to GetanController
Björn Ricks <bjoern.ricks@intevation.de>
parents:
175
diff
changeset
|
44 self.view.get_palette(), |
cf98dc7f9354
Move mainloop related code to GetanController
Björn Ricks <bjoern.ricks@intevation.de>
parents:
175
diff
changeset
|
45 screen=urwid.raw_display.Screen(), |
cf98dc7f9354
Move mainloop related code to GetanController
Björn Ricks <bjoern.ricks@intevation.de>
parents:
175
diff
changeset
|
46 input_filter=self.input_filter) |
cf98dc7f9354
Move mainloop related code to GetanController
Björn Ricks <bjoern.ricks@intevation.de>
parents:
175
diff
changeset
|
47 self.loop.run() |
112
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
48 |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
49 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
|
50 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
|
51 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
|
52 self.loop.draw_screen() |
112
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
53 else: |
199
3fa4ab9146dd
Implement three phase user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents:
198
diff
changeset
|
54 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
|
55 self.loop.process_input(input) |
3fa4ab9146dd
Implement three phase user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents:
198
diff
changeset
|
56 self.state.handle_input(input) |
112
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
57 |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
58 def load_projects(self): |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
59 projects = self.backend.load_projects() |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
60 if projects: |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
61 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
|
62 else: |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
63 entries = [] |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
64 return (projects, entries) |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
65 |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
66 def update_entries(self, project): |
297
b9f4cd43f341
Fix codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents:
266
diff
changeset
|
67 logger.debug("GetanController: update entries for project %s." % |
b9f4cd43f341
Fix codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents:
266
diff
changeset
|
68 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
|
69 |
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
|
70 entries = self.backend.load_entries(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
|
71 project.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
|
72 |
204
921e98f9aa87
Only update_entries if view is set
Björn Ricks <bjoern.ricks@intevation.de>
parents:
203
diff
changeset
|
73 if self.view: |
921e98f9aa87
Only update_entries if view is set
Björn Ricks <bjoern.ricks@intevation.de>
parents:
203
diff
changeset
|
74 self.view.update_entries(entries) |
112
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
75 |
239
cc24919789be
Add method to move one entry to another project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
238
diff
changeset
|
76 def move_entry(self, entry, project): |
cc24919789be
Add method to move one entry to another project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
238
diff
changeset
|
77 self.move_entries([entry], project) |
cc24919789be
Add method to move one entry to another project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
238
diff
changeset
|
78 |
238
e48d6052688f
Add controller move_entries method
Björn Ricks <bjoern.ricks@intevation.de>
parents:
234
diff
changeset
|
79 def move_entries(self, entries, project): |
e48d6052688f
Add controller move_entries method
Björn Ricks <bjoern.ricks@intevation.de>
parents:
234
diff
changeset
|
80 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
|
81 self.backend.move_entries(entries, project.id) |
e48d6052688f
Add controller move_entries method
Björn Ricks <bjoern.ricks@intevation.de>
parents:
234
diff
changeset
|
82 project.entries = self.backend.load_entries(project.id) |
e48d6052688f
Add controller move_entries method
Björn Ricks <bjoern.ricks@intevation.de>
parents:
234
diff
changeset
|
83 self.update_entries(old_project) |
e48d6052688f
Add controller move_entries method
Björn Ricks <bjoern.ricks@intevation.de>
parents:
234
diff
changeset
|
84 self.project_view.update_rows() |
e48d6052688f
Add controller move_entries method
Björn Ricks <bjoern.ricks@intevation.de>
parents:
234
diff
changeset
|
85 |
112
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
86 def move_selected_entries(self, project): |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
87 entries = [] |
240
78967e4218bd
Refactor controller move_selected_entries method to use move_entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
239
diff
changeset
|
88 while self.entries_view.selection: |
78967e4218bd
Refactor controller move_selected_entries method to use move_entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
239
diff
changeset
|
89 node = self.entries_view.selection.pop() |
78967e4218bd
Refactor controller move_selected_entries method to use move_entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
239
diff
changeset
|
90 if node.selected: |
78967e4218bd
Refactor controller move_selected_entries method to use move_entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
239
diff
changeset
|
91 node.select() |
78967e4218bd
Refactor controller move_selected_entries method to use move_entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
239
diff
changeset
|
92 entries.append(node.item) |
297
b9f4cd43f341
Fix codingstyle for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents:
266
diff
changeset
|
93 logger.info("GetanController: move entry '%s' (id = %d, " |
240
78967e4218bd
Refactor controller move_selected_entries method to use move_entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
239
diff
changeset
|
94 "project id = %d) to project '%s'" |
78967e4218bd
Refactor controller move_selected_entries method to use move_entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
239
diff
changeset
|
95 % (node.item.desc, node.item.id, |
78967e4218bd
Refactor controller move_selected_entries method to use move_entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
239
diff
changeset
|
96 node.item.project_id, project.desc)) |
78967e4218bd
Refactor controller move_selected_entries method to use move_entries
Björn Ricks <bjoern.ricks@intevation.de>
parents:
239
diff
changeset
|
97 self.move_entries(entries, project) |
112
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
98 |
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 |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
153 def add_project(self, key, description): |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
154 if not key or not description: |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
155 return |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
156 self.backend.insert_project(key, description) |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
157 self.update_projects() |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
158 |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
159 def update_entry(self, entry): |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
160 self.backend.update_entry(entry) |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
161 |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
162 def shutdown(self): |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
163 for project in self.running: |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
164 self.stop_project(display=False) |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
165 |
175
5e069074b1c9
Add Controller method to update a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
154
diff
changeset
|
166 def update_project(self, project): |
5e069074b1c9
Add Controller method to update a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
154
diff
changeset
|
167 self.backend.update_project(project) |
5e069074b1c9
Add Controller method to update a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
154
diff
changeset
|
168 self.update_projects() |
5e069074b1c9
Add Controller method to update a project
Björn Ricks <bjoern.ricks@intevation.de>
parents:
154
diff
changeset
|
169 |
112
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
170 def update_projects(self): |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
171 projects, entries = self.load_projects() |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
172 self.projects = projects |
d85b2a25797c
Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
173 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
|
174 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
|
175 |
ac7c6594fc0e
Add the getan config to the controller
Björn Ricks <bjoern.ricks@intevation.de>
parents:
136
diff
changeset
|
176 def get_config(self): |
ac7c6594fc0e
Add the getan config to the controller
Björn Ricks <bjoern.ricks@intevation.de>
parents:
136
diff
changeset
|
177 return self.config |
194
cf98dc7f9354
Move mainloop related code to GetanController
Björn Ricks <bjoern.ricks@intevation.de>
parents:
175
diff
changeset
|
178 |
202
3ed024299214
Add a GetanController set_state method
Björn Ricks <bjoern.ricks@intevation.de>
parents:
201
diff
changeset
|
179 def set_state(self, state): |
3ed024299214
Add a GetanController set_state method
Björn Ricks <bjoern.ricks@intevation.de>
parents:
201
diff
changeset
|
180 self.state = state |
3ed024299214
Add a GetanController set_state method
Björn Ricks <bjoern.ricks@intevation.de>
parents:
201
diff
changeset
|
181 |
194
cf98dc7f9354
Move mainloop related code to GetanController
Björn Ricks <bjoern.ricks@intevation.de>
parents:
175
diff
changeset
|
182 def exit(self): |
cf98dc7f9354
Move mainloop related code to GetanController
Björn Ricks <bjoern.ricks@intevation.de>
parents:
175
diff
changeset
|
183 logger.info("GetanController: exit.") |
cf98dc7f9354
Move mainloop related code to GetanController
Björn Ricks <bjoern.ricks@intevation.de>
parents:
175
diff
changeset
|
184 raise urwid.ExitMainLoop() |