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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy