Browse code
Merge branch 'release/1.1'
Ed L authored on 20/10/2011 19:42:34
Showing 2 changed files
Showing 2 changed files
... | ... |
@@ -59,6 +59,7 @@ class ExampleServer(ServerEvents): |
59 | 59 |
# helper methods |
60 | 60 |
methods = set(['add', 'subtract']) |
61 | 61 |
def _get_msg(self, response): |
62 |
+ print('response', repr(response)) |
|
62 | 63 |
return ' '.join(str(x) for x in [response.id, response.result or response.error]) |
63 | 64 |
|
64 | 65 |
def subtract(self, a, b): |
... | ... |
@@ -77,12 +77,20 @@ class ServerEvents(object): |
77 | 77 |
'''Given the freshly decoded content of the request, return what content should be used''' |
78 | 78 |
return content |
79 | 79 |
|
80 |
- def setResponseCode(self, result, request): |
|
81 |
- code = 200 |
|
80 |
+ def getresponsecode(self, result): |
|
81 |
+ # returns 200 so that the python client can see something useful |
|
82 |
+ return 200 |
|
83 |
+ # for example |
|
84 |
+ #code = 200 |
|
82 | 85 |
#if not isinstance(result, list): |
83 | 86 |
# if result is not None and result.error is not None: |
84 | 87 |
# code = result.error.code or 500 |
85 |
- request.setResponseCode(code) |
|
88 |
+ #return code |
|
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) |
|
86 | 94 |
|
87 | 95 |
|
88 | 96 |
|
... | ... |
@@ -107,6 +115,7 @@ class JSON_RPC(Resource): |
107 | 115 |
|
108 | 116 |
|
109 | 117 |
def render(self, request): |
118 |
+ result = '' |
|
110 | 119 |
request.content.seek(0, 0) |
111 | 120 |
try: |
112 | 121 |
try: |
... | ... |
@@ -135,6 +144,8 @@ class JSON_RPC(Resource): |
135 | 144 |
|
136 | 145 |
return server.NOT_DONE_YET |
137 | 146 |
|
147 |
+ |
|
148 |
+ |
|
138 | 149 |
def _action(self, request, contents, **kw): |
139 | 150 |
result = [] |
140 | 151 |
|
... | ... |
@@ -153,7 +164,7 @@ class JSON_RPC(Resource): |
153 | 164 |
res = None |
154 | 165 |
add = copy.deepcopy(rpcrequest.extra) |
155 | 166 |
add.update(kw) |
156 |
- deferreds.append(threads.deferToThread(callmethod, request, rpcrequest, add)) |
|
167 |
+ deferreds.append(self.eventhandler.defer(callmethod, request, rpcrequest, add)) |
|
157 | 168 |
deferreds = defer.DeferredList(deferreds, consumeErrors=True) |
158 | 169 |
|
159 | 170 |
@deferreds.addCallback |
... | ... |
@@ -182,9 +193,10 @@ class JSON_RPC(Resource): |
182 | 193 |
|
183 | 194 |
|
184 | 195 |
def _cbRender(self, result, request): |
185 |
- @threads.deferToThread |
|
196 |
+ @self.eventhandler.defer |
|
186 | 197 |
def _inner(*args, **_): |
187 |
- self.eventhandler.setResponseCode(result, request) |
|
198 |
+ code = self.eventhandler.getresponsecode(result) |
|
199 |
+ request.setResponseCode(code) |
|
188 | 200 |
self.eventhandler.log(result, request, error=False) |
189 | 201 |
if result is not None: |
190 | 202 |
request.setHeader("content-type", 'application/json') |
... | ... |
@@ -195,7 +207,7 @@ class JSON_RPC(Resource): |
195 | 207 |
return _inner |
196 | 208 |
|
197 | 209 |
def _ebRender(self, result, request, id, finish=True): |
198 |
- @threads.deferToThread |
|
210 |
+ @self.eventhandler.defer |
|
199 | 211 |
def _inner(*args, **_): |
200 | 212 |
err = None |
201 | 213 |
if not isinstance(result, BaseException): |
... | ... |
@@ -204,9 +216,10 @@ class JSON_RPC(Resource): |
204 | 216 |
err = e |
205 | 217 |
self.eventhandler.log(err, request, error=True) |
206 | 218 |
else: err = result |
207 |
- |
|
208 | 219 |
err = self.render_error(err, id) |
209 |
- self.eventhandler.setResponseCode(err, request) |
|
220 |
+ |
|
221 |
+ code = self.eventhandler.getresponsecode(result) |
|
222 |
+ request.setResponseCode(code) |
|
210 | 223 |
|
211 | 224 |
request.setHeader("content-type", 'application/json') |
212 | 225 |
result_ = jsonrpc.jsonutil.encode(err).encode('utf-8') |
... | ... |
@@ -215,7 +228,6 @@ class JSON_RPC(Resource): |
215 | 228 |
if finish: request.finish() |
216 | 229 |
return _inner |
217 | 230 |
|
218 |
- |
|
219 | 231 |
def render_error(self, e, id): |
220 | 232 |
if isinstance(e, jsonrpc.common.RPCError): |
221 | 233 |
err = jsonrpc.common.Response(id=id, error=e) |