Skip to content

Commit c773bc3

Browse files
committed
query tokens refactoring
1 parent 1cf80f3 commit c773bc3

File tree

32 files changed

+303
-275
lines changed

32 files changed

+303
-275
lines changed
Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
from typing import Union
22

3-
from app.translator.core.models.field import Alias, Field, FieldValue, Keyword
4-
from app.translator.core.models.function_value import FunctionValue
5-
from app.translator.core.models.identifier import Identifier
3+
from app.translator.core.models.query_tokens.field import Alias, Field
4+
from app.translator.core.models.query_tokens.field_field import FieldField
5+
from app.translator.core.models.query_tokens.field_value import FieldValue
6+
from app.translator.core.models.query_tokens.function_value import FunctionValue
7+
from app.translator.core.models.query_tokens.identifier import Identifier
8+
from app.translator.core.models.query_tokens.keyword import Keyword
69

7-
QUERY_TOKEN_TYPE = Union[FieldValue, FunctionValue, Keyword, Identifier, Field, Alias]
10+
QUERY_TOKEN_TYPE = Union[FieldField, FieldValue, FunctionValue, Keyword, Identifier, Field, Alias]

uncoder-core/app/translator/core/mixins/logic.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
1-
from typing import Union
2-
1+
from app.translator.core.const import QUERY_TOKEN_TYPE
32
from app.translator.core.custom_types.tokens import GroupType, LogicalOperatorType
4-
from app.translator.core.models.field import FieldValue, Keyword
5-
from app.translator.core.models.identifier import Identifier
3+
from app.translator.core.models.query_tokens.field_field import FieldField
4+
from app.translator.core.models.query_tokens.field_value import FieldValue
5+
from app.translator.core.models.query_tokens.function_value import FunctionValue
6+
from app.translator.core.models.query_tokens.identifier import Identifier
7+
from app.translator.core.models.query_tokens.keyword import Keyword
68

79

