git.fiddlerwoaroof.com
Browse code

added a defer() method to eventhandler

Ed L authored on 20/10/2011 19:32:37
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)