Skip to content

Commit a4e8cda

Browse files
authored
Merge pull request #170 from UncoderIO/gis-8064
Gis 8064 FunctionValue class, query tokens refactoring
2 parents 4d9e145 + 52da2bd commit a4e8cda

File tree

53 files changed

+413
-313
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+413
-313
lines changed
Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +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.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
59

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

uncoder-core/app/translator/core/custom_types/functions.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ class FunctionType(CustomEnum):
2222
upper = "upper"
2323

2424
array_length = "array_length"
25-
compare = "compare"
2625
extract_time = "extract_time"
2726
ipv4_is_in_range = "ipv4_is_in_range"
2827

uncoder-core/app/translator/core/functions.py

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@
2525

2626
from app.translator.core.exceptions.functions import NotSupportedFunctionException
2727
from app.translator.core.mapping import SourceMapping
28-
from app.translator.core.models.field import Alias, Field
2928
from app.translator.core.models.functions.base import Function, ParsedFunctions, RenderedFunctions
29+
from app.translator.core.models.query_tokens.field import Alias, Field
3030
from app.translator.tools.utils import execute_module
3131
from settings import INIT_FUNCTIONS
3232

@@ -83,7 +83,6 @@ def parse(self, func_body: str, raw: str) -> Function:
8383
class FunctionRender(ABC):
8484
function_names_map: ClassVar[dict[str, str]] = {}
8585
order_to_render: int = 0
86-
in_query_render: bool = False
8786
render_to_prefix: bool = False
8887
manager: PlatformFunctionsManager = None
8988

@@ -117,7 +116,6 @@ def __init__(self):
117116
self._parsers_map: dict[str, FunctionParser] = {} # {platform_func_name: FunctionParser}
118117

119118
self._renders_map: dict[str, FunctionRender] = {} # {generic_func_name: FunctionRender}
120-
self._in_query_renders_map: dict[str, FunctionRender] = {} # {generic_func_name: FunctionRender}
121119
self._order_to_render: dict[str, int] = {} # {generic_func_name: int}
122120

123121
def register_render(self, render_class: type[FunctionRender]) -> type[FunctionRender]:
@@ -126,8 +124,6 @@ def register_render(self, render_class: type[FunctionRender]) -> type[FunctionRe
126124
for generic_function_name in render.function_names_map:
127125
self._renders_map[generic_function_name] = render
128126
self._order_to_render[generic_function_name] = render.order_to_render
129-
if render.in_query_render:
130-
self._in_query_renders_map[generic_function_name] = render
131127

132128
return render_class
133129

@@ -149,24 +145,16 @@ def get_hof_parser(self, platform_func_name: str) -> HigherOrderFunctionParser:
149145

150146
raise NotSupportedFunctionException
151147

152-
def get_parser(self, platform_func_name: str) -> FunctionParser:
148+
def get_parser(self, platform_func_name: str) -> Optional[FunctionParser]:
153149
if INIT_FUNCTIONS and (parser := self._parsers_map.get(platform_func_name)):
154150
return parser
155151

156-
raise NotSupportedFunctionException
157-
158152
def get_render(self, generic_func_name: str) -> FunctionRender:
159153
if INIT_FUNCTIONS and (render := self._renders_map.get(generic_func_name)):
160154
return render
161155

162156
raise NotSupportedFunctionException
163157

164-
def get_in_query_render(self, generic_func_name: str) -> FunctionRender:
165-
if INIT_FUNCTIONS and (render := self._in_query_renders_map.get(generic_func_name)):
166-
return render
167-
168-
raise NotSupportedFunctionException
169-
170158
@property
171159
def order_to_render(self) -> dict[str, int]:
172160
if INIT_FUNCTIONS:

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/functions/base.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,24 @@
11
from __future__ import annotations
22

33
from dataclasses import dataclass, field
4-
from typing import Optional, Union
4+
from typing import TYPE_CHECKING, Optional, Union
55

6-
from app.translator.core.models.field import Alias, Field, FieldValue, Keyword
7-
from app.translator.core.models.identifier import Identifier
6+
from app.translator.core.models.query_tokens.field import Alias, Field
7+
from app.translator.core.models.query_tokens.field_field import FieldField
8+
from app.translator.core.models.query_tokens.field_value import FieldValue
9+
from app.translator.core.models.query_tokens.identifier import Identifier
10+
from app.translator.core.models.query_tokens.keyword import Keyword
11+
12+
if TYPE_CHECKING:
13+
from app.translator.core.models.query_tokens.function_value import FunctionValue
814

915

1016
@dataclass
1117
class Function:
1218
name: str = None
13-
args: list[Union[Alias, Field, FieldValue, Keyword, Function, Identifier, str, bool]] = field(default_factory=list)
19+
args: list[
20+
Union[Alias, Field, FieldField, FieldValue, FunctionValue, Keyword, Function, Identifier, int, str, bool]
21+
] = field(default_factory=list)
1422
alias: Optional[Alias] = None
1523
raw: str = ""
1624

uncoder-core/app/translator/core/models/functions/bin.py

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,15 @@
22
from typing import Optional
33

44
from app.translator.core.custom_types.functions import FunctionType
5-
from app.translator.core.models.field import Field
5+
from app.translator.core.custom_types.time import TimeFrameType
66
from app.translator.core.models.functions.base import Function
7-
from app.translator.tools.custom_enum import CustomEnum
8-
9-
10-
class SpanType(CustomEnum):
11-
days = "days"
12-
hours = "hours"
13-
minutes = "minutes"
7+
from app.translator.core.models.query_tokens.field import Field
148

159

1610
@dataclass
1711
class Span:
1812
value: str = "1"
19-
type_: str = SpanType.days
13+
type_: str = TimeFrameType.days
2014

2115

2216
@dataclass

uncoder-core/app/translator/core/models/functions/eval.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
from typing import Union
33

44
from app.translator.core.custom_types.functions import FunctionType
5-
from app.translator.core.models.field import Alias, Field
65
from app.translator.core.models.functions.base import Function
7-
from app.translator.core.models.identifier import Identifier
6+
from app.translator.core.models.query_tokens.field import Alias, Field
7+
from app.translator.core.models.query_tokens.identifier import Identifier
88

99

1010
@dataclass

uncoder-core/app/translator/core/models/functions/group_by.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
from typing import Union
33

44
from app.translator.core.custom_types.functions import FunctionType
5-
from app.translator.core.models.field import Alias
65
from app.translator.core.models.functions.base import Function
6+
from app.translator.core.models.query_tokens.field import Alias
77

88

99
@dataclass

0 commit comments

Comments
 (0)