Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit0b0a8d9

Browse files
author
oleksandr.volha
committed
aql, xql str value managers, func dataclasses
1 parentd970669 commit0b0a8d9

File tree

45 files changed

+1062
-345
lines changed

Some content is hidden

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

45 files changed

+1062
-345
lines changed

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

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,29 @@ class FunctionType(CustomEnum):
55
avg="avg"
66
count="count"
77
distinct_count="distinct_count"
8+
max="max"
9+
min="min"
10+
sum="sum"
11+
12+
divide="divide"
13+
814
earliest="earliest"
15+
latest="latest"
16+
17+
lower="lower"
18+
upper="upper"
19+
20+
compare_boolean="compare_boolean"
21+
22+
ipv4_is_in_range="ipv4_is_in_range"
23+
24+
bin="bin"
925
eval="eval"
1026
fields="fields"
11-
latest="latest"
12-
max="max"
13-
min="min"
1427
rename="rename"
1528
search="search"
16-
sort="sort"
29+
sort_limit="sort_limit"
1730
stats="stats"
18-
sum="sum"
1931
table="table"
32+
timeframe="timeframe"
2033
values="values"

‎uncoder-core/app/translator/core/custom_types/tokens.py‎

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@ class GroupType(CustomEnum):
3333

3434

3535
STR_SEARCH_OPERATORS= (
36-
OperatorType.CONTAINS,OperatorType.NOT_CONTAINS,OperatorType.ENDSWITH,OperatorType.NOT_ENDSWITH,
37-
OperatorType.STARTSWITH,OperatorType.NOT_STARTSWITH,OperatorType.REGEX,OperatorType.NOT_REGEX
36+
OperatorType.CONTAINS,
37+
OperatorType.NOT_CONTAINS,
38+
OperatorType.ENDSWITH,
39+
OperatorType.NOT_ENDSWITH,
40+
OperatorType.STARTSWITH,
41+
OperatorType.NOT_STARTSWITH,
42+
OperatorType.REGEX,
43+
OperatorType.NOT_REGEX,
3844
)

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

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,10 @@ class PlatformFunctionsManager:
100100
def__init__(self):
101101
self._parsers_map:dict[str,HigherOrderFunctionParser]= {}
102102
self._renders_map:dict[str,FunctionRender]= {}
103+
self._in_query_renders_map:dict[str,FunctionRender]= {}
103104
self._names_map:dict[str,str]= {}
105+
self._order_to_render:dict[str,int]= {}
106+
self._render_to_prefix_functions:list[str]= []
104107

105108
defpost_init_configure(self,platform_render:PlatformQueryRender)->None:
106109
raiseNotImplementedError
@@ -121,6 +124,12 @@ def get_render(self, generic_func_name: str) -> FunctionRender:
121124

122125
raiseNotSupportedFunctionException
123126

127+
defget_in_query_render(self,generic_func_name:str)->FunctionRender:
128+
ifINIT_FUNCTIONSand (render:=self._in_query_renders_map.get(generic_func_name)):
129+
returnrender
130+
131+
raiseNotSupportedFunctionException
132+
124133
defget_generic_func_name(self,platform_func_name:str)->Optional[str]:
125134
ifINIT_FUNCTIONSand (generic_func_name:=self._names_map.get(platform_func_name)):
126135
returngeneric_func_name
@@ -131,6 +140,20 @@ def get_platform_func_name(self, generic_func_name: str) -> Optional[str]:
131140
ifINIT_FUNCTIONS:
132141
returnself._inverted_names_map.get(generic_func_name)
133142

143+
@property
144+
deforder_to_render(self)->dict[str,int]:
145+
ifINIT_FUNCTIONS:
146+
returnself._order_to_render
147+
148+
return {}
149+
150+
@property
151+
defrender_to_prefix_functions(self)->list[str]:
152+
ifINIT_FUNCTIONS:
153+
returnself._render_to_prefix_functions
154+
155+
return []
156+
134157

135158
classPlatformFunctions:
136159
manager:PlatformFunctionsManager=PlatformFunctionsManager()
@@ -158,18 +181,27 @@ def parse(self, query: str) -> ParsedFunctions:
158181
invalid=invalid,
159182
)
160183

