splight-lib 5.22.0.dev0__tar.gz → 5.22.2__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 (161) hide show
  1. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/Makefile +0 -14
  2. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/PKG-INFO +2 -2
  3. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/README.md +1 -1
  4. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/pyproject.toml +3 -2
  5. splight_lib-5.22.2/splight_lib/client/datalake/__init__.py +5 -0
  6. splight_lib-5.22.2/splight_lib/client/datalake/builder.py +27 -0
  7. {splight_lib-5.22.0.dev0/splight_lib/client/datalake → splight_lib-5.22.2/splight_lib/client/datalake/common}/__init__.py +2 -2
  8. splight_lib-5.22.2/splight_lib/client/datalake/v3/__init__.py +13 -0
  9. {splight_lib-5.22.0.dev0/splight_lib/client/datalake → splight_lib-5.22.2/splight_lib/client/datalake/v3}/builder.py +2 -2
  10. {splight_lib-5.22.0.dev0/splight_lib/client/datalake → splight_lib-5.22.2/splight_lib/client/datalake/v3}/remote_client.py +4 -4
  11. splight_lib-5.22.2/splight_lib/client/datalake/v4/__init__.py +13 -0
  12. splight_lib-5.22.2/splight_lib/client/datalake/v4/builder.py +24 -0
  13. splight_lib-5.22.2/splight_lib/client/datalake/v4/exceptions.py +12 -0
  14. splight_lib-5.22.2/splight_lib/client/datalake/v4/remote_client.py +258 -0
  15. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/client/tests/test_datalake.py +3 -3
  16. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/conftest.py +1 -1
  17. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/__init__.py +8 -6
  18. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v3/datalake.py +5 -3
  19. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v3/datalake_base.py +1 -1
  20. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v4/__init__.py +10 -2
  21. splight_lib-5.22.2/splight_lib/models/_v4/datalake.py +168 -0
  22. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v4/datalake_base.py +22 -40
  23. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v4/native.py +0 -1
  24. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/tests/test_api_contracts.py +0 -6
  25. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/uv.lock +1 -1
  26. splight_lib-5.22.0.dev0/splight_lib/models/_v4/datalake.py +0 -189
  27. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/.github/workflows/code-style.yaml +0 -0
  28. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/.github/workflows/developer.yaml +0 -0
  29. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/.github/workflows/pre-release.yaml +0 -0
  30. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/.github/workflows/release.yaml +0 -0
  31. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/.github/workflows/scripts/check_dev_version.py +0 -0
  32. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/.github/workflows/scripts/check_master_version.py +0 -0
  33. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/.github/workflows/scripts/check_pypi_version.py +0 -0
  34. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/.github/workflows/scripts/check_release_version.py +0 -0
  35. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/.github/workflows/scripts/check_version_uploaded.py +0 -0
  36. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/.github/workflows/scripts/cleanup_pypi.py +0 -0
  37. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/.github/workflows/scripts/requirements.txt +0 -0
  38. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/.gitignore +0 -0
  39. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/.pre-commit-config.yaml +0 -0
  40. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/DOCS.md +0 -0
  41. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/LICENSE.txt +0 -0
  42. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/__init__.py +0 -0
  43. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/abstract/__init__.py +0 -0
  44. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/abstract/client.py +0 -0
  45. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/auth/__init__.py +0 -0
  46. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/auth/token.py +0 -0
  47. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/client/__init__.py +0 -0
  48. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/client/database/__init__.py +0 -0
  49. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/client/database/abstract.py +0 -0
  50. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/client/database/builder.py +0 -0
  51. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/client/database/classmap.py +0 -0
  52. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/client/database/remote_client.py +0 -0
  53. {splight_lib-5.22.0.dev0/splight_lib/client/datalake → splight_lib-5.22.2/splight_lib/client/datalake/common}/abstract.py +0 -0
  54. {splight_lib-5.22.0.dev0/splight_lib/client/datalake → splight_lib-5.22.2/splight_lib/client/datalake/common}/buffer.py +0 -0
  55. {splight_lib-5.22.0.dev0/splight_lib/client/datalake → splight_lib-5.22.2/splight_lib/client/datalake/v3}/classmap.py +0 -0
  56. {splight_lib-5.22.0.dev0/splight_lib/client/datalake → splight_lib-5.22.2/splight_lib/client/datalake/v3}/constants.py +0 -0
  57. {splight_lib-5.22.0.dev0/splight_lib/client/datalake → splight_lib-5.22.2/splight_lib/client/datalake/v3}/exceptions.py +0 -0
  58. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/client/exceptions.py +0 -0
  59. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/client/hub/__init__.py +0 -0
  60. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/client/hub/abstract.py +0 -0
  61. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/client/hub/client.py +0 -0
  62. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/client/tests/test_database.py +0 -0
  63. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/component/__init__.py +0 -0
  64. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/component/abstract.py +0 -0
  65. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/component/exceptions.py +0 -0
  66. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/component/spec.py +0 -0
  67. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/component/tests/test_spec.py +0 -0
  68. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/config.py +0 -0
  69. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/constants.py +0 -0
  70. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/encryption.py +0 -0
  71. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/execution/__init__.py +0 -0
  72. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/execution/engine.py +0 -0
  73. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/execution/exceptions.py +0 -0
  74. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/execution/scheduling.py +0 -0
  75. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/execution/task.py +0 -0
  76. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/execution/tests/test_execution.py +0 -0
  77. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/execution/tests/test_scheduling.py +0 -0
  78. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/execution/trigger.py +0 -0
  79. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/logging/__init__.py +0 -0
  80. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/logging/_internal.py +0 -0
  81. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/logging/component.py +0 -0
  82. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/logging/constants.py +0 -0
  83. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/logging/logging.py +0 -0
  84. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/logging/tests/test_logging.py +0 -0
  85. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v3/__init__.py +0 -0
  86. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v3/actions.py +0 -0
  87. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v3/alert.py +0 -0
  88. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v3/asset.py +0 -0
  89. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v3/attribute.py +0 -0
  90. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v3/bus.py +0 -0
  91. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v3/component.py +0 -0
  92. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v3/dashboard.py +0 -0
  93. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v3/data_address.py +0 -0
  94. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v3/exceptions.py +0 -0
  95. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v3/external_grid.py +0 -0
  96. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v3/file.py +0 -0
  97. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v3/function.py +0 -0
  98. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v3/generator.py +0 -0
  99. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v3/generic.py +0 -0
  100. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v3/grid.py +0 -0
  101. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v3/hub.py +0 -0
  102. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v3/hub_server.py +0 -0
  103. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v3/inverter.py +0 -0
  104. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v3/line.py +0 -0
  105. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v3/metadata.py +0 -0
  106. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v3/native.py +0 -0
  107. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v3/secret.py +0 -0
  108. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v3/segment.py +0 -0
  109. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v3/server.py +0 -0
  110. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v3/slack_generator.py +0 -0
  111. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v3/slack_line.py +0 -0
  112. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v3/tag.py +0 -0
  113. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v3/tests/models.json +0 -0
  114. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v3/tests/test_component_object_instance.py +0 -0
  115. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v3/tests/test_database_model.py +0 -0
  116. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v3/tests/test_metadata.py +0 -0
  117. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v3/tests/test_models.py +0 -0
  118. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v3/three_winding_transformer.py +0 -0
  119. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v3/transformer.py +0 -0
  120. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v3/variable_types.py +0 -0
  121. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v4/asset.py +0 -0
  122. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v4/attribute.py +0 -0
  123. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v4/base.py +0 -0
  124. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v4/battery.py +0 -0
  125. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v4/bus.py +0 -0
  126. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v4/component.py +0 -0
  127. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v4/data_address.py +0 -0
  128. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v4/exceptions.py +0 -0
  129. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v4/external_grid.py +0 -0
  130. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v4/file.py +0 -0
  131. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v4/generator.py +0 -0
  132. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v4/generic.py +0 -0
  133. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v4/grid.py +0 -0
  134. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v4/hub.py +0 -0
  135. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v4/hub_server.py +0 -0
  136. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v4/line.py +0 -0
  137. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v4/load.py +0 -0
  138. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v4/metadata.py +0 -0
  139. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v4/secret.py +0 -0
  140. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v4/segment.py +0 -0
  141. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v4/server.py +0 -0
  142. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v4/slack_line.py +0 -0
  143. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v4/tag.py +0 -0
  144. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v4/transformer.py +0 -0
  145. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/_v4/variable_types.py +0 -0
  146. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/models/database.py +0 -0
  147. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/restclient/__init__.py +0 -0
  148. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/restclient/client.py +0 -0
  149. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/restclient/exceptions.py +0 -0
  150. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/restclient/tests/test_restclient.py +0 -0
  151. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/restclient/types.py +0 -0
  152. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/server/__init__.py +0 -0
  153. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/server/exceptions.py +0 -0
  154. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/server/server.py +0 -0
  155. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/settings.py +0 -0
  156. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/testing/__init__.py +0 -0
  157. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/tests/FakeProc.py +0 -0
  158. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/tests/asset_geometries.json +0 -0
  159. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/utils/__init__.py +0 -0
  160. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/utils/custom_model.py +0 -0
  161. {splight_lib-5.22.0.dev0 → splight_lib-5.22.2}/splight_lib/version.py +0 -0
