From a2a29fc02c82059881742c0a6eae75d54b8163b1 Mon Sep 17 00:00:00 2001 From: Alex Grintsvayg Date: Thu, 23 Mar 2017 18:25:31 -0400 Subject: [PATCH] switch to txrequests to marry async requests to twisted --- CHANGELOG.md | 2 +- lbrynet/analytics/api.py | 24 ++++++++---------------- lbrynet/core/log_support.py | 8 ++++---- requirements.txt | 2 +- setup.py | 2 +- 5 files changed, 15 insertions(+), 23 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4448e3178..334603bb3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,7 +16,7 @@ at anytime. ### Changed * Removed check_pending logic from Daemon - * + * Switched to txrequests so requests can use twisted event loop * ### Fixed diff --git a/lbrynet/analytics/api.py b/lbrynet/analytics/api.py index 67381c8e4..ec3d70f12 100644 --- a/lbrynet/analytics/api.py +++ b/lbrynet/analytics/api.py @@ -3,32 +3,24 @@ import json import logging from requests import auth -from requests_futures import sessions +from txrequests import Session from lbrynet import conf from lbrynet.analytics import utils - log = logging.getLogger(__name__) def log_response(fn): - def _log(future): - if future.cancelled(): - log.warning('Request was unexpectedly cancelled') - elif future.exception(): - exc, traceback = future.exception_info() - log.warning('Failed to send an analytics event', exc_info=(type(exc), exc, traceback)) - # GRIN TURNED THIS OFF. Segment only has one response: {"success": true} - # else: - # response = future.result() - # log.debug('Response (%s): %s', response.status_code, response.content) + def _log_error(failure): + log.warning('Failed to send an analytics event. %s', failure.getTraceback()) @functools.wraps(fn) def wrapper(*args, **kwargs): - future = fn(*args, **kwargs) - future.add_done_callback(_log) - return future + d = fn(*args, **kwargs) + d.addErrback(_log_error) + return d + return wrapper @@ -81,7 +73,7 @@ class Api(object): def new_instance(cls, session=None): """Initialize an instance using values from the configuration""" if not session: - session = sessions.FuturesSession() + session = Session() return cls( session, conf.settings['ANALYTICS_ENDPOINT'], diff --git a/lbrynet/core/log_support.py b/lbrynet/core/log_support.py index 783edd851..4c0ec5da0 100644 --- a/lbrynet/core/log_support.py +++ b/lbrynet/core/log_support.py @@ -6,7 +6,7 @@ import os import sys import traceback -from requests_futures.sessions import FuturesSession +from txrequests import Session import twisted.python.log from lbrynet import __version__ as lbrynet_version, analytics, build_type, conf @@ -29,7 +29,6 @@ _srcfile = os.path.normcase(_srcfile) ##### -session = FuturesSession() TRACE = 5 @@ -39,12 +38,13 @@ def bg_cb(sess, resp): class HTTPSHandler(logging.Handler): - def __init__(self, url, fqdn=False, localname=None, facility=None): + def __init__(self, url, fqdn=False, localname=None, facility=None, session=None): logging.Handler.__init__(self) self.url = url self.fqdn = fqdn self.localname = localname self.facility = facility + self.session = session if session is not None else Session() def get_full_message(self, record): if record.exc_info: @@ -55,7 +55,7 @@ class HTTPSHandler(logging.Handler): def emit(self, record): try: payload = self.format(record) - session.post(self.url, data=payload, background_callback=bg_cb) + self.session.post(self.url, data=payload, background_callback=bg_cb) except (KeyboardInterrupt, SystemExit): raise except: diff --git a/requirements.txt b/requirements.txt index 2ac114e73..3eb43dd30 100644 --- a/requirements.txt +++ b/requirements.txt @@ -18,7 +18,7 @@ pycrypto==2.6.1 pyyaml==3.12 qrcode==5.2.2 requests==2.9.1 -requests_futures==0.9.7 +txrequests==0.9.5 seccure==0.3.1.3 service_identity==16.0.0 six>=1.9.0 diff --git a/setup.py b/setup.py index 77b016197..e606257cb 100644 --- a/setup.py +++ b/setup.py @@ -24,7 +24,7 @@ requires = [ 'pycrypto', 'pyyaml', 'requests', - 'requests_futures', + 'txrequests', 'seccure', 'txJSON-RPC', 'zope.interface',