splight-lib 5.11.2.dev0__tar.gz → 5.11.4__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-5.11.2.dev0 → splight_lib-5.11.4}/PKG-INFO +1 -1
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/pyproject.toml +1 -1
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/component.py +55 -56
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/dashboard.py +1 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/datalake.py +33 -5
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/LICENSE.txt +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/README.md +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/__init__.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/abstract/__init__.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/abstract/client.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/auth/__init__.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/auth/exceptions.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/auth/mac_auth.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/auth/token.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/__init__.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/database/__init__.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/database/abstract.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/database/builder.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/database/classmap.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/database/remote_client.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/datalake/__init__.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/datalake/abstract.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/datalake/buffer.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/datalake/builder.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/datalake/constants.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/datalake/exceptions.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/datalake/remote_client.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/exceptions.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/file_handler.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/filter.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/hub/__init__.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/hub/abstract.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/hub/client.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/tests/test_database.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/tests/test_datalake.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/component/__init__.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/component/abstract.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/component/exceptions.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/component/spec.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/component/tests/test_abstract.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/component/tests/test_spec.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/conftest.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/constants.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/encryption.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/execution/__init__.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/execution/engine.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/execution/exceptions.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/execution/scheduling.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/execution/task.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/execution/tests/test_execution.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/execution/tests/test_scheduling.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/execution/trigger.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/logging/__init__.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/logging/_internal.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/logging/component.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/logging/constants.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/logging/logging.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/logging/tests/test_logging.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/__init__.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/actions.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/alert.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/asset.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/attribute.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/data_address.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/database_base.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/datalake_base.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/exceptions.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/file.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/function.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/generic.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/hub.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/hub_server.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/hub_solution.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/metadata.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/native.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/secret.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/server.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/solution.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/tag.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/tests/models.json +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/tests/test_component_object_instance.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/tests/test_database_model.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/tests/test_metadata.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/tests/test_models.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/variable_types.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/restclient/__init__.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/restclient/client.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/restclient/exceptions.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/restclient/tests/test_restclient.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/restclient/types.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/server/__init__.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/server/exceptions.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/server/server.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/settings.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/solution/__init__.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/solution/exceptions.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/solution/solution.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/stringcase.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/testing/__init__.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/tests/FakeProc.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/tests/asset_geometries.json +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/tests/test_api_contracts.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/tests/test_encryption.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/utils/__init__.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/utils/custom_model.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/utils/hub.py +0 -0
- {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/version.py +0 -0
|
@@ -2,7 +2,7 @@ import re
|
|
|
2
2
|
import warnings
|
|
3
3
|
from abc import ABC, abstractmethod
|
|
4
4
|
from enum import auto
|
|
5
|
-
from typing import Any, ClassVar,
|
|
5
|
+
from typing import Annotated, Any, ClassVar, Literal, Optional, Type
|
|
6
6
|
|
|
7
7
|
from pydantic import (
|
|
8
8
|
BaseModel,
|
|
@@ -63,17 +63,17 @@ class ValueType(PascalCaseStrEnum):
|
|
|
63
63
|
|
|
64
64
|
class Parameter(BaseModel):
|
|
65
65
|
name: str
|
|
66
|
-
description: str =
|
|
66
|
+
description: str = ""
|
|
67
67
|
type: str = "str"
|
|
68
68
|
required: bool = False
|
|
69
69
|
multiple: bool = False
|
|
70
70
|
sensitive: bool = False
|
|
71
|
-
choices:
|
|
72
|
-
depends_on:
|
|
71
|
+
choices: list[Any] | None = None
|
|
72
|
+
depends_on: str | None = None
|
|
73
73
|
|
|
74
74
|
|
|
75
75
|
class InputParameter(Parameter):
|
|
76
|
-
value:
|
|
76
|
+
value: Any | None = None
|
|
77
77
|
|
|
78
78
|
|
|
79
79
|
class DataAddress(Parameter):
|
|
@@ -91,7 +91,7 @@ class DataAddress(Parameter):
|
|
|
91
91
|
|
|
92
92
|
|
|
93
93
|
class InputDataAddress(DataAddress):
|
|
94
|
-
value:
|
|
94
|
+
value: list[DLDataAddress] | DLDataAddress | None = None
|
|
95
95
|
|
|
96
96
|
# NOTE: this is a patch.
|
|
97
97
|
# API returns [] as default for InputDataAddress with multiple set
|
|
@@ -100,52 +100,51 @@ class InputDataAddress(DataAddress):
|
|
|
100
100
|
def validate_file(self):
|
|
101
101
|
if self.multiple and self.value is None:
|
|
102
102
|
self.value = []
|
|
103
|
-
|
|
104
103
|
return self
|
|
105
104
|
|
|
106
105
|
|
|
107
106
|
class OutputParameter(BaseModel):
|
|
108
107
|
name: str
|
|
109
|
-
description: str =
|
|
108
|
+
description: str = ""
|
|
110
109
|
type: str
|
|
111
|
-
choices:
|
|
112
|
-
depends_on:
|
|
110
|
+
choices: list[Any] | None = None
|
|
111
|
+
depends_on: str | None = None
|
|
113
112
|
filterable: bool = False
|
|
114
113
|
|
|
115
114
|
|
|
116
115
|
class Output(BaseModel):
|
|
117
116
|
name: str
|
|
118
|
-
fields:
|
|
117
|
+
fields: list[OutputParameter]
|
|
119
118
|
|
|
120
119
|
|
|
121
120
|
class CustomType(BaseModel):
|
|
122
121
|
name: str
|
|
123
|
-
fields:
|
|
122
|
+
fields: list[Parameter]
|
|
124
123
|
|
|
125
|
-
_reserved_names: ClassVar[
|
|
124
|
+
_reserved_names: ClassVar[list[str]] = ["id", "name", "description"]
|
|
126
125
|
|
|
127
126
|
|
|
128
127
|
class Routine(BaseModel):
|
|
129
128
|
name: str
|
|
130
|
-
max_instances:
|
|
129
|
+
max_instances: int | None = None
|
|
131
130
|
|
|
132
|
-
config:
|
|
133
|
-
input:
|
|
134
|
-
output:
|
|
131
|
+
config: list[InputParameter] | None = []
|
|
132
|
+
input: list[DataAddress] = []
|
|
133
|
+
output: list[DataAddress] = []
|
|
135
134
|
|
|
136
|
-
_reserved_names: ClassVar[
|
|
135
|
+
_reserved_names: ClassVar[list[str]] = ["id", "name", "description"]
|
|
137
136
|
|
|
138
137
|
|
|
139
138
|
class Endpoint(BaseModel):
|
|
140
|
-
name:
|
|
141
|
-
port:
|
|
139
|
+
name: str | None = None
|
|
140
|
+
port: int | str
|
|
142
141
|
|
|
143
142
|
|
|
144
143
|
class SplightObject(SplightDatabaseBaseModel):
|
|
145
|
-
id:
|
|
144
|
+
id: str | None = None
|
|
146
145
|
name: str
|
|
147
|
-
component_id:
|
|
148
|
-
description: str =
|
|
146
|
+
component_id: str | None = None
|
|
147
|
+
description: str = ""
|
|
149
148
|
type: str
|
|
150
149
|
|
|
151
150
|
def save(self):
|
|
@@ -155,7 +154,7 @@ class SplightObject(SplightDatabaseBaseModel):
|
|
|
155
154
|
|
|
156
155
|
|
|
157
156
|
class ComponentObject(SplightObject):
|
|
158
|
-
data:
|
|
157
|
+
data: list[InputParameter] = []
|
|
159
158
|
|
|
160
159
|
|
|
161
160
|
class RoutineEvaluation(SplightDatalakeBaseModel):
|
|
@@ -163,18 +162,18 @@ class RoutineEvaluation(SplightDatalakeBaseModel):
|
|
|
163
162
|
|
|
164
163
|
routine: str
|
|
165
164
|
status: RoutineStatus
|
|
166
|
-
status_text:
|
|
165
|
+
status_text: str | None
|
|
167
166
|
|
|
168
167
|
|
|
169
168
|
class RoutineObject(SplightObject):
|
|
170
169
|
status: RoutineStatus = RoutineStatus.RUNNING
|
|
171
170
|
|
|
172
|
-
config:
|
|
173
|
-
input:
|
|
174
|
-
output:
|
|
171
|
+
config: list[InputParameter] | None = []
|
|
172
|
+
input: list[InputDataAddress] = []
|
|
173
|
+
output: list[InputDataAddress] = []
|
|
175
174
|
|
|
176
175
|
def report_status(
|
|
177
|
-
self, status: RoutineStatus, status_text:
|
|
176
|
+
self, status: RoutineStatus, status_text: str | None = None
|
|
178
177
|
):
|
|
179
178
|
evaluation_status = RoutineEvaluation(
|
|
180
179
|
routine=str(self.id),
|
|
@@ -198,15 +197,15 @@ class RoutineObject(SplightObject):
|
|
|
198
197
|
|
|
199
198
|
|
|
200
199
|
class Component(SplightDatabaseBaseModel):
|
|
201
|
-
id:
|
|
202
|
-
name:
|
|
200
|
+
id: str | None = None
|
|
201
|
+
name: str | None = None
|
|
203
202
|
version: str
|
|
204
|
-
custom_types:
|
|
203
|
+
custom_types: list[CustomType] = []
|
|
205
204
|
component_type: ComponentType = ComponentType.CONNECTOR
|
|
206
|
-
input:
|
|
207
|
-
output:
|
|
208
|
-
endpoints:
|
|
209
|
-
routines:
|
|
205
|
+
input: list[InputParameter] = []
|
|
206
|
+
output: list[Output] = []
|
|
207
|
+
endpoints: list[Endpoint] = []
|
|
208
|
+
routines: list[Routine] = []
|
|
210
209
|
|
|
211
210
|
|
|
212
211
|
DATABASE_TYPES = {
|
|
@@ -228,7 +227,7 @@ DB_MODEL_TYPE_MAPPING = {
|
|
|
228
227
|
}
|
|
229
228
|
|
|
230
229
|
|
|
231
|
-
def parse_variable_string(raw_value:
|
|
230
|
+
def parse_variable_string(raw_value: str | None) -> Any:
|
|
232
231
|
if raw_value is None:
|
|
233
232
|
return ""
|
|
234
233
|
pattern = re.compile(r"^\$\{\{(\w+)\.(\w+)\}\}$")
|
|
@@ -241,7 +240,7 @@ def parse_variable_string(raw_value: Optional[str]) -> Any:
|
|
|
241
240
|
return secret.value
|
|
242
241
|
|
|
243
242
|
|
|
244
|
-
def get_field_value(field:
|
|
243
|
+
def get_field_value(field: InputParameter | list[InputParameter]):
|
|
245
244
|
multiple = field.multiple
|
|
246
245
|
|
|
247
246
|
value = field.value
|
|
@@ -290,16 +289,16 @@ def get_field_value(field: Union[InputParameter, List[InputParameter]]):
|
|
|
290
289
|
|
|
291
290
|
|
|
292
291
|
class AbstractObjectInstance(ABC, SplightDatabaseBaseModel):
|
|
293
|
-
id:
|
|
292
|
+
id: str | None = None
|
|
294
293
|
name: str = ""
|
|
295
|
-
description: str
|
|
294
|
+
description: Annotated[str, Field("", max_length=DESCRIPTION_MAX_LENGTH)]
|
|
296
295
|
|
|
297
|
-
_default_attrs:
|
|
296
|
+
_default_attrs: list[str] = PrivateAttr(
|
|
298
297
|
["id", "name", "component_id", "description"]
|
|
299
298
|
)
|
|
300
|
-
_schema: ClassVar[
|
|
301
|
-
_database_class: ClassVar[
|
|
302
|
-
_component_id: ClassVar[
|
|
299
|
+
_schema: ClassVar[BaseModel | None] = None
|
|
300
|
+
_database_class: ClassVar[Type[SplightDatabaseBaseModel] | None] = None
|
|
301
|
+
_component_id: ClassVar[str | None] = None
|
|
303
302
|
|
|
304
303
|
def save(self):
|
|
305
304
|
component_obj = self.to_object()
|
|
@@ -312,7 +311,7 @@ class AbstractObjectInstance(ABC, SplightDatabaseBaseModel):
|
|
|
312
311
|
component_obj.delete()
|
|
313
312
|
|
|
314
313
|
@classmethod
|
|
315
|
-
def list(cls, **params:
|
|
314
|
+
def list(cls, **params: dict) -> list["AbstractObjectInstance"]:
|
|
316
315
|
if not cls._schema or not cls._component_id:
|
|
317
316
|
raise InvalidObjectInstance(
|
|
318
317
|
(
|
|
@@ -407,7 +406,7 @@ class AbstractObjectInstance(ABC, SplightDatabaseBaseModel):
|
|
|
407
406
|
|
|
408
407
|
|
|
409
408
|
class ComponentObjectInstance(AbstractObjectInstance):
|
|
410
|
-
_schema: ClassVar[
|
|
409
|
+
_schema: ClassVar[CustomType | None] = None
|
|
411
410
|
_database_class: ClassVar[Type[SplightDatabaseBaseModel]] = ComponentObject
|
|
412
411
|
|
|
413
412
|
def to_object(self) -> ComponentObject:
|
|
@@ -432,13 +431,13 @@ class ComponentObjectInstance(AbstractObjectInstance):
|
|
|
432
431
|
def from_custom_type(
|
|
433
432
|
cls,
|
|
434
433
|
custom_type: CustomType,
|
|
435
|
-
component_id:
|
|
434
|
+
component_id: str | None = None,
|
|
436
435
|
) -> Type["ComponentObjectInstance"]:
|
|
437
436
|
fields = {}
|
|
438
437
|
|
|
439
438
|
for field in custom_type.fields:
|
|
440
439
|
field_type = DB_MODEL_TYPE_MAPPING.get(field.type, cls)
|
|
441
|
-
field_type =
|
|
440
|
+
field_type = list[field_type] if field.multiple else field_type
|
|
442
441
|
field_type = (
|
|
443
442
|
Optional[field_type] if not field.required else field_type
|
|
444
443
|
)
|
|
@@ -487,7 +486,7 @@ class ComponentObjectInstance(AbstractObjectInstance):
|
|
|
487
486
|
def from_component(
|
|
488
487
|
cls,
|
|
489
488
|
component: Component,
|
|
490
|
-
) ->
|
|
489
|
+
) -> dict[str, "ComponentObjectInstance"]:
|
|
491
490
|
return {
|
|
492
491
|
ct.name: cls.from_custom_type(ct, component.id)
|
|
493
492
|
for ct in component.custom_types
|
|
@@ -565,13 +564,13 @@ class RoutineObjectInstance(AbstractObjectInstance):
|
|
|
565
564
|
return model_class
|
|
566
565
|
|
|
567
566
|
@classmethod
|
|
568
|
-
def _create_config_model(cls, parameters:
|
|
567
|
+
def _create_config_model(cls, parameters: list[Parameter]) -> Type:
|
|
569
568
|
fields = {}
|
|
570
569
|
for field in parameters:
|
|
571
570
|
field_type = DB_MODEL_TYPE_MAPPING.get(
|
|
572
571
|
field.type, ComponentObjectInstance
|
|
573
572
|
)
|
|
574
|
-
field_type =
|
|
573
|
+
field_type = list[field_type] if field.multiple else field_type
|
|
575
574
|
field_type = field_type if field.required else Optional[field_type]
|
|
576
575
|
field_value = ... if field.required else None
|
|
577
576
|
fields.update({field.name: (field_type, field_value)})
|
|
@@ -579,11 +578,11 @@ class RoutineObjectInstance(AbstractObjectInstance):
|
|
|
579
578
|
return create_model("Config", **fields)
|
|
580
579
|
|
|
581
580
|
@classmethod
|
|
582
|
-
def _create_input_model(cls, parameters:
|
|
581
|
+
def _create_input_model(cls, parameters: list[DataAddress]) -> Type:
|
|
583
582
|
fields = {}
|
|
584
583
|
for field in parameters:
|
|
585
584
|
field_type = (
|
|
586
|
-
|
|
585
|
+
list[DLDataAddress] if field.multiple else DLDataAddress
|
|
587
586
|
)
|
|
588
587
|
field_type = field_type if field.required else Optional[field_type]
|
|
589
588
|
field_value = ... if field.required else None
|
|
@@ -591,11 +590,11 @@ class RoutineObjectInstance(AbstractObjectInstance):
|
|
|
591
590
|
return create_model("Input", **fields)
|
|
592
591
|
|
|
593
592
|
@classmethod
|
|
594
|
-
def _create_output_model(cls, parameters:
|
|
593
|
+
def _create_output_model(cls, parameters: list[DataAddress]) -> Type:
|
|
595
594
|
fields = {}
|
|
596
595
|
for field in parameters:
|
|
597
596
|
field_type = (
|
|
598
|
-
|
|
597
|
+
list[DLDataAddress] if field.multiple else DLDataAddress
|
|
599
598
|
)
|
|
600
599
|
field_type = field_type if field.required else Optional[field_type]
|
|
601
600
|
field_value = ... if field.required else None
|
|
@@ -632,7 +631,7 @@ class RoutineObjectInstance(AbstractObjectInstance):
|
|
|
632
631
|
return cls.model_validate(params_dict)
|
|
633
632
|
|
|
634
633
|
def report_status(
|
|
635
|
-
self, status: RoutineStatus, status_text:
|
|
634
|
+
self, status: RoutineStatus, status_text: str | None = None
|
|
636
635
|
):
|
|
637
636
|
routine_object = self.to_object()
|
|
638
637
|
routine_object.report_status(status=status, status_text=status_text)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from datetime import datetime
|
|
2
2
|
from enum import Enum
|
|
3
3
|
from hashlib import sha256
|
|
4
|
-
from typing import Annotated, Any, Generic, Literal, Self, TypeVar
|
|
4
|
+
from typing import Annotated, Any, Generator, Generic, Literal, Self, TypeVar
|
|
5
5
|
|
|
6
6
|
from pydantic import BaseModel, ConfigDict, Field, PrivateAttr
|
|
7
7
|
|
|
@@ -13,6 +13,7 @@ from splight_lib.models.attribute import Attribute
|
|
|
13
13
|
from splight_lib.models.exceptions import TraceAlreadyExistsError
|
|
14
14
|
from splight_lib.settings import settings
|
|
15
15
|
|
|
16
|
+
MAX_NUM_TRACES = 500
|
|
16
17
|
T = TypeVar("T")
|
|
17
18
|
|
|
18
19
|
|
|
@@ -115,15 +116,22 @@ class DataRequest(Generic[T], BaseModel):
|
|
|
115
116
|
def apply(self) -> list[T]:
|
|
116
117
|
dl_client = get_datalake_client()
|
|
117
118
|
request = self.model_dump(mode="json")
|
|
118
|
-
|
|
119
|
-
data =
|
|
119
|
+
traces = request.pop("traces")
|
|
120
|
+
data = []
|
|
121
|
+
for batch in chunk_list(traces, MAX_NUM_TRACES):
|
|
122
|
+
request["traces"] = batch
|
|
123
|
+
response = dl_client.get(request)
|
|
124
|
+
data.extend(self._parse_respose(response))
|
|
120
125
|
return data
|
|
121
126
|
|
|
122
127
|
async def async_apply(self) -> list[T]:
|
|
123
128
|
dl_client = get_datalake_client()
|
|
124
129
|
request = self.model_dump(mode="json")
|
|
125
|
-
|
|
126
|
-
|
|
130
|
+
data = []
|
|
131
|
+
for batch in chunk_list(self.traces, MAX_NUM_TRACES):
|
|
132
|
+
request["traces"] = batch
|
|
133
|
+
response = await dl_client.async_get(request)
|
|
134
|
+
data.extend(self._parse_respose(response))
|
|
127
135
|
return data
|
|
128
136
|
|
|
129
137
|
def _parse_respose(self, response: dict) -> list[T]:
|
|
@@ -153,3 +161,23 @@ class DataRecords(BaseModel):
|
|
|
153
161
|
async def async_apply(self) -> None:
|
|
154
162
|
dl_client = get_datalake_client()
|
|
155
163
|
await dl_client.async_save(self.model_dump(mode="json"))
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
def chunk_list(
|
|
167
|
+
datas: list[Any], chunksize: int
|
|
168
|
+
) -> Generator[list[Any], None, None]:
|
|
169
|
+
"""Split list into chunks
|
|
170
|
+
|
|
171
|
+
Parameters
|
|
172
|
+
----------
|
|
173
|
+
datas : list[Any]
|
|
174
|
+
the list of data
|
|
175
|
+
chunksize : int
|
|
176
|
+
the size of chunk
|
|
177
|
+
|
|
178
|
+
Returns
|
|
179
|
+
-------
|
|
180
|
+
Generator with the chunks
|
|
181
|
+
"""
|
|
182
|
+
for i in range(0, len(datas), chunksize):
|
|
183
|
+
yield datas[i : i + chunksize]
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/execution/tests/test_execution.py
RENAMED
|
File without changes
|
{splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/execution/tests/test_scheduling.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
|
{splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/tests/test_database_model.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/restclient/tests/test_restclient.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
|