22
33from __future__ import (print_function , unicode_literals , absolute_import ,
44 division )
5+ from pusher .http import process_response
56
7+ import six
68import tornado
79import tornado .httpclient
10+ from tornado .concurrent import TracebackFuture
811
912class TornadoBackend (object ):
1013 """Adapter for the tornado.httpclient module.
@@ -14,12 +17,28 @@ class TornadoBackend(object):
1417 """
1518 def __init__ (self , config , ** kwargs ):
1619 self .config = config
17- self .http = httpclient .HTTPClient (** kwargs )
20+ self .http = tornado . httpclient .AsyncHTTPClient (** kwargs )
1821
1922 def send_request (self , request ):
2023 method = request .method
2124 data = request .body
2225 headers = {'Content-Type' : 'application/json' }
26+ future = TracebackFuture ()
27+
28+ def process_response_future (response ):
29+ if response .exc_info () is not None :
30+ future .set_exc_info (response .exc_info ())
31+ elif response .exception () is not None :
32+ future .set_exception (response .exception ())
33+ else :
34+ result = response .result ()
35+ code = result .code
36+ body = (result .body or b'' ).decode ('utf8' )
37+ future .set_result (process_response (code , body ))
38+
39+ request = tornado .httpclient .HTTPRequest (request .url , method = method , body = data , headers = headers , request_timeout = self .config .timeout )
40+ response_future = self .http .fetch (request , raise_error = False )
41+ response_future .add_done_callback (process_response_future )
42+
43+ return future
2344
24- request = self .http .request .httpclient .HTTPRequest (request .url , method = method , body = data , headers = headers , request_timeout = self .config .timeout )
25- return self .http .fetch (request , raise_error = False )
0 commit comments