@@ -48,17 +48,3 @@ format: install-dev
48
48
 
49
49
  check-format: install-dev
50
50
  uv run pre-commit run --all-files
51
- # --show-diff-on-failure
52
-
53
- # format:
54
- # uv run isort splight_lib/
55
- # uv run ruff format splight_lib/
56
- #
57
- # check_isort:
58
- # uv run isort --check-only --diff splight_lib/
59
- #
60
- # check_ruff:
61
- # uv run ruff format --check --diff splight_lib/
62
- #
63
- # check_format: check_ruff check_isort
64
- #
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: splight-lib
3
- Version: 5.22.0.dev0
3
+ Version: 5.22.2
4
4
  Summary: Splight Python Library
5
5
  Author-email: Splight Dev <dev@splight.com>
6
6
  License-File: LICENSE.txt
@@ -86,7 +86,7 @@ the version you should use the command
86
86
  ```bash
87
87
  make update-version scope=<scope>
88
88
  ```
89
- where scope can be `mahor`, `minor` or `patch`.
89
+ where scope can be `major`, `minor` or `patch`.
90
90
 
91
91
  ## Tests
92
92
 
@@ -50,7 +50,7 @@ the version you should use the command
50
50
  ```bash
51
51
  make update-version scope=<scope>
52
52
  ```
