~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/transport/http/_urllib2_wrappers.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2011-02-04 06:20:39 UTC
  • mfrom: (5639.2.2 586341-noproxy)
  • Revision ID: pqm@pqm.ubuntu.com-20110204062039-77vw2rkha647pg2c
(mbp) more correct parsing of the NO_PROXY list (Martin Pool)

Show diffs side-by-side

added added

removed removed

Lines of Context:
942
942
        return None
943
943
 
944
944
    def proxy_bypass(self, host):
945
 
        """Check if host should be proxied or not"""
 
945
        """Check if host should be proxied or not.
 
946
 
 
947
        :returns: True to skip the proxy, False otherwise.
 
948
        """
946
949
        no_proxy = self.get_proxy_env_var('no', default_to=None)
 
950
        bypass = self.evaluate_proxy_bypass(host, no_proxy)
 
951
        if bypass is None:
 
952
            # Nevertheless, there are platform-specific ways to
 
953
            # ignore proxies...
 
954
            return urllib.proxy_bypass(host)
 
955
        else:
 
956
            return bypass
 
957
 
 
958
    def evaluate_proxy_bypass(self, host, no_proxy):
 
959
        """Check the host against a comma-separated no_proxy list as a string.
 
960
 
 
961
        :param host: ``host:port`` being requested
 
962
 
 
963
        :param no_proxy: comma-separated list of hosts to access directly.
 
964
 
 
965
        :returns: True to skip the proxy, False not to, or None to
 
966
            leave it to urllib.
 
967
        """
947
968
        if no_proxy is None:
 
969
            # All hosts are proxied
948
970
            return False
949
971
        hhost, hport = urllib.splitport(host)
950
972
        # Does host match any of the domains mentioned in
952
974
        # are fuzzy (to say the least). We try to allow most
953
975
        # commonly seen values.
954
976
        for domain in no_proxy.split(','):
 
977
            domain = domain.strip()
 
978
            if domain == '':
 
979
                continue
955
980
            dhost, dport = urllib.splitport(domain)
956
981
            if hport == dport or dport is None:
957
982
                # Protect glob chars
960
985
                dhost = dhost.replace("?", r".")
961
986
                if re.match(dhost, hhost, re.IGNORECASE):
962
987
                    return True
963
 
        # Nevertheless, there are platform-specific ways to
964
 
        # ignore proxies...
965
 
        return urllib.proxy_bypass(host)
 
988
        # Nothing explicitly avoid the host
 
989
        return None
966
990
 
967
991
    def set_proxy(self, request, type):
968
992
        if self.proxy_bypass(request.get_host()):