184+
def_sort_functions_to_render(self,functions:list[Function])->list[Function]:
185+
returnsorted(functions,key=lambdafunc:self.manager.order_to_render.get(func.name,0))
186+
161187
defrender(self,functions:list[Function],source_mapping:SourceMapping)->RenderedFunctions:
162188
rendered=""
189+
rendered_prefix=""
163190
not_supported= []
191+
functions=self._sort_functions_to_render(functions)
164192
forfuncinfunctions:
165193
try:
166194
func_render=self.manager.get_render(func.name)
167-
rendered+=self.wrap_function_with_delimiter(func_render.render(func,source_mapping))
195+
_rendered=func_render.render(func,source_mapping)
196+
iffunc.nameinself.manager.render_to_prefix_functions:
197+
rendered_prefix+=_rendered
198+
else:
199+
rendered+=self.wrap_function_with_delimiter(_rendered)
168200
exceptNotSupportedFunctionException:
169201
not_supported.append(func.raw)
170202

171203
not_supported= [self.wrap_function_with_delimiter(func.strip())forfuncinnot_supported]
172-
returnRenderedFunctions(rendered=rendered,not_supported=not_supported)
204+
returnRenderedFunctions(rendered_prefix=rendered_prefix,rendered=rendered,not_supported=not_supported)
173205

174206
defwrap_function_with_delimiter(self,func:str)->str:
175207
returnf"{self.function_delimiter}{func}"

