Merge lp:~eday/burrow/doc-updates into lp:burrow

Proposed by Eric Day
Status: Merged
Approved by: Eric Day
Approved revision: 35
Merged at revision: 35
Proposed branch: lp:~eday/burrow/doc-updates
Merge into: lp:burrow
Diff against target: 199 lines (+43/-85)
1 file modified
burrow/frontend/wsgi.py (+43/-85)
To merge this branch: bzr merge lp:~eday/burrow/doc-updates
Reviewer Review Type Date Requested Status
Burrow Core Team Pending
Review via email: mp+71791@code.launchpad.net

Description of the change

Cleaned up WSGI frontend.

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 'burrow/frontend/wsgi.py'
2--- burrow/frontend/wsgi.py 2011-08-10 07:16:07 +0000
3+++ burrow/frontend/wsgi.py 2011-08-16 23:42:24 +0000
4@@ -17,9 +17,7 @@
5 import json
6 import types
7
8-import eventlet
9 import eventlet.wsgi
10-import routes
11 import routes.middleware
12 import webob.dec
13
14@@ -77,10 +75,10 @@
15 log_format = '%(client_ip)s "%(request_line)s" %(status_code)s ' \
16 '%(body_length)s %(wall_seconds).6f'
17 if thread_pool_size == 0:
18- eventlet.wsgi.server(socket, self, log=WSGILog(self.log),
19+ eventlet.wsgi.server(socket, self, log=_WSGILog(self.log),
20 log_format=log_format, custom_pool=thread_pool)
21 else:
22- eventlet.wsgi.server(socket, self, log=WSGILog(self.log),
23+ eventlet.wsgi.server(socket, self, log=_WSGILog(self.log),
24 log_format=log_format, max_size=thread_pool_size)
25
26 def __call__(self, *args, **kwargs):
27@@ -88,84 +86,33 @@
28
29 @webob.dec.wsgify
30 def _route(self, req):
31+ '''Parse the request args and see if there is a matching method.'''
32 args = req.environ['wsgiorg.routing_args'][1]
33 if not args:
34 return self._response(status=404)
35 action = args.pop('action')
36- method = getattr(self, '_%s_%s' % (req.method.lower(), action), False)
37- if not method:
38+ method = getattr(self, '_%s_%s' % (req.method.lower(), action), None)
39+ if method is not None:
40+ return method(req, **args)
41+ method = req.method.lower()
42+ args = dict(args)
43+ if method == 'post':
44+ method = 'update'
45+ args['attributes'] = self._parse_attributes(req)
46+ method = getattr(self.backend, '%s_%s' % (method, action), None)
47+ if method is None:
48 return self._response(status=400)
49- return method(req, **args)
50+ args['filters'] = self._parse_filters(req)
51+ return self._response(body=lambda: method(**args))
52
53 @webob.dec.wsgify
54 def _get_versions(self, _req):
55+ '''Return a list of API versions.'''
56 return self._response(body=['v1.0'])
57
58 @webob.dec.wsgify
59- def _delete_accounts(self, req):
60- filters = self._parse_filters(req)
61- return self._response(body=self.backend.delete_accounts(filters))
62-
63- @webob.dec.wsgify
64- def _get_accounts(self, req):
65- filters = self._parse_filters(req)
66- return self._response(body=self.backend.get_accounts(filters))
67-
68- @webob.dec.wsgify
69- def _delete_queues(self, req, account):
70- filters = self._parse_filters(req)
71- queues = self.backend.delete_queues(account, filters)
72- return self._response(body=queues)
73-
74- @webob.dec.wsgify
75- def _get_queues(self, req, account):
76- filters = self._parse_filters(req)
77- return self._response(body=self.backend.get_queues(account, filters))
78-
79- @webob.dec.wsgify
80- def _delete_messages(self, req, account, queue):
81- filters = self._parse_filters(req)
82- messages = self.backend.delete_messages(account, queue, filters)
83- return self._response(body=messages)
84-
85- @webob.dec.wsgify
86- def _get_messages(self, req, account, queue):
87- filters = self._parse_filters(req)
88- messages = self.backend.get_messages(account, queue, filters)
89- return self._response(body=messages)
90-
91- @webob.dec.wsgify
92- def _post_messages(self, req, account, queue):
93- attributes = self._parse_attributes(req)
94- filters = self._parse_filters(req)
95- messages = self.backend.update_messages(account, queue, attributes,
96- filters)
97- return self._response(body=messages)
98-
99- @webob.dec.wsgify
100- def _delete_message(self, req, account, queue, message):
101- filters = self._parse_filters(req)
102- body = lambda: self.backend.delete_message(account, queue, message,
103- filters)
104- return self._response(body=body)
105-
106- @webob.dec.wsgify
107- def _get_message(self, req, account, queue, message):
108- filters = self._parse_filters(req)
109- body = lambda: self.backend.get_message(account, queue, message,
110- filters)
111- return self._response(body=body)
112-
113- @webob.dec.wsgify
114- def _post_message(self, req, account, queue, message):
115- attributes = self._parse_attributes(req)
116- filters = self._parse_filters(req)
117- body = lambda: self.backend.update_message(account, queue, message,
118- attributes, filters)
119- return self._response(body=body)
120-
121- @webob.dec.wsgify
122 def _put_message(self, req, account, queue, message):
123+ '''Read the request body and create a new message.'''
124 attributes = self._parse_attributes(req, self.default_ttl,
125 self.default_hide)
126 body = ''
127@@ -177,6 +124,8 @@
128 return self._response()
129
130 def _parse_filters(self, req):
131+ '''Parse filters from a request object and build a dict to
132+ pass into the backend methods.'''
133 filters = {}
134 if 'limit' in req.params:
135 filters['limit'] = int(req.params['limit'])
136@@ -192,6 +141,8 @@
137 return filters
138
139 def _parse_attributes(self, req, default_ttl=None, default_hide=None):
140+ '''Parse attributes from a request object and build a dict
141+ to pass into the backend methods.'''
142 attributes = {}
143 if 'ttl' in req.params:
144 ttl = int(req.params['ttl'])
145@@ -206,19 +157,8 @@
146 return attributes
147
148 def _response(self, status=200, body=None, content_type=None):
149- try:
150- if isinstance(body, types.GeneratorType):
151- body = list(body)
152- if isinstance(body, types.FunctionType):
153- body = body()
154- except burrow.backend.InvalidArguments:
155- status = 400
156- body = None
157- except burrow.backend.NotFound:
158- status = 404
159- body = None
160- if body == []:
161- body = None
162+ '''Pack result into an appropriate HTTP response.'''
163+ status, body = self._response_body(status, body)
164 if body is None:
165 content_type = ''
166 if status == 200:
167@@ -240,12 +180,30 @@
168 response.body = body
169 return response
170
171-
172-class WSGILog(object):
173+ def _response_body(self, status, body):
174+ '''Normalize the body from the type given.'''
175+ try:
176+ if isinstance(body, types.FunctionType):
177+ body = body()
178+ if isinstance(body, types.GeneratorType):
179+ body = list(body)
180+ except burrow.backend.InvalidArguments:
181+ status = 400
182+ body = None
183+ except burrow.backend.NotFound:
184+ status = 404
185+ body = None
186+ if body == []:
187+ body = None
188+ return status, body
189+
190+
191+class _WSGILog(object):
192 '''Class for eventlet.wsgi.server to forward logging messages.'''
193
194 def __init__(self, log):
195 self.log = log
196
197 def write(self, message):
198+ '''Write WSGI log message to burrow log.'''
199 self.log.debug(message.rstrip())

Subscribers

People subscribed via source and target branches