splight-lib 5.3.0__tar.gz → 5.24.0.dev2__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 (195) hide show
  1. splight_lib-5.24.0.dev2/.github/workflows/code-style.yaml +21 -0
  2. splight_lib-5.24.0.dev2/.github/workflows/developer.yaml +84 -0
  3. splight_lib-5.24.0.dev2/.github/workflows/pre-release.yaml +71 -0
  4. splight_lib-5.24.0.dev2/.github/workflows/release.yaml +78 -0
  5. splight_lib-5.24.0.dev2/.github/workflows/scripts/check_dev_version.py +28 -0
  6. splight_lib-5.24.0.dev2/.github/workflows/scripts/check_master_version.py +30 -0
  7. splight_lib-5.24.0.dev2/.github/workflows/scripts/check_pypi_version.py +39 -0
  8. splight_lib-5.24.0.dev2/.github/workflows/scripts/check_release_version.py +19 -0
  9. splight_lib-5.24.0.dev2/.github/workflows/scripts/check_version_uploaded.py +35 -0
  10. splight_lib-5.24.0.dev2/.github/workflows/scripts/cleanup_pypi.py +91 -0
  11. splight_lib-5.24.0.dev2/.github/workflows/scripts/requirements.txt +2 -0
  12. splight_lib-5.24.0.dev2/.gitignore +56 -0
  13. splight_lib-5.24.0.dev2/.pre-commit-config.yaml +10 -0
  14. splight_lib-5.24.0.dev2/DOCS.md +246 -0
  15. splight_lib-5.24.0.dev2/Makefile +50 -0
  16. splight_lib-5.24.0.dev2/PKG-INFO +94 -0
  17. splight_lib-5.24.0.dev2/README.md +59 -0
  18. splight_lib-5.24.0.dev2/pyproject.toml +131 -0
  19. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/abstract/client.py +4 -3
  20. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/auth/__init__.py +0 -2
  21. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/client/database/__init__.py +0 -6
  22. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/client/database/abstract.py +3 -4
  23. splight_lib-5.24.0.dev2/splight_lib/client/database/builder.py +11 -0
  24. splight_lib-5.24.0.dev2/splight_lib/client/database/classmap.py +67 -0
  25. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/client/database/remote_client.py +108 -36
  26. splight_lib-5.24.0.dev2/splight_lib/client/datalake/__init__.py +5 -0
  27. splight_lib-5.24.0.dev2/splight_lib/client/datalake/builder.py +27 -0
  28. splight_lib-5.24.0.dev2/splight_lib/client/datalake/common/__init__.py +13 -0
  29. splight_lib-5.24.0.dev2/splight_lib/client/datalake/common/abstract.py +38 -0
  30. {splight_lib-5.3.0/splight_lib/client/datalake → splight_lib-5.24.0.dev2/splight_lib/client/datalake/common}/buffer.py +3 -4
  31. splight_lib-5.24.0.dev2/splight_lib/client/datalake/v3/__init__.py +13 -0
  32. splight_lib-5.24.0.dev2/splight_lib/client/datalake/v3/builder.py +24 -0
  33. splight_lib-5.24.0.dev2/splight_lib/client/datalake/v3/classmap.py +1 -0
  34. splight_lib-5.24.0.dev2/splight_lib/client/datalake/v3/constants.py +31 -0
  35. splight_lib-5.24.0.dev2/splight_lib/client/datalake/v3/exceptions.py +12 -0
  36. splight_lib-5.24.0.dev2/splight_lib/client/datalake/v3/remote_client.py +273 -0
  37. splight_lib-5.24.0.dev2/splight_lib/client/datalake/v4/__init__.py +13 -0
  38. splight_lib-5.24.0.dev2/splight_lib/client/datalake/v4/builder.py +43 -0
  39. splight_lib-5.24.0.dev2/splight_lib/client/datalake/v4/exceptions.py +4 -0
  40. splight_lib-5.24.0.dev2/splight_lib/client/datalake/v4/generic.py +31 -0
  41. splight_lib-5.24.0.dev2/splight_lib/client/datalake/v4/models.py +78 -0
  42. splight_lib-5.24.0.dev2/splight_lib/client/datalake/v4/remote_client.py +272 -0
  43. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/client/exceptions.py +9 -1
  44. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/client/hub/abstract.py +4 -5
  45. splight_lib-5.24.0.dev2/splight_lib/client/hub/client.py +169 -0
  46. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/client/tests/test_database.py +15 -2
  47. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/client/tests/test_datalake.py +13 -6
  48. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/component/abstract.py +11 -13
  49. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/component/spec.py +32 -33
  50. splight_lib-5.24.0.dev2/splight_lib/config.py +122 -0
  51. splight_lib-5.24.0.dev2/splight_lib/conftest.py +47 -0
  52. splight_lib-5.24.0.dev2/splight_lib/constants.py +5 -0
  53. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/encryption.py +1 -2
  54. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/execution/engine.py +4 -4
  55. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/execution/scheduling.py +10 -11
  56. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/execution/task.py +17 -11
  57. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/execution/tests/test_execution.py +2 -2
  58. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/execution/trigger.py +3 -4
  59. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/logging/_internal.py +1 -0
  60. splight_lib-5.24.0.dev2/splight_lib/models/__init__.py +287 -0
  61. splight_lib-5.24.0.dev2/splight_lib/models/_v3/__init__.py +161 -0
  62. splight_lib-5.24.0.dev2/splight_lib/models/_v3/actions.py +21 -0
  63. {splight_lib-5.3.0/splight_lib/models → splight_lib-5.24.0.dev2/splight_lib/models/_v3}/alert.py +43 -36
  64. splight_lib-5.24.0.dev2/splight_lib/models/_v3/asset.py +92 -0
  65. {splight_lib-5.3.0/splight_lib/models → splight_lib-5.24.0.dev2/splight_lib/models/_v3}/attribute.py +4 -5
  66. splight_lib-5.24.0.dev2/splight_lib/models/_v3/bus.py +15 -0
  67. {splight_lib-5.3.0/splight_lib/models → splight_lib-5.24.0.dev2/splight_lib/models/_v3}/component.py +92 -96
  68. splight_lib-5.24.0.dev2/splight_lib/models/_v3/dashboard.py +347 -0
  69. {splight_lib-5.3.0/splight_lib/models → splight_lib-5.24.0.dev2/splight_lib/models/_v3}/data_address.py +3 -5
  70. splight_lib-5.24.0.dev2/splight_lib/models/_v3/datalake.py +192 -0
  71. splight_lib-5.24.0.dev2/splight_lib/models/_v3/datalake_base.py +132 -0
  72. splight_lib-5.24.0.dev2/splight_lib/models/_v3/exceptions.py +85 -0
  73. splight_lib-5.24.0.dev2/splight_lib/models/_v3/external_grid.py +7 -0
  74. {splight_lib-5.3.0/splight_lib/models → splight_lib-5.24.0.dev2/splight_lib/models/_v3}/file.py +12 -16
  75. {splight_lib-5.3.0/splight_lib/models → splight_lib-5.24.0.dev2/splight_lib/models/_v3}/function.py +41 -36
  76. splight_lib-5.24.0.dev2/splight_lib/models/_v3/generator.py +19 -0
  77. {splight_lib-5.3.0/splight_lib/models → splight_lib-5.24.0.dev2/splight_lib/models/_v3}/generic.py +9 -0
  78. splight_lib-5.24.0.dev2/splight_lib/models/_v3/grid.py +6 -0
  79. splight_lib-5.24.0.dev2/splight_lib/models/_v3/hub.py +122 -0
  80. splight_lib-5.24.0.dev2/splight_lib/models/_v3/hub_server.py +26 -0
  81. splight_lib-5.24.0.dev2/splight_lib/models/_v3/inverter.py +28 -0
  82. splight_lib-5.24.0.dev2/splight_lib/models/_v3/line.py +51 -0
  83. splight_lib-5.24.0.dev2/splight_lib/models/_v3/metadata.py +38 -0
  84. {splight_lib-5.3.0/splight_lib/models → splight_lib-5.24.0.dev2/splight_lib/models/_v3}/native.py +28 -18
  85. {splight_lib-5.3.0/splight_lib/models → splight_lib-5.24.0.dev2/splight_lib/models/_v3}/secret.py +4 -4
  86. splight_lib-5.24.0.dev2/splight_lib/models/_v3/segment.py +21 -0
  87. splight_lib-5.24.0.dev2/splight_lib/models/_v3/server.py +195 -0
  88. splight_lib-5.24.0.dev2/splight_lib/models/_v3/slack_generator.py +12 -0
  89. splight_lib-5.24.0.dev2/splight_lib/models/_v3/slack_line.py +14 -0
  90. splight_lib-5.24.0.dev2/splight_lib/models/_v3/tag.py +6 -0
  91. {splight_lib-5.3.0/splight_lib/models → splight_lib-5.24.0.dev2/splight_lib/models/_v3}/tests/models.json +1 -3
  92. {splight_lib-5.3.0/splight_lib/models → splight_lib-5.24.0.dev2/splight_lib/models/_v3}/tests/test_component_object_instance.py +4 -4
  93. splight_lib-5.24.0.dev2/splight_lib/models/_v3/tests/test_database_model.py +156 -0
  94. {splight_lib-5.3.0/splight_lib/models → splight_lib-5.24.0.dev2/splight_lib/models/_v3}/tests/test_metadata.py +1 -1
  95. splight_lib-5.24.0.dev2/splight_lib/models/_v3/three_winding_transformer.py +34 -0
  96. splight_lib-5.24.0.dev2/splight_lib/models/_v3/transformer.py +36 -0
  97. splight_lib-5.24.0.dev2/splight_lib/models/_v3/variable_types.py +18 -0
  98. splight_lib-5.24.0.dev2/splight_lib/models/_v4/__init__.py +120 -0
  99. splight_lib-5.24.0.dev2/splight_lib/models/_v4/asset.py +69 -0
  100. splight_lib-5.24.0.dev2/splight_lib/models/_v4/attribute.py +19 -0
  101. splight_lib-5.24.0.dev2/splight_lib/models/_v4/base.py +24 -0
  102. splight_lib-5.24.0.dev2/splight_lib/models/_v4/battery.py +33 -0
  103. splight_lib-5.24.0.dev2/splight_lib/models/_v4/bus.py +27 -0
  104. splight_lib-5.24.0.dev2/splight_lib/models/_v4/component.py +602 -0
  105. splight_lib-5.24.0.dev2/splight_lib/models/_v4/data_address.py +33 -0
  106. splight_lib-5.24.0.dev2/splight_lib/models/_v4/datalake_base.py +131 -0
  107. splight_lib-5.24.0.dev2/splight_lib/models/_v4/exceptions.py +76 -0
  108. splight_lib-5.24.0.dev2/splight_lib/models/_v4/external_grid.py +8 -0
  109. splight_lib-5.24.0.dev2/splight_lib/models/_v4/file.py +55 -0
  110. splight_lib-5.24.0.dev2/splight_lib/models/_v4/generator.py +44 -0
  111. splight_lib-5.24.0.dev2/splight_lib/models/_v4/generic.py +43 -0
  112. splight_lib-5.24.0.dev2/splight_lib/models/_v4/grid.py +9 -0
  113. splight_lib-5.24.0.dev2/splight_lib/models/_v4/hub.py +122 -0
  114. splight_lib-5.24.0.dev2/splight_lib/models/_v4/hub_server.py +26 -0
  115. splight_lib-5.24.0.dev2/splight_lib/models/_v4/line.py +95 -0
  116. splight_lib-5.24.0.dev2/splight_lib/models/_v4/load.py +14 -0
  117. splight_lib-5.24.0.dev2/splight_lib/models/_v4/metadata.py +43 -0
  118. splight_lib-5.24.0.dev2/splight_lib/models/_v4/native.py +134 -0
  119. splight_lib-5.24.0.dev2/splight_lib/models/_v4/secret.py +18 -0
  120. splight_lib-5.24.0.dev2/splight_lib/models/_v4/segment.py +31 -0
  121. splight_lib-5.24.0.dev2/splight_lib/models/_v4/server.py +195 -0
  122. splight_lib-5.24.0.dev2/splight_lib/models/_v4/slack_line.py +9 -0
  123. splight_lib-5.24.0.dev2/splight_lib/models/_v4/solution.py +30 -0
  124. splight_lib-5.24.0.dev2/splight_lib/models/_v4/tag.py +6 -0
  125. splight_lib-5.24.0.dev2/splight_lib/models/_v4/transformer.py +44 -0
  126. splight_lib-5.24.0.dev2/splight_lib/models/_v4/variable_types.py +18 -0
  127. splight_lib-5.24.0.dev2/splight_lib/models/database.py +80 -0
  128. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/restclient/client.py +81 -84
  129. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/restclient/tests/test_restclient.py +2 -3
  130. splight_lib-5.24.0.dev2/splight_lib/server/__init__.py +5 -0
  131. splight_lib-5.24.0.dev2/splight_lib/server/exceptions.py +3 -0
  132. splight_lib-5.24.0.dev2/splight_lib/server/server.py +15 -0
  133. splight_lib-5.24.0.dev2/splight_lib/settings.py +87 -0
  134. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/testing/__init__.py +5 -8
  135. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/tests/test_api_contracts.py +17 -27
  136. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/utils/custom_model.py +8 -8
  137. splight_lib-5.24.0.dev2/uv.lock +1989 -0
  138. splight_lib-5.3.0/PKG-INFO +0 -80
  139. splight_lib-5.3.0/README.md +0 -38
  140. splight_lib-5.3.0/pyproject.toml +0 -73
  141. splight_lib-5.3.0/splight_lib/auth/exceptions.py +0 -12
  142. splight_lib-5.3.0/splight_lib/auth/mac_auth.py +0 -96
  143. splight_lib-5.3.0/splight_lib/client/database/builder.py +0 -17
  144. splight_lib-5.3.0/splight_lib/client/database/classmap.py +0 -28
  145. splight_lib-5.3.0/splight_lib/client/database/local_client.py +0 -187
  146. splight_lib-5.3.0/splight_lib/client/datalake/__init__.py +0 -9
  147. splight_lib-5.3.0/splight_lib/client/datalake/abstract.py +0 -71
  148. splight_lib-5.3.0/splight_lib/client/datalake/builder.py +0 -24
  149. splight_lib-5.3.0/splight_lib/client/datalake/exceptions.py +0 -6
  150. splight_lib-5.3.0/splight_lib/client/datalake/local_client.py +0 -119
  151. splight_lib-5.3.0/splight_lib/client/datalake/remote_client.py +0 -272
  152. splight_lib-5.3.0/splight_lib/client/datalake/schemas.py +0 -56
  153. splight_lib-5.3.0/splight_lib/client/file_handler.py +0 -34
  154. splight_lib-5.3.0/splight_lib/client/filter.py +0 -18
  155. splight_lib-5.3.0/splight_lib/client/hub/client.py +0 -96
  156. splight_lib-5.3.0/splight_lib/component/tests/test_abstract.py +0 -1
  157. splight_lib-5.3.0/splight_lib/constants.py +0 -8
  158. splight_lib-5.3.0/splight_lib/models/__init__.py +0 -54
  159. splight_lib-5.3.0/splight_lib/models/asset.py +0 -49
  160. splight_lib-5.3.0/splight_lib/models/base.py +0 -188
  161. splight_lib-5.3.0/splight_lib/models/dashboard.py +0 -95
  162. splight_lib-5.3.0/splight_lib/models/exceptions.py +0 -34
  163. splight_lib-5.3.0/splight_lib/models/hub.py +0 -205
  164. splight_lib-5.3.0/splight_lib/models/metadata.py +0 -21
  165. splight_lib-5.3.0/splight_lib/models/pipeline.py +0 -81
  166. splight_lib-5.3.0/splight_lib/models/tests/test_database_model.py +0 -133
  167. splight_lib-5.3.0/splight_lib/settings.py +0 -100
  168. splight_lib-5.3.0/splight_lib/stringcase.py +0 -23
  169. splight_lib-5.3.0/splight_lib/tests/test_encryption.py +0 -1
  170. splight_lib-5.3.0/splight_lib/utils/hub.py +0 -24
  171. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/LICENSE.txt +0 -0
  172. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/__init__.py +0 -0
  173. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/abstract/__init__.py +0 -0
  174. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/auth/token.py +0 -0
  175. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/client/__init__.py +0 -0
  176. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/client/hub/__init__.py +0 -0
  177. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/component/__init__.py +0 -0
  178. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/component/exceptions.py +0 -0
  179. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/component/tests/test_spec.py +0 -0
  180. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/execution/__init__.py +0 -0
  181. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/execution/exceptions.py +0 -0
  182. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/execution/tests/test_scheduling.py +0 -0
  183. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/logging/__init__.py +0 -0
  184. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/logging/component.py +0 -0
  185. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/logging/constants.py +0 -0
  186. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/logging/logging.py +0 -0
  187. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/logging/tests/test_logging.py +0 -0
  188. {splight_lib-5.3.0/splight_lib/models → splight_lib-5.24.0.dev2/splight_lib/models/_v3}/tests/test_models.py +0 -0
  189. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/restclient/__init__.py +0 -0
  190. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/restclient/exceptions.py +0 -0
  191. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/restclient/types.py +0 -0
  192. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/tests/FakeProc.py +0 -0
  193. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/tests/asset_geometries.json +0 -0
  194. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/utils/__init__.py +0 -0
  195. {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/version.py +0 -0
@@ -0,0 +1,21 @@
1
+ name: Code Quality
2
+
3
+ on:
4
+ pull_request:
5
+ branches:
6
+ - master
7
+
8
+ jobs:
9
+ format:
10
+ runs-on: ubuntu-latest
11
+ name: Check Code Quality and Format
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+ - name: Install Python
15
+ uses: actions/setup-python@v5
16
+ with:
17
+ python-version: "3.11"
18
+ - name: Install latest uv and set Python version
19
+ uses: astral-sh/setup-uv@v6
20
+ - name: Lint
21
+ run: make check-format
@@ -0,0 +1,84 @@
1
+ # used when creating a feature branch for development
2
+ # enabling the creation of dev versions (x.y.z-devN) that are uploaded to pypi
3
+ # if the version is correct, that is, greater than the version of master and pypi
4
+ name: Developer
5
+ on: workflow_dispatch
6
+
7
+ env:
8
+ LIBRARY_NAME: "splight-lib"
9
+
10
+ jobs:
11
+ verify_version:
12
+ runs-on: ubuntu-latest
13
+ name: Verify version is higher than last PyPi package and master version
14
+ steps:
15
+ # get master version
16
+ - name: Checkout to master
17
+ uses: actions/checkout@v3
18
+ with:
19
+ ref: master
20
+
21
+ - name: Get version from master branch
22
+ run: echo "MASTER_VERSION=$(grep version pyproject.toml | head -1 | awk '{print $3}' | tr -d '\"')" >> "$GITHUB_ENV"
23
+
24
+ # get current branch version
25
+ - name: Checkout to feature branch
26
+ uses: actions/checkout@v3
27
+
28
+ - name: Checks if you are in the master branch
29
+ if: ${{ github.ref == 'refs/heads/master' }}
30
+ run: |
31
+ echo "Cannot run this action in the master branch."
32
+ exit 1
33
+
34
+ - name: Get version from feature branch
35
+ run: echo "CURRENT_VERSION=$(grep version pyproject.toml | head -1 | awk '{print $3}' | tr -d '\"')" >> "$GITHUB_ENV"
36
+
37
+ - name: Set up Python
38
+ uses: actions/setup-python@v3
39
+ with:
40
+ python-version: "3.11"
41
+
42
+ # validate versions
43
+ - name: Validates version is a dev version.
44
+ run: python3 .github/workflows/scripts/check_dev_version.py ${{ env.CURRENT_VERSION }}
45
+
46
+ - name: Verifies the dev version is not uploaded.
47
+ run: python .github/workflows/scripts/check_version_uploaded.py ${{ env.CURRENT_VERSION }} $LIBRARY_NAME
48
+
49
+ upload_developer_to_pypi:
50
+ runs-on: ubuntu-latest
51
+ name: Upload the version to pypi only if it's a developer version
52
+ needs: [verify_version]
53
+ steps:
54
+ - name: Checkout to feature branch
55
+ uses: actions/checkout@v3
56
+
57
+ - name: Get version from feature branch
58
+ run: echo "CURRENT_VERSION=$(grep version pyproject.toml | head -1 | awk '{print $3}' | tr -d '\"')" >> "$GITHUB_ENV"
59
+
60
+ - name: Set up Python
61
+ uses: actions/setup-python@v3
62
+ with:
63
+ python-version: "3.11"
64
+
65
+ - name: Install latest uv and set Python version
66
+ uses: astral-sh/setup-uv@v6
67
+
68
+ - name: Build package
69
+ run: uv build
70
+
71
+ - name: Load variable to decide whether to publish package
72
+ run: |
73
+ if [[ $CURRENT_VERSION =~ "dev" ]]; then
74
+ echo "PUBLISH_PACKAGE=true" >> "$GITHUB_ENV"
75
+ else
76
+ echo "PUBLISH_PACKAGE=false" >> "$GITHUB_ENV"
77
+ fi
78
+
79
+ - name: Publish package
80
+ uses: pypa/gh-action-pypi-publish@27b31702a0e7fc50959f5ad993c78deac1bdfc29
81
+ if: ${{ env.PUBLISH_PACKAGE == 'true' }}
82
+ with:
83
+ user: __token__
84
+ password: ${{ secrets.PYPI_API_TOKEN }}
@@ -0,0 +1,71 @@
1
+ # used when creating a pull request
2
+ # this step runs the tests, coding style and validates that the version is
3
+ # release and greater than the version of master and pypi
4
+ name: Pre Release
5
+ on:
6
+ pull_request:
7
+ types:
8
+ [opened, synchronize]
9
+ branches:
10
+ - master
11
+
12
+ env:
13
+ LIBRARY_NAME: "splight-lib"
14
+
15
+ jobs:
16
+ run_tests_and_coding_style:
17
+ runs-on: ubuntu-latest
18
+ name: Verify library tests and coding style
19
+ steps:
20
+ - name: Checkout to feature branch
21
+ uses: actions/checkout@v3
22
+
23
+ - name: Set up Python
24
+ uses: actions/setup-python@v3
25
+ with:
26
+ python-version: "3.11"
27
+
28
+ - name: Install latest uv and set Python version
29
+ uses: astral-sh/setup-uv@v6
30
+
31
+ - name: Install dependencies
32
+ run: |
33
+ uv sync
34
+
35
+ - name: Run tests
36
+ run: make test
37
+
38
+ verify_version:
39
+ runs-on: ubuntu-latest
40
+ name: Verify version is a valid release version and is higher than last PyPi package and master version
41
+ steps:
42
+ # get master version
43
+ - name: Checkout to master
44
+ uses: actions/checkout@v3
45
+ with:
46
+ ref: master
47
+
48
+ - name: Get version from master branch
49
+ run: echo "MASTER_VERSION=$(grep version pyproject.toml | head -1 | awk '{print $3}' | tr -d '\"')" >> "$GITHUB_ENV"
50
+
51
+ # get current branch version
52
+ - name: Checkout to feature branch
53
+ uses: actions/checkout@v3
54
+
55
+ - name: Set up Python
56
+ uses: actions/setup-python@v3
57
+ with:
58
+ python-version: "3.11"
59
+
60
+ - name: Get version from feature branch
61
+ run: echo "CURRENT_VERSION=$(grep version pyproject.toml | head -1 | awk '{print $3}' | tr -d '\"')" >> "$GITHUB_ENV"
62
+
63
+ # validate versions
64
+ - name: Verify version is a valid release version
65
+ run: python .github/workflows/scripts/check_release_version.py ${{ env.CURRENT_VERSION }}
66
+
67
+ - name: Verify version is greater than last pypi uploaded version
68
+ run: python .github/workflows/scripts/check_pypi_version.py ${{ env.CURRENT_VERSION }} $LIBRARY_NAME
69
+
70
+ - name: Verify version is greater than master version
71
+ run: python .github/workflows/scripts/check_master_version.py ${{ env.MASTER_VERSION }} ${{ env.CURRENT_VERSION }}
@@ -0,0 +1,78 @@
1
+ # used when a new feature has already been merged to master
2
+ # this step creates a new tag in the github repository, pushes the release
3
+ # version to pypi and deletes all dev versions
4
+ name: Release
5
+ on:
6
+ push:
7
+ branches:
8
+ - master
9
+
10
+ env:
11
+ LIBRARY_NAME: "splight-lib"
12
+
13
+ jobs:
14
+ tag_version:
15
+ runs-on: ubuntu-latest
16
+ name: Create tag version on github repository
17
+ steps:
18
+ - name: Checkout to feature branch
19
+ uses: actions/checkout@v3
20
+
21
+ - name: Get version from feature branch
22
+ run: echo "CURRENT_VERSION=$(grep version pyproject.toml | head -1 | awk '{print $3}' | tr -d '\"')" >> "$GITHUB_ENV"
23
+
24
+ - name: Create tag
25
+ uses: softprops/action-gh-release@v1
26
+ env:
27
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
28
+ with:
29
+ name: Release ${{ env.CURRENT_VERSION }}
30
+ tag_name: ${{ env.CURRENT_VERSION }}
31
+
32
+ upload_release_to_pypi:
33
+ runs-on: ubuntu-latest
34
+ name: Upload release library version to pypi
35
+ needs: [tag_version]
36
+ steps:
37
+ - name: Checkout to feature branch
38
+ uses: actions/checkout@v3
39
+
40
+ - name: Set up Python 3.11
41
+ uses: actions/setup-python@v5
42
+ with:
43
+ python-version: "3.11"
44
+
45
+ - name: Install latest uv and set Python version
46
+ uses: astral-sh/setup-uv@v6
47
+
48
+ - name: Build package
49
+ run: uv build
50
+
51
+ - name: Publish package
52
+ uses: pypa/gh-action-pypi-publish@27b31702a0e7fc50959f5ad993c78deac1bdfc29
53
+ with:
54
+ user: __token__
55
+ password: ${{ secrets.PYPI_API_TOKEN }}
56
+
57
+ cleanup_pypi:
58
+ runs-on: ubuntu-latest
59
+ name: Remove all developer versions from pypi
60
+ needs: [upload_release_to_pypi]
61
+ steps:
62
+ - name: Checkout to feature branch
63
+ uses: actions/checkout@v3
64
+
65
+ - name: Set up Python 3.11
66
+ uses: actions/setup-python@v5
67
+ with:
68
+ python-version: "3.11"
69
+
70
+ # install requests and pypi-cleanup
71
+ - name: Install requirements
72
+ run: pip install -r .github/workflows/scripts/requirements.txt
73
+
74
+ - name: Get version from feature branch
75
+ run: echo "CURRENT_VERSION=$(grep version pyproject.toml | head -1 | awk '{print $3}' | tr -d '\"')" >> "$GITHUB_ENV"
76
+
77
+ - name: Remove all developer versions from pypi
78
+ run: python .github/workflows/scripts/cleanup_pypi.py $LIBRARY_NAME ${{ env.CURRENT_VERSION }} ${{ secrets.PYPI_USERNAME }} ${{ secrets.PYPI_PASSWORD }}
@@ -0,0 +1,28 @@
1
+ import sys
2
+
3
+ from pkg_resources import parse_version as parse
4
+
5
+
6
+ class VersionError(Exception):
7
+ """Raised when the version is not a developer version."""
8
+
9
+ ...
10
+
11
+
12
+ if __name__ == "__main__":
13
+ """Checks if the version is a developer version.
14
+
15
+ Parameters
16
+ ----------
17
+ version: The version from the feature branch
18
+
19
+ Raises
20
+ ------
21
+ VersionError if the version is not a developer version
22
+ """
23
+ version_line = sys.argv[1]
24
+
25
+ version = parse(version_line)
26
+
27
+ if not (version.is_prerelease or version.is_devrelease):
28
+ raise VersionError(f"Version {version} is not a developer version")
@@ -0,0 +1,30 @@
1
+ import sys
2
+
3
+ from pkg_resources import parse_version as parse
4
+
5
+
6
+ class VersionError(Exception):
7
+ """Raised when the feature version is not greater than the master
8
+ version."""
9
+
10
+
11
+ if __name__ == "__main__":
12
+ """Compares versions between the local repository and master.
13
+
14
+ Args:
15
+ old_version (arg 1) (str): local version number (x.y.z)
16
+ new_version (arg 2) (str): master version number (x.y.x)
17
+ Raises:
18
+ VersionError: if the local version is not greater than master version
19
+ """
20
+ old_version_line = sys.argv[1]
21
+ new_version_line = sys.argv[2]
22
+
23
+ master_version = parse(old_version_line)
24
+ project_version = parse(new_version_line)
25
+
26
+ if project_version <= master_version:
27
+ raise VersionError(
28
+ f"Feature version {project_version} is not greater than "
29
+ f"master version {master_version}"
30
+ )
@@ -0,0 +1,39 @@
1
+ import json
2
+ import sys
3
+ import urllib.request
4
+
5
+ from pkg_resources import parse_version as parse
6
+
7
+
8
+ class PypiVersionError(Exception):
9
+ """Raised when the version is not greater than the one on pypi."""
10
+
11
+
12
+ def get_pypi_version(project_name: str):
13
+ url = f"https://pypi.org/pypi/{project_name}/json"
14
+ response = urllib.request.urlopen(url)
15
+ version = json.loads(response.read())["info"]["version"]
16
+ return parse(version)
17
+
18
+
19
+ if __name__ == "__main__":
20
+ """Compares versions between the local repository and the package on pypi.
21
+
22
+ Args:
23
+ local_version (arg 1) (str): local version number (x.y.z)
24
+ project_name (arg 2) (str): name of the project on pypi
25
+ Raises:
26
+ PypiVersionError: if the local version is not greater than the one on
27
+ pypi
28
+ """
29
+ local_version = sys.argv[1]
30
+ project_name = sys.argv[2]
31
+
32
+ project_version = parse(local_version)
33
+ public_project_version = get_pypi_version(project_name)
34
+
35
+ if project_version <= public_project_version:
36
+ raise PypiVersionError(
37
+ f"Feature version {project_version} is not greater than "
38
+ f"uploaded version {public_project_version}"
39
+ )
@@ -0,0 +1,19 @@
1
+ import sys
2
+
3
+ from pkg_resources import parse_version as parse
4
+
5
+ if __name__ == "__main__":
6
+ """Verify if the format is release for a given string version.
7
+
8
+ Example:
9
+ - x.y.z: it's OK.
10
+ - x.y.x.dev0: raises InvalidReleaseVersion
11
+
12
+ Args:
13
+ version (arg 1) (str): current lib version number (x.y.z)
14
+ Raises:
15
+ InvalidReleaseVersion: if the current version is not a release
16
+ version.
17
+ """
18
+ string_version = sys.argv[1]
19
+ parse(string_version)
@@ -0,0 +1,35 @@
1
+ import json
2
+ import sys
3
+ import urllib.request
4
+
5
+ from pkg_resources import parse_version as parse
6
+
7
+
8
+ class PypiVersionError(Exception):
9
+ """Raised if the local version was already uploaded to pypi."""
10
+
11
+
12
+ def get_pypi_versions(project_name: str):
13
+ url = f"https://pypi.org/pypi/{project_name}/json"
14
+ response = urllib.request.urlopen(url)
15
+ return [parse(r) for r in json.loads(response.read())["releases"].keys()]
16
+
17
+
18
+ if __name__ == "__main__":
19
+ """Checks the version was not uploaded.
20
+
21
+ Args:
22
+ local_version (arg 1) (str): local version number (x.y.z)
23
+ project_name (arg 2) (str): name of the project on pypi
24
+ Raises:
25
+ PypiVersionError: if the local version was already uploaded to pypi
26
+ """
27
+ local_version = sys.argv[1]
28
+ project_name = sys.argv[2]
29
+
30
+ project_version = parse(local_version)
31
+ uploaded_versions = get_pypi_versions(project_name)
32
+ if project_version in uploaded_versions:
33
+ raise PypiVersionError(
34
+ f"Feature version {project_version} is already uploaded to pypi."
35
+ )
@@ -0,0 +1,91 @@
1
+ import logging
2
+ import sys
3
+
4
+ import requests
5
+ from pypi_cleanup import CsfrParser
6
+
7
+
8
+ def delete_developer_versions(
9
+ package_name: str, release_version: str, username: str, password: str
10
+ ):
11
+ with requests.Session() as session:
12
+ # generate csrf token
13
+ with session.get("https://pypi.org/account/login/") as response:
14
+ response.raise_for_status()
15
+ form_action = "/account/login/"
16
+ parser = CsfrParser(form_action)
17
+ parser.feed(response.text)
18
+ if not parser.csrf:
19
+ raise ValueError(f"No CSFR found in {form_action}")
20
+ csrf = parser.csrf
21
+
22
+ # validate login
23
+ with session.post(
24
+ "https://pypi.org/account/login/",
25
+ data={
26
+ "csrf_token": csrf,
27
+ "username": username,
28
+ "password": password,
29
+ },
30
+ headers={"referer": "https://pypi.org/account/login/"},
31
+ ) as response:
32
+ response.raise_for_status()
33
+ if response.url == "https://pypi.org/account/login/":
34
+ logging.error(f"Login for user {username} failed")
35
+ return 1
36
+
37
+ # get developer versions to delete
38
+ with session.get(
39
+ f"https://pypi.org/pypi/{package_name}/json"
40
+ ) as response:
41
+ versions = list(response.json()["releases"].keys())
42
+ to_delete = [
43
+ version
44
+ for version in versions
45
+ if "dev" in version and release_version in version
46
+ ]
47
+
48
+ # delete versions
49
+ for version in to_delete:
50
+ logging.info(f"Deleting {package_name} version {version}")
51
+ form_action = f"/manage/project/{package_name}/release/{version}/"
52
+ form_url = f"https://pypi.org{form_action}"
53
+ with session.get(form_url) as response:
54
+ response.raise_for_status()
55
+ parser = CsfrParser(form_action, "confirm_delete_version")
56
+ parser.feed(response.text)
57
+ if not parser.csrf:
58
+ raise ValueError(f"No CSFR found in {form_action}")
59
+ csrf = parser.csrf
60
+ referer = response.url
61
+
62
+ with session.post(
63
+ form_url,
64
+ data={"csrf_token": csrf, "confirm_delete_version": version},
65
+ headers={"referer": referer},
66
+ ) as response:
67
+ response.raise_for_status()
68
+
69
+
70
+ if __name__ == "__main__":
71
+ """Remove all developer version from given release version
72
+
73
+ Args:
74
+ package_name (arg 1) (str): library package name (splight-lib)
75
+ release_version (arg 2) (str): current release version (x.y.z)
76
+ username (arg 3) (str): pypi account username
77
+ password (arg 4) (str): pypi account password
78
+ Raises:
79
+ ValueError: When CSRF fails.
80
+ """
81
+ package_name = sys.argv[1]
82
+ release_version = sys.argv[2]
83
+ username = sys.argv[3]
84
+ password = sys.argv[4]
85
+
86
+ public_project_version = delete_developer_versions(
87
+ package_name=package_name,
88
+ release_version=release_version,
89
+ username=username,
90
+ password=password,
91
+ )
@@ -0,0 +1,2 @@
1
+ requests==2.32.2
2
+ pypi-cleanup==0.1.4
@@ -0,0 +1,56 @@
1
+ .env/*
2
+ build/*
3
+ splight_lib.egg-info/*
4
+ db.sqlite3
5
+ # These are some examples of commonly ignored file patterns.
6
+ # You should customize this list as applicable to your project.
7
+ # Learn more about .gitignore:
8
+ # https://www.atlassian.com/git/tutorials/saving-changes/gitignore
9
+
10
+ # Node artifact files
11
+ node_modules/
12
+ dist/
13
+
14
+ # Compiled Java class files
15
+ *.class
16
+
17
+ # Compiled Python bytecode
18
+ *.py[cod]
19
+
20
+ # Log files
21
+ *.log
22
+
23
+ # Package files
24
+ *.jar
25
+
26
+ # Maven
27
+ target/
28
+ dist/
29
+
30
+ # JetBrains IDE
31
+ .idea/
32
+
33
+ # Unit test reports
34
+ TEST*.xml
35
+
36
+ # Generated by MacOS
37
+ .DS_Store
38
+
39
+ # Generated by Windows
40
+ Thumbs.db
41
+
42
+ # Applications
43
+ *.app
44
+ *.exe
45
+ *.war
46
+
47
+ # Large media files
48
+ *.mp4
49
+ *.tiff
50
+ *.avi
51
+ *.flv
52
+ *.mov
53
+ *.wmv
54
+ #vscode
55
+ .vscode
56
+ mise.toml
@@ -0,0 +1,10 @@
1
+ repos:
2
+ - repo: https://github.com/astral-sh/ruff-pre-commit
3
+ # Ruff version.
4
+ rev: v0.12.1
5
+ hooks:
6
+ # Run the linter.
7
+ - id: ruff-check
8
+ args: [ --fix ]
9
+ # Run the formatter.
10
+ - id: ruff-format