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.
Files changed (107) hide show
  1. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/PKG-INFO +1 -1
  2. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/pyproject.toml +1 -1
  3. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/component.py +55 -56
  4. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/dashboard.py +1 -0
  5. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/datalake.py +33 -5
  6. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/LICENSE.txt +0 -0
  7. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/README.md +0 -0
  8. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/__init__.py +0 -0
  9. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/abstract/__init__.py +0 -0
  10. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/abstract/client.py +0 -0
  11. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/auth/__init__.py +0 -0
  12. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/auth/exceptions.py +0 -0
  13. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/auth/mac_auth.py +0 -0
  14. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/auth/token.py +0 -0
  15. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/__init__.py +0 -0
  16. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/database/__init__.py +0 -0
  17. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/database/abstract.py +0 -0
  18. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/database/builder.py +0 -0
  19. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/database/classmap.py +0 -0
  20. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/database/remote_client.py +0 -0
  21. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/datalake/__init__.py +0 -0
  22. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/datalake/abstract.py +0 -0
  23. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/datalake/buffer.py +0 -0
  24. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/datalake/builder.py +0 -0
  25. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/datalake/constants.py +0 -0
  26. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/datalake/exceptions.py +0 -0
  27. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/datalake/remote_client.py +0 -0
  28. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/exceptions.py +0 -0
  29. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/file_handler.py +0 -0
  30. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/filter.py +0 -0
  31. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/hub/__init__.py +0 -0
  32. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/hub/abstract.py +0 -0
  33. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/hub/client.py +0 -0
  34. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/tests/test_database.py +0 -0
  35. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/client/tests/test_datalake.py +0 -0
  36. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/component/__init__.py +0 -0
  37. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/component/abstract.py +0 -0
  38. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/component/exceptions.py +0 -0
  39. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/component/spec.py +0 -0
  40. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/component/tests/test_abstract.py +0 -0
  41. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/component/tests/test_spec.py +0 -0
  42. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/conftest.py +0 -0
  43. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/constants.py +0 -0
  44. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/encryption.py +0 -0
  45. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/execution/__init__.py +0 -0
  46. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/execution/engine.py +0 -0
  47. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/execution/exceptions.py +0 -0
  48. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/execution/scheduling.py +0 -0
  49. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/execution/task.py +0 -0
  50. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/execution/tests/test_execution.py +0 -0
  51. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/execution/tests/test_scheduling.py +0 -0
  52. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/execution/trigger.py +0 -0
  53. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/logging/__init__.py +0 -0
  54. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/logging/_internal.py +0 -0
  55. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/logging/component.py +0 -0
  56. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/logging/constants.py +0 -0
  57. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/logging/logging.py +0 -0
  58. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/logging/tests/test_logging.py +0 -0
  59. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/__init__.py +0 -0
  60. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/actions.py +0 -0
  61. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/alert.py +0 -0
  62. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/asset.py +0 -0
  63. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/attribute.py +0 -0
  64. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/data_address.py +0 -0
  65. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/database_base.py +0 -0
  66. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/datalake_base.py +0 -0
  67. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/exceptions.py +0 -0
  68. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/file.py +0 -0
  69. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/function.py +0 -0
  70. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/generic.py +0 -0
  71. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/hub.py +0 -0
  72. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/hub_server.py +0 -0
  73. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/hub_solution.py +0 -0
  74. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/metadata.py +0 -0
  75. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/native.py +0 -0
  76. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/secret.py +0 -0
  77. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/server.py +0 -0
  78. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/solution.py +0 -0
  79. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/tag.py +0 -0
  80. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/tests/models.json +0 -0
  81. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/tests/test_component_object_instance.py +0 -0
  82. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/tests/test_database_model.py +0 -0
  83. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/tests/test_metadata.py +0 -0
  84. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/tests/test_models.py +0 -0
  85. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/models/variable_types.py +0 -0
  86. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/restclient/__init__.py +0 -0
  87. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/restclient/client.py +0 -0
  88. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/restclient/exceptions.py +0 -0
  89. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/restclient/tests/test_restclient.py +0 -0
  90. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/restclient/types.py +0 -0
  91. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/server/__init__.py +0 -0
  92. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/server/exceptions.py +0 -0
  93. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/server/server.py +0 -0
  94. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/settings.py +0 -0
  95. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/solution/__init__.py +0 -0
  96. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/solution/exceptions.py +0 -0
  97. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/solution/solution.py +0 -0
  98. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/stringcase.py +0 -0
  99. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/testing/__init__.py +0 -0
  100. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/tests/FakeProc.py +0 -0
  101. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/tests/asset_geometries.json +0 -0
  102. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/tests/test_api_contracts.py +0 -0
  103. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/tests/test_encryption.py +0 -0
  104. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/utils/__init__.py +0 -0
  105. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/utils/custom_model.py +0 -0
  106. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/utils/hub.py +0 -0
  107. {splight_lib-5.11.2.dev0 → splight_lib-5.11.4}/splight_lib/version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: splight-lib
3
- Version: 5.11.2.dev0
3
+ Version: 5.11.4
4
4
  Summary: Splight Library
5
5
  Author: Splight Dev
6
6
  Author-email: dev@splight-ae.com
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "splight-lib"
3
- version = "5.11.2.dev0"
3
+ version = "5.11.4"
4
4
  description = "Splight Library"
