Mercurial > repos > shellac > guppy_basecaller
diff env/lib/python3.7/site-packages/requests_toolbelt/adapters/appengine.py @ 5:9b1c78e6ba9c draft default tip
"planemo upload commit 6c0a8142489327ece472c84e558c47da711a9142"
| author | shellac |
|---|---|
| date | Mon, 01 Jun 2020 08:59:25 -0400 |
| parents | 79f47841a781 |
| children |
line wrap: on
line diff
--- a/env/lib/python3.7/site-packages/requests_toolbelt/adapters/appengine.py Thu May 14 16:47:39 2020 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,206 +0,0 @@ -# -*- coding: utf-8 -*- -"""The App Engine Transport Adapter for requests. - -.. versionadded:: 0.6.0 - -This requires a version of requests >= 2.10.0 and Python 2. - -There are two ways to use this library: - -#. If you're using requests directly, you can use code like: - - .. code-block:: python - - >>> import requests - >>> import ssl - >>> import requests.packages.urllib3.contrib.appengine as ul_appengine - >>> from requests_toolbelt.adapters import appengine - >>> s = requests.Session() - >>> if ul_appengine.is_appengine_sandbox(): - ... s.mount('http://', appengine.AppEngineAdapter()) - ... s.mount('https://', appengine.AppEngineAdapter()) - -#. If you depend on external libraries which use requests, you can use code - like: - - .. code-block:: python - - >>> from requests_toolbelt.adapters import appengine - >>> appengine.monkeypatch() - -which will ensure all requests.Session objects use AppEngineAdapter properly. - -You are also able to :ref:`disable certificate validation <insecure_appengine>` -when monkey-patching. -""" -import requests -import warnings -from requests import adapters -from requests import sessions - -from .. import exceptions as exc -from .._compat import gaecontrib -from .._compat import timeout - - -class AppEngineMROHack(adapters.HTTPAdapter): - """Resolves infinite recursion when monkeypatching. - - This works by injecting itself as the base class of both the - :class:`AppEngineAdapter` and Requests' default HTTPAdapter, which needs to - be done because default HTTPAdapter's MRO is recompiled when we - monkeypatch, at which point this class becomes HTTPAdapter's base class. - In addition, we use an instantiation flag to avoid infinite recursion. - """ - _initialized = False - - def __init__(self, *args, **kwargs): - if not self._initialized: - self._initialized = True - super(AppEngineMROHack, self).__init__(*args, **kwargs) - - -class AppEngineAdapter(AppEngineMROHack, adapters.HTTPAdapter): - """The transport adapter for Requests to use urllib3's GAE support. - - Implements Requests's HTTPAdapter API. - - When deploying to Google's App Engine service, some of Requests' - functionality is broken. There is underlying support for GAE in urllib3. - This functionality, however, is opt-in and needs to be enabled explicitly - for Requests to be able to use it. - """ - - __attrs__ = adapters.HTTPAdapter.__attrs__ + ['_validate_certificate'] - - def __init__(self, validate_certificate=True, *args, **kwargs): - _check_version() - self._validate_certificate = validate_certificate - super(AppEngineAdapter, self).__init__(*args, **kwargs) - - def init_poolmanager(self, connections, maxsize, block=False): - self.poolmanager = _AppEnginePoolManager(self._validate_certificate) - - -class InsecureAppEngineAdapter(AppEngineAdapter): - """An always-insecure GAE adapter for Requests. - - This is a variant of the the transport adapter for Requests to use - urllib3's GAE support that does not validate certificates. Use with - caution! - - .. note:: - The ``validate_certificate`` keyword argument will not be honored here - and is not part of the signature because we always force it to - ``False``. - - See :class:`AppEngineAdapter` for further details. - """ - - def __init__(self, *args, **kwargs): - if kwargs.pop("validate_certificate", False): - warnings.warn("Certificate validation cannot be specified on the " - "InsecureAppEngineAdapter, but was present. This " - "will be ignored and certificate validation will " - "remain off.", exc.IgnoringGAECertificateValidation) - - super(InsecureAppEngineAdapter, self).__init__( - validate_certificate=False, *args, **kwargs) - - -class _AppEnginePoolManager(object): - """Implements urllib3's PoolManager API expected by requests. - - While a real PoolManager map hostnames to reusable Connections, - AppEngine has no concept of a reusable connection to a host. - So instead, this class constructs a small Connection per request, - that is returned to the Adapter and used to access the URL. - """ - - def __init__(self, validate_certificate=True): - self.appengine_manager = gaecontrib.AppEngineManager( - validate_certificate=validate_certificate) - - def connection_from_url(self, url): - return _AppEngineConnection(self.appengine_manager, url) - - def clear(self): - pass - - -class _AppEngineConnection(object): - """Implements urllib3's HTTPConnectionPool API's urlopen(). - - This Connection's urlopen() is called with a host-relative path, - so in order to properly support opening the URL, we need to store - the full URL when this Connection is constructed from the PoolManager. - - This code wraps AppEngineManager.urlopen(), which exposes a different - API than in the original urllib3 urlopen(), and thus needs this adapter. - """ - - def __init__(self, appengine_manager, url): - self.appengine_manager = appengine_manager - self.url = url - - def urlopen(self, method, url, body=None, headers=None, retries=None, - redirect=True, assert_same_host=True, - timeout=timeout.Timeout.DEFAULT_TIMEOUT, - pool_timeout=None, release_conn=None, **response_kw): - # This function's url argument is a host-relative URL, - # but the AppEngineManager expects an absolute URL. - # So we saved out the self.url when the AppEngineConnection - # was constructed, which we then can use down below instead. - - # We once tried to verify our assumptions here, but sometimes the - # passed-in URL differs on url fragments, or "http://a.com" vs "/". - - # urllib3's App Engine adapter only uses Timeout.total, not read or - # connect. - if not timeout.total: - timeout.total = timeout._read or timeout._connect - - # Jump through the hoops necessary to call AppEngineManager's API. - return self.appengine_manager.urlopen( - method, - self.url, - body=body, - headers=headers, - retries=retries, - redirect=redirect, - timeout=timeout, - **response_kw) - - -def monkeypatch(validate_certificate=True): - """Sets up all Sessions to use AppEngineAdapter by default. - - If you don't want to deal with configuring your own Sessions, - or if you use libraries that use requests directly (ie requests.post), - then you may prefer to monkeypatch and auto-configure all Sessions. - - .. warning: : - - If ``validate_certificate`` is ``False``, certification validation will - effectively be disabled for all requests. - """ - _check_version() - # HACK: We should consider modifying urllib3 to support this cleanly, - # so that we can set a module-level variable in the sessions module, - # instead of overriding an imported HTTPAdapter as is done here. - adapter = AppEngineAdapter - if not validate_certificate: - adapter = InsecureAppEngineAdapter - - sessions.HTTPAdapter = adapter - adapters.HTTPAdapter = adapter - - -def _check_version(): - if gaecontrib is None: - raise exc.VersionMismatchError( - "The toolbelt requires at least Requests 2.10.0 to be " - "installed. Version {0} was found instead.".format( - requests.__version__ - ) - )
