55
66"""ESQL exceptions."""
77
8+ from collections .abc import Sequence
9+
810from elasticsearch import Elasticsearch # type: ignore[reportMissingTypeStubs]
911
10- from .misc import getdefault
12+ from .misc import ClientError , getdefault
1113
1214__all__ = (
1315 "EsqlKibanaBaseError" ,
2123
2224
2325def cleanup_empty_indices (
24- elastic_client : Elasticsearch , index_patterns : tuple [str , ... ] = ("rule-test-*" , "test-*" )
26+ elastic_client : Elasticsearch , index_patterns : Sequence [str ] = ("rule-test-*" , "test-*" )
2527) -> None :
2628 """Delete empty indices matching the given patterns."""
2729 if getdefault ("skip_empty_index_cleanup" )():
@@ -33,12 +35,16 @@ def cleanup_empty_indices(
3335 _ = elastic_client .indices .delete (index = empty_index )
3436
3537
36- class EsqlKibanaBaseError (Exception ):
38+ class EsqlKibanaBaseError (ClientError ):
3739 """Base class for ESQL exceptions with cleanup logic."""
3840
39- def __init__ (self , message : str , elastic_client : Elasticsearch ) -> None :
41+ def __init__ (
42+ self ,
43+ message : str ,
44+ elastic_client : Elasticsearch ,
45+ ) -> None :
4046 cleanup_empty_indices (elastic_client )
41- super ().__init__ (message )
47+ super ().__init__ (message , original_error = self )
4248
4349
4450class EsqlSchemaError (EsqlKibanaBaseError ):
@@ -53,24 +59,39 @@ class EsqlSyntaxError(EsqlKibanaBaseError):
5359 """Error with ESQL syntax."""
5460
5561
56- class EsqlTypeMismatchError (Exception ):
62+ class EsqlTypeMismatchError (ClientError ):
5763 """Error when validating types in ESQL. Can occur in stack or local schema comparison."""
5864
59- def __init__ (self , message : str , elastic_client : Elasticsearch | None = None ) -> None :
65+ def __init__ (
66+ self ,
67+ message : str ,
68+ elastic_client : Elasticsearch | None = None ,
69+ ) -> None :
6070 if elastic_client :
6171 cleanup_empty_indices (elastic_client )
62- super ().__init__ (message )
72+ super ().__init__ (message , original_error = self )
6373
6474
65- class EsqlSemanticError (Exception ):
75+ class EsqlSemanticError (ClientError ):
6676 """Error with ESQL semantics. Validated through regex enforcement."""
6777
6878 def __init__ (self , message : str ) -> None :
69- super ().__init__ (message )
79+ super ().__init__ (message , original_error = self )
7080
7181
72- class EsqlUnknownIndexError (Exception ):
82+ class EsqlUnknownIndexError (ClientError ):
7383 """Error with ESQL Indices. Validated through regex enforcement."""
7484
7585 def __init__ (self , message : str ) -> None :
76- super ().__init__ (message )
86+ super ().__init__ (message , original_error = self )
87+
88+
89+ ESQL_EXCEPTION_TYPES = (
90+ EsqlSchemaError ,
91+ EsqlSyntaxError ,
92+ EsqlUnsupportedTypeError ,
93+ EsqlTypeMismatchError ,
94+ EsqlKibanaBaseError ,
95+ EsqlSemanticError ,
96+ EsqlUnknownIndexError ,
97+ )
0 commit comments