diff options
Diffstat (limited to 'vim/bundle/YouCompleteMe/third_party/requests-futures/requests_futures')
-rw-r--r-- | vim/bundle/YouCompleteMe/third_party/requests-futures/requests_futures/__init__.py | 28 | ||||
-rw-r--r-- | vim/bundle/YouCompleteMe/third_party/requests-futures/requests_futures/sessions.py | 73 |
2 files changed, 101 insertions, 0 deletions
diff --git a/vim/bundle/YouCompleteMe/third_party/requests-futures/requests_futures/__init__.py b/vim/bundle/YouCompleteMe/third_party/requests-futures/requests_futures/__init__.py new file mode 100644 index 0000000..af7acae --- /dev/null +++ b/vim/bundle/YouCompleteMe/third_party/requests-futures/requests_futures/__init__.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- + +# Requests Futures + +""" +async requests HTTP library +~~~~~~~~~~~~~~~~~~~~~ + + +""" + +__title__ = 'requests-futures' +__version__ = '0.9.4' +__build__ = 0x000000 +__author__ = 'Ross McFarland' +__license__ = 'Apache 2.0' +__copyright__ = 'Copyright 2013 Ross McFarland' + +# Set default logging handler to avoid "No handler found" warnings. +import logging +try: # Python 2.7+ + from logging import NullHandler +except ImportError: + class NullHandler(logging.Handler): + def emit(self, record): + pass + +logging.getLogger(__name__).addHandler(NullHandler()) diff --git a/vim/bundle/YouCompleteMe/third_party/requests-futures/requests_futures/sessions.py b/vim/bundle/YouCompleteMe/third_party/requests-futures/requests_futures/sessions.py new file mode 100644 index 0000000..ad2af1b --- /dev/null +++ b/vim/bundle/YouCompleteMe/third_party/requests-futures/requests_futures/sessions.py @@ -0,0 +1,73 @@ +# -*- coding: utf-8 -*- +""" +requests_futures +~~~~~~~~~~~~~~~~ + +This module provides a small add-on for the requests http library. It makes use +of python 3.3's concurrent.futures or the futures backport for previous +releases of python. + + from requests_futures import FuturesSession + + session = FuturesSession() + # request is run in the background + future = session.get('http://httpbin.org/get') + # ... do other stuff ... + # wait for the request to complete, if it hasn't already + response = future.result() + print('response status: {0}'.format(response.status_code)) + print(response.content) + +""" + +from concurrent.futures import ThreadPoolExecutor +from requests import Session +from requests.adapters import DEFAULT_POOLSIZE, HTTPAdapter + +class FuturesSession(Session): + + def __init__(self, executor=None, max_workers=2, *args, **kwargs): + """Creates a FuturesSession + + Notes + ~~~~~ + + * ProcessPoolExecutor is not supported b/c Response objects are + not picklable. + + * If you provide both `executor` and `max_workers`, the latter is + ignored and provided executor is used as is. + """ + super(FuturesSession, self).__init__(*args, **kwargs) + if executor is None: + executor = ThreadPoolExecutor(max_workers=max_workers) + # set connection pool size equal to max_workers if needed + if max_workers > DEFAULT_POOLSIZE: + adapter_kwargs = dict(pool_connections=max_workers, + pool_maxsize=max_workers) + self.mount('https://', HTTPAdapter(**adapter_kwargs)) + self.mount('http://', HTTPAdapter(**adapter_kwargs)) + + self.executor = executor + + def request(self, *args, **kwargs): + """Maintains the existing api for Session.request. + + Used by all of the higher level methods, e.g. Session.get. + + The background_callback param allows you to do some processing on the + response in the background, e.g. call resp.json() so that json parsing + happens in the background thread. + """ + func = sup = super(FuturesSession, self).request + + background_callback = kwargs.pop('background_callback', None) + if background_callback: + def wrap(*args_, **kwargs_): + resp = sup(*args_, **kwargs_) + background_callback(self, resp) + return resp + + func = wrap + + return self.executor.submit(func, *args, **kwargs) |