Status: | Merged |
---|---|
Approved by: | Eric Day |
Approved revision: | 11 |
Merged at revision: | 11 |
Proposed branch: | lp:~eday/burrow/cleanup |
Merge into: | lp:burrow |
Diff against target: |
637 lines (+207/-111) 9 files modified
.bzrignore (+2/-0) burrow/__init__.py (+1/-1) burrow/backend/http.py (+14/-13) burrow/client.py (+61/-0) burrow/frontend/wsgi.py (+2/-4) burrow/shell.py (+58/-22) doc/source/index.rst (+1/-1) doc/source/misc.rst (+6/-6) test/frontend/test_wsgi.py (+62/-64) |
To merge this branch: | bzr merge lp:~eday/burrow/cleanup |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Burrow Core Team | Pending | ||
Review via email: mp+58552@code.launchpad.net |
Commit message
Description of the change
Added client API interfaces (Account and Queue), modified HTTP response formatting, misc doc/code cleanup.
To post a comment you must log in.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file '.bzrignore' |
2 | --- .bzrignore 2011-04-20 05:14:30 +0000 |
3 | +++ .bzrignore 2011-04-20 18:31:01 +0000 |
4 | @@ -1,4 +1,6 @@ |
5 | +.coverage |
6 | burrow.egg-info |
7 | ChangeLog |
8 | +coverage |
9 | dist |
10 | doc/build/* |
11 | |
12 | === modified file 'burrow/__init__.py' |
13 | --- burrow/__init__.py 2011-04-20 05:14:30 +0000 |
14 | +++ burrow/__init__.py 2011-04-20 18:31:01 +0000 |
15 | @@ -17,7 +17,7 @@ |
16 | |
17 | import gettext |
18 | |
19 | -from burrow.client import Client |
20 | +from burrow.client import Client, Account, Queue |
21 | from burrow.server import Server |
22 | |
23 | __version__ = '2011.2' |
24 | |
25 | === modified file 'burrow/backend/http.py' |
26 | --- burrow/backend/http.py 2011-04-18 20:07:11 +0000 |
27 | +++ burrow/backend/http.py 2011-04-20 18:31:01 +0000 |
28 | @@ -15,6 +15,7 @@ |
29 | '''HTTP backend for burrow using httplib.''' |
30 | |
31 | import httplib |
32 | +import json |
33 | |
34 | import burrow.backend |
35 | |
36 | @@ -29,52 +30,52 @@ |
37 | |
38 | def delete_accounts(self, filters={}): |
39 | url = self._add_parameters('', filters=filters) |
40 | - self._request('DELETE', url) |
41 | + return self._request('DELETE', url) |
42 | |
43 | def get_accounts(self, filters={}): |
44 | url = self._add_parameters('', filters=filters) |
45 | - self._request('GET', url) |
46 | + return self._request('GET', url) |
47 | |
48 | def delete_queues(self, account, filters={}): |
49 | url = self._add_parameters('/%s' % account, filters=filters) |
50 | - self._request('DELETE', url) |
51 | + return self._request('DELETE', url) |
52 | |
53 | def get_queues(self, account, filters={}): |
54 | url = self._add_parameters('/%s' % account, filters=filters) |
55 | - self._request('GET', url) |
56 | + return self._request('GET', url) |
57 | |
58 | def delete_messages(self, account, queue, filters={}): |
59 | url = '/%s/%s' % (account, queue) |
60 | url = self._add_parameters(url, filters=filters) |
61 | - self._request('DELETE', url) |
62 | + return self._request('DELETE', url) |
63 | |
64 | def get_messages(self, account, queue, filters={}): |
65 | url = '/%s/%s' % (account, queue) |
66 | url = self._add_parameters(url, filters=filters) |
67 | - self._request('GET', url) |
68 | + return self._request('GET', url) |
69 | |
70 | def update_messages(self, account, queue, attributes={}, filters={}): |
71 | url = '/%s/%s' % (account, queue) |
72 | url = self._add_parameters(url, attributes, filters) |
73 | - self._request('POST', url) |
74 | + return self._request('POST', url) |
75 | |
76 | def create_message(self, account, queue, message, body, attributes={}): |
77 | url = '/%s/%s/%s' % (account, queue, message) |
78 | url = self._add_parameters(url, attributes) |
79 | - self._request('PUT', url, body=body) |
80 | + return self._request('PUT', url, body=body) |
81 | |
82 | def delete_message(self, account, queue, message): |
83 | url = '/%s/%s/%s' % (account, queue, message) |
84 | - self._request('DELETE', url) |
85 | + return self._request('DELETE', url) |
86 | |
87 | def get_message(self, account, queue, message): |
88 | url = '/%s/%s/%s' % (account, queue, message) |
89 | - self._request('GET', url) |
90 | + return self._request('GET', url) |
91 | |
92 | def update_message(self, account, queue, message, attributes={}): |
93 | url = '/%s/%s/%s' % (account, queue, message) |
94 | url = self._add_parameters(url, attributes) |
95 | - self._request('POST', url) |
96 | + return self._request('POST', url) |
97 | |
98 | def clean(self): |
99 | pass |
100 | @@ -98,6 +99,6 @@ |
101 | connection.request(method, '/v1.0' + url, *args, **kwargs) |
102 | response = connection.getresponse() |
103 | if response.status == 200: |
104 | - print response.read() |
105 | + return json.loads(response.read()) |
106 | if response.status >= 400: |
107 | - print response.reason |
108 | + raise Exception(response.reason) |
109 | |
110 | === modified file 'burrow/client.py' |
111 | --- burrow/client.py 2011-04-20 05:14:30 +0000 |
112 | +++ burrow/client.py 2011-04-20 18:31:01 +0000 |
113 | @@ -43,3 +43,64 @@ |
114 | backend = self.config.get('backend', DEFAULT_BACKEND) |
115 | config = (self._config, backend) |
116 | return burrow.common.import_class(backend, 'Backend')(config) |
117 | + |
118 | + def __getattr__(self, name): |
119 | + return getattr(self.backend, name) |
120 | + |
121 | + |
122 | +class Account(object): |
123 | + '''Convenience wrapper around the Client class that saves the |
124 | + account setting. This allows you to use methods without specifying |
125 | + the 'account' parameter every time.''' |
126 | + |
127 | + account_methods = [ |
128 | + 'delete_queues', |
129 | + 'get_queues', |
130 | + 'delete_messages', |
131 | + 'get_messages', |
132 | + 'update_messages', |
133 | + 'create_message', |
134 | + 'delete_message', |
135 | + 'get_message', |
136 | + 'update_message'] |
137 | + |
138 | + def __init__(self, account, client=None, **kwargs): |
139 | + self.account = account |
140 | + if client is None: |
141 | + self.client = Client(**kwargs) |
142 | + else: |
143 | + self.client = client |
144 | + |
145 | + def __getattr__(self, name): |
146 | + '''If the requested method is an account method, return a |
147 | + wrapper with the given account parameters.''' |
148 | + if name not in self.account_methods: |
149 | + return getattr(self.client, name) |
150 | + |
151 | + def function(*args, **kwargs): |
152 | + '''Call the client method with the account.''' |
153 | + return getattr(self.client, name)(self.account, *args, **kwargs) |
154 | + return function |
155 | + |
156 | + |
157 | +class Queue(Account): |
158 | + '''Convenience wrapper around the Client class that saves the |
159 | + account and queue setting. This allows you to use methods without |
160 | + specifying the 'account' and 'queue' parameter every time.''' |
161 | + |
162 | + def __init__(self, account, queue, **kwargs): |
163 | + super(Queue, self).__init__(account, **kwargs) |
164 | + self.queue = queue |
165 | + self.queue_methods = self.account_methods[2:] |
166 | + |
167 | + def __getattr__(self, name): |
168 | + '''If the requested method is a queue method, return a wrapper |
169 | + with the given account and queue parameters.''' |
170 | + if name not in self.queue_methods: |
171 | + return super(Queue, self).__getattr__(name) |
172 | + |
173 | + def function(*args, **kwargs): |
174 | + '''Call the client method with the account and queue.''' |
175 | + return getattr(self.client, name)(self.account, self.queue, *args, |
176 | + **kwargs) |
177 | + return function |
178 | |
179 | === modified file 'burrow/frontend/wsgi.py' |
180 | --- burrow/frontend/wsgi.py 2011-04-20 05:14:30 +0000 |
181 | +++ burrow/frontend/wsgi.py 2011-04-20 18:31:01 +0000 |
182 | @@ -226,8 +226,7 @@ |
183 | detail = req.params['detail'] |
184 | message = self._filter_message(detail, message) |
185 | if message is not None: |
186 | - body = {account: {queue: [message]}} |
187 | - return webob.exc.HTTPOk(body=json.dumps(body, indent=2)) |
188 | + return webob.exc.HTTPOk(body=json.dumps(message, indent=2)) |
189 | return webob.exc.HTTPNoContent() |
190 | |
191 | def _return_messages(self, req, account, queue, messages, detail): |
192 | @@ -242,8 +241,7 @@ |
193 | filtered_messages.append(message) |
194 | if len(filtered_messages) == 0: |
195 | return webob.exc.HTTPNoContent() |
196 | - body = {account: {queue: filtered_messages}} |
197 | - return webob.exc.HTTPOk(body=json.dumps(body, indent=2)) |
198 | + return webob.exc.HTTPOk(body=json.dumps(filtered_messages, indent=2)) |
199 | |
200 | def _parse_filters(self, req): |
201 | filters = {} |
202 | |
203 | === modified file 'burrow/shell.py' |
204 | --- burrow/shell.py 2011-04-20 05:14:30 +0000 |
205 | +++ burrow/shell.py 2011-04-20 18:31:01 +0000 |
206 | @@ -100,6 +100,7 @@ |
207 | (self.options, self.args) = self.parser.parse_args() |
208 | if self.options.commands: |
209 | self.print_help() |
210 | + sys.exit(1) |
211 | if self.options.files is None: |
212 | files = [] |
213 | else: |
214 | @@ -136,6 +137,9 @@ |
215 | command = command.split() |
216 | if len(command) == 0: |
217 | continue |
218 | + if command[0] == 'help': |
219 | + self.print_help(print_options_help=False) |
220 | + continue |
221 | if command[0] == 'exit' or command[0] == 'quit': |
222 | break |
223 | yield command |
224 | @@ -147,29 +151,24 @@ |
225 | print _('Command not found: %s') % command |
226 | return |
227 | if len(args) != len(section['args']): |
228 | - print _('Wrong number of arguments') |
229 | + for arg in section['args']: |
230 | + command += ' <%s>' % arg |
231 | + print _('Wrong number of arguments: %s') % command |
232 | return |
233 | if section.get('account', None): |
234 | args.insert(0, self.options.account) |
235 | if command in self.stdin_commands: |
236 | args.append(sys.stdin.read()) |
237 | if command in self.attribute_commands: |
238 | - attributes = {} |
239 | - if self.options.ttl is not None: |
240 | - attributes['ttl'] = self.options.ttl |
241 | - if self.options.hide is not None: |
242 | - attributes['hide'] = self.options.hide |
243 | - args.append(attributes) |
244 | + args.append(self._pack_attributes()) |
245 | if section.get('filters', None): |
246 | - filters = {} |
247 | - if self.options.limit is not None: |
248 | - filters['limit'] = self.options.limit |
249 | - if self.options.marker is not None: |
250 | - filters['marker'] = self.options.marker |
251 | - if self.options.all is not None: |
252 | - filters['match_hidden'] = self.options.all |
253 | - args.append(filters) |
254 | - getattr(self.client.backend, command)(*args) |
255 | + args.append(self._pack_filters()) |
256 | + try: |
257 | + result = getattr(self.client, command)(*args) |
258 | + except Exception, exception: |
259 | + print exception |
260 | + return |
261 | + self._print_result(result) |
262 | |
263 | def _get_section(self, command): |
264 | '''Lookup command in the defined command sections.''' |
265 | @@ -178,13 +177,51 @@ |
266 | return section |
267 | return None |
268 | |
269 | - def print_help(self, message=None): |
270 | + def _pack_attributes(self): |
271 | + '''Pack attributes given in command line options.''' |
272 | + attributes = {} |
273 | + if self.options.ttl is not None: |
274 | + attributes['ttl'] = self.options.ttl |
275 | + if self.options.hide is not None: |
276 | + attributes['hide'] = self.options.hide |
277 | + return attributes |
278 | + |
279 | + def _pack_filters(self): |
280 | + '''Pack filters given in command line options.''' |
281 | + filters = {} |
282 | + if self.options.limit is not None: |
283 | + filters['limit'] = self.options.limit |
284 | + if self.options.marker is not None: |
285 | + filters['marker'] = self.options.marker |
286 | + if self.options.all is not None: |
287 | + filters['match_hidden'] = self.options.all |
288 | + return filters |
289 | + |
290 | + def _print_result(self, result): |
291 | + '''Format and print the result.''' |
292 | + if isinstance(result, list): |
293 | + for item in result: |
294 | + if isinstance(item, dict): |
295 | + self._print_message(item) |
296 | + else: |
297 | + print item |
298 | + elif isinstance(result, dict): |
299 | + self._print_message(result) |
300 | + elif result is not None: |
301 | + print result |
302 | + |
303 | + def _print_message(self, item): |
304 | + '''Format and print message.''' |
305 | + print 'id =', item['id'] |
306 | + for key, value in item.iteritems(): |
307 | + if key != 'id': |
308 | + print ' ', key, '=', value |
309 | + |
310 | + def print_help(self, print_options_help=True): |
311 | '''Print the parser generated help along with burrow command help.''' |
312 | - if message: |
313 | - print message |
314 | + if print_options_help: |
315 | + self.parser.print_help() |
316 | |
317 | - self.parser.print_help() |
318 | |
319 | for section in self.sections: |
320 | print '%s commands:' % section['name'] |
321 | for command in section['commands']: |
322 | @@ -197,7 +234,6 @@ |
323 | help_string += ' <%s>' % arg |
324 | print ' %s%s' % (command, help_string) |
325 | |
326 | - sys.exit(1) |
327 | |
328 | |
329 | if __name__ == '__main__': |
330 | |
331 | === modified file 'doc/source/index.rst' |
332 | --- doc/source/index.rst 2011-04-18 20:07:11 +0000 |
333 | +++ doc/source/index.rst 2011-04-20 18:31:01 +0000 |
334 | @@ -61,6 +61,6 @@ |
335 | server |
336 | frontends |
337 | backends |
338 | - common |
339 | + misc |
340 | |
341 | * :ref:`modindex` |
342 | |
343 | === renamed file 'doc/source/common.rst' => 'doc/source/misc.rst' |
344 | --- doc/source/common.rst 2011-04-08 02:31:30 +0000 |
345 | +++ doc/source/misc.rst 2011-04-20 18:31:01 +0000 |
346 | @@ -13,13 +13,13 @@ |
347 | See the License for the specific language governing permissions and |
348 | limitations under the License. |
349 | |
350 | +Miscellaneous |
351 | +************* |
352 | + |
353 | Common |
354 | -****** |
355 | - |
356 | -Core |
357 | -==== |
358 | - |
359 | -.. automodule:: burrow |
360 | +====== |
361 | + |
362 | +.. automodule:: burrow.common |
363 | :members: |
364 | :undoc-members: |
365 | :show-inheritance: |
366 | |
367 | === modified file 'test/frontend/test_wsgi.py' |
368 | --- test/frontend/test_wsgi.py 2011-04-18 20:07:11 +0000 |
369 | +++ test/frontend/test_wsgi.py 2011-04-20 18:31:01 +0000 |
370 | @@ -45,30 +45,30 @@ |
371 | |
372 | def test_account(self): |
373 | self._put_url('/a/q/1') |
374 | - accounts = self._get_url('') |
375 | - self.assertEquals(accounts, ['a']) |
376 | + result = self._get_url('') |
377 | + self.assertEquals(result, ['a']) |
378 | self._delete_url('/a') |
379 | |
380 | def test_queue(self): |
381 | self._put_url('/a/q/1') |
382 | - accounts = self._get_url('/a') |
383 | - self.assertEquals(accounts, ['q']) |
384 | + result = self._get_url('/a') |
385 | + self.assertEquals(result, ['q']) |
386 | self._delete_url('/a/q') |
387 | |
388 | def test_message(self): |
389 | self._put_url('/a/q/1', body='b') |
390 | - accounts = self._get_url('/a/q') |
391 | - self.assertMessages(accounts, 'a', 'q', [self.message('1', body='b')]) |
392 | + result = self._get_url('/a/q') |
393 | + self.assertMessages(result, [self.message('1', body='b')]) |
394 | self._delete_url('/a/q/1') |
395 | |
396 | def test_message_post(self): |
397 | self._put_url('/a/q/1', body='b') |
398 | for x in range(0, 3): |
399 | - accounts = self._post_url('/a/q/1?ttl=%d&hide=%d' % (x, x)) |
400 | - self.assertEquals(accounts, {'a': {'q': [{'id': '1'}]}}) |
401 | - accounts = self._get_url('/a/q?hidden=true') |
402 | + result = self._post_url('/a/q/1?ttl=%d&hide=%d' % (x, x)) |
403 | + self.assertEquals(result, {'id': '1'}) |
404 | + result = self._get_url('/a/q?hidden=true') |
405 | message = self.message('1', x, x, body='b') |
406 | - self.assertMessages(accounts, 'a', 'q', [message]) |
407 | + self.assertMessages(result, [message]) |
408 | self._delete_url('/a/q/1') |
409 | |
410 | def test_message_put(self): |
411 | @@ -76,151 +76,151 @@ |
412 | url = '/a/q/1?ttl=%d&hide=%d' % (x, x) |
413 | status = 201 if x == 0 else 204 |
414 | self._put_url(url, body=str(x), status=status) |
415 | - accounts = self._get_url('/a/q?hidden=true') |
416 | + result = self._get_url('/a/q?hidden=true') |
417 | message = self.message('1', x, x, body=str(x)) |
418 | - self.assertMessages(accounts, 'a', 'q', [message]) |
419 | + self.assertMessages(result, [message]) |
420 | self._delete_url('/a/q/1') |
421 | |
422 | def test_message_delete_limit(self): |
423 | [self._put_url('/a/q/%d' % x) for x in range(1, 5)] |
424 | - accounts = self._delete_url('/a/q?limit=3&detail=all', status=200) |
425 | + result = self._delete_url('/a/q?limit=3&detail=all', status=200) |
426 | messages = [] |
427 | messages.append(self.message('1')) |
428 | messages.append(self.message('2')) |
429 | messages.append(self.message('3')) |
430 | - self.assertMessages(accounts, 'a', 'q', messages) |
431 | - accounts = self._delete_url('/a/q?limit=3&detail=all', status=200) |
432 | + self.assertMessages(result, messages) |
433 | + result = self._delete_url('/a/q?limit=3&detail=all', status=200) |
434 | message = self.message('4') |
435 | - self.assertMessages(accounts, 'a', 'q', [message]) |
436 | + self.assertMessages(result, [message]) |
437 | |
438 | def test_message_get_limit(self): |
439 | [self._put_url('/a/q/%d' % x) for x in range(1, 5)] |
440 | for x in range(0, 4): |
441 | - accounts = self._get_url('/a/q?limit=3') |
442 | + result = self._get_url('/a/q?limit=3') |
443 | messages = [] |
444 | for y in range(x, 4)[:3]: |
445 | messages.append(self.message(str(y + 1))) |
446 | - self.assertMessages(accounts, 'a', 'q', messages) |
447 | + self.assertMessages(result, messages) |
448 | self._delete_url('/a/q/%d' % (x + 1)) |
449 | |
450 | def test_message_post_limit(self): |
451 | [self._put_url('/a/q/%d' % x) for x in range(1, 5)] |
452 | for x in range(0, 4): |
453 | - accounts = self._post_url('/a/q?limit=3&ttl=%d&detail=all' % x) |
454 | + result = self._post_url('/a/q?limit=3&ttl=%d&detail=all' % x) |
455 | messages = [] |
456 | for y in range(x, 4)[:3]: |
457 | messages.append(self.message(str(y + 1), x)) |
458 | - self.assertMessages(accounts, 'a', 'q', messages) |
459 | + self.assertMessages(result, messages) |
460 | self._delete_url('/a/q/%d' % (x + 1)) |
461 | |
462 | def test_message_delete_marker(self): |
463 | [self._put_url('/a/q/%d' % x) for x in range(1, 5)] |
464 | - accounts = self._delete_url('/a/q?marker=2&detail=all', status=200) |
465 | + result = self._delete_url('/a/q?marker=2&detail=all', status=200) |
466 | messages = [] |
467 | messages.append(self.message('3')) |
468 | messages.append(self.message('4')) |
469 | - self.assertMessages(accounts, 'a', 'q', messages) |
470 | - accounts = self._delete_url('/a/q?marker=5&detail=all', status=200) |
471 | + self.assertMessages(result, messages) |
472 | + result = self._delete_url('/a/q?marker=5&detail=all', status=200) |
473 | messages = [] |
474 | messages.append(self.message('1')) |
475 | messages.append(self.message('2')) |
476 | - self.assertMessages(accounts, 'a', 'q', messages) |
477 | + self.assertMessages(result, messages) |
478 | |
479 | def test_message_get_marker(self): |
480 | [self._put_url('/a/q/%d' % x) for x in range(1, 5)] |
481 | for x in range(0, 4): |
482 | - accounts = self._get_url('/a/q?marker=%d' % x) |
483 | + result = self._get_url('/a/q?marker=%d' % x) |
484 | messages = [] |
485 | for y in range(x, 4): |
486 | messages.append(self.message(str(y + 1))) |
487 | - self.assertMessages(accounts, 'a', 'q', messages) |
488 | + self.assertMessages(result, messages) |
489 | self._delete_url('/a/q/%d' % (x + 1)) |
490 | |
491 | def test_message_post_marker(self): |
492 | [self._put_url('/a/q/%d' % x) for x in range(1, 5)] |
493 | for x in range(0, 4): |
494 | url = '/a/q?marker=%d&ttl=%d&detail=all' % (x, x) |
495 | - accounts = self._post_url(url) |
496 | + result = self._post_url(url) |
497 | messages = [] |
498 | for y in range(x, 4): |
499 | messages.append(self.message(str(y + 1), x)) |
500 | - self.assertMessages(accounts, 'a', 'q', messages) |
501 | + self.assertMessages(result, messages) |
502 | self._delete_url('/a/q/%d' % (x + 1)) |
503 | |
504 | def test_message_delete_limit_marker(self): |
505 | [self._put_url('/a/q/%d' % x) for x in range(1, 5)] |
506 | url = '/a/q?limit=2&marker=1&detail=all' |
507 | - accounts = self._delete_url(url, status=200) |
508 | + result = self._delete_url(url, status=200) |
509 | messages = [] |
510 | messages.append(self.message('2')) |
511 | messages.append(self.message('3')) |
512 | - self.assertMessages(accounts, 'a', 'q', messages) |
513 | + self.assertMessages(result, messages) |
514 | url = '/a/q?limit=2&marker=5&detail=all' |
515 | - accounts = self._delete_url(url, status=200) |
516 | + result = self._delete_url(url, status=200) |
517 | messages = [] |
518 | messages.append(self.message('1')) |
519 | messages.append(self.message('4')) |
520 | - self.assertMessages(accounts, 'a', 'q', messages) |
521 | + self.assertMessages(result, messages) |
522 | |
523 | def test_message_get_limit_marker(self): |
524 | [self._put_url('/a/q/%d' % x) for x in range(1, 5)] |
525 | for x in range(0, 4): |
526 | - accounts = self._get_url('/a/q?limit=2&marker=%d' % x) |
527 | + result = self._get_url('/a/q?limit=2&marker=%d' % x) |
528 | messages = [] |
529 | for y in range(x, 4)[:2]: |
530 | messages.append(self.message(str(y + 1))) |
531 | - self.assertMessages(accounts, 'a', 'q', messages) |
532 | + self.assertMessages(result, messages) |
533 | self._delete_url('/a/q/%d' % (x + 1)) |
534 | |
535 | def test_message_post_limit_marker(self): |
536 | [self._put_url('/a/q/%d' % x) for x in range(1, 5)] |
537 | for x in range(0, 4): |
538 | url = '/a/q?limit=2&marker=%d&ttl=%d&detail=all' % (x, x) |
539 | - accounts = self._post_url(url) |
540 | + result = self._post_url(url) |
541 | messages = [] |
542 | for y in range(x, 4)[:2]: |
543 | messages.append(self.message(str(y + 1), x)) |
544 | - self.assertMessages(accounts, 'a', 'q', messages) |
545 | + self.assertMessages(result, messages) |
546 | self._delete_url('/a/q/%d' % (x + 1)) |
547 | |
548 | def test_message_ttl(self): |
549 | self._put_url('/a/q/1?ttl=1') |
550 | - accounts = self._get_url('/a/q/1') |
551 | + result = self._get_url('/a/q/1') |
552 | message = self.message('1', 1) |
553 | - self.assertMessages(accounts, 'a', 'q', [self.message('1', 1)]) |
554 | + self.assertMessages([result], [self.message('1', 1)]) |
555 | time.sleep(1) |
556 | self.backend.clean() |
557 | self._get_url('/a/q/1', status=404) |
558 | self._put_url('/a/q/1') |
559 | - accounts = self._get_url('/a/q/1') |
560 | - self.assertMessages(accounts, 'a', 'q', [self.message('1')]) |
561 | + result = self._get_url('/a/q/1') |
562 | + self.assertMessages([result], [self.message('1')]) |
563 | self._post_url('/a/q/1?ttl=1') |
564 | - accounts = self._get_url('/a/q/1') |
565 | - self.assertMessages(accounts, 'a', 'q', [self.message('1', 1)]) |
566 | + result = self._get_url('/a/q/1') |
567 | + self.assertMessages([result], [self.message('1', 1)]) |
568 | time.sleep(1) |
569 | self.backend.clean() |
570 | self._get_url('/a/q/1', status=404) |
571 | |
572 | def test_message_hide(self): |
573 | self._put_url('/a/q/1?hide=1') |
574 | - accounts = self._get_url('/a/q/1') |
575 | - self.assertMessages(accounts, 'a', 'q', [self.message('1', hide=1)]) |
576 | + result = self._get_url('/a/q/1') |
577 | + self.assertMessages([result], [self.message('1', hide=1)]) |
578 | time.sleep(1) |
579 | self.backend.clean() |
580 | - accounts = self._get_url('/a/q/1') |
581 | - self.assertMessages(accounts, 'a', 'q', [self.message('1')]) |
582 | + result = self._get_url('/a/q/1') |
583 | + self.assertMessages([result], [self.message('1')]) |
584 | self._post_url('/a/q/1?hide=1') |
585 | - accounts = self._get_url('/a/q/1') |
586 | - self.assertMessages(accounts, 'a', 'q', [self.message('1', hide=1)]) |
587 | + result = self._get_url('/a/q/1') |
588 | + self.assertMessages([result], [self.message('1', hide=1)]) |
589 | time.sleep(1) |
590 | self.backend.clean() |
591 | - accounts = self._get_url('/a/q/1') |
592 | - self.assertMessages(accounts, 'a', 'q', [self.message('1')]) |
593 | + result = self._get_url('/a/q/1') |
594 | + self.assertMessages([result], [self.message('1')]) |
595 | self._delete_url('/a/q/1') |
596 | |
597 | def _message_wait(self): |
598 | - accounts = self._get_url('/a/q?wait=2') |
599 | - self.assertMessages(accounts, 'a', 'q', [self.message('1')]) |
600 | + result = self._get_url('/a/q?wait=2') |
601 | + self.assertMessages(result, [self.message('1')]) |
602 | self.success = True |
603 | |
604 | def test_message_put_wait(self): |
605 | @@ -270,22 +270,20 @@ |
606 | def message(self, id, ttl=0, hide=0, body=''): |
607 | return dict(id=id, ttl=ttl, hide=hide, body=body) |
608 | |
609 | - def assertMessages(self, accounts, account, queue, messages): |
610 | - self.assertEquals(len(accounts), 1) |
611 | - self.assertEquals(len(accounts['a']), 1) |
612 | - self.assertEquals(len(accounts['a']['q']), len(messages)) |
613 | - for x in range(0, len(messages)): |
614 | - self.assertEquals(accounts['a']['q'][x]['id'], messages[x]['id']) |
615 | - ttl = messages[x]['ttl'] |
616 | + def assertMessages(self, first, second): |
617 | + self.assertEquals(len(first), len(second)) |
618 | + for x in xrange(0, len(second)): |
619 | + self.assertEquals(first[x]['id'], second[x]['id']) |
620 | + ttl = second[x]['ttl'] |
621 | if ttl > 0: |
622 | ttl += int(time.time()) |
623 | - self.assertAlmostEquals(accounts['a']['q'][0]['ttl'], ttl) |
624 | - hide = messages[x]['hide'] |
625 | + self.assertAlmostEquals(first[x]['ttl'], ttl) |
626 | + hide = second[x]['hide'] |
627 | if hide > 0: |
628 | hide += int(time.time()) |
629 | - self.assertAlmostEquals(accounts['a']['q'][0]['hide'], hide) |
630 | - body = messages[x]['body'] |
631 | - self.assertEquals(accounts['a']['q'][x]['body'], body) |
632 | + self.assertAlmostEquals(first[x]['hide'], hide) |
633 | + body = second[x]['body'] |
634 | + self.assertEquals(first[x]['body'], body) |
635 | |
636 | def _delete_url(self, url, status=204, **kwargs): |
637 | return self._url('DELETE', url, status=status, **kwargs) |