git.fiddlerwoaroof.com
Browse code

Allow subclasses to override deferToThread using _defer(), e.g. using a ConnectionPool to connect to a database.

Ian Rees authored on 08/10/2011 03:04:49
Showing 1 changed files
... ...
@@ -99,6 +99,7 @@ class JSON_RPC(Resource):
99 99
 
100 100
 
101 101
 	def render(self, request):
102
+		result = ''
102 103
 		request.content.seek(0, 0)
103 104
 		try:
104 105
 			try:
... ...
@@ -119,14 +120,22 @@ class JSON_RPC(Resource):
119 120
 				self._ebRender(e, request, content.id if hasattr(content, 'id') else None)
120 121
 
121 122
 			else:
122
-				d = threads.deferToThread(self._action, request, content)
123
-				d.addCallback(self._cbRender, request)
124
-				d.addErrback(self._ebRender, request, content.id if hasattr(content, 'id') else None)
123
+				result = self._defer(request, content)
125 124
 		except BaseException, e:
126 125
 			self._ebRender(e, request, None)
127 126
 
128 127
 		return server.NOT_DONE_YET
129 128
 
129
+
130
+	def _defer(self, request, contents):
131
+		# Defer to thread. Override this method if you are using a different ThreadPool,
132
+		# 	or if you want to return immediately.
133
+		d = threads.deferToThread(self._action, request, contents)
134
+		d.addCallback(self._cbRender, request)
135
+		d.addErrback(self._ebRender, request, content.id if hasattr(content, 'id') else None)
136
+		return server.NOT_DONE_YET
137
+
138
+
130 139
 	def _action(self, request, contents, **kw):
131 140
 		result = []
132 141