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()
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)