Browse code
added a defer() method to eventhandler
Ed L authored on 20/10/2011 19:32:37
Showing 1 changed files
Showing 1 changed files
... | ... |
@@ -87,6 +87,11 @@ class ServerEvents(object): |
87 | 87 |
# code = result.error.code or 500 |
88 | 88 |
#return code |
89 | 89 |
|
90 |
+ def defer(self, method, *a, **kw): |
|
91 |
+ # Defer to thread. Override this method if you are using a different ThreadPool, |
|
92 |
+ # or if you want to return immediately. |
|
93 |
+ return threads.deferToThread(method, *a, **kw) |
|
94 |
+ |
|
90 | 95 |
|
91 | 96 |
|
92 | 97 |
## Base class providing a JSON-RPC 2.0 implementation with 2 customizable hooks |
... | ... |
@@ -110,6 +115,7 @@ class JSON_RPC(Resource): |
110 | 115 |
|
111 | 116 |
|
112 | 117 |
def render(self, request): |
118 |
+ result = '' |
|
113 | 119 |
request.content.seek(0, 0) |
114 | 120 |
try: |
115 | 121 |
try: |
... | ... |
@@ -138,6 +144,8 @@ class JSON_RPC(Resource): |
138 | 144 |
|
139 | 145 |
return server.NOT_DONE_YET |
140 | 146 |
|
147 |
+ |
|
148 |
+ |
|
141 | 149 |
def _action(self, request, contents, **kw): |
142 | 150 |
result = [] |
143 | 151 |
|
... | ... |
@@ -156,7 +164,7 @@ class JSON_RPC(Resource): |
156 | 164 |
res = None |
157 | 165 |
add = copy.deepcopy(rpcrequest.extra) |
158 | 166 |
add.update(kw) |
159 |
- deferreds.append(threads.deferToThread(callmethod, request, rpcrequest, add)) |
|
167 |
+ deferreds.append(self.eventhandler.defer(callmethod, request, rpcrequest, add)) |
|
160 | 168 |
deferreds = defer.DeferredList(deferreds, consumeErrors=True) |
161 | 169 |
|
162 | 170 |
@deferreds.addCallback |
... | ... |
@@ -185,9 +193,9 @@ class JSON_RPC(Resource): |
185 | 193 |
|
186 | 194 |
|
187 | 195 |
def _cbRender(self, result, request): |
188 |
- @threads.deferToThread |
|
196 |
+ @self.eventhandler.defer |
|
189 | 197 |
def _inner(*args, **_): |
190 |
- code = self.eventhandler.getresponsecode(result, request) |
|
198 |
+ code = self.eventhandler.getresponsecode(result) |
|
191 | 199 |
request.setResponseCode(code) |
192 | 200 |
self.eventhandler.log(result, request, error=False) |
193 | 201 |
if result is not None: |
... | ... |
@@ -199,7 +207,7 @@ class JSON_RPC(Resource): |
199 | 207 |
return _inner |
200 | 208 |
|
201 | 209 |
def _ebRender(self, result, request, id, finish=True): |
202 |
- @threads.deferToThread |
|
210 |
+ @self.eventhandler.defer |
|
203 | 211 |
def _inner(*args, **_): |
204 | 212 |
err = None |
205 | 213 |
if not isinstance(result, BaseException): |
... | ... |
@@ -208,10 +216,9 @@ class JSON_RPC(Resource): |
208 | 216 |
err = e |
209 | 217 |
self.eventhandler.log(err, request, error=True) |
210 | 218 |
else: err = result |
211 |
- |
|
212 | 219 |
err = self.render_error(err, id) |
213 | 220 |
|
214 |
- code = self.eventhandler.getresponsecode(result, request) |
|
221 |
+ code = self.eventhandler.getresponsecode(result) |
|
215 | 222 |
request.setResponseCode(code) |
216 | 223 |
|
217 | 224 |
request.setHeader("content-type", 'application/json') |
... | ... |
@@ -221,7 +228,6 @@ class JSON_RPC(Resource): |
221 | 228 |
if finish: request.finish() |
222 | 229 |
return _inner |
223 | 230 |
|
224 |
- |
|
225 | 231 |
def render_error(self, e, id): |
226 | 232 |
if isinstance(e, jsonrpc.common.RPCError): |
227 | 233 |
err = jsonrpc.common.Response(id=id, error=e) |