Skip to content

Commit 6a5d631

Browse files
committed
gis-9121 fix sentinel one power query contains modifier
1 parent 3e2c071 commit 6a5d631

File tree

1 file changed

+102
-0
lines changed

1 file changed

+102
-0
lines changed
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
from typing import Union
2+
3+
from app.translator.const import DEFAULT_VALUE_TYPE
4+
from app.translator.core.custom_types.values import ValueType
5+
from app.translator.core.models.platform_details import PlatformDetails
6+
from app.translator.core.render import BaseFieldValueRender, PlatformQueryRender
7+
from app.translator.core.str_value_manager import StrValueManager
8+
from app.translator.managers import render_manager
9+
from app.translator.platforms.sentinel_one.const import sentinel_one_power_query_details
10+
from app.translator.platforms.sentinel_one.mapping import (
11+
SentinelOnePowerQueryMappings,
12+
sentinel_one_power_query_query_mappings,
13+
)
14+
from app.translator.platforms.sentinel_one.str_value_manager import sentinel_one_power_query_str_value_manager
15+
16+
17+
class SentinelOnePowerQueryFieldValue(BaseFieldValueRender):
18+
details: PlatformDetails = sentinel_one_power_query_details
19+
str_value_manager: StrValueManager = sentinel_one_power_query_str_value_manager
20+
list_token = ", "
21+
22+
@staticmethod
23+
def _wrap_str_value(value: str) -> str:
24+
return f'"{value}"'
25+
26+
def equal_modifier(self, field: str, value: DEFAULT_VALUE_TYPE) -> str:
27+
if isinstance(value, list):
28+
values = self.list_token.join(
29+
self._pre_process_value(field, v, value_type=ValueType.value, wrap_str=True) for v in value
30+
)
31+
return f"{field} in ({values})"
32+
value = self._pre_process_value(field, value, value_type=ValueType.value, wrap_str=True)
33+
return f"{field} = {value}"
34+
35+
def less_modifier(self, field: str, value: Union[int, str]) -> str:
36+
value = self._pre_process_value(field, value, value_type=ValueType.value, wrap_str=True)
37+
return f"{field} < {value}"
38+
39+
def less_or_equal_modifier(self, field: str, value: Union[int, str]) -> str:
40+
value = self._pre_process_value(field, value, value_type=ValueType.value, wrap_str=True)
41+
return f"{field} <= {value}"
42+
43+
def greater_modifier(self, field: str, value: Union[int, str]) -> str:
44+
value = self._pre_process_value(field, value, value_type=ValueType.value, wrap_str=True)
45+
return f"{field} > {value}"
46+
47+
def greater_or_equal_modifier(self, field: str, value: Union[int, str]) -> str:
48+
value = self._pre_process_value(field, value, value_type=ValueType.value, wrap_str=True)
49+
return f"{field} >= {value}"
50+
51+
def not_equal_modifier(self, field: str, value: DEFAULT_VALUE_TYPE) -> str:
52+
if isinstance(value, list):
53+
values = self.list_token.join(
54+
self._pre_process_value(field, v, value_type=ValueType.value, wrap_str=True, wrap_int=True)
55+
for v in value
56+
)
57+
return f"{field} != ({values})"
58+
value = self._pre_process_value(field, value, value_type=ValueType.value, wrap_str=True, wrap_int=True)
59+
return f"{field} != {value}"
60+
61+
def contains_modifier(self, field: str, value: DEFAULT_VALUE_TYPE) -> str:
62+
if isinstance(value, list):
63+
values = self.list_token.join(
64+
self._pre_process_value(field, v, value_type=ValueType.value, wrap_str=True, wrap_int=True)
65+
for v in value
66+
)
67+
return f"{field} contains ({values})"
68+
value = self._pre_process_value(field, value, value_type=ValueType.value, wrap_str=True, wrap_int=True)
69+
return f"{field} contains {value}"
70+
71+
def endswith_modifier(self, field: str, value: DEFAULT_VALUE_TYPE) -> str:
72+
return self.contains_modifier(field, value)
73+
74+
def startswith_modifier(self, field: str, value: DEFAULT_VALUE_TYPE) -> str:
75+
return self.contains_modifier(field, value)
76+
77+
def regex_modifier(self, field: str, value: DEFAULT_VALUE_TYPE) -> str:
78+
if isinstance(value, list):
79+
values = self.list_token.join(
80+
self._pre_process_value(field, v, value_type=ValueType.regex_value, wrap_str=True, wrap_int=True)
81+
for v in value
82+
)
83+
return f"{field} matches ({values})"
84+
value = self._pre_process_value(field, value, value_type=ValueType.regex_value, wrap_str=True, wrap_int=True)
85+
return f"{field} matches {value}"
86+
87+
def is_none(self, field: str, value: DEFAULT_VALUE_TYPE) -> str: # noqa: ARG002
88+
return f'not ({field} matches "\\.*")'
89+
90+
def is_not_none(self, field: str, value: DEFAULT_VALUE_TYPE) -> str: # noqa: ARG002
91+
return f'{field} matches "\\.*"'
92+
93+
94+
@render_manager.register
95+
class SentinelOnePowerQueryRender(PlatformQueryRender):
96+
details: PlatformDetails = sentinel_one_power_query_details
97+
mappings: SentinelOnePowerQueryMappings = sentinel_one_power_query_query_mappings
98+
or_token = "or"
99+
and_token = "and"
100+
not_token = "not"
101+
comment_symbol = "//"
102+
field_value_render = SentinelOnePowerQueryFieldValue(or_token=or_token)

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