810
class ANDLogicOperatorMixin:
911
@staticmethod
10-
def get_missed_and_token_indices(tokens: list[Union[FieldValue, Keyword, Identifier]]) -> list[int]:
12+
def get_missed_and_token_indices(tokens: list[QUERY_TOKEN_TYPE]) -> list[int]:
1113
missed_and_indices = []
1214
for index in range(len(tokens) - 1):
1315
token = tokens[index]
1416
next_token = tokens[index + 1]
1517
if (
16-
isinstance(token, (FieldValue, Keyword))
18+
isinstance(token, (FieldField, FieldValue, FunctionValue, Keyword))
1719
or isinstance(token, Identifier)
1820
and token.token_type == GroupType.R_PAREN
1921
) and not (
@@ -23,9 +25,7 @@ def get_missed_and_token_indices(tokens: list[Union[FieldValue, Keyword, Identif
2325
missed_and_indices.append(index + 1)
2426
return list(reversed(missed_and_indices))
2527

26-
def add_and_token_if_missed(
27-
self, tokens: list[Union[FieldValue, Keyword, Identifier]]
28-
) -> list[Union[FieldValue, Keyword, Identifier]]:
28+
def add_and_token_if_missed(self, tokens: list[QUERY_TOKEN_TYPE]) -> list[QUERY_TOKEN_TYPE]:
2929
indices = self.get_missed_and_token_indices(tokens=tokens)
3030
for index in indices:
3131
tokens.insert(index, Identifier(token_type=LogicalOperatorType.AND))

uncoder-core/app/translator/core/mixins/operator.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
from typing import Optional, Union
2020

2121
from app.translator.core.custom_types.tokens import OperatorType
22-
from app.translator.core.models.identifier import Identifier
22+
from app.translator.core.models.query_tokens.identifier import Identifier
2323

2424

2525
class WildCardMixin:

uncoder-core/app/translator/core/models/field.py

Lines changed: 0 additions & 136 deletions
This file was deleted.

uncoder-core/app/translator/core/models/function_value.py

Lines changed: 0 additions & 39 deletions
This file was deleted.

uncoder-core/app/translator/core/models/query_container.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
from app.translator.core.const import QUERY_TOKEN_TYPE
77
from app.translator.core.custom_types.meta_info import SeverityType
88
from app.translator.core.mapping import DEFAULT_MAPPING_NAME
9-
from app.translator.core.models.field import Field
109
from app.translator.core.models.functions.base import ParsedFunctions
10+
from app.translator.core.models.query_tokens.field import Field
1111

1212

1313
class MetaInfoContainer:

uncoder-core/app/translator/core/models/query_tokens/__init__.py

Whitespace-only changes.
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
from typing import Optional
2+
3+
from app.translator.core.mapping import DEFAULT_MAPPING_NAME, SourceMapping
4+
5+
6+
class Alias:
7+
def __init__(self, name: str):
8+
self.name = name
9+
10+
11+
class Field:
12+
def __init__(self, source_name: str):
13+
self.source_name = source_name
14+
self.__generic_names_map = {}
15+
16+
def get_generic_field_name(self, source_id: str) -> Optional[str]:
17+
return self.__generic_names_map.get(source_id)
18+
19+
def add_generic_names_map(self, generic_names_map: dict) -> None:
20+
self.__generic_names_map = generic_names_map
21+
22+
def set_generic_names_map(self, source_mappings: list[SourceMapping], default_mapping: SourceMapping) -> None:
23+
generic_names_map = {
24+
source_mapping.source_id: source_mapping.fields_mapping.get_generic_field_name(self.source_name)
25+
or self.source_name
26+
for source_mapping in source_mappings
27+
}
28+
if DEFAULT_MAPPING_NAME not in generic_names_map:
29+
fields_mapping = default_mapping.fields_mapping
30+
generic_names_map[DEFAULT_MAPPING_NAME] = (
31+
fields_mapping.get_generic_field_name(self.source_name) or self.source_name
32+
)
33+
34+
self.__generic_names_map = generic_names_map
35+
36+
37+
class PredefinedField:
38+
def __init__(self, name: str):
39+
self.name = name
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
from app.translator.core.models.query_tokens.field import Alias, Field
2+
from app.translator.core.models.query_tokens.identifier import Identifier
3+
4+
5+
class FieldField:
6+
def __init__(
7+
self,
8+
source_name_left: str,
9+
operator: Identifier,
10+
source_name_right: str,
11+
is_alias_left: bool = False,
12+
is_alias_right: bool = False,
13+
):
14+
self.field_left = Field(source_name=source_name_left) if not is_alias_left else None
15+
self.alias_left = Alias(name=source_name_left) if is_alias_left else None
16+
self.operator = operator
17+
self.field_right = Field(source_name=source_name_right) if not is_alias_right else None
18+
self.alias_right = Alias(name=source_name_right) if is_alias_right else None
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
from typing import Union
2+
3+
from app.translator.core.custom_types.tokens import STR_SEARCH_OPERATORS
4+
from app.translator.core.models.query_tokens.field import Alias, Field, PredefinedField
5+
from app.translator.core.models.query_tokens.identifier import Identifier
6+
from app.translator.core.models.query_tokens.value import Value
7+
from app.translator.core.str_value_manager import StrValue
8+
9+
10+
class FieldValue(Value):
11+
def __init__(
12+
self,
13+
source_name: str,
14+
operator: Identifier,
15+
value: Union[bool, int, str, StrValue, list, tuple],
16+
is_alias: bool = False,
17+
is_predefined_field: bool = False,
18+
):
19+
super().__init__(value, cast_to_int=operator.token_type not in STR_SEARCH_OPERATORS)
20+
# mapped by platform fields mapping
21+
self.field = Field(source_name=source_name) if not (is_alias or is_predefined_field) else None
22+
# not mapped
23+
self.alias = Alias(name=source_name) if is_alias else None
24+
# mapped by platform predefined fields mapping
25+
self.predefined_field = PredefinedField(name=source_name) if is_predefined_field else None
26+
self.operator = operator
27+
28+
def __repr__(self):
29+
if self.alias:
30+
return f"{self.alias.name} {self.operator.token_type} {self.values}"
31+
32+
if self.predefined_field:
33+
return f"{self.predefined_field.name} {self.operator.token_type} {self.values}"
34+
35+
return f"{self.field.source_name} {self.operator.token_type} {self.values}"

0 commit comments

Comments
 (0)