splight-lib 5.24.0__tar.gz → 5.24.0.dev1__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.24.0 → splight_lib-5.24.0.dev1}/PKG-INFO +1 -1
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/pyproject.toml +1 -1
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/client/datalake/common/abstract.py +8 -2
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/client/datalake/v3/remote_client.py +12 -6
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/client/datalake/v4/generic.py +1 -4
- splight_lib-5.24.0.dev1/splight_lib/client/datalake/v4/models.py +78 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/client/datalake/v4/remote_client.py +30 -27
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/__init__.py +13 -20
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v4/__init__.py +2 -22
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v4/component.py +32 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v4/datalake_base.py +32 -30
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v4/native.py +15 -17
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/restclient/client.py +4 -3
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/uv.lock +2 -2
- splight_lib-5.24.0/splight_lib/models/_v4/datalake.py +0 -133
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/.github/workflows/code-style.yaml +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/.github/workflows/developer.yaml +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/.github/workflows/pre-release.yaml +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/.github/workflows/release.yaml +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/.github/workflows/scripts/check_dev_version.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/.github/workflows/scripts/check_master_version.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/.github/workflows/scripts/check_pypi_version.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/.github/workflows/scripts/check_release_version.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/.github/workflows/scripts/check_version_uploaded.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/.github/workflows/scripts/cleanup_pypi.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/.github/workflows/scripts/requirements.txt +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/.gitignore +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/.pre-commit-config.yaml +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/DOCS.md +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/LICENSE.txt +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/Makefile +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/README.md +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/__init__.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/abstract/__init__.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/abstract/client.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/auth/__init__.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/auth/token.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/client/__init__.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/client/database/__init__.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/client/database/abstract.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/client/database/builder.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/client/database/classmap.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/client/database/remote_client.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/client/datalake/__init__.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/client/datalake/builder.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/client/datalake/common/__init__.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/client/datalake/common/buffer.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/client/datalake/v3/__init__.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/client/datalake/v3/builder.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/client/datalake/v3/classmap.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/client/datalake/v3/constants.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/client/datalake/v3/exceptions.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/client/datalake/v4/__init__.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/client/datalake/v4/builder.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/client/datalake/v4/exceptions.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/client/exceptions.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/client/hub/__init__.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/client/hub/abstract.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/client/hub/client.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/client/tests/test_database.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/client/tests/test_datalake.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/component/__init__.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/component/abstract.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/component/exceptions.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/component/spec.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/component/tests/test_spec.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/config.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/conftest.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/constants.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/encryption.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/execution/__init__.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/execution/engine.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/execution/exceptions.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/execution/scheduling.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/execution/task.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/execution/tests/test_execution.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/execution/tests/test_scheduling.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/execution/trigger.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/logging/__init__.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/logging/_internal.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/logging/component.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/logging/constants.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/logging/logging.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/logging/tests/test_logging.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v3/__init__.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v3/actions.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v3/alert.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v3/asset.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v3/attribute.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v3/bus.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v3/component.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v3/dashboard.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v3/data_address.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v3/datalake.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v3/datalake_base.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v3/exceptions.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v3/external_grid.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v3/file.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v3/function.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v3/generator.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v3/generic.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v3/grid.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v3/hub.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v3/hub_server.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v3/inverter.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v3/line.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v3/metadata.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v3/native.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v3/secret.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v3/segment.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v3/server.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v3/slack_generator.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v3/slack_line.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v3/tag.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v3/tests/models.json +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v3/tests/test_component_object_instance.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v3/tests/test_database_model.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v3/tests/test_metadata.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v3/tests/test_models.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v3/three_winding_transformer.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v3/transformer.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v3/variable_types.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v4/asset.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v4/attribute.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v4/base.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v4/battery.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v4/bus.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v4/data_address.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v4/exceptions.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v4/external_grid.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v4/file.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v4/generator.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v4/generic.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v4/grid.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v4/hub.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v4/hub_server.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v4/line.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v4/load.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v4/metadata.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v4/secret.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v4/segment.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v4/server.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v4/slack_line.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v4/solution.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v4/tag.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v4/transformer.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/_v4/variable_types.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/models/database.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/restclient/__init__.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/restclient/exceptions.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/restclient/tests/test_restclient.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/restclient/types.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/server/__init__.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/server/exceptions.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/server/server.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/settings.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/testing/__init__.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/tests/FakeProc.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/tests/asset_geometries.json +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/tests/test_api_contracts.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/utils/__init__.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/utils/custom_model.py +0 -0
- {splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/version.py +0 -0
{splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/client/datalake/common/abstract.py
RENAMED
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
from abc import abstractmethod
|
|
2
|
+
from typing import Any, TypedDict
|
|
2
3
|
|
|
3
4
|
from splight_lib.abstract.client import AbstractRemoteClient, QuerySet
|
|
4
5
|
|
|
5
6
|
|
|
7
|
+
class Records(TypedDict):
|
|
8
|
+
schema_name: str
|
|
9
|
+
records: list[dict[str, Any]]
|
|
10
|
+
|
|
11
|
+
|
|
6
12
|
# TODO: Fix this class after delete QuerySet
|
|
7
13
|
class AbstractDatalakeClient(AbstractRemoteClient):
|
|
8
14
|
def get(self, *args, **kwargs) -> QuerySet:
|
|
@@ -16,11 +22,11 @@ class AbstractDatalakeClient(AbstractRemoteClient):
|
|
|
16
22
|
return await self._async_get(*args, **kwargs)
|
|
17
23
|
|
|
18
24
|
@abstractmethod
|
|
19
|
-
def save(self, records:
|
|
25
|
+
def save(self, records: Records) -> list[dict]:
|
|
20
26
|
pass
|
|
21
27
|
|
|
22
28
|
@abstractmethod
|
|
23
|
-
async def async_save(self, records:
|
|
29
|
+
async def async_save(self, records: Records) -> list[dict]:
|
|
24
30
|
pass
|
|
25
31
|
|
|
26
32
|
@abstractmethod
|
{splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/client/datalake/v3/remote_client.py
RENAMED
|
@@ -2,10 +2,14 @@ from threading import Lock, Thread
|
|
|
2
2
|
from time import sleep
|
|
3
3
|
|
|
4
4
|
from furl import furl
|
|
5
|
+
from httpx import HTTPTransport
|
|
5
6
|
from retry import retry
|
|
6
7
|
|
|
7
8
|
from splight_lib.auth import SplightAuthToken
|
|
8
|
-
from splight_lib.client.datalake.common.abstract import
|
|
9
|
+
from splight_lib.client.datalake.common.abstract import (
|
|
10
|
+
AbstractDatalakeClient,
|
|
11
|
+
Records,
|
|
12
|
+
)
|
|
9
13
|
from splight_lib.client.datalake.common.buffer import DatalakeDocumentBuffer
|
|
10
14
|
from splight_lib.client.datalake.v3.classmap import COLLECTION_PREFIXS_MAP
|
|
11
15
|
from splight_lib.client.datalake.v3.exceptions import DatalakeRequestError
|
|
@@ -38,14 +42,16 @@ class SyncRemoteDatalakeClient(AbstractDatalakeClient):
|
|
|
38
42
|
self._api_version = "v3"
|
|
39
43
|
self._default_path = "data"
|
|
40
44
|
|
|
41
|
-
self._restclient = SplightRestClient(
|
|
45
|
+
self._restclient = SplightRestClient(
|
|
46
|
+
transport=HTTPTransport(retries=3)
|
|
47
|
+
)
|
|
42
48
|
self._restclient.update_headers(token.header)
|
|
43
49
|
logger.debug(
|
|
44
50
|
"Remote datalake client initialized.", tags=LogTags.DATALAKE
|
|
45
51
|
)
|
|
46
52
|
|
|
47
53
|
@retry(EXCEPTIONS, tries=3, delay=2, jitter=1)
|
|
48
|
-
def save(self, records:
|
|
54
|
+
def save(self, records: Records) -> list[dict]:
|
|
49
55
|
prefix = self._get_prefix(records["collection"])
|
|
50
56
|
url = self._base_url / f"{prefix}/write/"
|
|
51
57
|
response = self._restclient.post(url, json=records)
|
|
@@ -56,7 +62,7 @@ class SyncRemoteDatalakeClient(AbstractDatalakeClient):
|
|
|
56
62
|
@retry(EXCEPTIONS, tries=3, delay=2, jitter=1)
|
|
57
63
|
async def async_save(
|
|
58
64
|
self,
|
|
59
|
-
records:
|
|
65
|
+
records: Records,
|
|
60
66
|
) -> list[dict]:
|
|
61
67
|
# POST /data/write
|
|
62
68
|
prefix = self._get_prefix(records["collection"])
|
|
@@ -138,7 +144,7 @@ class BufferedAsyncRemoteDatalakeClient(SyncRemoteDatalakeClient):
|
|
|
138
144
|
tags=LogTags.DATALAKE,
|
|
139
145
|
)
|
|
140
146
|
|
|
141
|
-
def save(self, records:
|
|
147
|
+
def save(self, records: Records) -> list[dict]:
|
|
142
148
|
logger.debug("Saving documents in datalake", tags=LogTags.DATALAKE)
|
|
143
149
|
collection = records["collection"]
|
|
144
150
|
instances = records["records"]
|
|
@@ -237,7 +243,7 @@ class BufferedSyncRemoteDataClient(SyncRemoteDatalakeClient):
|
|
|
237
243
|
tags=LogTags.DATALAKE,
|
|
238
244
|
)
|
|
239
245
|
|
|
240
|
-
def save(self, records:
|
|
246
|
+
def save(self, records: Records) -> list[dict]:
|
|
241
247
|
logger.debug("Saving documents in datalake", tags=LogTags.DATALAKE)
|
|
242
248
|
collection = records["collection"]
|
|
243
249
|
buffer = self._data_buffers[collection]
|
|
@@ -3,9 +3,7 @@ from enum import Enum
|
|
|
3
3
|
from typing import TypeAlias
|
|
4
4
|
|
|
5
5
|
Timestamp: TypeAlias = datetime
|
|
6
|
-
|
|
7
|
-
# bools will be interpreted as floats (1.0, 0.0) instead of bools.
|
|
8
|
-
Value: TypeAlias = bool | str | float
|
|
6
|
+
Value: TypeAlias = float | bool | str | int
|
|
9
7
|
|
|
10
8
|
|
|
11
9
|
class AggregationFunction(str, Enum):
|
|
@@ -14,7 +12,6 @@ class AggregationFunction(str, Enum):
|
|
|
14
12
|
MIN = "min"
|
|
15
13
|
MAX = "max"
|
|
16
14
|
COUNT = "count"
|
|
17
|
-
LAST = "last"
|
|
18
15
|
|
|
19
16
|
|
|
20
17
|
class TimeUnit(str, Enum):
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
from typing import Annotated, Literal, Optional
|
|
2
|
+
|
|
3
|
+
from pydantic import BaseModel, Field
|
|
4
|
+
|
|
5
|
+
from splight_lib.client.datalake.v4.generic import (
|
|
6
|
+
AggregationFunction,
|
|
7
|
+
Timestamp,
|
|
8
|
+
TimeUnit,
|
|
9
|
+
TransitionSchemaName,
|
|
10
|
+
TransitionSort,
|
|
11
|
+
Value,
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class DefaultEntryKey(BaseModel):
|
|
16
|
+
asset: str
|
|
17
|
+
attribute: str
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class DefaultKeys(BaseModel):
|
|
21
|
+
schema_name: Literal[TransitionSchemaName.DEFAULT]
|
|
22
|
+
entries: list[DefaultEntryKey]
|
|
23
|
+
|
|
24
|
+
@classmethod
|
|
25
|
+
def load(cls, entries: list) -> "DefaultKeys":
|
|
26
|
+
return cls(
|
|
27
|
+
schema_name=TransitionSchemaName.DEFAULT,
|
|
28
|
+
entries=entries,
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class SolutionEntryKey(BaseModel):
|
|
33
|
+
solution: str
|
|
34
|
+
asset: str
|
|
35
|
+
output: str
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class SolutionKeys(BaseModel):
|
|
39
|
+
schema_name: Literal[TransitionSchemaName.SOLUTIONS]
|
|
40
|
+
entries: list[SolutionEntryKey]
|
|
41
|
+
|
|
42
|
+
@classmethod
|
|
43
|
+
def load(cls, entries: list) -> "SolutionKeys":
|
|
44
|
+
return cls(
|
|
45
|
+
schema_name=TransitionSchemaName.SOLUTIONS,
|
|
46
|
+
entries=entries,
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
QueryKeys = Annotated[
|
|
51
|
+
DefaultKeys | SolutionKeys, Field(discriminator="schema_name")
|
|
52
|
+
]
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
class DataReadRequest(BaseModel):
|
|
56
|
+
keys: QueryKeys
|
|
57
|
+
start: Optional[Timestamp]
|
|
58
|
+
end: Optional[Timestamp] = None
|
|
59
|
+
time_window_unit: TimeUnit = TimeUnit.SECOND
|
|
60
|
+
time_window_size: int = 1
|
|
61
|
+
aggregation: AggregationFunction = AggregationFunction.MAX
|
|
62
|
+
sort: TransitionSort = TransitionSort.DESC
|
|
63
|
+
limit: int = 1000
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
class DefaultRecord(DefaultEntryKey):
|
|
67
|
+
value: Value
|
|
68
|
+
timestamp: Timestamp
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
class SolutionRecord(SolutionEntryKey):
|
|
72
|
+
value: Value
|
|
73
|
+
timestamp: Timestamp
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
class DataWriteRequest(BaseModel):
|
|
77
|
+
schema_name: TransitionSchemaName
|
|
78
|
+
records: list[SolutionRecord] | list[DefaultRecord]
|
{splight_lib-5.24.0 → splight_lib-5.24.0.dev1}/splight_lib/client/datalake/v4/remote_client.py
RENAMED
|
@@ -2,12 +2,19 @@ from threading import Lock, Thread
|
|
|
2
2
|
from time import sleep
|
|
3
3
|
|
|
4
4
|
from furl import furl
|
|
5
|
+
from httpx import HTTPTransport
|
|
5
6
|
from retry import retry
|
|
6
7
|
|
|
7
8
|
from splight_lib.auth import SplightAuthToken
|
|
8
|
-
from splight_lib.client.datalake.common.abstract import
|
|
9
|
+
from splight_lib.client.datalake.common.abstract import (
|
|
10
|
+
AbstractDatalakeClient,
|
|
11
|
+
Records,
|
|
12
|
+
)
|
|
9
13
|
from splight_lib.client.datalake.common.buffer import DatalakeDocumentBuffer
|
|
10
14
|
from splight_lib.client.datalake.v4.exceptions import DatalakeRequestError
|
|
15
|
+
from splight_lib.client.datalake.v4.models import (
|
|
16
|
+
DataReadRequest,
|
|
17
|
+
)
|
|
11
18
|
from splight_lib.client.exceptions import SPLIGHT_REQUEST_EXCEPTIONS
|
|
12
19
|
from splight_lib.logging._internal import LogTags, get_splight_logger
|
|
13
20
|
from splight_lib.restclient import SplightRestClient
|
|
@@ -35,7 +42,9 @@ class SyncRemoteDatalakeClient(AbstractDatalakeClient):
|
|
|
35
42
|
secret_key=secret_key,
|
|
36
43
|
)
|
|
37
44
|
|
|
38
|
-
self._restclient = SplightRestClient(
|
|
45
|
+
self._restclient = SplightRestClient(
|
|
46
|
+
transport=HTTPTransport(retries=3)
|
|
47
|
+
)
|
|
39
48
|
self._restclient.update_headers(token.header)
|
|
40
49
|
logger.debug(
|
|
41
50
|
"Remote datalake client initialized.", tags=LogTags.DATALAKE
|
|
@@ -61,7 +70,7 @@ class SyncRemoteDatalakeClient(AbstractDatalakeClient):
|
|
|
61
70
|
return records["records"]
|
|
62
71
|
|
|
63
72
|
@retry(EXCEPTIONS, tries=3, delay=2, jitter=1)
|
|
64
|
-
def _get(self, request:
|
|
73
|
+
def _get(self, request: DataReadRequest) -> list[dict]:
|
|
65
74
|
url = self._base_url / f"{self.prefix}/read/"
|
|
66
75
|
response = self._restclient.post(url, json=request)
|
|
67
76
|
if response.is_error:
|
|
@@ -69,7 +78,7 @@ class SyncRemoteDatalakeClient(AbstractDatalakeClient):
|
|
|
69
78
|
return response.json()
|
|
70
79
|
|
|
71
80
|
@retry(EXCEPTIONS, tries=3, delay=2, jitter=1)
|
|
72
|
-
async def _async_get(self, request:
|
|
81
|
+
async def _async_get(self, request: DataReadRequest) -> list[dict]:
|
|
73
82
|
url = self._base_url / f"{self.prefix}/read/"
|
|
74
83
|
response = await self._restclient.async_post(url, json=request)
|
|
75
84
|
if response.is_error:
|
|
@@ -133,9 +142,8 @@ class BufferedAsyncRemoteDatalakeClient(SyncRemoteDatalakeClient):
|
|
|
133
142
|
|
|
134
143
|
def save(self, records: dict) -> list[dict]:
|
|
135
144
|
logger.debug("Saving documents in datalake", tags=LogTags.DATALAKE)
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
schema_name = instance["schema_name"]
|
|
145
|
+
instances = records["records"]
|
|
146
|
+
schema_name = records["schema_name"]
|
|
139
147
|
buffer = self._data_buffers[schema_name]
|
|
140
148
|
with self._lock:
|
|
141
149
|
if buffer.should_flush():
|
|
@@ -145,8 +153,8 @@ class BufferedAsyncRemoteDatalakeClient(SyncRemoteDatalakeClient):
|
|
|
145
153
|
)
|
|
146
154
|
self._send_documents(schema_name, buffer.data)
|
|
147
155
|
buffer.reset()
|
|
148
|
-
buffer.add_documents(
|
|
149
|
-
return
|
|
156
|
+
buffer.add_documents(instances)
|
|
157
|
+
return instances
|
|
150
158
|
|
|
151
159
|
def _flusher(self):
|
|
152
160
|
while True:
|
|
@@ -171,19 +179,17 @@ class BufferedAsyncRemoteDatalakeClient(SyncRemoteDatalakeClient):
|
|
|
171
179
|
|
|
172
180
|
@retry(EXCEPTIONS, tries=3, delay=2, jitter=1)
|
|
173
181
|
def _send_documents(
|
|
174
|
-
self, schema_name: str,
|
|
182
|
+
self, schema_name: str, docs: list[dict]
|
|
175
183
|
) -> list[dict]:
|
|
176
184
|
url = self._base_url / f"{self.prefix}/write/"
|
|
177
185
|
data = {
|
|
178
|
-
"
|
|
179
|
-
|
|
180
|
-
"data_points": data_points,
|
|
181
|
-
},
|
|
186
|
+
"schema_name": schema_name,
|
|
187
|
+
"records": docs,
|
|
182
188
|
}
|
|
183
189
|
response = self._restclient.post(url, json=data)
|
|
184
190
|
if response.is_error:
|
|
185
191
|
raise DatalakeRequestError(response.status_code, response.text)
|
|
186
|
-
return
|
|
192
|
+
return docs
|
|
187
193
|
|
|
188
194
|
|
|
189
195
|
class BufferedSyncRemoteDataClient(SyncRemoteDatalakeClient):
|
|
@@ -234,14 +240,13 @@ class BufferedSyncRemoteDataClient(SyncRemoteDatalakeClient):
|
|
|
234
240
|
tags=LogTags.DATALAKE,
|
|
235
241
|
)
|
|
236
242
|
|
|
237
|
-
def save(self, records:
|
|
243
|
+
def save(self, records: Records) -> list[dict]:
|
|
238
244
|
logger.debug("Saving documents in datalake", tags=LogTags.DATALAKE)
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
data_points = instance["data_points"]
|
|
245
|
+
schema_name = records["schema_name"]
|
|
246
|
+
records = records["records"]
|
|
242
247
|
buffer = self._data_buffers[schema_name]
|
|
243
248
|
with self._lock:
|
|
244
|
-
buffer.add_documents(
|
|
249
|
+
buffer.add_documents(records)
|
|
245
250
|
if buffer.should_flush():
|
|
246
251
|
logger.debug(
|
|
247
252
|
"Flushing datalake buffer with %s elements",
|
|
@@ -250,20 +255,18 @@ class BufferedSyncRemoteDataClient(SyncRemoteDatalakeClient):
|
|
|
250
255
|
)
|
|
251
256
|
self._send_documents(schema_name, buffer.data)
|
|
252
257
|
buffer.reset()
|
|
253
|
-
return
|
|
258
|
+
return records
|
|
254
259
|
|
|
255
260
|
@retry(EXCEPTIONS, tries=3, delay=2, jitter=1)
|
|
256
261
|
def _send_documents(
|
|
257
|
-
self, schema_name: str,
|
|
262
|
+
self, schema_name: str, docs: list[dict]
|
|
258
263
|
) -> list[dict]:
|
|
259
264
|
url = self._base_url / f"{self.prefix}/write/"
|
|
260
265
|
data = {
|
|
261
|
-
"
|
|
262
|
-
|
|
263
|
-
"data_points": data_points,
|
|
264
|
-
}
|
|
266
|
+
"schema_name": schema_name,
|
|
267
|
+
"records": docs,
|
|
265
268
|
}
|
|
266
269
|
response = self._restclient.post(url, json=data)
|
|
267
270
|
if response.is_error:
|
|
268
271
|
raise DatalakeRequestError(response.status_code, response.text)
|
|
269
|
-
return
|
|
272
|
+
return docs
|
|
@@ -179,12 +179,8 @@ elif api_version == SplightAPIVersion.V4:
|
|
|
179
179
|
ComponentType,
|
|
180
180
|
CustomType,
|
|
181
181
|
DataAddress,
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
DefaultDataPoint,
|
|
185
|
-
DefaultEntryKey,
|
|
186
|
-
DefaultKeys,
|
|
187
|
-
DefaultRecords,
|
|
182
|
+
DataRecords,
|
|
183
|
+
DataRequest,
|
|
188
184
|
Endpoint,
|
|
189
185
|
ExternalGrid,
|
|
190
186
|
File,
|
|
@@ -200,9 +196,11 @@ elif api_version == SplightAPIVersion.V4:
|
|
|
200
196
|
Number,
|
|
201
197
|
Output,
|
|
202
198
|
Parameter,
|
|
199
|
+
PipelineStep,
|
|
203
200
|
PrivacyPolicy,
|
|
204
201
|
ResourceSummary,
|
|
205
202
|
Routine,
|
|
203
|
+
RoutineEvaluation,
|
|
206
204
|
RoutineObject,
|
|
207
205
|
RoutineObjectInstance,
|
|
208
206
|
Secret,
|
|
@@ -211,15 +209,13 @@ elif api_version == SplightAPIVersion.V4:
|
|
|
211
209
|
SlackLine,
|
|
212
210
|
Solution,
|
|
213
211
|
SolutionConfiguration,
|
|
214
|
-
SolutionDataPoint,
|
|
215
|
-
SolutionEntryKey,
|
|
216
|
-
SolutionKeys,
|
|
217
212
|
SolutionOutput,
|
|
218
213
|
SolutionOutputDocument,
|
|
219
|
-
SolutionRecords,
|
|
220
214
|
SplightDatalakeBaseModel,
|
|
221
215
|
String,
|
|
222
216
|
Tag,
|
|
217
|
+
Trace,
|
|
218
|
+
TraceType,
|
|
223
219
|
Transformer,
|
|
224
220
|
ValueType,
|
|
225
221
|
get_field_value,
|
|
@@ -227,20 +223,11 @@ elif api_version == SplightAPIVersion.V4:
|
|
|
227
223
|
|
|
228
224
|
__all__ = [
|
|
229
225
|
"Asset",
|
|
230
|
-
"DataReadRequest",
|
|
231
|
-
"DataWriteRequest",
|
|
232
|
-
"DefaultEntryKey",
|
|
233
|
-
"DefaultKeys",
|
|
234
|
-
"DefaultRecords",
|
|
235
|
-
"DefaultDataPoint",
|
|
236
|
-
"SolutionEntryKey",
|
|
237
|
-
"SolutionKeys",
|
|
238
|
-
"SolutionRecords",
|
|
239
|
-
"SolutionDataPoint",
|
|
240
226
|
"AssetRelationship",
|
|
241
227
|
"Component",
|
|
242
228
|
"RoutineObjectInstance",
|
|
243
229
|
"RoutineObject",
|
|
230
|
+
"RoutineEvaluation",
|
|
244
231
|
"ComponentObject",
|
|
245
232
|
"ComponentObjectInstance",
|
|
246
233
|
"ComponentType",
|
|
@@ -289,6 +276,12 @@ elif api_version == SplightAPIVersion.V4:
|
|
|
289
276
|
"Solution",
|
|
290
277
|
"SolutionOutput",
|
|
291
278
|
"SolutionConfiguration",
|
|
279
|
+
"DataRecords",
|
|
280
|
+
"DataRequest",
|
|
281
|
+
"PipelineStep",
|
|
282
|
+
"Trace",
|
|
283
|
+
"TraceType",
|
|
284
|
+
"SolutionOutputDocument",
|
|
292
285
|
]
|
|
293
286
|
else:
|
|
294
287
|
raise ImportError(f"No models available for API version: '{api_version}'.")
|
|
@@ -21,23 +21,12 @@ from splight_lib.models._v4.component import (
|
|
|
21
21
|
Parameter,
|
|
22
22
|
PrivacyPolicy,
|
|
23
23
|
Routine,
|
|
24
|
+
RoutineEvaluation,
|
|
24
25
|
RoutineObject,
|
|
25
26
|
RoutineObjectInstance,
|
|
26
27
|
get_field_value,
|
|
27
28
|
)
|
|
28
29
|
from splight_lib.models._v4.data_address import DataAddresses as DataAddress
|
|
29
|
-
from splight_lib.models._v4.datalake import (
|
|
30
|
-
DataReadRequest,
|
|
31
|
-
DataWriteRequest,
|
|
32
|
-
DefaultDataPoint,
|
|
33
|
-
DefaultEntryKey,
|
|
34
|
-
DefaultKeys,
|
|
35
|
-
DefaultRecords,
|
|
36
|
-
SolutionDataPoint,
|
|
37
|
-
SolutionEntryKey,
|
|
38
|
-
SolutionKeys,
|
|
39
|
-
SolutionRecords,
|
|
40
|
-
)
|
|
41
30
|
from splight_lib.models._v4.datalake_base import SplightDatalakeBaseModel
|
|
42
31
|
from splight_lib.models._v4.external_grid import ExternalGrid
|
|
43
32
|
from splight_lib.models._v4.file import File
|
|
@@ -81,6 +70,7 @@ __all__ = [
|
|
|
81
70
|
"Component",
|
|
82
71
|
"RoutineObjectInstance",
|
|
83
72
|
"RoutineObject",
|
|
73
|
+
"RoutineEvaluation",
|
|
84
74
|
"ComponentObject",
|
|
85
75
|
"ComponentObjectInstance",
|
|
86
76
|
"ComponentType",
|
|
@@ -129,14 +119,4 @@ __all__ = [
|
|
|
129
119
|
"SolutionOutput",
|
|
130
120
|
"Solution",
|
|
131
121
|
"SolutionConfiguration",
|
|
132
|
-
"DefaultEntryKey",
|
|
133
|
-
"DefaultKeys",
|
|
134
|
-
"DefaultRecords",
|
|
135
|
-
"DefaultDataPoint",
|
|
136
|
-
"SolutionEntryKey",
|
|
137
|
-
"SolutionKeys",
|
|
138
|
-
"SolutionRecords",
|
|
139
|
-
"SolutionDataPoint",
|
|
140
|
-
"DataReadRequest",
|
|
141
|
-
"DataWriteRequest",
|
|
142
122
|
]
|
|
@@ -16,6 +16,7 @@ from strenum import LowercaseStrEnum, PascalCaseStrEnum
|
|
|
16
16
|
from splight_lib.models._v4.asset import Asset
|
|
17
17
|
from splight_lib.models._v4.attribute import Attribute
|
|
18
18
|
from splight_lib.models._v4.data_address import DataAddresses as DLDataAddress
|
|
19
|
+
from splight_lib.models._v4.datalake_base import SplightDatalakeBaseModel
|
|
19
20
|
from splight_lib.models._v4.exceptions import InvalidObjectInstance
|
|
20
21
|
from splight_lib.models._v4.file import File
|
|
21
22
|
from splight_lib.models._v4.secret import Secret
|
|
@@ -150,6 +151,14 @@ class ComponentObject(SplightObject):
|
|
|
150
151
|
data: list[InputParameter] = []
|
|
151
152
|
|
|
152
153
|
|
|
154
|
+
class RoutineEvaluation(SplightDatalakeBaseModel):
|
|
155
|
+
_schema_name = "routineEvaluations"
|
|
156
|
+
|
|
157
|
+
routine: str
|
|
158
|
+
status: RoutineStatus
|
|
159
|
+
status_text: str | None
|
|
160
|
+
|
|
161
|
+
|
|
153
162
|
class RoutineObject(SplightObject):
|
|
154
163
|
status: RoutineStatus = RoutineStatus.RUNNING
|
|
155
164
|
|
|
@@ -157,6 +166,29 @@ class RoutineObject(SplightObject):
|
|
|
157
166
|
input: list[InputDataAddress] = []
|
|
158
167
|
output: list[InputDataAddress] = []
|
|
159
168
|
|
|
169
|
+
def report_status(
|
|
170
|
+
self, status: RoutineStatus, status_text: str | None = None
|
|
171
|
+
):
|
|
172
|
+
evaluation_status = RoutineEvaluation(
|
|
173
|
+
routine=str(self.id),
|
|
174
|
+
status=status,
|
|
175
|
+
status_text=status_text,
|
|
176
|
+
)
|
|
177
|
+
evaluation_status.save()
|
|
178
|
+
|
|
179
|
+
if self.status != status:
|
|
180
|
+
self.status = status
|
|
181
|
+
self._update_status()
|
|
182
|
+
|
|
183
|
+
def _update_status(self):
|
|
184
|
+
_ = self._db_client.operate(
|
|
185
|
+
resource_name="routine-status",
|
|
186
|
+
instance={
|
|
187
|
+
"routine": self.id,
|
|
188
|
+
"status": self.status,
|
|
189
|
+
},
|
|
190
|
+
)
|
|
191
|
+
|
|
160
192
|
|
|
161
193
|
class Component(SplightDatabaseBaseModel):
|
|
162
194
|
id: str | None = None
|
|
@@ -5,13 +5,12 @@ import pandas as pd
|
|
|
5
5
|
from pydantic import BaseModel, ConfigDict, Field
|
|
6
6
|
from typing_extensions import Self
|
|
7
7
|
|
|
8
|
-
from splight_lib.
|
|
8
|
+
from splight_lib.client.datalake.v4.builder import get_datalake_client
|
|
9
|
+
from splight_lib.client.datalake.v4.models import (
|
|
9
10
|
DataReadRequest,
|
|
10
11
|
DataWriteRequest,
|
|
11
12
|
DefaultKeys,
|
|
12
|
-
DefaultRecords,
|
|
13
13
|
SolutionKeys,
|
|
14
|
-
SolutionRecords,
|
|
15
14
|
)
|
|
16
15
|
|
|
17
16
|
|
|
@@ -33,7 +32,10 @@ class SplightDatalakeBaseModel(BaseModel):
|
|
|
33
32
|
key_entries,
|
|
34
33
|
**params,
|
|
35
34
|
)
|
|
36
|
-
|
|
35
|
+
dl_client = get_datalake_client()
|
|
36
|
+
request = request.model_dump(mode="json")
|
|
37
|
+
response = dl_client.get(request)
|
|
38
|
+
return response["results"]
|
|
37
39
|
|
|
38
40
|
@classmethod
|
|
39
41
|
async def _async_get(
|
|
@@ -45,7 +47,10 @@ class SplightDatalakeBaseModel(BaseModel):
|
|
|
45
47
|
key_entries,
|
|
46
48
|
**params,
|
|
47
49
|
)
|
|
48
|
-
|
|
50
|
+
dl_client = get_datalake_client()
|
|
51
|
+
request = request.model_dump(mode="json")
|
|
52
|
+
response = await dl_client.async_get(request)
|
|
53
|
+
return response["results"]
|
|
49
54
|
|
|
50
55
|
@classmethod
|
|
51
56
|
def _get_dataframe(
|
|
@@ -57,8 +62,10 @@ class SplightDatalakeBaseModel(BaseModel):
|
|
|
57
62
|
key_entries,
|
|
58
63
|
**params,
|
|
59
64
|
)
|
|
60
|
-
|
|
61
|
-
|
|
65
|
+
dl_client = get_datalake_client()
|
|
66
|
+
request = request.model_dump(mode="json")
|
|
67
|
+
response = dl_client.get(request)
|
|
68
|
+
df = pd.DataFrame(response["results"])
|
|
62
69
|
if not df.empty:
|
|
63
70
|
df.index = df["timestamp"]
|
|
64
71
|
df.drop(columns="timestamp", inplace=True)
|
|
@@ -77,37 +84,26 @@ class SplightDatalakeBaseModel(BaseModel):
|
|
|
77
84
|
**params,
|
|
78
85
|
)
|
|
79
86
|
|
|
80
|
-
@classmethod
|
|
81
|
-
def __to_write_request(
|
|
82
|
-
cls,
|
|
83
|
-
data_points: list[dict[str, str]],
|
|
84
|
-
) -> DataWriteRequest:
|
|
85
|
-
_schema_name = cls._schema_name
|
|
86
|
-
schema = (
|
|
87
|
-
DefaultRecords if _schema_name == "default" else SolutionRecords
|
|
88
|
-
)
|
|
89
|
-
return DataWriteRequest(
|
|
90
|
-
records=schema.load(data_points=data_points),
|
|
91
|
-
)
|
|
92
|
-
|
|
93
87
|
def save(self) -> None:
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
)
|
|
97
|
-
request.apply()
|
|
88
|
+
dl_client = get_datalake_client()
|
|
89
|
+
record = self.__to_write_request()
|
|
90
|
+
dl_client.save(record.model_dump(mode="json"))
|
|
98
91
|
|
|
99
92
|
async def async_save(self) -> None:
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
)
|
|
103
|
-
await request.async_apply()
|
|
93
|
+
dl_client = get_datalake_client()
|
|
94
|
+
record = self.__to_write_request()
|
|
95
|
+
await dl_client.async_save(record.model_dump(mode="json"))
|
|
104
96
|
|
|
105
97
|
@classmethod
|
|
106
98
|
def save_dataframe(cls, df: pd.DataFrame):
|
|
107
99
|
df = _fix_dataframe_timestamp(df)
|
|
108
100
|
instances = df.to_dict("records")
|
|
109
|
-
|
|
110
|
-
|
|
101
|
+
records = DataWriteRequest(
|
|
102
|
+
schema_name=cls._schema_name,
|
|
103
|
+
records=instances,
|
|
104
|
+
)
|
|
105
|
+
dl_client = get_datalake_client()
|
|
106
|
+
dl_client.save(records.model_dump(mode="json"))
|
|
111
107
|
|
|
112
108
|
def dict(self, *args, **kwargs) -> Dict:
|
|
113
109
|
d = super().model_dump(*args, **kwargs)
|
|
@@ -116,6 +112,12 @@ class SplightDatalakeBaseModel(BaseModel):
|
|
|
116
112
|
for k, v in d.items()
|
|
117
113
|
}
|
|
118
114
|
|
|
115
|
+
def __to_write_request(self) -> DataWriteRequest:
|
|
116
|
+
return DataWriteRequest(
|
|
117
|
+
schema_name=self._schema_name,
|
|
118
|
+
records=[self.model_dump(mode="json")],
|
|
119
|
+
)
|
|
120
|
+
|
|
119
121
|
|
|
120
122
|
def _fix_dataframe_timestamp(df: pd.DataFrame) -> pd.DataFrame:
|
|
121
123
|
if df["timestamp"][0].tz is None:
|