9696import re
9797from itertools import chain , zip_longest
9898
99- # pylint: enable=anomalous-backslash-in-string
100- from typing import List , Optional , Union
101-
10299import luqum
103100from luqum .parser import IllegalCharacterError , ParseSyntaxError , parser
104101from luqum .tree import (
128125 StringFilterExpression ,
129126)
130127
128+ # pylint: enable=anomalous-backslash-in-string
129+
130+
131131logger = logging .getLogger ("LuceneFilter" )
132132
133133
@@ -143,7 +143,7 @@ class LuceneFilter:
143143 end_escaping_pattern = re .compile (r'((?:\\)+"[\s\)]+(?:AND|OR|NOT|$))' )
144144
145145 @staticmethod
146- def create (query_string : str , special_fields : dict = None ) -> FilterExpression :
146+ def create (query_string : str , special_fields : dict | None = None ) -> FilterExpression :
147147 """Create a FilterExpression from a lucene query string.
148148
149149 Parameters
@@ -232,22 +232,22 @@ def _escape_ends_of_expressions(query_string):
232232class LuceneTransformer :
233233 """A transformer that converts a luqum tree into a FilterExpression."""
234234
235- _special_fields_map = {
235+ _special_fields_map : dict [ str , type [ RegExFilterExpression ] | type [ SigmaFilterExpression ]] = {
236236 "regex_fields" : RegExFilterExpression ,
237237 "sigma_fields" : SigmaFilterExpression ,
238238 }
239239
240240 find_unescaping_quote_pattern = re .compile (r'(?:\\)*"' )
241241 find_unescaping_end_pattern = re .compile (r"(?:\\)*$" )
242242
243- def __init__ (self , tree : luqum .tree , special_fields : dict = None ):
243+ def __init__ (self , tree : luqum .tree , special_fields : dict | None = None ):
244244 self ._tree = tree
245245
246246 self ._special_fields = {}
247247
248248 special_fields = special_fields if special_fields else {}
249249 for key in self ._special_fields_map :
250- self ._special_fields [key ] = special_fields .get (key ) if special_fields . get ( key ) else []
250+ self ._special_fields [key ] = special_fields .get (key , [])
251251
252252 self ._last_search_field = None
253253
@@ -308,6 +308,7 @@ def _create_field_group_expression(self, tree: luqum.tree) -> FilterExpression:
308308 Parsed filter expression.
309309
310310 """
311+ assert self ._last_search_field is not None
311312 key = self ._last_search_field .split ("." )
312313 value = self ._strip_quote_from_string (tree .value )
313314 value = self ._remove_lucene_escaping (value )
@@ -317,13 +318,13 @@ def _create_field_group_expression(self, tree: luqum.tree) -> FilterExpression:
317318 else :
318319 return self ._get_filter_expression (key , value )
319320
320- def _collect_children (self , tree : luqum .tree ) -> List [FilterExpression ]:
321+ def _collect_children (self , tree : luqum .tree ) -> list [FilterExpression ]:
321322 expressions = []
322323 for child in tree .children :
323324 expressions .append (self ._parse_tree (child ))
324325 return expressions
325326
326- def _create_field (self , tree : luqum .tree ) -> Optional [ FilterExpression ] :
327+ def _create_field (self , tree : luqum .tree ) -> FilterExpression :
327328 if isinstance (tree .expr , (Phrase , Word )):
328329 key = tree .name .replace ("\\ " , "" )
329330 key = key .split ("." )
@@ -333,7 +334,7 @@ def _create_field(self, tree: luqum.tree) -> Optional[FilterExpression]:
333334 value = self ._strip_quote_from_string (tree .expr .value )
334335 value = self ._remove_lucene_escaping (value )
335336 return self ._get_filter_expression (key , value )
336- elif isinstance (tree .expr , Regex ):
337+ if isinstance (tree .expr , Regex ):
337338 key = tree .name .replace ("\\ " , "" )
338339 key = key .split ("." )
339340 if tree .expr .value == "null" :
@@ -342,7 +343,7 @@ def _create_field(self, tree: luqum.tree) -> Optional[FilterExpression]:
342343 value = self ._strip_quote_from_string (tree .expr .value )
343344 value = self ._remove_lucene_escaping (value )
344345 return self ._get_filter_expression_regex (key , value )
345- return None
346+ raise LuceneFilterError ( f'The expression " { str ( tree ) } " is invalid!' )
346347
347348 @staticmethod
348349 def _check_key_and_modifier (key , value ):
@@ -353,8 +354,8 @@ def _check_key_and_modifier(key, value):
353354 return None
354355
355356 def _get_filter_expression (
356- self , key : List [str ], value
357- ) -> Union [ RegExFilterExpression , StringFilterExpression ] :
357+ self , key : list [str ], value
358+ ) -> RegExFilterExpression | StringFilterExpression | SigmaFilterExpression :
358359
359360 key_and_modifier_check = LuceneTransformer ._check_key_and_modifier (key , value )
360361 if key_and_modifier_check is not None :
@@ -376,8 +377,8 @@ def _get_filter_expression(
376377 return StringFilterExpression (key , value )
377378
378379 def _get_filter_expression_regex (
379- self , key : List [str ], value
380- ) -> Union [ RegExFilterExpression , StringFilterExpression ] :
380+ self , key : list [str ], value
381+ ) -> RegExFilterExpression | StringFilterExpression :
381382
382383 key_and_modifier_check = LuceneTransformer ._check_key_and_modifier (key , value )
383384 if key_and_modifier_check is not None :
@@ -387,7 +388,7 @@ def _get_filter_expression_regex(
387388 return RegExFilterExpression (key , value )
388389
389390 @staticmethod
390- def _create_value_expression (word : luqum .tree ) -> Union [ Exists , Always ] :
391+ def _create_value_expression (word : luqum .tree ) -> Exists | Always :
391392 value = word .value .replace ("\\ " , "" )
392393 value = value .split ("." )
393394 if value == ["*" ]:
0 commit comments