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