~hudson-openstack/burrow/trunk

« back to all changes in this revision

Viewing changes to burrow/frontend/wsgi.py

  • Committer: Tarmac
  • Author(s): Eric Day
  • Date: 2011-08-10 07:28:01 UTC
  • mfrom: (16.3.24 backend-unittests)
  • Revision ID: tarmac-20110810072801-32ue4p8boiepxhjg
Pushed wait functionality down into backend, removed frontend tests since this is replaced with HTTP backend test now.

Show diffs side-by-side

added added

removed removed

Lines of Context:
15
15
'''WSGI frontend for the burrow server.'''
16
16
 
17
17
import json
18
 
import time
19
18
import types
20
19
 
21
20
import eventlet
39
38
DEFAULT_HIDE = 0
40
39
 
41
40
 
42
 
def wait_on_queue(method):
43
 
    '''Decorator to wait on an account/queue if the wait option is
44
 
    given. This will block until a message in the queue is ready or
45
 
    the timeout expires.'''
46
 
    def wrapper(self, req, account, queue, *args, **kwargs):
47
 
        '''Wrapper method for wait_on_queue.'''
48
 
        wait = 0
49
 
        if 'wait' in req.params:
50
 
            wait = int(req.params['wait'])
51
 
            if wait > 0:
52
 
                wait += time.time()
53
 
        while True:
54
 
            res = method(self, req, account, queue, *args, **kwargs)
55
 
            if wait == 0 or res.status_int != 404:
56
 
                break
57
 
            now = time.time()
58
 
            if wait - now > 0:
59
 
                self.backend.wait(account, queue, wait - now)
60
 
            if wait < time.time():
61
 
                break
62
 
        return res
63
 
    return wrapper
64
 
 
65
 
 
66
41
class Frontend(burrow.frontend.Frontend):
67
42
    '''Frontend implementation that implements the Burrow v1.0 protocol
68
43
    using WSGI.'''
148
123
        return self._response(body=self.backend.get_queues(account, filters))
149
124
 
150
125
    @webob.dec.wsgify
151
 
    @wait_on_queue
152
126
    def _delete_messages(self, req, account, queue):
153
127
        filters = self._parse_filters(req)
154
128
        messages = self.backend.delete_messages(account, queue, filters)
155
129
        return self._response(body=messages)
156
130
 
157
131
    @webob.dec.wsgify
158
 
    @wait_on_queue
159
132
    def _get_messages(self, req, account, queue):
160
133
        filters = self._parse_filters(req)
161
134
        messages = self.backend.get_messages(account, queue, filters)
162
135
        return self._response(body=messages)
163
136
 
164
137
    @webob.dec.wsgify
165
 
    @wait_on_queue
166
138
    def _post_messages(self, req, account, queue):
167
139
        attributes = self._parse_attributes(req)
168
140
        filters = self._parse_filters(req)
215
187
            filters['match_hidden'] = True
216
188
        if 'detail' in req.params:
217
189
            filters['detail'] = req.params['detail']
 
190
        if 'wait' in req.params:
 
191
            filters['wait'] = int(req.params['wait'])
218
192
        return filters
219
193
 
220
194
    def _parse_attributes(self, req, default_ttl=None, default_hide=None):