splight-lib 4.3.6__tar.gz → 4.3.8__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {splight_lib-4.3.6 → splight_lib-4.3.8}/PKG-INFO +1 -1
- {splight_lib-4.3.6 → splight_lib-4.3.8}/pyproject.toml +1 -1
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/models/function.py +79 -16
- {splight_lib-4.3.6 → splight_lib-4.3.8}/LICENSE.txt +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/README.md +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/__init__.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/abstract/__init__.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/abstract/client.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/auth/__init__.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/auth/exceptions.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/auth/mac_auth.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/auth/token.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/client/__init__.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/client/communication/__init__.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/client/communication/abstract.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/client/communication/classmap.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/client/communication/exceptions.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/client/communication/local_client.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/client/communication/remote_client.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/client/database/__init__.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/client/database/abstract.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/client/database/builder.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/client/database/classmap.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/client/database/local_client.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/client/database/remote_client.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/client/datalake/__init__.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/client/datalake/abstract.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/client/datalake/builder.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/client/datalake/local_client.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/client/datalake/remote_client.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/client/exceptions.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/client/file_handler.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/client/filter.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/client/hub/__init__.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/client/hub/abstract.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/client/hub/client.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/client/tests/test_communication.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/client/tests/test_database.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/client/tests/test_datalake.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/client/tests/test_hub.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/communication/__init__.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/communication/event_handler.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/communication/tests/test_event_handler.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/component/__init__.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/component/abstract.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/component/exceptions.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/component/spec.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/component/tests/test_abstract.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/component/tests/test_spec.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/constants.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/encryption.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/execution.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/logging/__init__.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/logging/_internal.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/logging/component.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/logging/constants.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/logging/logging.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/logging/tests/test_logging.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/models/__init__.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/models/alert.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/models/asset.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/models/attribute.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/models/base.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/models/communication.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/models/component.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/models/dashboard.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/models/data_address.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/models/event.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/models/exceptions.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/models/file.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/models/generic.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/models/hub.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/models/metadata.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/models/native.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/models/pipeline.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/models/secret.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/models/tests/models.json +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/models/tests/test_component_object_instance.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/models/tests/test_database_model.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/models/tests/test_metadata.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/models/tests/test_models.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/restclient/__init__.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/restclient/client.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/restclient/exceptions.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/restclient/tests/test_restclient.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/restclient/types.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/settings.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/testing/__init__.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/tests/FakeProc.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/tests/test_encryption.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/tests/test_execution.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/utils/__init__.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/utils/custom_model.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/utils/hub.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/version.py +0 -0
- {splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/webhook.py +0 -0
|
@@ -28,6 +28,7 @@ class QueryFilter(TypedDict):
|
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
class GroupUnit(LowercaseStrEnum):
|
|
31
|
+
EMPTY = ""
|
|
31
32
|
SECOND = auto()
|
|
32
33
|
MINUTE = auto()
|
|
33
34
|
HOUR = auto()
|
|
@@ -45,25 +46,35 @@ class GroupCriteria(LowercaseStrEnum):
|
|
|
45
46
|
|
|
46
47
|
|
|
47
48
|
class FunctionItem(BaseModel):
|
|
49
|
+
# NOTE: the defaults are inconsistent because
|
|
50
|
+
# we never made a clear contract between the lib, api and frontend
|
|
51
|
+
|
|
48
52
|
id: Optional[str] = Field(None, max_length=100)
|
|
53
|
+
|
|
49
54
|
ref_id: str
|
|
50
55
|
type: FunctionItemType = FunctionItemType.QUERY
|
|
56
|
+
|
|
51
57
|
expression: str = ""
|
|
58
|
+
expression_plain: str = ""
|
|
59
|
+
|
|
52
60
|
query_filter_asset: Optional[QueryFilter] = None
|
|
53
61
|
query_filter_attribute: Optional[QueryFilter] = None
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
62
|
+
|
|
63
|
+
query_group_function: GroupCriteria = GroupCriteria.EMPTY
|
|
64
|
+
query_group_unit: GroupUnit = GroupUnit.EMPTY
|
|
65
|
+
|
|
66
|
+
query_sort_field: str = ""
|
|
67
|
+
query_sort_direction: int = -1
|
|
68
|
+
|
|
69
|
+
# NOTE: why is this None as default but not "" like 'expression_plain'
|
|
59
70
|
query_plain: Optional[str] = None
|
|
60
71
|
|
|
61
72
|
@model_validator(mode="after")
|
|
62
73
|
def validate_expression(self):
|
|
63
|
-
if self.
|
|
64
|
-
if self.
|
|
74
|
+
if self.type == FunctionItemType.EXPRESSION:
|
|
75
|
+
if self.expression is None:
|
|
65
76
|
raise ValidationError(
|
|
66
|
-
"
|
|
77
|
+
f"Parameter 'expression' is required for expression type function items"
|
|
67
78
|
)
|
|
68
79
|
self.expression_plain = (
|
|
69
80
|
self._get_expression_plain()
|
|
@@ -74,11 +85,12 @@ class FunctionItem(BaseModel):
|
|
|
74
85
|
|
|
75
86
|
@model_validator(mode="after")
|
|
76
87
|
def validate_query(self):
|
|
77
|
-
if self.
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
88
|
+
if self.type == FunctionItemType.QUERY:
|
|
89
|
+
for attr in [self.query_filter_asset, self.query_filter_attribute]:
|
|
90
|
+
if attr is None:
|
|
91
|
+
raise ValidationError(
|
|
92
|
+
f"Parameter '{attr}' is required for query type functions items"
|
|
93
|
+
)
|
|
82
94
|
self.query_plain = (
|
|
83
95
|
self._get_query_plain()
|
|
84
96
|
if self.query_plain is None
|
|
@@ -103,8 +115,35 @@ class FunctionItem(BaseModel):
|
|
|
103
115
|
"asset": self.query_filter_asset["id"],
|
|
104
116
|
"attribute": self.query_filter_attribute["id"],
|
|
105
117
|
}
|
|
106
|
-
}
|
|
118
|
+
},
|
|
107
119
|
]
|
|
120
|
+
# NOTE: The frontend only sets the rest of the query
|
|
121
|
+
# if both group_unit and group_function are set
|
|
122
|
+
if self.query_group_unit and self.query_group_function:
|
|
123
|
+
query_plain.extend(
|
|
124
|
+
[
|
|
125
|
+
{
|
|
126
|
+
"$addFields": {
|
|
127
|
+
"timestamp": {
|
|
128
|
+
"$dateTrunc": {
|
|
129
|
+
"date": "$timestamp",
|
|
130
|
+
"unit": self.query_group_unit,
|
|
131
|
+
"binSize": 1,
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
"$group": {
|
|
138
|
+
"_id": "$timestamp",
|
|
139
|
+
"value": {
|
|
140
|
+
f"${self.query_group_function}": "$value"
|
|
141
|
+
},
|
|
142
|
+
"timestamp": {"$last": "$timestamp"},
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
]
|
|
146
|
+
)
|
|
108
147
|
return json.dumps(query_plain)
|
|
109
148
|
|
|
110
149
|
|
|
@@ -121,8 +160,8 @@ class Function(SplightDatabaseBaseModel):
|
|
|
121
160
|
|
|
122
161
|
type: Literal["cron", "rate"]
|
|
123
162
|
target_variable: str
|
|
124
|
-
target_asset:
|
|
125
|
-
target_attribute:
|
|
163
|
+
target_asset: QueryFilter # NOTE: optional in API
|
|
164
|
+
target_attribute: QueryFilter # NOTE: optional in API
|
|
126
165
|
|
|
127
166
|
cron_minutes: Optional[str] = None
|
|
128
167
|
cron_hours: Optional[str] = None
|
|
@@ -133,3 +172,27 @@ class Function(SplightDatabaseBaseModel):
|
|
|
133
172
|
|
|
134
173
|
rate_value: Optional[PositiveInt] = None
|
|
135
174
|
rate_unit: Optional[Literal["day", "hour", "minute"]] = None
|
|
175
|
+
|
|
176
|
+
@model_validator(mode="after")
|
|
177
|
+
def validate_type(self):
|
|
178
|
+
if self.type == "cron":
|
|
179
|
+
for attr in [
|
|
180
|
+
self.cron_year,
|
|
181
|
+
self.cron_month,
|
|
182
|
+
self.cron_hours,
|
|
183
|
+
self.cron_minutes,
|
|
184
|
+
self.cron_dow,
|
|
185
|
+
self.cron_dom,
|
|
186
|
+
]:
|
|
187
|
+
if attr is None:
|
|
188
|
+
raise ValidationError(
|
|
189
|
+
f"Parameter {attr} is required for '{self.type}' type functions"
|
|
190
|
+
)
|
|
191
|
+
if self.type == "rate":
|
|
192
|
+
for attr in [self.rate_value, self.rate_unit]:
|
|
193
|
+
if attr is None:
|
|
194
|
+
raise ValidationError(
|
|
195
|
+
f"Parameter {attr} is required for '{self.type}' type functions"
|
|
196
|
+
)
|
|
197
|
+
|
|
198
|
+
return self
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/communication/tests/test_event_handler.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{splight_lib-4.3.6 → splight_lib-4.3.8}/splight_lib/models/tests/test_component_object_instance.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|