‎uncoder-core/app/translator/core/mapping.py‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ def __init__(
8282

8383
classBasePlatformMappings:
8484
skip_load_default_mappings:bool=True
85+
extend_default_mapping_with_all_fields:bool=False
8586

8687
def__init__(self,platform_dir:str):
8788
self._loader=LoaderFileMappings()
@@ -116,6 +117,9 @@ def prepare_mapping(self) -> dict[str, SourceMapping]:
116117
ifself.skip_load_default_mappings:
117118
source_mappings[DEFAULT_MAPPING_NAME]=default_mapping
118119

120+
ifself.extend_default_mapping_with_all_fields:
121+
source_mappings[DEFAULT_MAPPING_NAME].fields_mapping.update(default_mapping.fields_mapping)
122+
119123
returnsource_mappings
120124

121125
@staticmethod

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

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
fromtypingimportOptional,Union
22

3-
fromapp.translator.core.custom_types.tokensimportOperatorType,STR_SEARCH_OPERATORS
3+
fromapp.translator.core.custom_types.tokensimportSTR_SEARCH_OPERATORS,OperatorType
44
fromapp.translator.core.mappingimportDEFAULT_MAPPING_NAME,SourceMapping
55
fromapp.translator.core.models.identifierimportIdentifier
66
fromapp.translator.core.str_value_managerimportStrValue
77

88

9+
classAlias:
10+
def__init__(self,name:str):
11+
self.name=name
12+
13+
914
classField:
1015
def__init__(self,source_name:str):
1116
self.source_name=source_name
@@ -33,8 +38,18 @@ def set_generic_names_map(self, source_mappings: list[SourceMapping], default_ma
3338

3439

3540
classFieldValue:
36-
def__init__(self,source_name:str,operator:Identifier,value:Union[int,str,StrValue,list,tuple]):
41+
def__init__(
42+
self,
43+
source_name:str,
44+
operator:Identifier,
45+
value:Union[int,str,StrValue,list,tuple],
46+
is_alias:bool=False,
47+
):
3748
self.field=Field(source_name=source_name)
49+
self.alias=None
50+
ifis_alias:
51+
self.alias=Alias(name=source_name)
52+
3853
self.operator=operator
3954
self.values= []
4055
self.__add_value(value)
@@ -49,13 +64,21 @@ def __add_value(self, value: Optional[Union[int, str, StrValue, list, tuple]]) -
4964
ifvalueandisinstance(value, (list,tuple)):
5065
forvinvalue:
5166
self.__add_value(v)
52-
elifvalueandisinstance(value,str)andvalue.isnumeric()andself.operator.token_typenotinSTR_SEARCH_OPERATORS:
67+
elif (
68+
value
69+
andisinstance(value,str)
70+
andvalue.isnumeric()
71+
andself.operator.token_typenotinSTR_SEARCH_OPERATORS
72+
):
5373
self.values.append(int(value))
5474
elifvalueisnotNoneandisinstance(value, (int,str)):
5575
self.values.append(value)
5676

5777
def__repr__(self):
58-
returnf"{self.field.source_name}{self.operator.token_type}{self.values}"
78+
ifself.field:
79+
returnf"{self.field.source_name}{self.operator.token_type}{self.values}"
80+
81+
returnf"{self.alias.name}{self.operator.token_type}{self.values}"
5982

6083

6184
classKeyword:
Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
11
from __future__importannotations
22

33
fromdataclassesimportdataclass,field
4-
fromtypingimportUnion
4+
fromtypingimportOptional,Union
55

6-
fromapp.translator.core.models.fieldimportField,FieldValue,Keyword
6+
fromapp.translator.core.models.fieldimportAlias,Field,FieldValue,Keyword
77
fromapp.translator.core.models.identifierimportIdentifier
88

99

1010
@dataclass
1111
classFunction:
1212
name:str=None
13-
args:list[Union[Field,FieldValue,Keyword,Function,Identifier]]=field(default_factory=list)
14-
as_clause:str=None
15-
by_clauses:list[Field]=field(default_factory=list)
13+
args:list[Union[Alias,Field,FieldValue,Keyword,Function,Identifier,str,bool]]=field(default_factory=list)
14+
alias:Optional[Alias]=None
1615
raw:str=""
1716

1817

@@ -21,9 +20,11 @@ class ParsedFunctions:
2120
functions:list[Function]=field(default_factory=list)
2221
not_supported:list[str]=field(default_factory=list)
2322
invalid:list[str]=field(default_factory=list)
23+
aliases:dict[str,Function]=field(default_factory=dict)
2424

2525

2626
@dataclass
2727
classRenderedFunctions:
28+
rendered_prefix:str=""
2829
rendered:str=""
2930
not_supported:list[str]=field(default_factory=list)
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
fromdataclassesimportdataclass
2+
fromtypingimportOptional
3+
4+
fromapp.translator.core.custom_types.functionsimportFunctionType
5+
fromapp.translator.core.models.fieldimportField
6+
fromapp.translator.core.models.functions.baseimportFunction
7+
fromapp.translator.tools.custom_enumimportCustomEnum
8+
9+
10+
classSpanType(CustomEnum):
11+
days="days"
12+
hours="hours"
13+
minutes="minutes"
14+
15+
16+
@dataclass
17+
classSpan:
18+
value:str="1"
19+
type_:str=SpanType.days
20+
21+
22+
@dataclass
23+
classBinFunction(Function):
24+
name:str=FunctionType.bin
25+
span:Optional[Span]=None
26+
field:Optional[Field]=None
27+
bins:Optional[int]=None

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22
fromtypingimportUnion
33

44
fromapp.translator.core.custom_types.functionsimportFunctionType
5-
fromapp.translator.core.models.fieldimportField
5+
fromapp.translator.core.models.fieldimportAlias,Field
66
fromapp.translator.core.models.functions.baseimportFunction
77
fromapp.translator.core.models.identifierimportIdentifier
88

99

1010
@dataclass
1111
classEvalArg:
12-
field_:Field=None
12+
field_:Union[Alias,Field]=None
1313
expression:list[Union[Field,Function,Identifier,int,float,str]]=field(default_factory=list)
1414

1515

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
fromdataclassesimportField,dataclass,field
2+
fromtypingimportUnion
3+
4+
fromapp.translator.core.custom_types.functionsimportFunctionType
5+
fromapp.translator.core.models.fieldimportAlias
6+
fromapp.translator.core.models.functions.baseimportFunction
7+
8+
9+
@dataclass
10+
classGroupByFunction(Function):
11+
name:str=FunctionType.stats
12+
args:list[Function]=field(default_factory=list)
13+
by_clauses:list[Union[Alias,Field]]=field(default_factory=list)
14+
filter_:Function=None

‎uncoder-core/app/translator/core/models/functions/rename.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
fromdataclassesimportdataclass
22

33
fromapp.translator.core.custom_types.functionsimportFunctionType
4-
fromapp.translator.core.models.fieldimportField
4+
fromapp.translator.core.models.fieldimportAlias,Field
55
fromapp.translator.core.models.functions.baseimportFunction
66

77

88
@dataclass
99
classRenameArg:
1010
field_:Field=None
11-
alias:str=None
11+
alias:Alias=None
1212

1313

1414
@dataclass

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp