aboutsummaryrefslogtreecommitdiff
path: root/vim/bundle/YouCompleteMe/third_party/requests-futures/requests_futures
diff options
context:
space:
mode:
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__.py28
-rw-r--r--vim/bundle/YouCompleteMe/third_party/requests-futures/requests_futures/sessions.py73
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)