splight-lib 4.3.4__tar.gz → 4.3.6__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.4 → splight_lib-4.3.6}/PKG-INFO +1 -1
- {splight_lib-4.3.4 → splight_lib-4.3.6}/pyproject.toml +1 -1
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/models/__init__.py +2 -1
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/models/base.py +5 -4
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/models/component.py +2 -9
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/models/data_address.py +5 -3
- splight_lib-4.3.6/splight_lib/models/function.py +135 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/models/native.py +4 -1
- splight_lib-4.3.4/splight_lib/models/function.py +0 -68
- {splight_lib-4.3.4 → splight_lib-4.3.6}/LICENSE.txt +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/README.md +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/__init__.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/abstract/__init__.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/abstract/client.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/auth/__init__.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/auth/exceptions.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/auth/mac_auth.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/auth/token.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/client/__init__.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/client/communication/__init__.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/client/communication/abstract.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/client/communication/classmap.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/client/communication/exceptions.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/client/communication/local_client.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/client/communication/remote_client.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/client/database/__init__.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/client/database/abstract.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/client/database/builder.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/client/database/classmap.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/client/database/local_client.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/client/database/remote_client.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/client/datalake/__init__.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/client/datalake/abstract.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/client/datalake/builder.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/client/datalake/local_client.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/client/datalake/remote_client.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/client/exceptions.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/client/file_handler.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/client/filter.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/client/hub/__init__.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/client/hub/abstract.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/client/hub/client.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/client/tests/test_communication.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/client/tests/test_database.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/client/tests/test_datalake.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/client/tests/test_hub.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/communication/__init__.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/communication/event_handler.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/communication/tests/test_event_handler.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/component/__init__.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/component/abstract.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/component/exceptions.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/component/spec.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/component/tests/test_abstract.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/component/tests/test_spec.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/constants.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/encryption.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/execution.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/logging/__init__.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/logging/_internal.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/logging/component.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/logging/constants.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/logging/logging.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/logging/tests/test_logging.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/models/alert.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/models/asset.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/models/attribute.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/models/communication.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/models/dashboard.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/models/event.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/models/exceptions.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/models/file.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/models/generic.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/models/hub.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/models/metadata.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/models/pipeline.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/models/secret.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/models/tests/models.json +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/models/tests/test_component_object_instance.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/models/tests/test_database_model.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/models/tests/test_metadata.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/models/tests/test_models.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/restclient/__init__.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/restclient/client.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/restclient/exceptions.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/restclient/tests/test_restclient.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/restclient/types.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/settings.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/testing/__init__.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/tests/FakeProc.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/tests/test_encryption.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/tests/test_execution.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/utils/__init__.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/utils/custom_model.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/utils/hub.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/version.py +0 -0
- {splight_lib-4.3.4 → splight_lib-4.3.6}/splight_lib/webhook.py +0 -0
|
@@ -18,7 +18,7 @@ from splight_lib.models.dashboard import (
|
|
|
18
18
|
Tab,
|
|
19
19
|
)
|
|
20
20
|
from splight_lib.models.file import File
|
|
21
|
-
from splight_lib.models.function import Function, FunctionItem
|
|
21
|
+
from splight_lib.models.function import Function, FunctionItem, QueryFilter
|
|
22
22
|
from splight_lib.models.hub import HubComponent
|
|
23
23
|
from splight_lib.models.metadata import Metadata
|
|
24
24
|
from splight_lib.models.native import Boolean, Number, String
|
|
@@ -41,6 +41,7 @@ __all__ = [
|
|
|
41
41
|
Filter,
|
|
42
42
|
Function,
|
|
43
43
|
FunctionItem,
|
|
44
|
+
QueryFilter,
|
|
44
45
|
HubComponent,
|
|
45
46
|
Metadata,
|
|
46
47
|
Number,
|
|
@@ -75,8 +75,8 @@ class SplightDatalakeBaseModel(BaseModel):
|
|
|
75
75
|
timestamp: datetime = Field(
|
|
76
76
|
default_factory=lambda: datetime.now(timezone.utc)
|
|
77
77
|
)
|
|
78
|
-
instance_id:
|
|
79
|
-
instance_type:
|
|
78
|
+
instance_id: str = ""
|
|
79
|
+
instance_type: str = ""
|
|
80
80
|
_collection_name: ClassVar[str] = "DatalakeModel"
|
|
81
81
|
_dl_client: AbstractDatalakeClient = PrivateAttr()
|
|
82
82
|
|
|
@@ -119,9 +119,10 @@ class SplightDatalakeBaseModel(BaseModel):
|
|
|
119
119
|
|
|
120
120
|
def save(self):
|
|
121
121
|
dl_client = self.__get_datalake_client()
|
|
122
|
+
instance_dict = json.loads(self.model_dump_json())
|
|
122
123
|
dl_client.save(
|
|
123
124
|
collection=self._collection_name,
|
|
124
|
-
instances=
|
|
125
|
+
instances=instance_dict,
|
|
125
126
|
)
|
|
126
127
|
|
|
127
128
|
async def async_save(self):
|
|
@@ -129,7 +130,7 @@ class SplightDatalakeBaseModel(BaseModel):
|
|
|
129
130
|
|
|
130
131
|
await dl_client.async_save(
|
|
131
132
|
collection=self._collection_name,
|
|
132
|
-
instances=json.loads(self.
|
|
133
|
+
instances=json.loads(self.model_dump_json()),
|
|
133
134
|
)
|
|
134
135
|
|
|
135
136
|
@classmethod
|
|
@@ -89,15 +89,8 @@ class DataAddress(Parameter):
|
|
|
89
89
|
return value
|
|
90
90
|
|
|
91
91
|
|
|
92
|
-
class DataAddressValue(BaseModel):
|
|
93
|
-
asset: str
|
|
94
|
-
attribute: str
|
|
95
|
-
|
|
96
|
-
model_config = ConfigDict(extra="ignore")
|
|
97
|
-
|
|
98
|
-
|
|
99
92
|
class InputDataAddress(DataAddress):
|
|
100
|
-
value: Optional[Union[List[
|
|
93
|
+
value: Optional[Union[List[DLDataAddress], DLDataAddress]] = None
|
|
101
94
|
|
|
102
95
|
|
|
103
96
|
class OutputParameter(BaseModel):
|
|
@@ -283,7 +276,7 @@ def get_field_value(field: Union[InputParameter, List[InputParameter]]):
|
|
|
283
276
|
value = field.value.copy()
|
|
284
277
|
value = value if multiple else [value]
|
|
285
278
|
for item in value:
|
|
286
|
-
item.
|
|
279
|
+
item.type = field.value_type
|
|
287
280
|
|
|
288
281
|
value = [model_class.model_validate(item) for item in value]
|
|
289
282
|
value = value[0] if not multiple else value
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
from typing import List
|
|
1
|
+
from typing import List, Optional
|
|
2
2
|
|
|
3
3
|
import pandas as pd
|
|
4
|
-
from pydantic import BaseModel
|
|
4
|
+
from pydantic import BaseModel, ConfigDict
|
|
5
5
|
|
|
6
6
|
from splight_lib.models.native import Boolean, NativeOutput, Number, String
|
|
7
7
|
|
|
@@ -9,7 +9,7 @@ from splight_lib.models.native import Boolean, NativeOutput, Number, String
|
|
|
9
9
|
class DataAddresses(BaseModel):
|
|
10
10
|
asset: str
|
|
11
11
|
attribute: str
|
|
12
|
-
type: str
|
|
12
|
+
type: Optional[str] = None
|
|
13
13
|
|
|
14
14
|
_type_map = {
|
|
15
15
|
"Number": Number,
|
|
@@ -17,6 +17,8 @@ class DataAddresses(BaseModel):
|
|
|
17
17
|
"Boolean": Boolean,
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
+
model_config = ConfigDict(extra="ignore")
|
|
21
|
+
|
|
20
22
|
def get(self, **params) -> List["NativeOutput"]:
|
|
21
23
|
params["asset"] = self.asset
|
|
22
24
|
params["attribute"] = self.attribute
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import json
|
|
2
|
+
import re
|
|
3
|
+
from enum import auto
|
|
4
|
+
from typing import List, Literal, Optional
|
|
5
|
+
|
|
6
|
+
from pydantic import (
|
|
7
|
+
BaseModel,
|
|
8
|
+
Field,
|
|
9
|
+
PositiveInt,
|
|
10
|
+
ValidationError,
|
|
11
|
+
model_validator,
|
|
12
|
+
)
|
|
13
|
+
from strenum import LowercaseStrEnum, UppercaseStrEnum
|
|
14
|
+
from typing_extensions import TypedDict
|
|
15
|
+
|
|
16
|
+
from splight_lib.constants import DESCRIPTION_MAX_LENGTH
|
|
17
|
+
from splight_lib.models.base import SplightDatabaseBaseModel
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class FunctionItemType(UppercaseStrEnum):
|
|
21
|
+
EXPRESSION = auto()
|
|
22
|
+
QUERY = auto()
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class QueryFilter(TypedDict):
|
|
26
|
+
id: str
|
|
27
|
+
name: str
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class GroupUnit(LowercaseStrEnum):
|
|
31
|
+
SECOND = auto()
|
|
32
|
+
MINUTE = auto()
|
|
33
|
+
HOUR = auto()
|
|
34
|
+
DAY = auto()
|
|
35
|
+
MONTH = auto()
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class GroupCriteria(LowercaseStrEnum):
|
|
39
|
+
EMPTY = ""
|
|
40
|
+
AVG = auto()
|
|
41
|
+
SUM = auto()
|
|
42
|
+
MIN = auto()
|
|
43
|
+
MAX = auto()
|
|
44
|
+
LAST = auto()
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class FunctionItem(BaseModel):
|
|
48
|
+
id: Optional[str] = Field(None, max_length=100)
|
|
49
|
+
ref_id: str
|
|
50
|
+
type: FunctionItemType = FunctionItemType.QUERY
|
|
51
|
+
expression: str = ""
|
|
52
|
+
query_filter_asset: Optional[QueryFilter] = None
|
|
53
|
+
query_filter_attribute: Optional[QueryFilter] = None
|
|
54
|
+
expression_plain: Optional[str] = None
|
|
55
|
+
query_group_unit: Optional[GroupUnit] = None
|
|
56
|
+
query_group_function: Optional[GroupCriteria] = None
|
|
57
|
+
query_sort_field: Optional[str] = None
|
|
58
|
+
query_sort_direction: Optional[int] = None
|
|
59
|
+
query_plain: Optional[str] = None
|
|
60
|
+
|
|
61
|
+
@model_validator(mode="after")
|
|
62
|
+
def validate_expression(self):
|
|
63
|
+
if self.expression:
|
|
64
|
+
if self.type != FunctionItemType.EXPRESSION:
|
|
65
|
+
raise ValidationError(
|
|
66
|
+
"type must be EXPRESSION if a expression is passed."
|
|
67
|
+
)
|
|
68
|
+
self.expression_plain = (
|
|
69
|
+
self._get_expression_plain()
|
|
70
|
+
if self.expression_plain is None
|
|
71
|
+
else self.expression_plain
|
|
72
|
+
)
|
|
73
|
+
return self
|
|
74
|
+
|
|
75
|
+
@model_validator(mode="after")
|
|
76
|
+
def validate_query(self):
|
|
77
|
+
if self.query_filter_asset is not None:
|
|
78
|
+
if self.type != FunctionItemType.QUERY:
|
|
79
|
+
raise ValidationError(
|
|
80
|
+
"type must be QUERY if a query_filter_asset is passed."
|
|
81
|
+
)
|
|
82
|
+
self.query_plain = (
|
|
83
|
+
self._get_query_plain()
|
|
84
|
+
if self.query_plain is None
|
|
85
|
+
else self.query_plain
|
|
86
|
+
)
|
|
87
|
+
return self
|
|
88
|
+
|
|
89
|
+
def _get_expression_plain(self):
|
|
90
|
+
pattern = r"\$\w+"
|
|
91
|
+
args = re.findall(pattern, self.expression)
|
|
92
|
+
str_args = ", ".join(args)
|
|
93
|
+
body = f"function ({str_args}) {{ return {self.expression} }}"
|
|
94
|
+
expression_plain = {
|
|
95
|
+
"$function": {"body": body, "args": args, "lang": "js"}
|
|
96
|
+
}
|
|
97
|
+
return json.dumps(expression_plain)
|
|
98
|
+
|
|
99
|
+
def _get_query_plain(self):
|
|
100
|
+
query_plain = [
|
|
101
|
+
{
|
|
102
|
+
"$match": {
|
|
103
|
+
"asset": self.query_filter_asset["id"],
|
|
104
|
+
"attribute": self.query_filter_attribute["id"],
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
]
|
|
108
|
+
return json.dumps(query_plain)
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
class Function(SplightDatabaseBaseModel):
|
|
112
|
+
id: Optional[str] = Field(None, max_length=100)
|
|
113
|
+
name: str
|
|
114
|
+
description: Optional[str] = Field(
|
|
115
|
+
default=None, max_length=DESCRIPTION_MAX_LENGTH
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
active: bool = True
|
|
119
|
+
time_window: int = 5 * 60
|
|
120
|
+
function_items: List[FunctionItem] = []
|
|
121
|
+
|
|
122
|
+
type: Literal["cron", "rate"]
|
|
123
|
+
target_variable: str
|
|
124
|
+
target_asset: Optional[QueryFilter] = None
|
|
125
|
+
target_attribute: Optional[QueryFilter] = None
|
|
126
|
+
|
|
127
|
+
cron_minutes: Optional[str] = None
|
|
128
|
+
cron_hours: Optional[str] = None
|
|
129
|
+
cron_dom: Optional[str] = None
|
|
130
|
+
cron_month: Optional[str] = None
|
|
131
|
+
cron_dow: Optional[str] = None
|
|
132
|
+
cron_year: Optional[str] = None
|
|
133
|
+
|
|
134
|
+
rate_value: Optional[PositiveInt] = None
|
|
135
|
+
rate_unit: Optional[Literal["day", "hour", "minute"]] = None
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import ClassVar, Dict, List, Optional, Union
|
|
1
|
+
from typing import ClassVar, Dict, List, Literal, Optional, Union
|
|
2
2
|
|
|
3
3
|
import pandas as pd
|
|
4
4
|
from pydantic import field_validator
|
|
@@ -42,14 +42,17 @@ class NativeOutput(SplightDatalakeBaseModel):
|
|
|
42
42
|
|
|
43
43
|
class Number(NativeOutput):
|
|
44
44
|
value: float
|
|
45
|
+
output_format: Literal["Number"] = "Number"
|
|
45
46
|
_output_format: ClassVar[str] = "Number"
|
|
46
47
|
|
|
47
48
|
|
|
48
49
|
class String(NativeOutput):
|
|
49
50
|
value: str
|
|
51
|
+
output_format: Literal["String"] = "String"
|
|
50
52
|
_output_format: ClassVar[str] = "String"
|
|
51
53
|
|
|
52
54
|
|
|
53
55
|
class Boolean(NativeOutput):
|
|
54
56
|
value: bool
|
|
57
|
+
output_format: Literal["Boolean"] = "Boolean"
|
|
55
58
|
_output_format: ClassVar[str] = "Boolean"
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
from enum import auto
|
|
2
|
-
from typing import List, Optional
|
|
3
|
-
|
|
4
|
-
from pydantic import BaseModel, Field
|
|
5
|
-
from strenum import LowercaseStrEnum, UppercaseStrEnum
|
|
6
|
-
from typing_extensions import TypedDict
|
|
7
|
-
|
|
8
|
-
from splight_lib.constants import DESCRIPTION_MAX_LENGTH
|
|
9
|
-
from splight_lib.models.base import SplightDatabaseBaseModel
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
class FunctionItemType(UppercaseStrEnum):
|
|
13
|
-
EXPRESSION = auto()
|
|
14
|
-
QUERY = auto()
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
class QueryFilter(TypedDict):
|
|
18
|
-
id: str
|
|
19
|
-
name: str
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
class GroupUnit(LowercaseStrEnum):
|
|
23
|
-
SECOND = auto()
|
|
24
|
-
MINUTE = auto()
|
|
25
|
-
HOUR = auto()
|
|
26
|
-
DAY = auto()
|
|
27
|
-
MONTH = auto()
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
class GroupCriteria(LowercaseStrEnum):
|
|
31
|
-
EMPTY = ""
|
|
32
|
-
AVG = auto()
|
|
33
|
-
SUM = auto()
|
|
34
|
-
MIN = auto()
|
|
35
|
-
MAX = auto()
|
|
36
|
-
LAST = auto()
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
class FunctionItem(BaseModel):
|
|
40
|
-
id: Optional[str] = Field(None, max_length=100)
|
|
41
|
-
ref_id: str
|
|
42
|
-
type: FunctionItemType = FunctionItemType.QUERY
|
|
43
|
-
expression: str = ""
|
|
44
|
-
query_filter_asset: Optional[QueryFilter] = None
|
|
45
|
-
expression_plain: Optional[str] = None
|
|
46
|
-
expression_plain: Optional[str] = None
|
|
47
|
-
query_group_unint: Optional[GroupUnit] = None
|
|
48
|
-
query_group_function: Optional[GroupCriteria] = None
|
|
49
|
-
query_sort_field: Optional[str] = None
|
|
50
|
-
query_sort_direction: Optional[int] = None
|
|
51
|
-
query_plain: Optional[str] = None
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
class Function(SplightDatabaseBaseModel):
|
|
55
|
-
id: Optional[str] = Field(None, max_length=100)
|
|
56
|
-
name: str
|
|
57
|
-
description: Optional[str] = Field(
|
|
58
|
-
default=None, max_length=DESCRIPTION_MAX_LENGTH
|
|
59
|
-
)
|
|
60
|
-
|
|
61
|
-
active: bool = True
|
|
62
|
-
frequency: int = 60
|
|
63
|
-
time_window: int = 5 * 60
|
|
64
|
-
function_items: List[FunctionItem] = []
|
|
65
|
-
|
|
66
|
-
target_variable: str
|
|
67
|
-
target_asset: Optional[str] = Field(None, alias="target_asset_id")
|
|
68
|
-
target_attribute: Optional[str] = Field(None, alias="target_attribute_id")
|
|
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.4 → splight_lib-4.3.6}/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
|
{splight_lib-4.3.4 → splight_lib-4.3.6}/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
|