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
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 |
|