Skip to content

Commit 94b6ab6

Browse files
committed
Improve QueryFailedError
1 parent 6c61837 commit 94b6ab6

File tree

4 files changed

+22
-3
lines changed

4 files changed

+22
-3
lines changed

dbtsl/api/adbc/client/base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ def _handle_error(self, err: Exception) -> None:
5757
raise AuthError(err.args) from err
5858

5959
if err.status_code == AdbcStatusCode.INVALID_ARGUMENT:
60-
raise QueryFailedError(err.args) from err
60+
raise QueryFailedError(err.details, err.status_code) from err
6161

6262
# TODO: timeouts are not implemented for ADBC
6363
# See: https://arrow.apache.org/adbc/current/driver/flight_sql.html#timeouts

dbtsl/api/graphql/client/asyncio.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ async def query(self, **params: Unpack[QueryParameters]) -> "pa.Table":
157157
variables={"query_id": query_id, "page_num": 1},
158158
)
159159
if first_page_results.status != QueryStatus.SUCCESSFUL:
160-
raise QueryFailedError()
160+
raise QueryFailedError(first_page_results.error, first_page_results.status, query_id)
161161

162162
assert first_page_results.total_pages is not None
163163

dbtsl/api/graphql/client/sync.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ def query(self, **params: Unpack[QueryParameters]) -> "pa.Table":
148148
},
149149
)
150150
if first_page_results.status != QueryStatus.SUCCESSFUL:
151-
raise QueryFailedError()
151+
raise QueryFailedError(first_page_results.error, first_page_results.status, query_id)
152152

153153
assert first_page_results.total_pages is not None
154154

dbtsl/error.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import json
2+
from typing import Any
23

34

45
class SemanticLayerError(RuntimeError):
@@ -46,6 +47,24 @@ class RetryTimeoutError(TimeoutError):
4647
class QueryFailedError(SemanticLayerError):
4748
"""Raise whenever a query has failed."""
4849

50+
def __init__(self, message: Any, status: Any, query_id: str | None = None) -> None:
51+
"""Initialize the query failed error.
52+
53+
Args:
54+
message: The message or error details
55+
status: The stringified status or the response
56+
query_id: The query ID for GQL requests
57+
"""
58+
self.message = str(message)
59+
self.status_code = str(status)
60+
self.query_id = query_id
61+
62+
def __str__(self) -> str: # noqa: D105
63+
content = f"message={self.message}), status_code={self.status}"
64+
if self.query_id:
65+
content += f", query_id={self.query_id}"
66+
return f"{self.__class__.__name__}({content})"
67+
4968

5069
class AuthError(SemanticLayerError):
5170
"""Raise whenever there was a problem authenticating to the API."""

0 commit comments

Comments
 (0)