annotate getan/controller.py @ 199:3fa4ab9146dd

Implement three phase user input handling First the state is able to filter keys. Afterwards the MainLoop widget is allowed to act on keypress. At last the state is allowed to react on keys.
author Björn Ricks <bjoern.ricks@intevation.de>
date Fri, 05 Apr 2013 19:29:33 +0200
parents 9f85ffa0a2f6
children 2987c6991005
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
112
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
15 from datetime import datetime
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
16
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
17 from getan.view import GetanView
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
136
92b7582b8f44 Use new style classes
Björn Ricks <bjoern.ricks@intevation.de>
parents: 135
diff changeset
24 class GetanController(object):
92b7582b8f44 Use new style classes
Björn Ricks <bjoern.ricks@intevation.de>
parents: 135
diff changeset
25
112
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
26 def __init__(self, backend, pv_class, ev_class):
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
27 self.ev_class = ev_class
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
28 self.pv_class = pv_class
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
29
149
ac7c6594fc0e Add the getan config to the controller
Björn Ricks <bjoern.ricks@intevation.de>
parents: 136
diff changeset
30 self.config = Config()
ac7c6594fc0e Add the getan config to the controller
Björn Ricks <bjoern.ricks@intevation.de>
parents: 136
diff changeset
31
112
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
32 self.backend = backend
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
33 projects, entries = self.load_projects()
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
34 self.projects = projects
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
35 self.running = []
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
36
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
37 self.project_view = pv_class(self, self.projects)
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
38 self.entries_view = ev_class(entries)
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
39
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
40 self.view = GetanView(self, self.project_view, self.entries_view)
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
41 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
42
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
43 def main(self):
194
cf98dc7f9354 Move mainloop related code to GetanController
Björn Ricks <bjoern.ricks@intevation.de>
parents: 175
diff changeset
44 self.loop = urwid.MainLoop(self.view.get_frame(),
cf98dc7f9354 Move mainloop related code to GetanController
Björn Ricks <bjoern.ricks@intevation.de>
parents: 175
diff changeset
45 self.view.get_palette(),
cf98dc7f9354 Move mainloop related code to GetanController
Björn Ricks <bjoern.ricks@intevation.de>
parents: 175
diff changeset
46 screen=urwid.raw_display.Screen(),
cf98dc7f9354 Move mainloop related code to GetanController
Björn Ricks <bjoern.ricks@intevation.de>
parents: 175
diff changeset
47 input_filter=self.input_filter)
cf98dc7f9354 Move mainloop related code to GetanController
Björn Ricks <bjoern.ricks@intevation.de>
parents: 175
diff changeset
48 self.loop.run()
112
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
49
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
50 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
51 if 'window resize' in input:
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
52 self.view.loop.screen_size = None
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
53 self.view.loop.draw_screen()
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
54 else:
199
3fa4ab9146dd Implement three phase user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 198
diff changeset
55 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
56 self.loop.process_input(input)
3fa4ab9146dd Implement three phase user input handling
Björn Ricks <bjoern.ricks@intevation.de>
parents: 198
diff changeset
57 self.state.handle_input(input)
112
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
58
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
59 def load_projects(self):
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
60 projects = self.backend.load_projects()
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
61 if projects:
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
62 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
63 else:
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
64 entries = []
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
65 return (projects, entries)
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
66
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
67 def update_entries(self, project):
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
68 logger.debug("GetanController: update entries.")
135
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 112
diff changeset
69 if project:
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 112
diff changeset
70 entries = self.backend.load_entries(project.id)
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 112
diff changeset
71 else:
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 112
diff changeset
72 entries = []
112
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
73 self.entries_view.set_rows(entries)
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
74 self.view.update_view()
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
75
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
76 def move_selected_entries(self, project):
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
77 old_project = None
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
78 entries = []
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
79 try:
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
80 while self.entries_view.selection:
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
81 node = self.entries_view.selection.pop()
135
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 112
diff changeset
82 if node.selected:
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 112
diff changeset
83 node.select()
112
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
84 entries.append(node.item)
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
85 logger.info("GetanController: move entry '%s' (id = %d, "\
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
86 "project id = %d) to project '%s'"
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
87 % (node.item.desc, node.item.id,
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
88 node.item.project_id, project.desc))
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
89
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
90 if not old_project:
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
91 old_project = self.project_by_id(node.item.project_id)
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
92 finally:
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
93 self.backend.move_entries(entries, project.id)
135
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 112
diff changeset
94 if not old_project:
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 112
diff changeset
95 return
112
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
96 project.entries = self.backend.load_entries(project.id)
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
97 old_project.entries = self.backend.load_entries(old_project.id)
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
98 self.update_entries(old_project)
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
99 self.project_view.update_all()
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
100
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
101 def delete_entries(self, entry_nodes):
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
102 if not entry_nodes:
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
103 return
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
104 proj = self.project_by_id(entry_nodes[0].project_id)
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
105 entries = entry_nodes
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
106 self.backend.delete_entries(entries)
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
107 proj.entries = self.backend.load_entries(proj.id)
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
108 self.update_entries(proj)
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
109 self.project_view.update()
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
110
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
111 def update_project_list(self):
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
112 self.project_view.update()
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
113 self.view.update_view()
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_key(self, key):
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.key == key:
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
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
121 def project_by_id(self, id):
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
122 for proj in self.projects:
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
123 if proj.id == id:
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
124 return proj
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
125 return None
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
126
154
a620eb6e1fb0 Add controller method to find projects by key
Björn Ricks <bjoern.ricks@intevation.de>
parents: 149
diff changeset
127 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
128 projects = []
a620eb6e1fb0 Add controller method to find projects by key
Björn Ricks <bjoern.ricks@intevation.de>
parents: 149
diff changeset
129 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
130 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
131 projects.append(proj)
a620eb6e1fb0 Add controller method to find projects by key
Björn Ricks <bjoern.ricks@intevation.de>
parents: 149
diff changeset
132 return projects
a620eb6e1fb0 Add controller method to find projects by key
Björn Ricks <bjoern.ricks@intevation.de>
parents: 149
diff changeset
133
112
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
134 def start_project(self, project):
135
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 112
diff changeset
135 if not project:
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 112
diff changeset
136 return
112
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
137 self.running.append(project)
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
138 project.start = datetime.now()
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
139 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
140 % (project.desc, format_time(datetime.now())))
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
141 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
142 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
143
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
144 def stop_project(self, desc='-no description-', display=True):
135
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 112
diff changeset
145 if not self.running:
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 112
diff changeset
146 return
112
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
147 project = self.running.pop()
135
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 112
diff changeset
148 if not project:
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 112
diff changeset
149 return
112
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
150 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
151 % (project.desc, format_time(datetime.now())))
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
152 project.stop = datetime.now()
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
153 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
154 if display:
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
155 self.update_entries(project)
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
156 self.update_project_list()
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
157 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
158
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
159 def add_project(self, key, description):
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
160 if not key or not description:
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
161 return
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
162 self.backend.insert_project(key, description)
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
163 self.update_projects()
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
164 self.update_project_list()
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
165
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
166 def update_entry(self, entry):
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
167 self.backend.update_entry(entry)
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 shutdown(self):
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
170 for project in self.running:
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
171 self.stop_project(display=False)
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
172
175
5e069074b1c9 Add Controller method to update a project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 154
diff changeset
173 def update_project(self, project):
5e069074b1c9 Add Controller method to update a project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 154
diff changeset
174 self.backend.update_project(project)
5e069074b1c9 Add Controller method to update a project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 154
diff changeset
175 self.update_projects()
5e069074b1c9 Add Controller method to update a project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 154
diff changeset
176 self.update_project_list()
5e069074b1c9 Add Controller method to update a project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 154
diff changeset
177
112
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
178 def update_projects(self):
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
179 projects, entries = self.load_projects()
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
180 self.projects = projects
d85b2a25797c Move GetanController to it's own module
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
181 self.project_view.load_rows(projects)
149
ac7c6594fc0e Add the getan config to the controller
Björn Ricks <bjoern.ricks@intevation.de>
parents: 136
diff changeset
182
ac7c6594fc0e Add the getan config to the controller
Björn Ricks <bjoern.ricks@intevation.de>
parents: 136
diff changeset
183 def get_config(self):
ac7c6594fc0e Add the getan config to the controller
Björn Ricks <bjoern.ricks@intevation.de>
parents: 136
diff changeset
184 return self.config
194
cf98dc7f9354 Move mainloop related code to GetanController
Björn Ricks <bjoern.ricks@intevation.de>
parents: 175
diff changeset
185
cf98dc7f9354 Move mainloop related code to GetanController
Björn Ricks <bjoern.ricks@intevation.de>
parents: 175
diff changeset
186 def exit(self):
cf98dc7f9354 Move mainloop related code to GetanController
Björn Ricks <bjoern.ricks@intevation.de>
parents: 175
diff changeset
187 logger.info("GetanController: exit.")
cf98dc7f9354 Move mainloop related code to GetanController
Björn Ricks <bjoern.ricks@intevation.de>
parents: 175
diff changeset
188 raise urwid.ExitMainLoop()
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)