Merge lp:~cr3/checkbox/561816 into lp:checkbox

Proposed by Marc Tardif
Status: Merged
Merged at revision: 870
Proposed branch: lp:~cr3/checkbox/561816
Merge into: lp:checkbox
Diff against target: 280 lines (+63/-19)
10 files modified
checkbox/contrib/persist.py (+14/-8)
debian/changelog (+6/-0)
plugins/jobs_prompt.py (+15/-3)
plugins/launchpad_prompt.py (+8/-2)
plugins/launchpad_report.py (+0/-1)
plugins/message_info.py (+0/-1)
plugins/persist_info.py (+2/-2)
plugins/recover_prompt.py (+4/-0)
plugins/suites_prompt.py (+4/-0)
plugins/system_info.py (+10/-2)
To merge this branch: bzr merge lp:~cr3/checkbox/561816
Reviewer Review Type Date Requested Status
Jeff Lane  Approve
Review via email: mp+48349@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Jeff Lane  (bladernr) wrote :

Nice! No more annoying persist tracebacks! and picks up where it left off like it should!

review: Approve
Revision history for this message
Marc Tardif (cr3) wrote :

Don't rejoice so quickly, this only makes loading the persist plugin optional. It should still be loaded in checkbox-satellite because that's how it determines whether the dhcp service should be restarted, which certainly beats restarting the service for every system. However, that problem was addressed separately by having the persistence file stored under the user's home.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'checkbox/contrib/persist.py'
2--- checkbox/contrib/persist.py 2009-02-15 15:40:07 +0000
3+++ checkbox/contrib/persist.py 2011-02-02 17:02:27 +0000
4@@ -24,7 +24,7 @@
5 import posixpath
6
7
8-__all__ = ["Persist", "PickleBackend", "BPickleBackend",
9+__all__ = ["Persist", "MemoryBackend", "PickleBackend", "BPickleBackend",
10 "path_string_to_tuple", "path_tuple_to_string", "RootedPersist",
11 "PersistError", "PersistReadOnlyError"]
12
13@@ -410,7 +410,7 @@
14 class Backend(object):
15
16 def new(self):
17- raise NotImplementedError
18+ return {}
19
20 def load(self, filepath):
21 raise NotImplementedError
22@@ -494,15 +494,24 @@
23 return NotImplemented
24
25
26+class MemoryBackend(Backend):
27+
28+ def __init__(self):
29+ self._store = {}
30+
31+ def load(self, filepath):
32+ return self._store.get(filepath)
33+
34+ def save(self, filepath, map):
35+ self._store[filepath] = map
36+
37+
38 class PickleBackend(Backend):
39
40 def __init__(self):
41 import cPickle
42 self._pickle = cPickle
43
44- def new(self):
45- return {}
46-
47 def load(self, filepath):
48 file = open(filepath)
49 try:
50@@ -524,9 +533,6 @@
51 from checkbox.contrib import bpickle
52 self._bpickle = bpickle
53
54- def new(self):
55- return {}
56-
57 def load(self, filepath):
58 file = open(filepath)
59 try:
60
61=== modified file 'debian/changelog'
62--- debian/changelog 2011-01-12 21:04:06 +0000
63+++ debian/changelog 2011-02-02 17:02:27 +0000
64@@ -1,3 +1,9 @@
65+checkbox (0.10.5) natty; urgency=low
66+
67+ * Changed support for persist plugin as optional (LP: #561816)
68+
69+ -- Marc Tardif <marc@ubuntu.com> Wed, 02 Feb 2011 11:55:06 -0500
70+
71 checkbox (0.10.4) maverick; urgency=low
72
73 * Fixed parsing of config parameters (LP: #689140)
74
75=== modified file 'plugins/jobs_prompt.py'
76--- plugins/jobs_prompt.py 2010-02-22 19:57:55 +0000
77+++ plugins/jobs_prompt.py 2011-02-02 17:02:27 +0000
78@@ -21,6 +21,8 @@
79 from checkbox.plugin import Plugin
80 from checkbox.user_interface import NEXT, PREV
81
82+from checkbox.contrib.persist import Persist, MemoryBackend
83+
84
85 class JobsPrompt(Plugin):
86
87@@ -30,10 +32,22 @@
88 # Maximum number of messages per directory
89 store_directory_size = Int(default=1000)
90
91+ @property
92+ def store(self):
93+ if self._store is None:
94+ self._store = JobStore(self.persist, self.store_directory,
95+ self.store_directory_size)
96+
97+ return self._store
98+
99 def register(self, manager):
100 super(JobsPrompt, self).register(manager)
101
102 self._ignore = []
103+ self._store = None
104+
105+ # Use memory backend for persistence by default
106+ self.persist = Persist(backend=MemoryBackend())
107
108 for (rt, rh) in [
109 ("begin-persist", self.begin_persist),
110@@ -46,9 +60,7 @@
111 self._manager.reactor.call_on(rt, rh)
112
113 def begin_persist(self, persist):
114- persist = persist.root_at("jobs_prompt")
115- self.store = JobStore(persist, self.store_directory,
116- self.store_directory_size)
117+ self.persist = persist.root_at("jobs_prompt")
118
119 def ignore_jobs(self, jobs):
120 self._ignore = jobs
121
122=== modified file 'plugins/launchpad_prompt.py'
123--- plugins/launchpad_prompt.py 2010-02-22 17:01:03 +0000
124+++ plugins/launchpad_prompt.py 2011-02-02 17:02:27 +0000
125@@ -34,6 +34,8 @@
126 def register(self, manager):
127 super(LaunchpadPrompt, self).register(manager)
128
129+ self.persist = None
130+
131 for (rt, rh) in [
132 ("begin-persist", self.begin_persist),
133 ("launchpad-report", self.launchpad_report),
134@@ -47,7 +49,10 @@
135 self._launchpad_report = report
136
137 def prompt_exchange(self, interface):
138- email = self.persist.get("email") or self.email
139+ if self.persist and self.persist.has("email"):
140+ email = self.persist.get("email")
141+ else:
142+ email = self.email
143
144 # Register temporary handler for exchange-error events
145 errors = []
146@@ -96,7 +101,8 @@
147 break
148
149 self._manager.reactor.cancel_call(event_id)
150- self.persist.set("email", email)
151+ if self.persist:
152+ self.persist.set("email", email)
153
154
155 factory = LaunchpadPrompt
156
157=== modified file 'plugins/launchpad_report.py'
158--- plugins/launchpad_report.py 2010-07-29 21:29:36 +0000
159+++ plugins/launchpad_report.py 2011-02-02 17:02:27 +0000
160@@ -18,7 +18,6 @@
161 #
162 import os
163 import posixpath
164-import shutil
165
166 from checkbox.lib.safe import safe_make_directory
167
168
169=== modified file 'plugins/message_info.py'
170--- plugins/message_info.py 2010-02-25 17:37:40 +0000
171+++ plugins/message_info.py 2011-02-02 17:02:27 +0000
172@@ -49,7 +49,6 @@
173 whitelist_patterns = [re.compile(r"^%s$" % r) for r in whitelist if r]
174 blacklist_patterns = [re.compile(r"^%s$" % r) for r in blacklist if r]
175
176- filenames = []
177 for filename in path_expand_recursive(directory):
178 name = posixpath.basename(filename)
179 if name.startswith(".") or name.endswith("~"):
180
181=== modified file 'plugins/persist_info.py'
182--- plugins/persist_info.py 2010-04-09 12:56:55 +0000
183+++ plugins/persist_info.py 2011-02-02 17:02:27 +0000
184@@ -33,14 +33,14 @@
185 self.persist = None
186
187 for (rt, rh) in [
188- ("begin", self.begin),
189+ ("prompt-begin", self.prompt_begin),
190 ("prompt-job", self.save)]:
191 self._manager.reactor.call_on(rt, rh, -100)
192
193 # Save persist data last
194 self._manager.reactor.call_on("stop", self.save, 1000)
195
196- def begin(self):
197+ def prompt_begin(self, interface):
198 self.persist = Persist(self.filename)
199 self._manager.reactor.fire("begin-persist", self.persist)
200
201
202=== modified file 'plugins/recover_prompt.py'
203--- plugins/recover_prompt.py 2010-02-25 17:37:40 +0000
204+++ plugins/recover_prompt.py 2011-02-02 17:02:27 +0000
205@@ -21,12 +21,16 @@
206 from checkbox.plugin import Plugin
207 from checkbox.user_interface import NEXT
208
209+from checkbox.contrib.persist import Persist, MemoryBackend
210+
211
212 class RecoverPrompt(Plugin):
213
214 def register(self, manager):
215 super(RecoverPrompt, self).register(manager)
216
217+ self.persist = Persist(backend=MemoryBackend())
218+
219 for (rt, rh) in [
220 ("begin-persist", self.begin_persist),
221 ("prompt-begin", self.prompt_begin),
222
223=== modified file 'plugins/suites_prompt.py'
224--- plugins/suites_prompt.py 2010-02-22 17:01:03 +0000
225+++ plugins/suites_prompt.py 2011-02-02 17:02:27 +0000
226@@ -23,6 +23,8 @@
227 from checkbox.plugin import Plugin
228 from checkbox.user_interface import PREV
229
230+from checkbox.contrib.persist import Persist, MemoryBackend
231+
232 from gettext import gettext as _
233
234
235@@ -35,6 +37,8 @@
236 self._jobs = {}
237 self._recover = False
238
239+ self.persist = Persist(backend=MemoryBackend())
240+
241 for (rt, rh) in [
242 ("begin-persist", self.begin_persist),
243 ("begin-recover", self.begin_recover),
244
245=== modified file 'plugins/system_info.py'
246--- plugins/system_info.py 2010-03-08 15:29:47 +0000
247+++ plugins/system_info.py 2011-02-02 17:02:27 +0000
248@@ -33,6 +33,7 @@
249 def register(self, manager):
250 super(SystemInfo, self).register(manager)
251
252+ self.persist = None
253 self.resource = None
254
255 for (rt, rh) in [
256@@ -53,7 +54,13 @@
257
258 # TODO: report this upon gathering
259 def report(self):
260- system_id = self.system_id or self.persist.get("system_id")
261+ if self.system_id:
262+ system_id = self.system_id
263+ elif self.persist and self.persist.has("system_id"):
264+ system_id = self.persist.get("system_id")
265+ else:
266+ system_id = None
267+
268 if not system_id:
269 resource = self.resource
270 if resource is None or "product" not in resource:
271@@ -71,7 +78,8 @@
272 fingerprint.update(str(field))
273
274 system_id = fingerprint.hexdigest()
275- self.persist.set("system_id", system_id)
276+ if self.persist:
277+ self.persist.set("system_id", system_id)
278
279 message = system_id
280 logging.info("System ID: %s", message)

Subscribers

People subscribed via source and target branches