|
14 | 14 | This module defines exceptions for Trino operations. It follows the structure
|
15 | 15 | defined in pep-0249.
|
16 | 16 | """
|
17 |
| -from typing import Any, Dict, Optional, Tuple |
| 17 | +from typing import Any, Dict, Optional, Tuple, Union |
18 | 18 |
|
19 | 19 | import trino.logging
|
20 | 20 |
|
@@ -72,38 +72,44 @@ class TrinoDataError(NotSupportedError):
|
72 | 72 |
|
73 | 73 |
|
74 | 74 | class TrinoQueryError(Error):
|
75 |
| - def __init__(self, error: Any, query_id: Optional[str] = None) -> None: |
76 |
| - self._error = error |
| 75 | + def __init__(self, error: Union[Dict[str, Any], str], query_id: Optional[str] = None) -> None: |
| 76 | + if isinstance(error, dict): |
| 77 | + self._error = error |
| 78 | + elif isinstance(error, str): |
| 79 | + self._error = {"message": error} |
77 | 80 | self._query_id = query_id
|
78 | 81 |
|
79 | 82 | @property
|
80 | 83 | def error_code(self) -> Optional[int]:
|
81 |
| - return self._error.get("errorCode", None) |
| 84 | + return self._error.get("errorCode") |
82 | 85 |
|
83 | 86 | @property
|
84 | 87 | def error_name(self) -> Optional[str]:
|
85 |
| - return self._error.get("errorName", None) |
| 88 | + return self._error.get("errorName") |
86 | 89 |
|
87 | 90 | @property
|
88 | 91 | def error_type(self) -> Optional[str]:
|
89 |
| - return self._error.get("errorType", None) |
| 92 | + return self._error.get("errorType") |
90 | 93 |
|
91 | 94 | @property
|
92 | 95 | def error_exception(self) -> Optional[str]:
|
93 |
| - return self.failure_info.get("type", None) if self.failure_info else None |
| 96 | + return self.failure_info.get("type") if self.failure_info else None |
94 | 97 |
|
95 | 98 | @property
|
96 | 99 | def failure_info(self) -> Optional[Dict[str, Any]]:
|
97 |
| - return self._error.get("failureInfo", None) |
| 100 | + return self._error.get("failureInfo") |
98 | 101 |
|
99 | 102 | @property
|
100 | 103 | def message(self) -> str:
|
101 | 104 | return self._error.get("message", "Trino did not return an error message")
|
102 | 105 |
|
103 | 106 | @property
|
104 |
| - def error_location(self) -> Tuple[int, int]: |
105 |
| - location = self._error["errorLocation"] |
106 |
| - return (location["lineNumber"], location["columnNumber"]) |
| 107 | + def error_location(self) -> Optional[Tuple[int, int]]: |
| 108 | + location = self._error.get("errorLocation") |
| 109 | + if location: |
| 110 | + return (location["lineNumber"], location["columnNumber"]) |
| 111 | + else: |
| 112 | + return None |
107 | 113 |
|
108 | 114 | @property
|
109 | 115 | def query_id(self) -> Optional[str]:
|
|
0 commit comments