|
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