]> granicus.if.org Git - python/commitdiff
On the Mac, use Internet Config to find the proxies (Jack Jansen).
authorGuido van Rossum <guido@python.org>
Thu, 6 Aug 1998 13:39:09 +0000 (13:39 +0000)
committerGuido van Rossum <guido@python.org>
Thu, 6 Aug 1998 13:39:09 +0000 (13:39 +0000)
Also added two XXX comments about lingering thread unsafeness.

Lib/urllib.py

index 2cb4deba89eb32ab2f87b2f8399c3873832db0bd..2a9087aa53bbb6ee9d9b1bd7c5b8da0040647ad4 100644 (file)
@@ -104,6 +104,7 @@ class URLopener:
                # Undocumented feature: you can use a different
                # ftp cache by assigning to the .ftpcache member;
                # in case you want logically independent URL openers
+               # XXX This is not threadsafe.  Bah.
 
        def __del__(self):
                self.close()
@@ -345,6 +346,7 @@ class URLopener:
                dirs, file = dirs[:-1], dirs[-1]
                if dirs and not dirs[0]: dirs = dirs[1:]
                key = (user, host, port, string.joinfields(dirs, '/'))
+               # XXX thread unsafe!
                if len(self.ftpcache) > MAXFTPCACHE:
                        # Prune the cache, rather arbitrarily
                        for k in self.ftpcache.keys():
@@ -908,21 +910,53 @@ def urlencode(dict):
 
 
 # Proxy handling
-def getproxies():
-       """Return a dictionary of protocol scheme -> proxy server URL mappings.
-
-       Scan the environment for variables named <scheme>_proxy;
-       this seems to be the standard convention.  If you need a
-       different way, you can pass a proxies dictionary to the
-       [Fancy]URLopener constructor.
-
-       """
-       proxies = {}
-       for name, value in os.environ.items():
-               name = string.lower(name)
-               if value and name[-6:] == '_proxy':
-                       proxies[name[:-6]] = value
-       return proxies
+if os.name == 'mac':
+       def getproxies():
+               """Return a dictionary of scheme -> proxy server URL mappings.
+
+               By convention the mac uses Internet Config to store
+               proxies.  An HTTP proxy, for instance, is stored under
+               the HttpProxy key.
+
+               """
+               try:
+                       import ic
+               except ImportError:
+                       return {}
+               
+               try:
+                       config = ic.IC()
+               except ic.error:
+                       return {}
+               proxies = {}
+               # HTTP:
+               if config.has_key('UseHTTPProxy') and config['UseHTTPProxy']:
+                       try:
+                               value = config['HTTPProxyHost']
+                       except ic.error:
+                               pass
+                       else:
+                               proxies['http'] = 'http://%s' % value
+               # FTP: XXXX To be done.
+               # Gopher: XXXX To be done.
+               return proxies
+                               
+else:
+       def getproxies():
+               """Return a dictionary of scheme -> proxy server URL mappings.
+       
+               Scan the environment for variables named <scheme>_proxy;
+               this seems to be the standard convention.  If you need a
+               different way, you can pass a proxies dictionary to the
+               [Fancy]URLopener constructor.
+       
+               """
+               proxies = {}
+               for name, value in os.environ.items():
+                       name = string.lower(name)
+                       if value and name[-6:] == '_proxy':
+                               proxies[name[:-6]] = value
+               return proxies
 
 
 # Test and time quote() and unquote()