Skip to content

Commit 6ce72d6

Browse files
committed
Fix tornado and asyncio backends
1 parent 06b5d05 commit 6ce72d6

File tree

2 files changed

+23
-4
lines changed

2 files changed

+23
-4
lines changed

pusher/aiohttp.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ def __init__(self, config):
1414
self.config = config
1515
self.conn = aiohttp.TCPConnector()
1616

17-
def send_request(_, request):
17+
def send_request(self, request):
1818
method = request.method
1919
url = "%s%s" % (request.base_url, request.path)
2020
params = request.query_params

pusher/tornado.py

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,12 @@
22

33
from __future__ import (print_function, unicode_literals, absolute_import,
44
division)
5+
from pusher.http import process_response
56

7+
import six
68
import tornado
79
import tornado.httpclient
10+
from tornado.concurrent import TracebackFuture
811

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

Comments
 (0)