Skip to content

Commit b6330fd

Browse files
author
oleksandr.volha
committed
resolve conflicts
2 parents 4e38719 + 021ff84 commit b6330fd

File tree

25 files changed

+187
-78
lines changed

25 files changed

+187
-78
lines changed

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,4 +145,7 @@ def get_mitre_info(
145145
for technique in techniques or []:
146146
if technique_found := self.get_technique(technique_id=technique.lower()):
147147
techniques_list.append(technique_found)
148-
return MitreInfoContainer(tactics=tactics_list, techniques=techniques_list)
148+
return MitreInfoContainer(
149+
tactics=sorted(tactics_list, key=lambda x: x.name),
150+
techniques=sorted(techniques_list, key=lambda x: x.technique_id),
151+
)

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,10 @@ def parse_mitre_attack(self, tags: list[str]) -> MitreInfoContainer:
3737
if tag.startswith("attack."):
3838
tag = tag[7::]
3939
if tag.startswith("t"):
40-
if technique := self.mitre_config.get_technique(tag):
41-
parsed_techniques.append(technique)
42-
elif tactic := self.mitre_config.get_tactic(tag):
43-
parsed_tactics.append(tactic)
44-
return MitreInfoContainer(tactics=parsed_tactics, techniques=parsed_techniques)
40+
parsed_techniques.append(tag)
41+
else:
42+
parsed_tactics.append(tag)
43+
return self.mitre_config.get_mitre_info(tactics=parsed_tactics, techniques=parsed_techniques)
4544

4645

4746
class XMLRuleMixin:

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

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from dataclasses import dataclass, field
44
from typing import TYPE_CHECKING, Optional, Union
55

6-
from app.translator.core.models.query_tokens.field import Alias, Field
6+
from app.translator.core.models.query_tokens.field import Alias, BaseFieldsGetter, Field
77
from app.translator.core.models.query_tokens.field_field import FieldField
88
from app.translator.core.models.query_tokens.field_value import FieldValue
99
from app.translator.core.models.query_tokens.identifier import Identifier
@@ -14,14 +14,25 @@
1414

1515

1616
@dataclass
17-
class Function:
17+
class Function(BaseFieldsGetter):
1818
name: str = None
1919
args: list[
2020
Union[Alias, Field, FieldField, FieldValue, FunctionValue, Keyword, Function, Identifier, int, str, bool]
2121
] = field(default_factory=list)
2222
alias: Optional[Alias] = None
2323
raw: str = ""
2424

25+
@property
26+
def fields(self) -> list[Field]:
27+
fields = []
28+
for arg in self.args:
29+
if isinstance(arg, Field):
30+
fields.append(arg)
31+
elif isinstance(arg, (BaseFieldsGetter, Function)):
32+
fields.extend(arg.fields)
33+
34+
return fields
35+
2536

2637
@dataclass
2738
class ParsedFunctions:

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,7 @@ class BinFunction(Function):
1919
span: Optional[Span] = None
2020
field: Optional[Field] = None
2121
bins: Optional[int] = None
22+
23+
@property
24+
def fields(self) -> list[Field]:
25+
return [self.field] if self.field else []

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,16 @@ class EvalArg:
1717
class EvalFunction(Function):
1818
name: str = FunctionType.eval
1919
args: list[EvalArg] = None
20+
21+
@property
22+
def fields(self) -> list[Field]:
23+
fields = []
24+
for arg in self.args:
25+
if isinstance(arg.field_, Field):
26+
fields.append(arg.field_)
27+
for el in arg.expression:
28+
if isinstance(el, Field):
29+
fields.append(el)
30+
if isinstance(el, Function):
31+
fields.extend(el.fields)
32+
return fields
Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
from dataclasses import Field, dataclass, field
1+
from dataclasses import dataclass, field
22
from typing import Union
33

44
from app.translator.core.custom_types.functions import FunctionType
55
from app.translator.core.models.functions.base import Function
6-
from app.translator.core.models.query_tokens.field import Alias, PredefinedField
6+
from app.translator.core.models.query_tokens.field import Alias, Field, PredefinedField
77

88

99
@dataclass
@@ -12,3 +12,16 @@ class GroupByFunction(Function):
1212
args: list[Function] = field(default_factory=list)
1313
by_clauses: list[Union[Alias, Field, PredefinedField]] = field(default_factory=list)
1414
filter_: Function = None
15+
16+
@property
17+
def fields(self) -> list[Field]:
18+
fields = []
19+
for arg in self.args:
20+
fields.extend(arg.fields)
21+
for by_clause in self.by_clauses:
22+
if isinstance(by_clause, Field):
23+
fields.append(by_clause)
24+
if self.filter_:
25+
fields.extend(self.filter_.fields)
26+
27+
return fields

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

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@
44
from app.translator.core.custom_types.functions import FunctionType
55
from app.translator.core.models.functions.base import Function
66
from app.translator.core.models.query_container import TokenizedQueryContainer
7-
from app.translator.core.models.query_tokens.field import Alias, Field
7+
from app.translator.core.models.query_tokens.field import Alias, BaseFieldsGetter, Field
8+
from app.translator.core.models.query_tokens.field_field import FieldField
9+
from app.translator.core.models.query_tokens.field_value import FieldValue
10+
from app.translator.core.models.query_tokens.function_value import FunctionValue
811
from app.translator.core.models.query_tokens.identifier import Identifier
912
from app.translator.tools.custom_enum import CustomEnum
1013

@@ -22,5 +25,14 @@ class JoinFunction(Function):
2225
alias: Alias = None
2326
type_: str = JoinType.inner
2427
tokenized_query_container: TokenizedQueryContainer = None
25-
condition: list[Union[Alias, Field, Identifier]] = field(default_factory=list)
28+
condition: list[Union[FieldField, FieldValue, FunctionValue, Identifier]] = field(default_factory=list)
2629
preset_log_source_str: str = None
30+
31+
@property
32+
def fields(self) -> list[Field]:
33+
fields = []
34+
for arg in self.condition:
35+
if isinstance(arg, BaseFieldsGetter):
36+
fields.extend(arg.fields)
37+
38+
return fields

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,11 @@ class RenameArg:
1515
class RenameFunction(Function):
1616
name: str = FunctionType.rename
1717
args: list[RenameArg] = None
18+
19+
@property
20+
def fields(self) -> list[Field]:
21+
fields = []
22+
for arg in self.args:
23+
fields.append(arg.field_)
24+
25+
return fields

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,15 @@ class SortLimitFunction(Function):
2424
name: str = FunctionType.sort_limit
2525
args: list[SortArg] = None
2626
limit: str = None
27+
28+
@property
29+
def fields(self) -> list[Field]:
30+
fields = []
31+
for arg in self.args:
32+
if isinstance(arg.field, Field):
33+
fields.append(arg.field)
34+
35+
if arg.function:
36+
fields.extend(arg.function.fields)
37+
38+
return fields

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,15 @@
33
from app.translator.core.custom_types.functions import FunctionType
44
from app.translator.core.models.functions.base import Function
55
from app.translator.core.models.query_container import TokenizedQueryContainer
6+
from app.translator.core.models.query_tokens.field import Field
67

78

89
@dataclass
910
class UnionFunction(Function):
1011
name: str = FunctionType.union
1112
tokenized_query_container: TokenizedQueryContainer = None
1213
preset_log_source_str: str = None
14+
15+
@property
16+
def fields(self) -> list[Field]:
17+
return []

0 commit comments

Comments
 (0)