X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/2aefffe61af4bb93659ca1cd9a9a027858658bec..17ac6b9f8462d63b1162a96f4c182ccc29217c5c:/sdk/python/arvados/keep.py diff --git a/sdk/python/arvados/keep.py b/sdk/python/arvados/keep.py index 5416379ad0..db7835be37 100644 --- a/sdk/python/arvados/keep.py +++ b/sdk/python/arvados/keep.py @@ -12,6 +12,7 @@ import ssl import sys import threading import timer +import urlparse import arvados import arvados.config as config @@ -635,8 +636,9 @@ class KeepClient(object): :proxy: If specified, this KeepClient will send requests to this Keep proxy. Otherwise, KeepClient will fall back to the setting of the - ARVADOS_KEEP_PROXY configuration setting. If you want to ensure - KeepClient does not use a proxy, pass in an empty string. + ARVADOS_KEEP_SERVICES or ARVADOS_KEEP_PROXY configuration settings. + If you want to KeepClient does not use a proxy, pass in an empty + string. :timeout: The initial timeout (in seconds) for HTTP requests to Keep @@ -678,11 +680,11 @@ class KeepClient(object): put() are called. Default 0. """ self.lock = threading.Lock() - if config.get('ARVADOS_KEEP_SERVICES'): - # ARVADOS_KEEP_SERVICES overrides proxy settings - proxy = config.get('ARVADOS_KEEP_SERVICES') - elif proxy is None: - proxy = config.get('ARVADOS_KEEP_PROXY') + if proxy is None: + if config.get('ARVADOS_KEEP_SERVICES'): + proxy = config.get('ARVADOS_KEEP_SERVICES') + else: + proxy = config.get('ARVADOS_KEEP_PROXY') if api_token is None: if api_client is None: api_token = config.get('ARVADOS_API_TOKEN') @@ -713,17 +715,21 @@ class KeepClient(object): self.num_retries = num_retries self.max_replicas_per_service = None if proxy: - proxy_uris = proxy.split(' ') + proxy_uris = proxy.split() for i in range(len(proxy_uris)): if not proxy_uris[i].endswith('/'): proxy_uris[i] += '/' + # URL validation + url = urlparse.urlparse(proxy_uris[i]) + if not (url.scheme and url.netloc): + raise arvados.errors.ArgumentError("Invalid proxy URI: {}".format(proxy_uris[i])) self.api_token = api_token self._gateway_services = {} self._keep_services = [{ - 'uuid': "00000-bi6l4-%015d" % proxy_uris.index(uri), + 'uuid': "00000-bi6l4-%015d" % idx, 'service_type': 'proxy', '_service_root': uri, - } for uri in proxy_uris] + } for idx, uri in enumerate(proxy_uris)] self._writable_services = self._keep_services self.using_proxy = True self._static_services_list = True