53
- where scope can be `mahor`, `minor` or `patch`.
53
+ where scope can be `major`, `minor` or `patch`.
54
54
 
55
55
  ## Tests
56
56
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "splight-lib"
3
- version = "5.22.0.dev0"
3
+ version = "5.22.2"
4
4
  description = "Splight Python Library"
5
5
  authors = [
6
6
  {name = "Splight Dev",email = "dev@splight.com"}
@@ -68,7 +68,6 @@ profile = "black"
68
68
  line_length = 79
69
69
 
70
70
  [tool.pytest.ini_options]
71
- # testpaths = ["splight_lib/component/tests/"]
72
71
  filterwarnings = [
73
72
  "error",
74
73
  "ignore::RuntimeWarning",
@@ -115,6 +114,8 @@ indent-width = 4
115
114
 
116
115
  target-version = "py311"
117
116
 
117
+ extend-select = ["F", "I"]
118
+
118
119
  [tool.ruff.format]
119
120
  # Like Black, use double quotes for strings.
120
121
  quote-style = "double"
@@ -0,0 +1,5 @@
1
+ from splight_lib.client.datalake.builder import DatalakeClientBuilder
2
+
3
+ __all__ = [
4
+ DatalakeClientBuilder,
5
+ ]
@@ -0,0 +1,27 @@
1
+ from typing import Any
2
+
3
+ from splight_lib.client.datalake.common.abstract import AbstractDatalakeClient
4
+ from splight_lib.client.datalake.v3.builder import (
5
+ DatalakeClientBuilder as V3DatalakeClientBuilder,
6
+ )
7
+ from splight_lib.client.datalake.v4.builder import (
8
+ DatalakeClientBuilder as V4DatalakeClientBuilder,
9
+ )
10
+ from splight_lib.settings import DatalakeClientType, SplightAPIVersion
11
+
12
+
13
+ class DatalakeClientBuilder:
14
+ @staticmethod
15
+ def build(
16
+ version: SplightAPIVersion = SplightAPIVersion.V3,
17
+ dl_client_type: DatalakeClientType = DatalakeClientType.BUFFERED_ASYNC,
18
+ parameters: dict[str, Any] = {},
19
+ ) -> AbstractDatalakeClient:
20
+ if version == SplightAPIVersion.V3:
21
+ Builder = V3DatalakeClientBuilder
22
+ elif version == SplightAPIVersion.V4:
23
+ Builder = V4DatalakeClientBuilder
24
+ else:
25
+ raise ValueError(f"Unsupported API version: {version}")
26
+
27
+ return Builder.build(dl_client_type, parameters)
@@ -1,5 +1,5 @@
1
- from splight_lib.client.datalake.builder import DatalakeClientBuilder
2
- from splight_lib.client.datalake.remote_client import (
1
+ from splight_lib.client.datalake.v3.builder import DatalakeClientBuilder
2
+ from splight_lib.client.datalake.v3.remote_client import (
3
3
  BufferedAsyncRemoteDatalakeClient,
4
4
  BufferedSyncRemoteDataClient,
5
5
  SyncRemoteDatalakeClient,
@@ -0,0 +1,13 @@
1
+ from splight_lib.client.datalake.v3.builder import DatalakeClientBuilder
2
+ from splight_lib.client.datalake.v3.remote_client import (
3
+ BufferedAsyncRemoteDatalakeClient,
4
+ BufferedSyncRemoteDataClient,
5
+ SyncRemoteDatalakeClient,
6
+ )
7
+
8
+ __all__ = [
9
+ DatalakeClientBuilder,
10
+ SyncRemoteDatalakeClient,
11
+ BufferedAsyncRemoteDatalakeClient,
12
+ BufferedSyncRemoteDataClient,
13
+ ]
@@ -1,7 +1,7 @@
1
1
  from typing import Any
2
2
 
3
- from splight_lib.client.datalake.abstract import AbstractDatalakeClient
4
- from splight_lib.client.datalake.remote_client import (
3
+ from splight_lib.client.datalake.common.abstract import AbstractDatalakeClient
4
+ from splight_lib.client.datalake.v3.remote_client import (
5
5
  BufferedAsyncRemoteDatalakeClient,
6
6
  BufferedSyncRemoteDataClient,
7
7
  SyncRemoteDatalakeClient,
@@ -6,13 +6,13 @@ from httpx import HTTPTransport
6
6
  from retry import retry
7
7
 
8
8
  from splight_lib.auth import SplightAuthToken
9
- from splight_lib.client.datalake.abstract import (
9
+ from splight_lib.client.datalake.common.abstract import (
10
10
  AbstractDatalakeClient,
11
11
  Records,
12
12
  )
13
- from splight_lib.client.datalake.buffer import DatalakeDocumentBuffer
14
- from splight_lib.client.datalake.classmap import COLLECTION_PREFIXS_MAP
15
- from splight_lib.client.datalake.exceptions import DatalakeRequestError
13
+ from splight_lib.client.datalake.common.buffer import DatalakeDocumentBuffer
14
+ from splight_lib.client.datalake.v3.classmap import COLLECTION_PREFIXS_MAP
15
+ from splight_lib.client.datalake.v3.exceptions import DatalakeRequestError
16
16
  from splight_lib.client.exceptions import SPLIGHT_REQUEST_EXCEPTIONS
17
17
  from splight_lib.logging._internal import LogTags, get_splight_logger
18
18
  from splight_lib.restclient import SplightRestClient
@@ -0,0 +1,13 @@
1
+ from splight_lib.client.datalake.v4.builder import DatalakeClientBuilder
2
+ from splight_lib.client.datalake.v4.remote_client import (
3
+ BufferedAsyncRemoteDatalakeClient,
4
+ BufferedSyncRemoteDataClient,
5
+ SyncRemoteDatalakeClient,
6
+ )
7
+
8
+ __all__ = [
9
+ DatalakeClientBuilder,
10
+ SyncRemoteDatalakeClient,
11
+ BufferedAsyncRemoteDatalakeClient,
12
+ BufferedSyncRemoteDataClient,
13
+ ]
@@ -0,0 +1,24 @@
1
+ from typing import Any
2
+
3
+ from splight_lib.client.datalake.common.abstract import AbstractDatalakeClient
4
+ from splight_lib.client.datalake.v4.remote_client import (
5
+ BufferedAsyncRemoteDatalakeClient,
6
+ BufferedSyncRemoteDataClient,
7
+ SyncRemoteDatalakeClient,
8
+ )
9
+ from splight_lib.settings import DatalakeClientType
10
+
11
+ DL_CLIENT_TYPE_MAP = {
12
+ DatalakeClientType.BUFFERED_ASYNC: BufferedAsyncRemoteDatalakeClient,
13
+ DatalakeClientType.BUFFERED_SYNC: BufferedSyncRemoteDataClient,
14
+ DatalakeClientType.SYNC: SyncRemoteDatalakeClient,
15
+ }
16
+
17
+
18
+ class DatalakeClientBuilder:
19
+ @staticmethod
20
+ def build(
21
+ dl_client_type: DatalakeClientType = DatalakeClientType.BUFFERED_ASYNC,
22
+ parameters: dict[str, Any] = {},
23
+ ) -> AbstractDatalakeClient:
24
+ return DL_CLIENT_TYPE_MAP[dl_client_type](**parameters)
@@ -0,0 +1,12 @@
1
+ class DatalakeRequestError(Exception):
2
+ def __init__(self, status_code: int, message: str):
3
+ self._msg = f"Request failed with status code {status_code}: {message}"
4
+ super().__init__(self._msg)
5
+
6
+
7
+ class InvalidCollectionName(Exception):
8
+ def __init__(self, collection: str):
9
+ self._msg = f"Collection {collection} is not a valid collection"
10
+
11
+ def __str__(self) -> str:
12
+ return self._msg
@@ -0,0 +1,258 @@
1
+ from threading import Lock, Thread
2
+ from time import sleep
3
+
4
+ from furl import furl
5
+ from httpx import HTTPTransport
6
+ from retry import retry
7
+
8
+ from splight_lib.auth import SplightAuthToken
9
+ from splight_lib.client.datalake.common.abstract import (
10
+ AbstractDatalakeClient,
11
+ Records,
12
+ )
13
+ from splight_lib.client.datalake.common.buffer import DatalakeDocumentBuffer
14
+ from splight_lib.client.datalake.v4.exceptions import DatalakeRequestError
15
+ from splight_lib.client.exceptions import SPLIGHT_REQUEST_EXCEPTIONS
16
+ from splight_lib.logging._internal import LogTags, get_splight_logger
17
+ from splight_lib.restclient import SplightRestClient
18
+ from splight_lib.settings import SplightAPIVersion
19
+
20
+ logger = get_splight_logger()
21
+
22
+ EXCEPTIONS = (*SPLIGHT_REQUEST_EXCEPTIONS, DatalakeRequestError)
23
+
24
+
25
+ class SyncRemoteDatalakeClient(AbstractDatalakeClient):
26
+ def __init__(
27
+ self,
28
+ base_url: str,
29
+ resource: str,
30
+ access_id: str,
31
+ secret_key: str,
32
+ api_version: SplightAPIVersion = SplightAPIVersion.V4,
33
+ *args,
34
+ **kwargs,
35
+ ):
36
+ super().__init__()
37
+ self._base_url = furl(base_url)
38
+ self.resource = resource
39
+ token = SplightAuthToken(
40
+ access_key=access_id,
41
+ secret_key=secret_key,
42
+ )
43
+
44
+ self._restclient = SplightRestClient(
45
+ transport=HTTPTransport(retries=3)
46
+ )
47
+ self._restclient.update_headers(token.header)
48
+ logger.debug(
49
+ "Remote datalake client initialized.", tags=LogTags.DATALAKE
50
+ )
51
+
52
+ @retry(EXCEPTIONS, tries=3, delay=2, jitter=1)
53
+ def save(self, records: dict) -> list[dict]:
54
+ url = self._base_url / f"{self.prefix}/write/"
55
+ response = self._restclient.post(url, json=records)
56
+ if response.is_error:
57
+ raise DatalakeRequestError(response.status_code, response.text)
58
+ return records["records"]
59
+
60
+ @retry(EXCEPTIONS, tries=3, delay=2, jitter=1)
61
+ async def async_save(
62
+ self,
63
+ records: dict,
64
+ ) -> list[dict]:
65
+ url = self._base_url / f"{self.prefix}/write/"
66
+ response = await self._restclient.async_post(url, json=records)
67
+ if response.is_error:
68
+ raise DatalakeRequestError(response.status_code, response.text)
69
+ return records["records"]
70
+
71
+ @retry(EXCEPTIONS, tries=3, delay=2, jitter=1)
72
+ def _get(self, request: dict) -> list[dict]:
73
+ url = self._base_url / f"{self.prefix}/read/"
74
+ response = self._restclient.post(url, json=request)
75
+ if response.is_error:
76
+ raise DatalakeRequestError(response.status_code, response.text)
77
+ return response.json()
78
+
79
+ @retry(EXCEPTIONS, tries=3, delay=2, jitter=1)
80
+ async def _async_get(self, request: dict) -> list[dict]:
81
+ url = self._base_url / f"{self.prefix}/read/"
82
+ response = await self._restclient.async_post(url, json=request)
83
+ if response.is_error:
84
+ raise DatalakeRequestError(response.status_code, response.text)
85
+ return response.json()
86
+
87
+ @property
88
+ def prefix(self) -> str:
89
+ return f"v4/data/{self.resource}"
90
+
91
+
92
+ class BufferedAsyncRemoteDatalakeClient(SyncRemoteDatalakeClient):
93
+ def __init__(
94
+ self,
95
+ base_url: str,
96
+ access_id: str,
97
+ secret_key: str,
98
+ api_version: SplightAPIVersion,
99
+ buffer_size: int = 500,
100
+ buffer_timeout: float = 60,
101
+ *args,
102
+ **kwargs,
103
+ ):
104
+ super().__init__(
105
+ base_url=base_url,
106
+ access_id=access_id,
107
+ secret_key=secret_key,
108
+ buffer_size=buffer_size,
109
+ buffer_timeout=buffer_timeout,
110
+ *args,
111
+ **kwargs,
112
+ )
113
+ self._base_url = furl(base_url)
114
+
115
+ token = SplightAuthToken(
116
+ access_key=access_id,
117
+ secret_key=secret_key,
118
+ )
119
+ self._restclient = SplightRestClient()
120
+ self._restclient.update_headers(token.header)
121
+
122
+ logger.debug(
123
+ "Initializing buffer with size %s and timeout %s",
124
+ buffer_size,
125
+ buffer_timeout,
126
+ )
127
+ self._data_buffers = {
128
+ "default": DatalakeDocumentBuffer(buffer_size, buffer_timeout),
129
+ "routineEvaluations": DatalakeDocumentBuffer(
130
+ buffer_size, buffer_timeout
131
+ ),
132
+ }
133
+ self._lock = Lock()
134
+ self._flush_thread = Thread(target=self._flusher, daemon=True)
135
+ self._flush_thread.start()
136
+ logger.debug(
137
+ "Buffered Remote datalake client initialized.",
138
+ tags=LogTags.DATALAKE,
139
+ )
140
+
141
+ def save(self, records: dict) -> list[dict]:
142
+ logger.debug("Saving documents in datalake", tags=LogTags.DATALAKE)
143
+ instances = records["records"]
144
+ buffer = self._data_buffers["default"]
145
+ with self._lock:
146
+ if buffer.should_flush():
147
+ logger.debug(
148
+ "Flushing datalake buffer with %s elements",
149
+ len(buffer.data),
150
+ )
151
+ self._send_documents(buffer.data)
152
+ buffer.reset()
153
+ buffer.add_documents(instances)
154
+ return instances
155
+
156
+ def _flusher(self):
157
+ while True:
158
+ for _, buffer in self._data_buffers.items():
159
+ self._flush_buffer(buffer)
160
+ sleep(0.5)
161
+
162
+ def _flush_buffer(self, buffer: DatalakeDocumentBuffer) -> None:
163
+ with self._lock:
164
+ if buffer.should_flush():
165
+ try:
166
+ logger.debug(
167
+ "Flushing datalake buffer with %s elements",
168
+ len(buffer.data),
169
+ )
170
+ self._send_documents(buffer.data)
171
+ buffer.reset()
172
+ except Exception:
173
+ logger.error("Unable to save documents", exc_info=True)
174
+
175
+ @retry(EXCEPTIONS, tries=3, delay=2, jitter=1)
176
+ def _send_documents(self, docs: list[dict]) -> list[dict]:
177
+ url = self._base_url / f"{self.prefix}/write/"
178
+ data = {
179
+ "records": docs,
180
+ }
181
+ response = self._restclient.post(url, json=data)
182
+ if response.is_error:
183
+ raise DatalakeRequestError(response.status_code, response.text)
184
+ return docs
185
+
186
+
187
+ class BufferedSyncRemoteDataClient(SyncRemoteDatalakeClient):
188
+ def __init__(
189
+ self,
190
+ base_url: str,
191
+ access_id: str,
192
+ secret_key: str,
193
+ api_version: SplightAPIVersion,
194
+ buffer_size: int = 500,
195
+ buffer_timeout: float = 60,
196
+ *args,
197
+ **kwargs,
198
+ ):
199
+ super().__init__(
200
+ base_url=base_url,
201
+ access_id=access_id,
202
+ secret_key=secret_key,
203
+ buffer_size=buffer_size,
204
+ buffer_timeout=buffer_timeout,
205
+ *args,
206
+ **kwargs,
207
+ )
208
+ self._base_url = furl(base_url)
209
+ token = SplightAuthToken(
210
+ access_key=access_id,
211
+ secret_key=secret_key,
212
+ )
213
+ self._restclient = SplightRestClient()
214
+ self._restclient.update_headers(token.header)
215
+
216
+ logger.debug(
217
+ "Initializing buffer with size %s and timeout %s",
218
+ buffer_size,
219
+ buffer_timeout,
220
+ tags=LogTags.DATALAKE,
221
+ )
222
+ self._data_buffers = {
223
+ "default": DatalakeDocumentBuffer(buffer_size, buffer_timeout),
224
+ "routine_evaluations": DatalakeDocumentBuffer(
225
+ buffer_size, buffer_timeout
226
+ ),
227
+ }
228
+ self._lock = Lock()
229
+ logger.debug(
230
+ "Synchronous Buffered Remote datalake client initialized.",
231
+ tags=LogTags.DATALAKE,
232
+ )
233
+
234
+ def save(self, records: Records) -> list[dict]:
235
+ logger.debug("Saving documents in datalake", tags=LogTags.DATALAKE)
236
+ buffer = self._data_buffers["default"]
237
+ with self._lock:
238
+ buffer.add_documents(records["records"])
239
+ if buffer.should_flush():
240
+ logger.debug(
241
+ "Flushing datalake buffer with %s elements",
242
+ len(buffer.data),
243
+ tags=LogTags.DATALAKE,
244
+ )
245
+ self._send_documents(buffer.data)
246
+ buffer.reset()
247
+ return records["records"]
248
+
249
+ @retry(EXCEPTIONS, tries=3, delay=2, jitter=1)
250
+ def _send_documents(self, docs: list[dict]) -> list[dict]:
251
+ url = self._base_url / f"{self.prefix}/write/"
252
+ data = {
253
+ "records": docs,
254
+ }
255
+ response = self._restclient.post(url, json=data)
256
+ if response.is_error:
257
+ raise DatalakeRequestError(response.status_code, response.text)
258
+ return docs
@@ -2,10 +2,10 @@ import os
2
2
 
3
3
  from pytest_mock import MockerFixture
4
4
 
5
- from splight_lib.client.datalake import SyncRemoteDatalakeClient # noqa E402
6
- from splight_lib.client.datalake.remote_client import ( # noqa E402
7
- SplightRestClient,
5
+ from splight_lib.client.datalake.v3 import ( # noqa E402
6
+ SyncRemoteDatalakeClient,
8
7
  )
8
+ from splight_lib.restclient import SplightRestClient
9
9
 
10
10
  base_url = "http://test.com"
11
11
  os.environ["ACCESS_ID"] = "access_id"
@@ -3,7 +3,7 @@ from pathlib import Path
3
3
  import pytest
4
4
 
5
5
  from splight_lib.client.database.abstract import AbstractDatabaseClient
6
- from splight_lib.client.datalake.abstract import AbstractDatalakeClient
6
+ from splight_lib.client.datalake.common.abstract import AbstractDatalakeClient
7
7
  from splight_lib.settings import SplightAPIVersion, api_settings
8
8
 
9
9
  # Only load these tests when API_VERSION is v4
@@ -169,6 +169,7 @@ elif api_version == SplightAPIVersion.V4:
169
169
  AssetKind,
170
170
  AssetRelationship,
171
171
  Attribute,
172
+ AttributeDocument,
172
173
  AttributeType,
173
174
  Battery,
174
175
  Boolean,
@@ -179,7 +180,6 @@ elif api_version == SplightAPIVersion.V4:
179
180
  ComponentType,
180
181
  CustomType,
181
182
  DataAddress,
182
- DataRequest,
183
183
  Endpoint,
184
184
  ExternalGrid,
185
185
  File,
@@ -195,8 +195,9 @@ elif api_version == SplightAPIVersion.V4:
195
195
  Number,
196
196
  Output,
197
197
  Parameter,
198
- PipelineStep,
199
198
  PrivacyPolicy,
199
+ Query,
200
+ Records,
200
201
  ResourceSummary,
201
202
  Routine,
202
203
  RoutineEvaluation,
@@ -206,10 +207,10 @@ elif api_version == SplightAPIVersion.V4:
206
207
  Segment,
207
208
  Server,
208
209
  SlackLine,
210
+ SolutionOutputDocument,
209
211
  SplightDatalakeBaseModel,
210
212
  String,
211
213
  Tag,
212
- Trace,
213
214
  Transformer,
214
215
  ValueType,
215
216
  get_field_value,
@@ -235,9 +236,10 @@ elif api_version == SplightAPIVersion.V4:
235
236
  "Parameter",
236
237
  "DB_MODEL_TYPE_MAPPING",
237
238
  "SplightDatalakeBaseModel",
238
- "DataRequest",
239
- "PipelineStep",
240
- "Trace",
239
+ "Query",
240
+ "Records",
241
+ "AttributeDocument",
242
+ "SolutionOutputDocument",
241
243
  "File",
242
244
  "DataAddress",
243
245
  "InputDataAddress",
@@ -6,8 +6,8 @@ from typing import Annotated, Any, Generator, Generic, Literal, Self, TypeVar
6
6
  from pydantic import BaseModel, ConfigDict, Field, PrivateAttr
7
7
 
8
8
  from splight_lib.client.datalake import DatalakeClientBuilder
9
- from splight_lib.client.datalake.abstract import AbstractDatalakeClient
10
- from splight_lib.client.datalake.constants import StepName
9
+ from splight_lib.client.datalake.common.abstract import AbstractDatalakeClient
10
+ from splight_lib.client.datalake.v3.constants import StepName
11
11
  from splight_lib.models._v3.asset import Asset
12
12
  from splight_lib.models._v3.attribute import Attribute
13
13
  from splight_lib.models._v3.exceptions import TraceAlreadyExistsError
@@ -27,8 +27,10 @@ def hash(string: str) -> str:
27
27
 
28
28
  def get_datalake_client() -> AbstractDatalakeClient:
29
29
  return DatalakeClientBuilder.build(
30
- dl_client_type=datalake_settings.DL_CLIENT_TYPE,
30
+ version=api_settings.API_VERSION,
31
+ dl_client_type="sync",
31
32
  parameters={
33
+ "resource": "attributes",
32
34
  "base_url": workspace_settings.SPLIGHT_PLATFORM_API_HOST,
33
35
  "access_id": workspace_settings.SPLIGHT_ACCESS_ID,
34
36
  "secret_key": workspace_settings.SPLIGHT_SECRET_KEY,
@@ -61,7 +61,7 @@ class SplightDatalakeBaseModel(BaseModel):
61
61
  cls, asset, attribute, extra_pipeline, **params
62
62
  )
63
63
  instances = request.apply()
64
- df = pd.DataFrame([instance.dict() for instance in instances])
64
+ df = pd.DataFrame([instance.model_dump() for instance in instances])
65
65
  if not df.empty:
66
66
  df.index = df["timestamp"]
67
67
  df.drop(columns="timestamp", inplace=True)
@@ -27,7 +27,12 @@ from splight_lib.models._v4.component import (
27
27
  get_field_value,
28
28
  )
29
29
  from splight_lib.models._v4.data_address import DataAddresses as DataAddress
30
- from splight_lib.models._v4.datalake import DataRequest, PipelineStep, Trace
30
+ from splight_lib.models._v4.datalake import (
31
+ AttributeDocument,
32
+ Query,
33
+ Records,
34
+ SolutionOutputDocument,
35
+ )
31
36
  from splight_lib.models._v4.datalake_base import SplightDatalakeBaseModel
32
37
  from splight_lib.models._v4.external_grid import ExternalGrid
33
38
  from splight_lib.models._v4.file import File
@@ -73,7 +78,10 @@ __all__ = [
73
78
  "get_field_value",
74
79
  "Parameter",
75
80
  "DB_MODEL_TYPE_MAPPING",
76
- "DataRequest",
81
+ "Query",
82
+ "Records",
83
+ "AttributeDocument",
84
+ "SolutionOutputDocument",
77
85
  "DataAddress",
78
86
  "InputDataAddress",
79
87
  "PipelineStep",