[Python-modules-commits] [requests] 07/09: Use the same unbundling strategy implemented by pip

Daniele Tricoli eriol-guest at moszumanska.debian.org
Mon Dec 19 19:35:55 UTC 2016


This is an automated email from the git hooks/post-receive script.

eriol-guest pushed a commit to branch master
in repository requests.

commit 6bc454d8867fd0a54d2d51096e8df5723278a6fd
Author: Daniele Tricoli <eriol at mornie.org>
Date:   Sat Jun 18 18:57:45 2016 +0200

    Use the same unbundling strategy implemented by pip
    
    Description: Use the same unbundling strategy implemented by pip.
    Author: The pip developers <python-virtualenv at groups.google.com>
    Patch-Name: use-pip-unbundling.patch
---
 requests/packages/__init__.py | 66 +++++++++++++++++++++++++++++++++----------
 1 file changed, 51 insertions(+), 15 deletions(-)

diff --git a/requests/packages/__init__.py b/requests/packages/__init__.py
index 4077265..b1206b2 100644
--- a/requests/packages/__init__.py
+++ b/requests/packages/__init__.py
@@ -23,20 +23,56 @@ request.
 from __future__ import absolute_import
 import sys
 
-try:
-    from . import urllib3
-except ImportError:
-    import urllib3
-    sys.modules['%s.urllib3' % __name__] = urllib3
+# On Debian we use the unbundling strategy implemented by pip inside
+# pip._vendor.__init__.
+def vendored(modulename):
+    vendored_name = "{0}.{1}".format(__name__, modulename)
 
-try:
-    from . import chardet
-except ImportError:
-    import chardet
-    sys.modules['%s.chardet' % __name__] = chardet
+    try:
+        __import__(vendored_name, globals(), locals(), level=0)
+    except ImportError:
+        try:
+            __import__(modulename, globals(), locals(), level=0)
+        except ImportError:
+            # We can just silently allow import failures to pass here. If we
+            # got to this point it means that ``import requests.packages.whatever``
+            # failed and so did ``import whatever``. Since we're importing this
+            # upfront in an attempt to alias imports, not erroring here will
+            # just mean we get a regular import error whenever requests
+            # *actually* tries to import one of these modules to use it, which
+            # actually gives us a better error message than we would have
+            # otherwise gotten.
+            pass
+        else:
+            sys.modules[vendored_name] = sys.modules[modulename]
+            base, head = vendored_name.rsplit(".", 1)
+            setattr(sys.modules[base], head, sys.modules[modulename])
 
-try:
-    from . import idna
-except ImportError:
-    import idna
-    sys.modules['%s.idna' % __name__] = idna
+vendored('chardet')
+vendored('idna')
+vendored('urllib3')
+vendored('urllib3._collections')
+vendored('urllib3.connection')
+vendored('urllib3.connectionpool')
+vendored('urllib3.contrib')
+vendored('urllib3.contrib.ntlmpool')
+vendored('urllib3.contrib.pyopenssl')
+vendored('urllib3.exceptions')
+vendored('urllib3.fields')
+vendored('urllib3.filepost')
+vendored('urllib3.packages')
+vendored('urllib3.packages.ordered_dict')
+vendored('urllib3.packages.six')
+vendored('urllib3.packages.ssl_match_hostname')
+vendored('urllib3.packages.ssl_match_hostname._implementation')
+vendored('urllib3.poolmanager')
+vendored('urllib3.request')
+vendored('urllib3.response')
+vendored('urllib3.util')
+vendored('urllib3.util.connection')
+vendored('urllib3.util.request')
+vendored('urllib3.util.response')
+vendored('urllib3.util.retry')
+vendored('urllib3.util.ssl_')
+vendored('urllib3.util.timeout')
+vendored('urllib3.util.url')

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/python-modules/packages/requests.git



More information about the Python-modules-commits mailing list