git.fiddlerwoaroof.com
Browse code

Merge branch 'release/1.1'

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