[ARVADOS] created: 1.1.4-548-g3a7481703
Git user
git at public.curoverse.com
Fri Jul 6 09:23:09 EDT 2018
at 3a7481703542b0c95d5a23cb45b0d2e7c3ac4c9e (commit)
commit 3a7481703542b0c95d5a23cb45b0d2e7c3ac4c9e
Author: Peter Amstutz <pamstutz at veritasgenetics.com>
Date: Thu Jul 5 17:03:11 2018 -0400
13692: Make Python SDK error reporting more user friendly.
Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <pamstutz at veritasgenetics.com>
diff --git a/sdk/cwl/arvados_cwl/__init__.py b/sdk/cwl/arvados_cwl/__init__.py
index bf419dd9b..062c7c2fa 100644
--- a/sdk/cwl/arvados_cwl/__init__.py
+++ b/sdk/cwl/arvados_cwl/__init__.py
@@ -831,6 +831,8 @@ def main(args, stdout, stderr, api_client=None, keep_client=None,
if api_client is None:
api_client = arvados.safeapi.ThreadSafeApiCache(api_params={"model": OrderedJsonModel()}, keep_params={"num_retries": 4})
keep_client = api_client.keep
+ # Make an API object now so errors are reported early.
+ api_client.users().current().execute()
if keep_client is None:
keep_client = arvados.keep.KeepClient(api_client=api_client, num_retries=4)
runner = ArvCwlRunner(api_client, arvargs, keep_client=keep_client, num_retries=4)
diff --git a/sdk/python/arvados/api.py b/sdk/python/arvados/api.py
index 4611a1aad..b652db77d 100644
--- a/sdk/python/arvados/api.py
+++ b/sdk/python/arvados/api.py
@@ -96,6 +96,10 @@ def _intercept_http_request(self, uri, method="GET", headers={}, **kwargs):
delay, exc_info=True)
for conn in self.connections.values():
conn.close()
+ except httplib2.SSLHandshakeError as e:
+ # Intercept and re-raise with a better error message.
+ raise httplib2.SSLHandshakeError("Could not connect to %s\n%s\nPossible causes: remote SSL/TLS certificate expired, or was issued by an untrusted certificate authority." % (uri, e))
+
time.sleep(delay)
delay = delay * self._retry_delay_backoff
@@ -254,9 +258,12 @@ def api_from_config(version=None, apiconfig=None, **kwargs):
if apiconfig is None:
apiconfig = config.settings()
+ errors = []
for x in ['ARVADOS_API_HOST', 'ARVADOS_API_TOKEN']:
if x not in apiconfig:
- raise ValueError("%s is not set. Aborting." % x)
+ errors.append(x)
+ if errors:
+ raise ValueError(" and ".join(errors)+" not set.\nPlease set in %s or export environment variable." % config.default_config_file)
host = apiconfig.get('ARVADOS_API_HOST')
token = apiconfig.get('ARVADOS_API_TOKEN')
insecure = config.flag_is_true('ARVADOS_API_HOST_INSECURE', apiconfig)
diff --git a/sdk/python/arvados/safeapi.py b/sdk/python/arvados/safeapi.py
index b12c121bf..c6e17cae0 100644
--- a/sdk/python/arvados/safeapi.py
+++ b/sdk/python/arvados/safeapi.py
@@ -26,6 +26,12 @@ class ThreadSafeApiCache(object):
self.apiconfig = copy.copy(apiconfig)
self.api_params = api_params
self.local = threading.local()
+
+ # Initialize an API object for this thread before creating
+ # KeepClient, this will report if ARVADOS_API_HOST or
+ # ARVADOS_API_TOKEN are missing.
+ self.localapi()
+
self.keep = keep.KeepClient(api_client=self, **keep_params)
def localapi(self):
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list