Handle proxy and useragent being missing.
authorJelmer Vernooij <jelmer@debian.org>
Mon, 14 Aug 2017 20:39:19 +0000 (20:39 +0000)
committerJelmer Vernooij <jelmer@debian.org>
Mon, 14 Aug 2017 20:39:19 +0000 (20:39 +0000)
dulwich/client.py
dulwich/tests/test_client.py

index 044ccd54bc285c071a36bdcb32e6a60665318610..84b68c63e6a7d75798bedc012a82161535e5cc1e 100644 (file)
@@ -1165,7 +1165,10 @@ def default_user_agent_string():
 
 def default_urllib2_opener(config):
     if config is not None:
-        proxy_server = config.get("http", "proxy")
+        try:
+            proxy_server = config.get("http", "proxy")
+        except KeyError:
+            proxy_server = None
     else:
         proxy_server = None
     handlers = []
@@ -1173,7 +1176,10 @@ def default_urllib2_opener(config):
         handlers.append(urllib2.ProxyHandler({"http": proxy_server}))
     opener = urllib2.build_opener(*handlers)
     if config is not None:
-        user_agent = config.get("http", "useragent")
+        try:
+            user_agent = config.get("http", "useragent")
+        except KeyError:
+            user_agent = None
     else:
         user_agent = None
     if user_agent is None:
index b360b08a3ce2cefb49d2b391377adedf888dd81e..ea31491feba2208c884ef8691f97377b27e9c540 100644 (file)
@@ -22,6 +22,7 @@ from io import BytesIO
 import sys
 import shutil
 import tempfile
+import urllib2
 
 try:
     from urllib import quote as urlquote
@@ -46,9 +47,13 @@ from dulwich.client import (
     ReportStatusParser,
     SendPackError,
     UpdateRefsError,
+    default_urllib2_opener,
     get_transport_and_path,
     get_transport_and_path_from_url,
     )
+from dulwich.config import (
+    ConfigDict,
+    )
 from dulwich.tests import (
     TestCase,
     )
@@ -917,3 +922,20 @@ class TCPGitClientTests(TestCase):
 
         url = c.get_url(path)
         self.assertEqual('git://github.com:9090/jelmer/dulwich', url)
+
+
+class DefaultUrllib2OpenerTest(TestCase):
+
+    def test_no_config(self):
+        default_urllib2_opener(config=None)
+
+    def test_config_no_proxy(self):
+        default_urllib2_opener(config=ConfigDict())
+
+    def test_config_proxy(self):
+        config = ConfigDict()
+        config.set('http', 'proxy', 'http://localhost:3128/')
+        opener = default_urllib2_opener(config=config)
+        self.assertTrue(
+                any([isinstance(handler, urllib2.ProxyHandler)
+                    for handler in opener.handlers]))