5
5
  authors = ["Splight Dev <dev@splight-ae.com>"]
6
6
  readme = "README.md"
@@ -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, Dict, List, Literal, Optional, Type, Union
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 = Field(default="")
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: Optional[List[Any]] = None
72
- depends_on: Optional[str] = None
71
+ choices: list[Any] | None = None
72
+ depends_on: str | None = None
73
73
 
74
74
 
75
75
  class InputParameter(Parameter):
76
- value: Optional[Any] = None
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: Optional[Union[List[DLDataAddress], DLDataAddress]] = None
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 = Field(default="")
108
+ description: str = ""
110
109
  type: str
111
- choices: Optional[List[Any]] = None
112
- depends_on: Optional[str] = None
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: List[OutputParameter]
117
+ fields: list[OutputParameter]
119
118
 
120
119
 
121
120
  class CustomType(BaseModel):
122
121
  name: str
123
- fields: List[Parameter]
122
+ fields: list[Parameter]
124
123
 
125
- _reserved_names: ClassVar[List[str]] = ["id", "name", "description"]
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: Optional[int] = None
129
+ max_instances: int | None = None
131
130
 
132
- config: Optional[List[InputParameter]] = []
133
- input: List[DataAddress] = []
134
- output: List[DataAddress] = []
131
+ config: list[InputParameter] | None = []
132
+ input: list[DataAddress] = []
133
+ output: list[DataAddress] = []
135
134
 
136
- _reserved_names: ClassVar[List[str]] = ["id", "name", "description"]
135
+ _reserved_names: ClassVar[list[str]] = ["id", "name", "description"]
137
136
 
138
137
 
139
138
  class Endpoint(BaseModel):
140
- name: Optional[str]
141
- port: Union[int, str]
139
+ name: str | None = None
140
+ port: int | str
142
141
 
143
142
 
144
143
  class SplightObject(SplightDatabaseBaseModel):
145
- id: Optional[str] = None
144
+ id: str | None = None
146
145
  name: str
147
- component_id: Optional[str] = None
148
- description: str = Field(default="")
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: List[InputParameter] = []
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: Optional[str]
165
+ status_text: str | None
167
166
 
168
167
 
169
168
  class RoutineObject(SplightObject):
170
169
  status: RoutineStatus = RoutineStatus.RUNNING
171
170
 
172
- config: Optional[List[InputParameter]] = []
173
- input: List[InputDataAddress] = []
174
- output: List[InputDataAddress] = []
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: Optional[str] = None
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: Optional[str] = None
202
- name: Optional[str] = None
200
+ id: str | None = None
201
+ name: str | None = None
203
202
  version: str
204
- custom_types: List[CustomType] = []
203
+ custom_types: list[CustomType] = []
205
204
  component_type: ComponentType = ComponentType.CONNECTOR
206
- input: List[InputParameter] = []
207
- output: List[Output] = []
208
- endpoints: List[Endpoint] = []
209
- routines: List[Routine] = []
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: Optional[str]) -> Any:
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: Union[InputParameter, List[InputParameter]]):
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: Optional[str] = None
292
+ id: str | None = None
294
293
  name: str = ""
295
- description: str = Field(default="", max_length=DESCRIPTION_MAX_LENGTH)
294
+ description: Annotated[str, Field("", max_length=DESCRIPTION_MAX_LENGTH)]
296
295
 
297
- _default_attrs: List[str] = PrivateAttr(
296
+ _default_attrs: list[str] = PrivateAttr(
298
297
  ["id", "name", "component_id", "description"]
299
298
  )
300
- _schema: ClassVar[Optional[BaseModel]] = None
301
- _database_class: ClassVar[Optional[Type[SplightDatabaseBaseModel]]] = None
302
- _component_id: ClassVar[Optional[str]] = None
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: Dict) -> List["AbstractObjectInstance"]:
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[Optional[CustomType]] = None
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: Optional[str] = None,
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 = List[field_type] if field.multiple else 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
- ) -> Dict[str, "ComponentObjectInstance"]:
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: List[Parameter]) -> Type:
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 = List[field_type] if field.multiple else 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: List[DataAddress]) -> Type:
581
+ def _create_input_model(cls, parameters: list[DataAddress]) -> Type:
583
582
  fields = {}
584
583
  for field in parameters:
585
584
  field_type = (
586
- List[DLDataAddress] if field.multiple else DLDataAddress
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: List[DataAddress]) -> Type:
593
+ def _create_output_model(cls, parameters: list[DataAddress]) -> Type:
595
594
  fields = {}
596
595
  for field in parameters:
597
596
  field_type = (
598
- List[DLDataAddress] if field.multiple else DLDataAddress
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: Optional[str] = None
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)
@@ -107,6 +107,7 @@ class Chart(SplightDatabaseBaseModel):
107
107
  value_mappings: list[
108
108
  ExactMatchValueMapping | RangeValueMapping | RegexMatchValueMapping
109
109
  ] = []
110
+ timezone: str | None = None
110
111
 
111
112
 
112
113
  class Tab(SplightDatabaseBaseModel):
@@ -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
- response = dl_client.get(request)
119
- data = self._parse_respose(response)
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
- response = await dl_client.async_get(request)
126
- data = self._parse_respose(response)
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]