splight-lib 4.3.7__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.7 → splight_lib-4.3.8}/PKG-INFO +1 -1
- {splight_lib-4.3.7 → splight_lib-4.3.8}/pyproject.toml +1 -1
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/models/function.py +78 -16
- {splight_lib-4.3.7 → splight_lib-4.3.8}/LICENSE.txt +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/README.md +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/__init__.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/abstract/__init__.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/abstract/client.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/auth/__init__.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/auth/exceptions.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/auth/mac_auth.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/auth/token.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/client/__init__.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/client/communication/__init__.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/client/communication/abstract.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/client/communication/classmap.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/client/communication/exceptions.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/client/communication/local_client.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/client/communication/remote_client.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/client/database/__init__.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/client/database/abstract.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/client/database/builder.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/client/database/classmap.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/client/database/local_client.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/client/database/remote_client.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/client/datalake/__init__.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/client/datalake/abstract.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/client/datalake/builder.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/client/datalake/local_client.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/client/datalake/remote_client.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/client/exceptions.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/client/file_handler.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/client/filter.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/client/hub/__init__.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/client/hub/abstract.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/client/hub/client.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/client/tests/test_communication.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/client/tests/test_database.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/client/tests/test_datalake.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/client/tests/test_hub.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/communication/__init__.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/communication/event_handler.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/communication/tests/test_event_handler.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/component/__init__.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/component/abstract.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/component/exceptions.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/component/spec.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/component/tests/test_abstract.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/component/tests/test_spec.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/constants.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/encryption.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/execution.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/logging/__init__.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/logging/_internal.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/logging/component.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/logging/constants.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/logging/logging.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/logging/tests/test_logging.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/models/__init__.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/models/alert.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/models/asset.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/models/attribute.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/models/base.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/models/communication.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/models/component.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/models/dashboard.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/models/data_address.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/models/event.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/models/exceptions.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/models/file.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/models/generic.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/models/hub.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/models/metadata.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/models/native.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/models/pipeline.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/models/secret.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/models/tests/models.json +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/models/tests/test_component_object_instance.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/models/tests/test_database_model.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/models/tests/test_metadata.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/models/tests/test_models.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/restclient/__init__.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/restclient/client.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/restclient/exceptions.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/restclient/tests/test_restclient.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/restclient/types.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/settings.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/testing/__init__.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/tests/FakeProc.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/tests/test_encryption.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/tests/test_execution.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/utils/__init__.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/utils/custom_model.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/utils/hub.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/version.py +0 -0
- {splight_lib-4.3.7 → splight_lib-4.3.8}/splight_lib/webhook.py +0 -0
|
@@ -46,25 +46,35 @@ class GroupCriteria(LowercaseStrEnum):
|
|
|
46
46
|
|
|
47
47
|
|
|
48
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
|
+
|
|
49
52
|
id: Optional[str] = Field(None, max_length=100)
|
|
53
|
+
|
|
50
54
|
ref_id: str
|
|
51
55
|
type: FunctionItemType = FunctionItemType.QUERY
|
|
56
|
+
|
|
52
57
|
expression: str = ""
|
|
58
|
+
expression_plain: str = ""
|
|
59
|
+
|
|
53
60
|
query_filter_asset: Optional[QueryFilter] = None
|
|
54
61
|
query_filter_attribute: Optional[QueryFilter] = None
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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'
|
|
60
70
|
query_plain: Optional[str] = None
|
|
61
71
|
|
|
62
72
|
@model_validator(mode="after")
|
|
63
73
|
def validate_expression(self):
|
|
64
|
-
if self.
|
|
65
|
-
if self.
|
|
74
|
+
if self.type == FunctionItemType.EXPRESSION:
|
|
75
|
+
if self.expression is None:
|
|
66
76
|
raise ValidationError(
|
|
67
|
-
"
|
|
77
|
+
f"Parameter 'expression' is required for expression type function items"
|
|
68
78
|
)
|
|
69
79
|
self.expression_plain = (
|
|
70
80
|
self._get_expression_plain()
|
|
@@ -75,11 +85,12 @@ class FunctionItem(BaseModel):
|
|
|
75
85
|
|
|
76
86
|
@model_validator(mode="after")
|
|
77
87
|
def validate_query(self):
|
|
78
|
-
if self.
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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
|
+
)
|
|
83
94
|
self.query_plain = (
|
|
84
95
|
self._get_query_plain()
|
|
85
96
|
if self.query_plain is None
|
|
@@ -104,8 +115,35 @@ class FunctionItem(BaseModel):
|
|
|
104
115
|
"asset": self.query_filter_asset["id"],
|
|
105
116
|
"attribute": self.query_filter_attribute["id"],
|
|
106
117
|
}
|
|
107
|
-
}
|
|
118
|
+
},
|
|
108
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
|
+
)
|
|
109
147
|
return json.dumps(query_plain)
|
|
110
148
|
|
|
111
149
|
|
|
@@ -122,8 +160,8 @@ class Function(SplightDatabaseBaseModel):
|
|
|
122
160
|
|
|
123
161
|
type: Literal["cron", "rate"]
|
|
124
162
|
target_variable: str
|
|
125
|
-
target_asset:
|
|
126
|
-
target_attribute:
|
|
163
|
+
target_asset: QueryFilter # NOTE: optional in API
|
|
164
|
+
target_attribute: QueryFilter # NOTE: optional in API
|
|
127
165
|
|
|
128
166
|
cron_minutes: Optional[str] = None
|
|
129
167
|
cron_hours: Optional[str] = None
|
|
@@ -134,3 +172,27 @@ class Function(SplightDatabaseBaseModel):
|
|
|
134
172
|
|
|
135
173
|
rate_value: Optional[PositiveInt] = None
|
|
136
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.7 → 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.7 → 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
|