diff --git a/tests/smoke.py b/tests/smoke.py index 9487839..d12a80d 100644 --- a/tests/smoke.py +++ b/tests/smoke.py @@ -10,7 +10,7 @@ from rich.console import Console from rich.table import Table -from wherobots.db import connect, connect_direct +from wherobots.db import connect, connect_direct, errors from wherobots.db.constants import DEFAULT_ENDPOINT, DEFAULT_SESSION_TYPE from wherobots.db.connection import Connection from wherobots.db.region import Region @@ -103,8 +103,12 @@ def execute(conn: Connection, sql: str) -> pandas.DataFrame: cursor.execute(sql) return cursor.fetchall() - with conn_func() as conn: - with concurrent.futures.ThreadPoolExecutor() as pool: - futures = [pool.submit(execute, conn, s) for s in args.sql] - for future in concurrent.futures.as_completed(futures): - render(future.result()) + try: + with conn_func() as conn: + with concurrent.futures.ThreadPoolExecutor() as pool: + futures = [pool.submit(execute, conn, s) for s in args.sql] + for future in concurrent.futures.as_completed(futures): + render(future.result()) + except errors.Error as e: + sys.stderr.write(f"\n{e}\n") + sys.exit(1) diff --git a/wherobots/db/driver.py b/wherobots/db/driver.py index 9f3a6ab..4482e9c 100644 --- a/wherobots/db/driver.py +++ b/wherobots/db/driver.py @@ -116,7 +116,15 @@ def connect( ) resp.raise_for_status() except requests.HTTPError as e: - raise InterfaceError("Failed to create SQL session!", e) + details = str(e) + try: + info = e.response.json() + errors = info.get("errors", []) + if errors and isinstance(errors, list): + details = f"{errors[0]['message']}: {errors[0]['details']}" + except requests.JSONDecodeError: + pass + raise InterfaceError(f"Failed to create SQL session: {details}") from e # At this point we've been redirected to /sql/session/{session_id}, which we'll need to keep polling until the # session is in READY state.