diff --git a/requests/__init__.py b/requests/__init__.py index 8257b61..68443da 100644 --- a/requests/__init__.py +++ b/requests/__init__.py @@ -64,6 +64,7 @@ from .exceptions import ( RequestException, Timeout, URLRequired, TooManyRedirects, HTTPError, ConnectionError ) +from . import packages # Set default logging handler to avoid "No handler found" warnings. import logging diff --git a/requests/packages/__init__.py b/requests/packages/__init__.py index 4dcf870..385581e 100644 --- a/requests/packages/__init__.py +++ b/requests/packages/__init__.py @@ -1,107 +1,35 @@ -""" -Copyright (c) Donald Stufft, pip, and individual contributors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -""" -from __future__ import absolute_import - import sys - -class VendorAlias(object): - - def __init__(self, package_names): - self._package_names = package_names - self._vendor_name = __name__ - self._vendor_pkg = self._vendor_name + "." - self._vendor_pkgs = [ - self._vendor_pkg + name for name in self._package_names - ] - - def find_module(self, fullname, path=None): - if fullname.startswith(self._vendor_pkg): - return self - - def load_module(self, name): - # Ensure that this only works for the vendored name - if not name.startswith(self._vendor_pkg): - raise ImportError( - "Cannot import %s, must be a subpackage of '%s'." % ( - name, self._vendor_name, - ) - ) - - if not (name == self._vendor_name or - any(name.startswith(pkg) for pkg in self._vendor_pkgs)): - raise ImportError( - "Cannot import %s, must be one of %s." % ( - name, self._vendor_pkgs - ) - ) - - # Check to see if we already have this item in sys.modules, if we do - # then simply return that. - if name in sys.modules: - return sys.modules[name] - - # Check to see if we can import the vendor name - try: - # We do this dance here because we want to try and import this - # module without hitting a recursion error because of a bunch of - # VendorAlias instances on sys.meta_path - real_meta_path = sys.meta_path[:] - try: - sys.meta_path = [ - m for m in sys.meta_path - if not isinstance(m, VendorAlias) - ] - __import__(name) - module = sys.modules[name] - finally: - # Re-add any additions to sys.meta_path that were made while - # during the import we just did, otherwise things like - # requests.packages.urllib3.poolmanager will fail. - for m in sys.meta_path: - if m not in real_meta_path: - real_meta_path.append(m) - - # Restore sys.meta_path with any new items. - sys.meta_path = real_meta_path - except ImportError: - # We can't import the vendor name, so we'll try to import the - # "real" name. - real_name = name[len(self._vendor_pkg):] - try: - __import__(real_name) - module = sys.modules[real_name] - except ImportError: - raise ImportError("No module named '%s'" % (name,)) - - # If we've gotten here we've found the module we're looking for, either - # as part of our vendored package, or as the real name, so we'll add - # it to sys.modules as the vendored name so that we don't have to do - # the lookup again. - sys.modules[name] = module - - # Finally, return the loaded module - return module - - -sys.meta_path.append(VendorAlias(["urllib3", "chardet"])) +# This code exists for backwards compatibility reasons. + +modules_list = [ + 'urllib3', 'chardet', 'chardet.big5prober', 'chardet.chardetect', + 'chardet.chardistribution', 'chardet.charsetgroupprober', 'chardet.charsetprober', + 'chardet.codingstatemachine', 'chardet.compat', 'chardet.constants', + 'chardet.cp949prober', 'chardet.escprober', 'chardet.escsm', 'chardet.eucjpprober', + 'chardet.euckrfreq', 'chardet.euckrprober', 'chardet.euctwfreq', 'chardet.euctwprober', + 'chardet.gb2312freq', 'chardet.gb2312prober', 'chardet.hebrewprober', + 'chardet.jisfreq', 'chardet.jpcntx', 'chardet.langbulgarianmodel', + 'chardet.langcyrillicmodel', 'chardet.langgreekmodel', 'chardet.langhebrewmodel', + 'chardet.langhungarianmodel', 'chardet.langthaimodel', 'chardet.latin1prober', + 'chardet.mbcharsetprober', 'chardet.mbcsgroupprober', 'chardet.mbcssm', + 'chardet.sbcharsetprober', 'chardet.sbcsgroupprober', 'chardet.sjisprober', + 'chardet.universaldetector', 'chardet.utf8prober', 'urllib3._collections', + 'urllib3.connectionpool', 'urllib3.connection', 'urllib3.contrib', 'urllib3.exceptions', + 'urllib3.fields', 'urllib3.filepost', 'urllib3.packages', 'urllib3.poolmanager', + 'urllib3.request', 'urllib3.response', 'urllib3.util', 'urllib3.contrib.ntlmpool', + 'urllib3.contrib.pyopenssl', 'urllib3.util.connection', 'urllib3.util.request', + 'urllib3.util.response', 'urllib3.util.retry', 'urllib3.util.ssl_', 'urllib3.util.timeout', + 'urllib3.util.url', 'urllib3.packages.ordered_dict', 'urllib3.packages.six', + 'urllib3.packages.ssl_match_hostname', 'urllib3.packages.ssl_match_hostname.implementation' + ] + + +for package in modules_list: + try: + __import__(package) + except ImportError: + pass + else: + sys.modules['requests.packages.' + package] = sys.modules[package] + globals()[package] = sys.modules[package]