2
0
Эх сурвалжийг харах

Add support for honoring HTTP proxy environment variables. Thanks, Aurélien Campéas. Fixes #797

Jelmer Vernooij 4 жил өмнө
parent
commit
4257373679
3 өөрчлөгдсөн 26 нэмэгдсэн , 4 устгасан
  1. 3 0
      NEWS
  2. 11 4
      dulwich/client.py
  3. 12 0
      dulwich/tests/test_client.py

+ 3 - 0
NEWS

@@ -12,6 +12,9 @@
  * Fix porcelain.path_to_tree_path for Python 3.5.
    (Boris Feld, #777)
 
+ * Add support for honor proxy environment variables for HTTP.
+   (Aurélien Campéas, #797)
+
 0.20.5	2020-06-22
 
  * Print a clearer exception when setup.py is executed on Python < 3.5.

+ 11 - 4
dulwich/client.py

@@ -1476,11 +1476,18 @@ def default_urllib3_manager(config, pool_manager_cls=None,
     proxy_server = user_agent = None
     ca_certs = ssl_verify = None
 
+    if proxy_server is None:
+        for proxyname in ('https_proxy', 'http_proxy', 'all_proxy'):
+            proxy_server = os.environ.get(proxyname)
+            if proxy_server is not None:
+                break
+
     if config is not None:
-        try:
-            proxy_server = config.get(b"http", b"proxy")
-        except KeyError:
-            pass
+        if proxy_server is None:
+            try:
+                proxy_server = config.get(b"http", b"proxy")
+            except KeyError:
+                pass
         try:
             user_agent = config.get(b"http", b"useragent")
         except KeyError:

+ 12 - 0
dulwich/tests/test_client.py

@@ -1108,6 +1108,18 @@ class DefaultUrllib3ManagerTest(TestCase):
         self.assertEqual(manager.proxy.host, 'localhost')
         self.assertEqual(manager.proxy.port, 3128)
 
+    def test_environment_proxy(self):
+        import urllib3
+        config = ConfigDict()
+        os.environ['http_proxy'] = 'http://myproxy:8080'
+        manager = default_urllib3_manager(config=config)
+        self.assertIsInstance(manager, urllib3.ProxyManager)
+        self.assertTrue(hasattr(manager, 'proxy'))
+        self.assertEqual(manager.proxy.scheme, 'http')
+        self.assertEqual(manager.proxy.host, 'myproxy')
+        self.assertEqual(manager.proxy.port, 8080)
+        del os.environ['http_proxy']
+
     def test_config_proxy_custom_cls(self):
         import urllib3