12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- from .utils import format_environment
-
-
- class ProxyConfig(dict):
- '''
- Hold the client's proxy configuration
- '''
- @property
- def http(self):
- return self.get('http')
-
- @property
- def https(self):
- return self.get('https')
-
- @property
- def ftp(self):
- return self.get('ftp')
-
- @property
- def no_proxy(self):
- return self.get('no_proxy')
-
- @staticmethod
- def from_dict(config):
- '''
- Instantiate a new ProxyConfig from a dictionary that represents a
- client configuration, as described in `the documentation`_.
-
- .. _the documentation:
- https://docs.docker.com/network/proxy/#configure-the-docker-client
- '''
- return ProxyConfig(
- http=config.get('httpProxy'),
- https=config.get('httpsProxy'),
- ftp=config.get('ftpProxy'),
- no_proxy=config.get('noProxy'),
- )
-
- def get_environment(self):
- '''
- Return a dictionary representing the environment variables used to
- set the proxy settings.
- '''
- env = {}
- if self.http:
- env['http_proxy'] = env['HTTP_PROXY'] = self.http
- if self.https:
- env['https_proxy'] = env['HTTPS_PROXY'] = self.https
- if self.ftp:
- env['ftp_proxy'] = env['FTP_PROXY'] = self.ftp
- if self.no_proxy:
- env['no_proxy'] = env['NO_PROXY'] = self.no_proxy
- return env
-
- def inject_proxy_environment(self, environment):
- '''
- Given a list of strings representing environment variables, prepend the
- environment variables corresponding to the proxy settings.
- '''
- if not self:
- return environment
-
- proxy_env = format_environment(self.get_environment())
- if not environment:
- return proxy_env
- # It is important to prepend our variables, because we want the
- # variables defined in "environment" to take precedence.
- return proxy_env + environment
-
- def __str__(self):
- return 'ProxyConfig(http={}, https={}, ftp={}, no_proxy={})'.format(
- self.http, self.https, self.ftp, self.no_proxy)
|