cgse 0.17.1__tar.gz → 0.17.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 (570) hide show
  1. {cgse-0.17.1 → cgse-0.17.2}/.env.example +6 -1
  2. {cgse-0.17.1 → cgse-0.17.2}/.gitignore +5 -0
  3. cgse-0.17.2/.pylintrc +5 -0
  4. cgse-0.17.2/CHANGELOG.md +230 -0
  5. {cgse-0.17.1 → cgse-0.17.2}/PKG-INFO +1 -1
  6. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/pyproject.toml +14 -6
  7. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/egse/bits.py +14 -17
  8. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/egse/decorators.py +6 -3
  9. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/egse/env.py +2 -1
  10. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/egse/exceptions.py +3 -0
  11. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/egse/log.py +7 -8
  12. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/egse/scpi.py +13 -7
  13. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/egse/settings.py +31 -0
  14. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/egse/socketdevice.py +1 -1
  15. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/egse/system.py +63 -24
  16. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/egse/version.py +24 -13
  17. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/scripts/handle_sigterm.py +4 -0
  18. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/test_bits.py +3 -3
  19. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/test_process.py +8 -5
  20. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/test_ratelimit.py +1 -1
  21. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/test_settings.py +27 -0
  22. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/test_system.py +99 -6
  23. cgse-0.17.2/libs/cgse-common/tests/test_version.py +262 -0
  24. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-coordinates/pyproject.toml +1 -1
  25. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/pyproject.toml +17 -9
  26. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/service_registry.db +0 -0
  27. {cgse-0.17.1 → cgse-0.17.2/libs/cgse-core}/service_registry.db-shm +0 -0
  28. cgse-0.17.2/libs/cgse-core/service_registry.db-wal +0 -0
  29. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/async_control.py +6 -5
  30. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/connect.py +12 -0
  31. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/dummy.py +19 -3
  32. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/logger/__init__.py +2 -2
  33. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/notifyhub/server.py +3 -1
  34. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/registry/client.py +9 -3
  35. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/registry/server.py +11 -3
  36. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/registry/service.py +11 -5
  37. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/tests/fixtures/helpers.py +61 -1
  38. cgse-0.17.2/libs/cgse-core/tests/fixtures/log_cs.start.out +13 -0
  39. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/tests/fixtures/services.py +65 -16
  40. cgse-0.17.2/libs/cgse-core/tests/test_async_control.py +68 -0
  41. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/tests/test_client_server_interaction.py +3 -8
  42. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/tests/test_cm_cs.py +3 -43
  43. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/tests/test_connect.py +27 -4
  44. cgse-0.17.2/libs/cgse-core/tests/test_dummy.py +153 -0
  45. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/tests/test_event_notification.py +6 -2
  46. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/tests/test_logger.py +23 -10
  47. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/tests/test_proxy.py +4 -3
  48. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/tests/test_registry_service.py +8 -8
  49. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/tests/test_server_running.py +14 -8
  50. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/tests/test_server_running_with_fixture.py +12 -7
  51. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/tests/test_zmq_microservice.py +19 -7
  52. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/pyproject.toml +1 -1
  53. {cgse-0.17.1 → cgse-0.17.2}/make-a-release.md +1 -0
  54. {cgse-0.17.1 → cgse-0.17.2}/projects/ariel/ariel-tcu/pyproject.toml +1 -1
  55. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/cgse-tools/pyproject.toml +1 -1
  56. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/keithley-tempcontrol/pyproject.toml +1 -1
  57. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_sim.py +98 -42
  58. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/keithley-tempcontrol/tests/test_adev.py +84 -9
  59. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/lakeshore-tempcontrol/pyproject.toml +1 -1
  60. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/symetrie-hexapod/pyproject.toml +1 -1
  61. {cgse-0.17.1 → cgse-0.17.2}/projects/plato/plato-fits/pyproject.toml +1 -1
  62. {cgse-0.17.1 → cgse-0.17.2}/projects/plato/plato-hdf5/pyproject.toml +1 -1
  63. {cgse-0.17.1 → cgse-0.17.2}/projects/plato/plato-spw/pyproject.toml +1 -1
  64. {cgse-0.17.1 → cgse-0.17.2}/pyproject.toml +5 -1
  65. cgse-0.17.2/scratch/mock-version.py +3 -0
  66. cgse-0.17.2/scratch/test_version_behavior.py +35 -0
  67. cgse-0.17.2/scratch/understanding-the-mocking-library.py +82 -0
  68. cgse-0.17.2/scratch/understanding_the_with_statement.py +37 -0
  69. {cgse-0.17.1 → cgse-0.17.2}/service_registry.db +0 -0
  70. cgse-0.17.1/CHANGELOG.md +0 -151
  71. cgse-0.17.1/libs/cgse-core/tests/test_async_control.py +0 -53
  72. cgse-0.17.1/libs/cgse-core/tests/test_dummy.py +0 -68
  73. cgse-0.17.1/service_registry.db-wal +0 -0
  74. {cgse-0.17.1 → cgse-0.17.2}/.github/workflows/ruff-format-check.yaml +0 -0
  75. {cgse-0.17.1 → cgse-0.17.2}/README.md +0 -0
  76. {cgse-0.17.1 → cgse-0.17.2}/bump.py +0 -0
  77. {cgse-0.17.1 → cgse-0.17.2}/conftest.py +0 -0
  78. {cgse-0.17.1 → cgse-0.17.2}/docs/api/bits.md +0 -0
  79. {cgse-0.17.1 → cgse-0.17.2}/docs/api/calibration.md +0 -0
  80. {cgse-0.17.1 → cgse-0.17.2}/docs/api/command.md +0 -0
  81. {cgse-0.17.1 → cgse-0.17.2}/docs/api/config.md +0 -0
  82. {cgse-0.17.1 → cgse-0.17.2}/docs/api/control.md +0 -0
  83. {cgse-0.17.1 → cgse-0.17.2}/docs/api/counter.md +0 -0
  84. {cgse-0.17.1 → cgse-0.17.2}/docs/api/decorators.md +0 -0
  85. {cgse-0.17.1 → cgse-0.17.2}/docs/api/device.md +0 -0
  86. {cgse-0.17.1 → cgse-0.17.2}/docs/api/dicts.md +0 -0
  87. {cgse-0.17.1 → cgse-0.17.2}/docs/api/dummy.md +0 -0
  88. {cgse-0.17.1 → cgse-0.17.2}/docs/api/env.md +0 -0
  89. {cgse-0.17.1 → cgse-0.17.2}/docs/api/exceptions.md +0 -0
  90. {cgse-0.17.1 → cgse-0.17.2}/docs/api/heartbeat.md +0 -0
  91. {cgse-0.17.1 → cgse-0.17.2}/docs/api/hk.md +0 -0
  92. {cgse-0.17.1 → cgse-0.17.2}/docs/api/index.md +0 -0
  93. {cgse-0.17.1 → cgse-0.17.2}/docs/api/listener.md +0 -0
  94. {cgse-0.17.1 → cgse-0.17.2}/docs/api/metrics.md +0 -0
  95. {cgse-0.17.1 → cgse-0.17.2}/docs/api/mixin.md +0 -0
  96. {cgse-0.17.1 → cgse-0.17.2}/docs/api/monitoring.md +0 -0
  97. {cgse-0.17.1 → cgse-0.17.2}/docs/api/observer.md +0 -0
  98. {cgse-0.17.1 → cgse-0.17.2}/docs/api/obsid.md +0 -0
  99. {cgse-0.17.1 → cgse-0.17.2}/docs/api/persistence.md +0 -0
  100. {cgse-0.17.1 → cgse-0.17.2}/docs/api/plugin.md +0 -0
  101. {cgse-0.17.1 → cgse-0.17.2}/docs/api/process.md +0 -0
  102. {cgse-0.17.1 → cgse-0.17.2}/docs/api/reload.md +0 -0
  103. {cgse-0.17.1 → cgse-0.17.2}/docs/api/settings.md +0 -0
  104. {cgse-0.17.1 → cgse-0.17.2}/docs/api/setup.md +0 -0
  105. {cgse-0.17.1 → cgse-0.17.2}/docs/api/system.md +0 -0
  106. {cgse-0.17.1 → cgse-0.17.2}/docs/custom_theme/main.html +0 -0
  107. {cgse-0.17.1 → cgse-0.17.2}/docs/dev_guide/coding_style.md +0 -0
  108. {cgse-0.17.1 → cgse-0.17.2}/docs/dev_guide/docs.md +0 -0
  109. {cgse-0.17.1 → cgse-0.17.2}/docs/dev_guide/dotenv.md +0 -0
  110. {cgse-0.17.1 → cgse-0.17.2}/docs/dev_guide/index.md +0 -0
  111. {cgse-0.17.1 → cgse-0.17.2}/docs/dev_guide/installation.md +0 -0
  112. {cgse-0.17.1 → cgse-0.17.2}/docs/dev_guide/monitoring.md +0 -0
  113. {cgse-0.17.1 → cgse-0.17.2}/docs/dev_guide/monorepo.md +0 -0
  114. {cgse-0.17.1 → cgse-0.17.2}/docs/dev_guide/nox.md +0 -0
  115. {cgse-0.17.1 → cgse-0.17.2}/docs/dev_guide/plugins.md +0 -0
  116. {cgse-0.17.1 → cgse-0.17.2}/docs/dev_guide/project-configuration.md +0 -0
  117. {cgse-0.17.1 → cgse-0.17.2}/docs/dev_guide/unit_testing.md +0 -0
  118. {cgse-0.17.1 → cgse-0.17.2}/docs/dev_guide/uv.md +0 -0
  119. {cgse-0.17.1 → cgse-0.17.2}/docs/dev_guide/versioning.md +0 -0
  120. {cgse-0.17.1 → cgse-0.17.2}/docs/getting_started.md +0 -0
  121. {cgse-0.17.1 → cgse-0.17.2}/docs/help.md +0 -0
  122. {cgse-0.17.1 → cgse-0.17.2}/docs/images/cli-cgse.png +0 -0
  123. {cgse-0.17.1 → cgse-0.17.2}/docs/images/github-fork-clone-dark.png +0 -0
  124. {cgse-0.17.1 → cgse-0.17.2}/docs/images/github-fork-clone.png +0 -0
  125. {cgse-0.17.1 → cgse-0.17.2}/docs/images/grafana-queries.png +0 -0
  126. {cgse-0.17.1 → cgse-0.17.2}/docs/images/icons/cgse-logo-blue.svg +0 -0
  127. {cgse-0.17.1 → cgse-0.17.2}/docs/images/icons/cgse-logo.svg +0 -0
  128. {cgse-0.17.1 → cgse-0.17.2}/docs/index.md +0 -0
  129. {cgse-0.17.1 → cgse-0.17.2}/docs/initialize.md +0 -0
  130. {cgse-0.17.1 → cgse-0.17.2}/docs/libs/cgse-common/images/load_methods.png +0 -0
  131. {cgse-0.17.1 → cgse-0.17.2}/docs/libs/cgse-common/index.md +0 -0
  132. {cgse-0.17.1 → cgse-0.17.2}/docs/libs/cgse-common/settings.md +0 -0
  133. {cgse-0.17.1 → cgse-0.17.2}/docs/libs/cgse-common/setup.md +0 -0
  134. {cgse-0.17.1 → cgse-0.17.2}/docs/libs/cgse-coordinates/index.md +0 -0
  135. {cgse-0.17.1 → cgse-0.17.2}/docs/libs/cgse-core/index.md +0 -0
  136. {cgse-0.17.1 → cgse-0.17.2}/docs/libs/cgse-core/notifyhub.md +0 -0
  137. {cgse-0.17.1 → cgse-0.17.2}/docs/libs/cgse-core/registry.md +0 -0
  138. {cgse-0.17.1 → cgse-0.17.2}/docs/libs/cgse-gui/index.md +0 -0
  139. {cgse-0.17.1 → cgse-0.17.2}/docs/libs/index.md +0 -0
  140. {cgse-0.17.1 → cgse-0.17.2}/docs/package_list.md +0 -0
  141. {cgse-0.17.1 → cgse-0.17.2}/docs/projects/cgse-tools.md +0 -0
  142. {cgse-0.17.1 → cgse-0.17.2}/docs/projects/index.md +0 -0
  143. {cgse-0.17.1 → cgse-0.17.2}/docs/projects/symetrie-hexapod.md +0 -0
  144. {cgse-0.17.1 → cgse-0.17.2}/docs/roadmap.md +0 -0
  145. {cgse-0.17.1 → cgse-0.17.2}/docs/stylesheets/custom.css +0 -0
  146. {cgse-0.17.1 → cgse-0.17.2}/docs/stylesheets/extra.css +0 -0
  147. {cgse-0.17.1 → cgse-0.17.2}/docs/tutorial.md +0 -0
  148. {cgse-0.17.1 → cgse-0.17.2}/docs/user_guide/cli.md +0 -0
  149. {cgse-0.17.1 → cgse-0.17.2}/docs/user_guide/env.md +0 -0
  150. {cgse-0.17.1 → cgse-0.17.2}/docs/user_guide/index.md +0 -0
  151. {cgse-0.17.1 → cgse-0.17.2}/duckdb_metrics.db +0 -0
  152. {cgse-0.17.1 → cgse-0.17.2}/duckdb_metrics.db.wal +0 -0
  153. {cgse-0.17.1 → cgse-0.17.2}/identifier.sqlite +0 -0
  154. {cgse-0.17.1 → cgse-0.17.2}/justfile +0 -0
  155. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/README.md +0 -0
  156. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/justfile +0 -0
  157. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/noxfile.py +0 -0
  158. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/service_registry.db +0 -0
  159. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/cgse_common/__init__.py +0 -0
  160. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/cgse_common/cgse.py +0 -0
  161. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/cgse_common/settings.yaml +0 -0
  162. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/egse/calibration.py +0 -0
  163. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/egse/config.py +0 -0
  164. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/egse/counter.py +0 -0
  165. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/egse/device.py +0 -0
  166. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/egse/dicts.py +0 -0
  167. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/egse/heartbeat.py +0 -0
  168. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/egse/hk.py +0 -0
  169. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/egse/metrics.py +0 -0
  170. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/egse/observer.py +0 -0
  171. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/egse/obsid.py +0 -0
  172. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/egse/persistence.py +0 -0
  173. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/egse/plugin.py +0 -0
  174. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/egse/plugins/metrics/duckdb.py +0 -0
  175. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/egse/plugins/metrics/influxdb.py +0 -0
  176. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/egse/plugins/metrics/timescaledb.py +0 -0
  177. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/egse/process.py +0 -0
  178. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/egse/py.typed +0 -0
  179. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/egse/randomwalk.py +0 -0
  180. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/egse/ratelimit.py +0 -0
  181. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/egse/reload.py +0 -0
  182. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/egse/resource.py +0 -0
  183. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/egse/response.py +0 -0
  184. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/egse/settings.yaml +0 -0
  185. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/egse/setup.py +0 -0
  186. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/egse/signal.py +0 -0
  187. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/egse/state.py +0 -0
  188. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/egse/task.py +0 -0
  189. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/src/egse/zmq_ser.py +0 -0
  190. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/conftest.py +0 -0
  191. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/data/COPYING +0 -0
  192. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00028_201028_155259.yaml +0 -0
  193. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00029_201028_155331.yaml +0 -0
  194. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00030_210311_134043.yaml +0 -0
  195. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00080_210917_105245.yaml +0 -0
  196. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00081_210922_142259.yaml +0 -0
  197. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00082_210923_094458.yaml +0 -0
  198. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/data/CSL1/README.md +0 -0
  199. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/data/CSL2/README.md +0 -0
  200. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/data/IAS/README.md +0 -0
  201. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/data/INTA/README.md +0 -0
  202. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/data/LAB23/README.md +0 -0
  203. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00027_211119_140441.yaml +0 -0
  204. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00028_211119_160406.yaml +0 -0
  205. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00029_211119_172918.yaml +0 -0
  206. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00030_211122_103604.yaml +0 -0
  207. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00031_211123_124900.yaml +0 -0
  208. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/data/common/telemetry/tm-dictionary-default.csv +0 -0
  209. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/data/conf/SETUP_20250114_1519.yaml +0 -0
  210. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/data/conf/config-file.toml +0 -0
  211. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/data/data/cal_coeff_1234.csv +0 -0
  212. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/data/data/calibration.csv +0 -0
  213. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/data/data/calibration.yaml +0 -0
  214. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/data/data/command.yaml +0 -0
  215. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/data/data/corrupt.yaml +0 -0
  216. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/data/data/data-file.txt +0 -0
  217. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/data/data/empty_data_file.txt +0 -0
  218. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/data/data/empty_yaml_file.yaml +0 -0
  219. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/data/data/local_settings.yaml +0 -0
  220. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/data/data/new_local_settings.yaml +0 -0
  221. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/data/data/test_setup.yaml +0 -0
  222. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/data/icons/hourglass.svg +0 -0
  223. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/data/icons/keyboard.png +0 -0
  224. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/data/icons/soap_sponge.svg +0 -0
  225. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/data/lib/dev1/shared-lib.so +0 -0
  226. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/data/lib/dev2/shared-lib.so +0 -0
  227. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/fixtures/default_env.py +0 -0
  228. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/fixtures/helpers.py +0 -0
  229. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/scripts/empty_process.py +0 -0
  230. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/scripts/process_with_children.py +0 -0
  231. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/scripts/raise_value_error.py +0 -0
  232. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/scripts/void-0.py +0 -0
  233. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/scripts/void-1.py +0 -0
  234. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/test_config.py +0 -0
  235. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/test_decorators.py +0 -0
  236. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/test_device.py +0 -0
  237. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/test_env.py +0 -0
  238. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/test_fixtures.py +0 -0
  239. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/test_hk.py +0 -0
  240. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/test_influxdb_plugin.py +0 -0
  241. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/test_log.py +0 -0
  242. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/test_metrics.py +0 -0
  243. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/test_plugin.py +0 -0
  244. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/test_resource.py +0 -0
  245. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/test_response.py +0 -0
  246. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/test_setup.py +0 -0
  247. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/test_signal.py +0 -0
  248. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/test_socketdevice.py +0 -0
  249. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/test_state.py +0 -0
  250. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/test_task.py +0 -0
  251. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-common/tests/test_zmq_ser.py +0 -0
  252. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-coordinates/README.md +0 -0
  253. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-coordinates/src/cgse_coordinates/__init__.py +0 -0
  254. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-coordinates/src/cgse_coordinates/settings.yaml +0 -0
  255. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-coordinates/src/egse/coordinates/__init__.py +0 -0
  256. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-coordinates/src/egse/coordinates/avoidance.py +0 -0
  257. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-coordinates/src/egse/coordinates/cslmodel.py +0 -0
  258. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-coordinates/src/egse/coordinates/laser_tracker_to_dict.py +0 -0
  259. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-coordinates/src/egse/coordinates/point.py +0 -0
  260. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-coordinates/src/egse/coordinates/pyplot.py +0 -0
  261. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-coordinates/src/egse/coordinates/referenceFrame.py +0 -0
  262. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-coordinates/src/egse/coordinates/refmodel.py +0 -0
  263. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-coordinates/src/egse/coordinates/rotationMatrix.py +0 -0
  264. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-coordinates/src/egse/coordinates/transform3d_addon.py +0 -0
  265. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-coordinates/tests/test_avoidance.py +0 -0
  266. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-coordinates/tests/test_coordinates_plot.py +0 -0
  267. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-coordinates/tests/test_coordinates_serialize.py +0 -0
  268. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-coordinates/tests/test_point.py +0 -0
  269. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-coordinates/tests/test_ref_model.py +0 -0
  270. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-coordinates/tests/test_reference_frames.py +0 -0
  271. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-coordinates/tests/test_refmodel.py +0 -0
  272. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/README.md +0 -0
  273. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/cgse_core/__init__.py +0 -0
  274. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/cgse_core/_start.py +0 -0
  275. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/cgse_core/_status.py +0 -0
  276. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/cgse_core/_stop.py +0 -0
  277. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/cgse_core/cgse_explore.py +0 -0
  278. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/cgse_core/services.py +0 -0
  279. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/cgse_core/settings.yaml +0 -0
  280. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/_setup_core.py +0 -0
  281. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/async_control_claude.py +0 -0
  282. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/command.py +0 -0
  283. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/confman/__init__.py +0 -0
  284. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/confman/__main__.py +0 -0
  285. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/confman/confman.yaml +0 -0
  286. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/confman/confman_acs.py +0 -0
  287. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/confman/confman_cs.py +0 -0
  288. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/control.py +0 -0
  289. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/icons/busy.svg +0 -0
  290. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/icons/operational-mode.svg +0 -0
  291. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/icons/pm_ui.svg +0 -0
  292. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/icons/simulator-mode.svg +0 -0
  293. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/icons/start-process-button.svg +0 -0
  294. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/icons/stop-process-button.svg +0 -0
  295. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/icons/user-interface.svg +0 -0
  296. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/listener.py +0 -0
  297. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/logger/__main__.py +0 -0
  298. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/logger/log_cs.py +0 -0
  299. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/metricshub/__init__.py +0 -0
  300. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/metricshub/server.py +0 -0
  301. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/mixin.py +0 -0
  302. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/monitoring.py +0 -0
  303. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/notifyhub/__init__.py +0 -0
  304. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/notifyhub/client.py +0 -0
  305. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/notifyhub/event.py +0 -0
  306. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/notifyhub/services.py +0 -0
  307. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/notifyhub/test.py +0 -0
  308. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/procman/__init__.py +0 -0
  309. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/procman/procman.yaml +0 -0
  310. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/procman/procman_cs.py +0 -0
  311. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/procman/procman_protocol.py +0 -0
  312. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/procman/procman_ui.py +0 -0
  313. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/protocol.py +0 -0
  314. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/proxy.py +0 -0
  315. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/registry/__init__.py +0 -0
  316. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/registry/backend.py +0 -0
  317. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/services.py +0 -0
  318. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/services.yaml +0 -0
  319. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/storage/__init__.py +0 -0
  320. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/storage/__main__.py +0 -0
  321. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/storage/persistence.py +0 -0
  322. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/storage/storage.yaml +0 -0
  323. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/src/egse/storage/storage_cs.py +0 -0
  324. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/tests/conftest.py +0 -0
  325. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/tests/data/local_settings.yaml +0 -0
  326. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/tests/fixtures/default_env.py +0 -0
  327. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/tests/marimo/intro.py +0 -0
  328. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/tests/script_subscribe_to_notifyhub.py +0 -0
  329. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/tests/script_test_async_registry_client.py +0 -0
  330. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/tests/script_test_registry_client_server.py +0 -0
  331. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/tests/script_test_service_registry_server.py +0 -0
  332. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/tests/script_test_sync_registry_client.py +0 -0
  333. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/tests/services.py +0 -0
  334. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/tests/simple_server.py +0 -0
  335. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/tests/stress_test_registry_server.py +0 -0
  336. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/tests/test_command.py +0 -0
  337. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/tests/test_confman_setups.py +1 -1
  338. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/tests/test_control.py +0 -0
  339. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/tests/test_extensions.py +0 -0
  340. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/tests/test_listener.py +0 -0
  341. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/tests/test_mixin.py +0 -0
  342. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/tests/test_notify_hub.py +0 -0
  343. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/tests/test_protocol.py +0 -0
  344. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/tests/test_registry_backend.py +0 -0
  345. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-core/tests/test_settings_core.py +0 -0
  346. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/README.md +0 -0
  347. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/__init__.py +0 -0
  348. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/buttons.py +0 -0
  349. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-start.svg +0 -0
  350. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-stop.svg +0 -0
  351. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/aeu-cs.svg +0 -0
  352. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-started.svg +0 -0
  353. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-stopped.svg +0 -0
  354. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/aeu_cs.svg +0 -0
  355. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/alert.svg +0 -0
  356. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/arrow-double-left.png +0 -0
  357. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/arrow-double-right.png +0 -0
  358. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/arrow-up.svg +0 -0
  359. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/backward.svg +0 -0
  360. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/busy.svg +0 -0
  361. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/cleaning.svg +0 -0
  362. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/color-scheme.svg +0 -0
  363. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/cs-connected-alert.svg +0 -0
  364. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/cs-connected-disabled.svg +0 -0
  365. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/cs-connected.svg +0 -0
  366. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/cs-not-connected.svg +0 -0
  367. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/double-left-arrow.svg +0 -0
  368. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/double-right-arrow.svg +0 -0
  369. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/erase-disabled.svg +0 -0
  370. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/erase.svg +0 -0
  371. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/fitsgen-start.svg +0 -0
  372. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/fitsgen-stop.svg +0 -0
  373. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/fitsgen.svg +0 -0
  374. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/forward.svg +0 -0
  375. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/fov-hk-start.svg +0 -0
  376. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/fov-hk-stop.svg +0 -0
  377. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/fov-hk.svg +0 -0
  378. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/front-desk.svg +0 -0
  379. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/home-actioned.svg +0 -0
  380. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/home-disabled.svg +0 -0
  381. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/home.svg +0 -0
  382. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/info.svg +0 -0
  383. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/invalid.png +0 -0
  384. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/led-green.svg +0 -0
  385. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/led-grey.svg +0 -0
  386. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/led-orange.svg +0 -0
  387. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/led-red.svg +0 -0
  388. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/led-square-green.svg +0 -0
  389. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/led-square-grey.svg +0 -0
  390. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/led-square-orange.svg +0 -0
  391. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/led-square-red.svg +0 -0
  392. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-green.svg +0 -0
  393. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-red.svg +0 -0
  394. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el+.svg +0 -0
  395. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el-.svg +0 -0
  396. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/location-marker.svg +0 -0
  397. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/logo-dpu.svg +0 -0
  398. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/logo-gimbal.svg +0 -0
  399. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/logo-huber.svg +0 -0
  400. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/logo-ogse.svg +0 -0
  401. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/logo-puna.svg +0 -0
  402. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/logo-tcs.svg +0 -0
  403. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/logo-zonda.svg +0 -0
  404. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/maximize.svg +0 -0
  405. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/meter.svg +0 -0
  406. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/more.svg +0 -0
  407. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-start.svg +0 -0
  408. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-stop.svg +0 -0
  409. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk.svg +0 -0
  410. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/observing-off.svg +0 -0
  411. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/observing-on.svg +0 -0
  412. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.png +0 -0
  413. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.svg +0 -0
  414. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/ops-mode.svg +0 -0
  415. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/play-green.svg +0 -0
  416. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/plugged-disabled.svg +0 -0
  417. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/plugged.svg +0 -0
  418. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/pm_ui.svg +0 -0
  419. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/power-button-green.svg +0 -0
  420. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/power-button-red.svg +0 -0
  421. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/power-button.svg +0 -0
  422. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/radar.svg +0 -0
  423. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/radioactive.svg +0 -0
  424. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/reload.svg +0 -0
  425. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/remote-control-off.svg +0 -0
  426. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/remote-control-on.svg +0 -0
  427. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/repeat-blue.svg +0 -0
  428. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/repeat.svg +0 -0
  429. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/settings.svg +0 -0
  430. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/shrink.svg +0 -0
  431. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/shutter.svg +0 -0
  432. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/sign-off.svg +0 -0
  433. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/sign-on.svg +0 -0
  434. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/sim-mode.svg +0 -0
  435. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/small-buttons-go.svg +0 -0
  436. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/small-buttons-minus.svg +0 -0
  437. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/small-buttons-plus.svg +0 -0
  438. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/sponge.svg +0 -0
  439. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/start-button-disabled.svg +0 -0
  440. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/start-button.svg +0 -0
  441. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/stop-button-disabled.svg +0 -0
  442. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/stop-button.svg +0 -0
  443. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/stop-red.svg +0 -0
  444. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/stop.svg +0 -0
  445. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/switch-disabled-square.svg +0 -0
  446. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/switch-disabled.svg +0 -0
  447. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/switch-off-square.svg +0 -0
  448. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/switch-off.svg +0 -0
  449. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/switch-on-square.svg +0 -0
  450. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/switch-on.svg +0 -0
  451. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/temperature-control.svg +0 -0
  452. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/th_ui_logo.svg +0 -0
  453. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/unplugged.svg +0 -0
  454. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/unvalid.png +0 -0
  455. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/user-interface.svg +0 -0
  456. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/vacuum.svg +0 -0
  457. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/valid.png +0 -0
  458. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-dark.svg +0 -0
  459. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-white.svg +0 -0
  460. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/led.py +0 -0
  461. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/limitswitch.py +0 -0
  462. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/states.py +0 -0
  463. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/styles/dark.qss +0 -0
  464. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/styles/default.qss +0 -0
  465. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/styles.qss +0 -0
  466. {cgse-0.17.1 → cgse-0.17.2}/libs/cgse-gui/src/egse/gui/switch.py +0 -0
  467. {cgse-0.17.1 → cgse-0.17.2}/mkdocs.yml +0 -0
  468. {cgse-0.17.1 → cgse-0.17.2}/noxfile.py +0 -0
  469. {cgse-0.17.1 → cgse-0.17.2}/overrides/.icons/custom/dbend-dark.svg +0 -0
  470. {cgse-0.17.1 → cgse-0.17.2}/overrides/.icons/custom/dbend-light.svg +0 -0
  471. {cgse-0.17.1 → cgse-0.17.2}/overrides/.icons/custom/gear.svg +0 -0
  472. {cgse-0.17.1 → cgse-0.17.2}/projects/ariel/ariel-tcu/README.md +0 -0
  473. {cgse-0.17.1 → cgse-0.17.2}/projects/ariel/ariel-tcu/src/ariel_tcu/__init__.py +0 -0
  474. {cgse-0.17.1 → cgse-0.17.2}/projects/ariel/ariel-tcu/src/ariel_tcu/cgse_explore.py +0 -0
  475. {cgse-0.17.1 → cgse-0.17.2}/projects/ariel/ariel-tcu/src/ariel_tcu/cgse_services.py +0 -0
  476. {cgse-0.17.1 → cgse-0.17.2}/projects/ariel/ariel-tcu/src/ariel_tcu/settings.yaml +0 -0
  477. {cgse-0.17.1 → cgse-0.17.2}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/__init__.py +0 -0
  478. {cgse-0.17.1 → cgse-0.17.2}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu.py +0 -0
  479. {cgse-0.17.1 → cgse-0.17.2}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu.yaml +0 -0
  480. {cgse-0.17.1 → cgse-0.17.2}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu_cmd_utils.py +0 -0
  481. {cgse-0.17.1 → cgse-0.17.2}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu_cs.py +0 -0
  482. {cgse-0.17.1 → cgse-0.17.2}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu_devif.py +0 -0
  483. {cgse-0.17.1 → cgse-0.17.2}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu_protocol.py +0 -0
  484. {cgse-0.17.1 → cgse-0.17.2}/projects/ariel/ariel-tcu/tests/test_tcu.py +0 -0
  485. {cgse-0.17.1 → cgse-0.17.2}/projects/ariel/ariel-tcu/tests/test_tcu_cmd_utils.py +0 -0
  486. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/cgse-tools/README.md +0 -0
  487. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/cgse-tools/src/cgse_tools/__init__.py +0 -0
  488. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/cgse-tools/src/cgse_tools/cgse_clock.py +0 -0
  489. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/cgse-tools/src/cgse_tools/cgse_commands.py +0 -0
  490. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/cgse-tools/src/cgse_tools/cgse_services.py +0 -0
  491. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/cgse-tools/src/egse/tools/status.py +0 -0
  492. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/keithley-tempcontrol/README.md +0 -0
  493. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/keithley-tempcontrol/justfile +0 -0
  494. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/keithley-tempcontrol/noxfile.py +0 -0
  495. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/keithley-tempcontrol/service_registry.db +0 -0
  496. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/__init__.py +0 -0
  497. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510.py +0 -0
  498. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510.yaml +0 -0
  499. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_acs.py +0 -0
  500. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_adev.py +0 -0
  501. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_cs.py +0 -0
  502. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_dev.py +0 -0
  503. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_mon.py +0 -0
  504. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_protocol.py +0 -0
  505. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/__init__.py +0 -0
  506. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/cgse_explore.py +0 -0
  507. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/cgse_services.py +0 -0
  508. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/settings.yaml +0 -0
  509. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/keithley-tempcontrol/tests/script_daq6510_central_heating.py +0 -0
  510. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/keithley-tempcontrol/tests/script_daq6510_mon.py +0 -0
  511. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/keithley-tempcontrol/tests/script_plot_readings.py +0 -0
  512. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/keithley-tempcontrol/tests/test_dev.py +0 -0
  513. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/lakeshore-tempcontrol/README.md +0 -0
  514. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336.py +0 -0
  515. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336.yaml +0 -0
  516. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_cs.py +0 -0
  517. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_devif.py +0 -0
  518. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_protocol.py +0 -0
  519. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/__init__.py +0 -0
  520. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/cgse_explore.py +0 -0
  521. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/cgse_services.py +0 -0
  522. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/settings.yaml +0 -0
  523. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/lakeshore-tempcontrol/tests/test_lakeshore336_simulator.py +0 -0
  524. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/symetrie-hexapod/README.md +0 -0
  525. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/__init__.py +0 -0
  526. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/__init__.py +0 -0
  527. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/alpha.py +0 -0
  528. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/dynalpha.py +0 -0
  529. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod.py +0 -0
  530. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod_ui.py +0 -0
  531. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.py +0 -0
  532. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.yaml +0 -0
  533. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_cs.py +0 -0
  534. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_protocol.py +0 -0
  535. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_ui.py +0 -0
  536. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac.py +0 -0
  537. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac_regex.py +0 -0
  538. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.py +0 -0
  539. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.yaml +0 -0
  540. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_cs.py +0 -0
  541. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_protocol.py +0 -0
  542. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_sim.py +0 -0
  543. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_ui.py +0 -0
  544. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/punaplus.py +0 -0
  545. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.py +0 -0
  546. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.yaml +0 -0
  547. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_cs.py +0 -0
  548. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_devif.py +0 -0
  549. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_protocol.py +0 -0
  550. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_ui.py +0 -0
  551. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/__init__.py +0 -0
  552. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/cgse_explore.py +0 -0
  553. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/cgse_services.py +0 -0
  554. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/settings.yaml +0 -0
  555. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/symetrie-hexapod/tests/test_puna.py +0 -0
  556. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/symetrie-hexapod/tests/test_puna_cs.py +0 -0
  557. {cgse-0.17.1 → cgse-0.17.2}/projects/generic/symetrie-hexapod/tests/test_puna_simulator.py +0 -0
  558. {cgse-0.17.1 → cgse-0.17.2}/projects/plato/plato-fits/README.md +0 -0
  559. {cgse-0.17.1 → cgse-0.17.2}/projects/plato/plato-fits/src/egse/plugins/storage/fits.py +0 -0
  560. {cgse-0.17.1 → cgse-0.17.2}/projects/plato/plato-hdf5/README.md +0 -0
  561. {cgse-0.17.1 → cgse-0.17.2}/projects/plato/plato-hdf5/src/egse/plugins/storage/hdf5.py +0 -0
  562. {cgse-0.17.1 → cgse-0.17.2}/projects/plato/plato-spw/README.md +0 -0
  563. {cgse-0.17.1 → cgse-0.17.2}/projects/plato/plato-spw/src/egse/spw.py +0 -0
  564. {cgse-0.17.1 → cgse-0.17.2}/ruff.toml +0 -0
  565. {cgse-0.17.1 → cgse-0.17.2}/scratch/advanced-process-monitoring.py +0 -0
  566. {cgse-0.17.1 → cgse-0.17.2}/scratch/live-process-monitoring.py +0 -0
  567. {cgse-0.17.1 → cgse-0.17.2}/scratch/match-case.py +0 -0
  568. {cgse-0.17.1 → cgse-0.17.2}/scratch/processes.json +0 -0
  569. {cgse-0.17.1 → cgse-0.17.2}/scratch/simple-process-monitoring.py +0 -0
  570. {cgse-0.17.1 → cgse-0.17.2}/test_service_registry.db +0 -0
@@ -3,7 +3,12 @@ SITE_ID='VACUUM_LAB'
3
3
 
4
4
  # The variable below all start with the project name.
5
5
 
6
+ # These variables point to folders.
7
+
6
8
  ARIEL_DATA_STORAGE_LOCATION=~/data/ARIEL/VACUUM_LAB
7
9
  ARIEL_CONF_DATA_LOCATION=~/data/ARIEL/VACUUM_LAB/conf
8
- ARIEL_LOCAL_SETTINGS=~/data/ARIEL/VACUUM_LAB/local_settings.yaml
9
10
  ARIEL_LOG_FILE_LOCATION=~/data/ARIEL/VACUUM_LAB/log
11
+
12
+ # This variable points to a file, not to a folder.
13
+
14
+ ARIEL_LOCAL_SETTINGS=~/data/ARIEL/VACUUM_LAB/local_settings.yaml
@@ -32,6 +32,11 @@ venv
32
32
 
33
33
  .idea
34
34
 
35
+ # VSCode IDE
36
+
37
+ .vscode
38
+ *.code-workspace
39
+
35
40
  # MKDOCS documentation site
36
41
 
37
42
  /site
cgse-0.17.2/.pylintrc ADDED
@@ -0,0 +1,5 @@
1
+ ; [MESSAGES CONTROL]
2
+ ; enable=
3
+ ; logging-format-interpolation,
4
+ ; logging-fstring-interpolation,
5
+ ; logging-not-lazy
@@ -0,0 +1,230 @@
1
+
2
+ # Changelog
3
+
4
+ All notable changes to this project will be documented in this file.
5
+
6
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+
9
+ ## [Unreleased]
10
+
11
+
12
+ ## [0.17.2] - 2025-11-28
13
+
14
+ This release is mainly on maintenance and improvements to the `cgse-common` package.
15
+
16
+ ### Fixed
17
+ - Nothing needed to be really fixed.
18
+
19
+ ### Changed
20
+ - To improve readability, the CHANGELOG file now contains all [link titles](https://github.github.com/gfm/#links) at
21
+ the bottom, both for version comparison and for issue/pull request linking. [#215]
22
+ - The args in the function `bits_set(value, *args)` should always be unpacked. Previously, the `args` could also be a
23
+ list, but that made the function call needlessly confusing. This should not be a problem (not a breaking change)
24
+ since this function is apparently only used in the unit tests currently. [#215]
25
+ - The `egse.log` module exports the logging module, so, when users import logging from egse.log, the specific CGSE
26
+ loggers will be configured. [#215]
27
+ - Changed the type of the default argument in `get_log_level_from_env()` function (not a breaking change) [#215]
28
+ - Changed the return value of the different `get_version_*()` functions to return "0.0.0" when the version cannot
29
+ be determined. Previously, these functions returned None. [#215]
30
+ - Improvements to `redirect_output_to_log()`: the file can be an absolute path, added a guard to overwrite [#217]
31
+ - A warning message is now logged when you try to read the last few lines from a non-existing file
32
+ - InitializationError = InitialisationError, to be conform to the styling guide promoting the use of standard
33
+ American English for code, comments and docs
34
+
35
+ ### Added
36
+ - Added a `from_string()` class method to Settings. This is mainly for testing and when you need to load
37
+ Settings from a specific file. [#215]
38
+ - Added an example `.env` file [#215]
39
+
40
+ ### Testing
41
+ - Added a test for the `round_up()` function in `egse.system` [#215]
42
+ - Added unit tests for `egse.version` and `egse.settings` [#215], [#216]
43
+ - Fixed the test `test_quit_process()` temporarily as it is not clear on macOS what is the actual return value
44
+ from a process when it is terminated or killed. [#215]
45
+ - Added unit test for `redirect_output_to_log()` [#217]
46
+
47
+
48
+ ## [0.17.1] - 2025-11-20
49
+
50
+ ### Fixed
51
+ - Fixed a missing expanduser(). Apparently a `path.resolve()` doesn't handle the '`~`' character. [#210]
52
+ - Fixed `env_var()` which is a context manager for temporarily setting an environment variable. It uses `setup_env()`
53
+ to update the environment before and after the `yield`, but `setup_env()` only initializes once. [#210]
54
+ - Fixed unit tests for settings, setup, and env. [#210]
55
+
56
+ ### Changed
57
+ - Some of the debug messages in settings are now filtered behind the VERBOSE_DEBUG flag. [#210]
58
+
59
+
60
+ ## [0.17.0] - 2025-11-20
61
+
62
+ ### Added
63
+ - Added this CHANGELOG file. [#209]
64
+ - Added an initial implementation of the ARIEL Telescope Control Unit (TCU). This is a separate package in this
65
+ monorepo that is located at `projects/ariel/ariel-tcu`. The package will be added to PyPI as `ariel-tcu`. [#178]
66
+ - Added a `read_string()` method to the `DeviceTransport` and `AsyncDeviceTransport` classes. [#209]
67
+ ### Fixed
68
+ - Fixed the `sm_cs` for the missing `--full` cli argument. [#204]
69
+ - Fixed the configuration of the InfluxDB client. The client can now be fully configured with environment variables
70
+ if needed. [#206]
71
+ ### Changed
72
+ - Improved initialization of the process environment with `setup_env()`. [#208]
73
+ - The configuration manager now also re-registers the obsid table to the storage. [#207]
74
+ - The `cgse` subcommand to start the notification hub is changed from `not` to `nh`. Use `cgse nh [start|stop|status]`. [#209]
75
+ - The environment variables that contain a path can start with a tilde '`~`' which will be expanded to the user's
76
+ home directory when used. [#204]
77
+ ### Docs
78
+ - Documentation updates for the Python version, the CLI `cgse` subcommands, environment and the introduction of `dotenv`, ...
79
+ - Updated information on the use of `dotenv` in the developer guid.
80
+ - Added information on the environment variables to the user guide.
81
+
82
+
83
+ ## [0.16.14] - 2025-10-24
84
+
85
+ ### Added
86
+ - Added `cmd_string_func` parameter to the `@dynamic_command` interface. Use this parameter if you need to create a fancy command string from the arguments passed into the command function.
87
+
88
+ ## [0.16.13] - 2025-10-23
89
+
90
+ ### Changed
91
+ - Improved unit tests for the `mixin.py` module.
92
+
93
+ ## [0.16.12] - 2025-10-21
94
+
95
+ ### Fixed
96
+ - Fixed a bug in starting the puna proxy.
97
+
98
+
99
+ ## [0.16.11] - 2025-10-21
100
+
101
+ ### Fixed
102
+ - Fixed starting the hexapod GUI by specifying a device identifier.
103
+ - Fixed registration and connection of the notification hub.
104
+ ### Added
105
+ - Added a dependency for the `dotenv` module.
106
+ ### Changed
107
+ - The PUNA GUI script now starts as a Typer app.
108
+ - The `get_port_number()` in `zmq_ser.py` now returns 0 (zero) on error.
109
+ - Improved logging for the Symétrie hexapods.
110
+ - Introduced the `VERBOSE_DEBUG` environment variable that can be used to restrict debug logging messages only when
111
+ this environment variable is set. Use this for very verbose debug logging.
112
+
113
+
114
+ ## [0.16.10] - 2025-10-03
115
+
116
+ ### Changed
117
+ - Renamed Settings for external logger from `TEXTUALOG_*` to `EXTERN_LOG_*`.
118
+ - The heartbeat ZeroMQ protocol now uses ROUTER-DEALER instead of REQ-REP. This was needed because too often we got an invalid state for the REQ sockets after one of the services went down.
119
+
120
+
121
+ ## [0.16.9] - 2025-10-02
122
+
123
+ ### Removed
124
+ - Removed caching from the async registry client.
125
+
126
+
127
+ ## [0.16.8] - 2025-10-02
128
+
129
+ ### Fixed
130
+ - Fixed re-registration for the async registry client.
131
+
132
+
133
+ ## [0.16.7] - 2025-10-01
134
+
135
+ ### Fixed
136
+ - Fixed re-registration problem in the service registry.
137
+ ### Changed
138
+ - Read the Settings in the `__init__.py` files where possible. Do not spread Settings in all modules of a package.
139
+
140
+
141
+ ## [0.16.6] - 2025-09-30
142
+
143
+ ### Fixed
144
+ - Fixed timeouts for Proxy (sub)classes to seconds instead of milliseconds. We strive to have all timeout in seconds and only convert to milliseconds when needed for a library call.
145
+
146
+
147
+ ## [0.16.5] - 2025-09-29
148
+
149
+ ### Changed
150
+ - The service type for the notification hub is now `NH_CS` instead of `NOTIFY_HUB`.
151
+ - Remove the leading dot '`.`' from all startup log filenames. Startup log files are log files per `cgse` subcommand that are located in the `LOG_FILE_LOCATION`. You will find a log file there for the `start` and the `stop` for each core service or device control server.
152
+
153
+
154
+ ## [0.16.4] - 2025-09-29
155
+
156
+ ### Added
157
+ - Added the `bool_env()` function in `env.py`.
158
+ ### Changed
159
+ - The listeners functionality has been transferred to the notification hub and services subscribe to this notification service.
160
+ - Log messages to the `general.log` file now contain the logger name.
161
+ ### Removed
162
+ - Remove the listener notification from the configuration manager.
163
+ - Remove listener registration from the storage manager and the process manager.
164
+
165
+
166
+ ## [0.16.3] - 2025-09-19
167
+
168
+ ### Fixed
169
+ - Fixed a circular import problem in `system.py`.
170
+
171
+
172
+ ## [0.16.2] - 2025-09-19
173
+
174
+ ### Changed
175
+ - The output of startup scripts is now redirected to the log location.
176
+
177
+
178
+ ## [0.16.1] - 2025-09-19
179
+
180
+ ### Changed
181
+ - Use the `get_endpoint()` function in Proxy subclasses.
182
+ - Define constants from settings with proper defaults.
183
+ - Cleanup port numbers for core services in Settings. All core services now have a fixed port number, which can be
184
+ overwritten in the local settings file.
185
+ - When `port == 0` use the service registry to get the endpoint.
186
+
187
+
188
+ ## [0.16.0] - 2025-09-17
189
+
190
+ ### Added
191
+ - Added a `deregister` subcommand to the service registry. Usage: `cgse reg deregister <SERVICE_TYPE>`.
192
+ ### Fixed
193
+ - Fixed proper sorting of cgse subcommands.
194
+ - Fixed port numbers for core services.
195
+ ### Changed
196
+ - Proxies now handle fixed port numbers properly.
197
+ - Renamed `cgse` subcommands `registry` → `reg`, `notify` → `not`.
198
+
199
+
200
+ [Unreleased]: https://github.com/IvS-KULeuven/cgse/compare/v0.17.1...HEAD
201
+ [0.17.1]: https://github.com/IvS-KULeuven/cgse/compare/v0.17.0...v0.17.1
202
+ [0.17.0]: https://github.com/IvS-KULeuven/cgse/compare/v0.16.14...v0.17.0
203
+ [0.16.14]: https://github.com/IvS-KULeuven/cgse/compare/v0.16.13...v0.16.14
204
+ [0.16.13]: https://github.com/IvS-KULeuven/cgse/compare/v0.16.12...v0.16.13
205
+ [0.16.12]: https://github.com/IvS-KULeuven/cgse/compare/v0.16.11...v0.16.12
206
+ [0.16.11]: https://github.com/IvS-KULeuven/cgse/compare/v0.16.10...v0.16.11
207
+ [0.16.10]: https://github.com/IvS-KULeuven/cgse/compare/v0.16.9...v0.16.10
208
+ [0.16.9]: https://github.com/IvS-KULeuven/cgse/compare/v0.16.8...v0.16.9
209
+ [0.16.8]: https://github.com/IvS-KULeuven/cgse/compare/v0.16.7...v0.16.8
210
+ [0.16.7]: https://github.com/IvS-KULeuven/cgse/compare/v0.16.6...v0.16.7
211
+ [0.16.6]: https://github.com/IvS-KULeuven/cgse/compare/v0.16.5...v0.16.6
212
+ [0.16.5]: https://github.com/IvS-KULeuven/cgse/compare/v0.16.4...v0.16.5
213
+ [0.16.4]: https://github.com/IvS-KULeuven/cgse/compare/v0.16.3...v0.16.4
214
+ [0.16.3]: https://github.com/IvS-KULeuven/cgse/compare/v0.16.2...v0.16.3
215
+ [0.16.2]: https://github.com/IvS-KULeuven/cgse/compare/v0.16.1...v0.16.2
216
+ [0.16.1]: https://github.com/IvS-KULeuven/cgse/compare/v0.16.0...v0.16.1
217
+ [0.16.0]: https://github.com/IvS-KULeuven/cgse/compare/v0.15.1...v0.16.0
218
+
219
+ [#217]: https://github.com/IvS-KULeuven/cgse/pull/217
220
+ [#216]: https://github.com/IvS-KULeuven/cgse/pull/216
221
+ [#215]: https://github.com/IvS-KULeuven/cgse/pull/215
222
+ [#210]: https://github.com/IvS-KULeuven/cgse/pull/210
223
+ [#209]: https://github.com/IvS-KULeuven/cgse/pull/209
224
+ [#208]: https://github.com/IvS-KULeuven/cgse/pull/208
225
+ [#207]: https://github.com/IvS-KULeuven/cgse/pull/207
226
+ [#206]: https://github.com/IvS-KULeuven/cgse/pull/206
227
+ [#205]: https://github.com/IvS-KULeuven/cgse/pull/205
228
+ [#204]: https://github.com/IvS-KULeuven/cgse/pull/204
229
+
230
+ [#178]: https://github.com/IvS-KULeuven/cgse/pull/178
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cgse
3
- Version: 0.17.1
3
+ Version: 0.17.2
4
4
  Summary: Generic Common-EGSE: Commanding and monitoring lab equipment
5
5
  Author: IvS KU Leuven
6
6
  Maintainer-email: Rik Huygen <rik.huygen@kuleuven.be>, Sara Regibo <sara.regibo@kuleuven.be>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "cgse-common"
3
- version = "0.17.1"
3
+ version = "0.17.2"
4
4
  description = "Software framework to support hardware testing"
5
5
  authors = [
6
6
  {name = "IvS KU Leuven"}
@@ -68,19 +68,23 @@ markers = [
68
68
  "slow: marks tests as slow (deselect with '-m \"not slow\"')"
69
69
  ]
70
70
 
71
+ # Some of these omitted files are only temporary omitted until refactored
71
72
  [tool.coverage.run]
72
73
  omit = [
73
74
  "tests/*",
74
75
  "conftest.py",
76
+ "src/egse/ratelimit.py",
77
+ "src/egse/plugins/metrics/duckdb.py",
78
+ "src/egse/plugins/metrics/timescaledb.py",
75
79
  ]
76
80
 
77
81
  [tool.hatch.build.targets.sdist]
78
82
  exclude = [
79
- "/tests",
80
- "/pytest.ini",
81
- "/.gitignore",
82
- "/*poetry*",
83
- "/*setuptools*",
83
+ "tests",
84
+ "pytest.ini",
85
+ ".gitignore",
86
+ "*poetry*",
87
+ "*setuptools*",
84
88
  ]
85
89
 
86
90
  [tool.hatch.build.targets.wheel]
@@ -90,8 +94,12 @@ packages = ["src/egse", "src/scripts", "src/cgse_common"]
90
94
  line-length = 120
91
95
 
92
96
  [tool.ruff.lint]
97
+ select = ["F", "I"]
93
98
  extend-select = ["E", "W"]
94
99
 
100
+ [tool.ruff.lint.isort]
101
+ force-single-line = true
102
+
95
103
  [build-system]
96
104
  requires = ["hatchling"]
97
105
  build-backend = "hatchling.build"
@@ -5,7 +5,6 @@ This module contains a number of convenience functions to work with bits, bytes
5
5
  from __future__ import annotations
6
6
 
7
7
  import ctypes
8
- from collections.abc import Iterable
9
8
  from typing import Union
10
9
 
11
10
 
@@ -33,7 +32,7 @@ def extract_bits(value: int, start_position: int, num_bits: int) -> int:
33
32
  return extracted_bits
34
33
 
35
34
 
36
- def set_bit(value: int, bit) -> int:
35
+ def set_bit(value: int, bit: int) -> int:
37
36
  """
38
37
  Set bit to 1 for the given value.
39
38
 
@@ -47,7 +46,7 @@ def set_bit(value: int, bit) -> int:
47
46
  return value | (1 << bit)
48
47
 
49
48
 
50
- def set_bits(value: int, bits: tuple) -> int:
49
+ def set_bits(value: int, bits: tuple[int, int]) -> int:
51
50
  """
52
51
  Set the given bits in value to 1.
53
52
 
@@ -63,7 +62,7 @@ def set_bits(value: int, bits: tuple) -> int:
63
62
  return value
64
63
 
65
64
 
66
- def clear_bit(value: int, bit) -> int:
65
+ def clear_bit(value: int, bit: int) -> int:
67
66
  """
68
67
  Set bit to 0 for the given value.
69
68
 
@@ -77,7 +76,7 @@ def clear_bit(value: int, bit) -> int:
77
76
  return value & ~(1 << bit)
78
77
 
79
78
 
80
- def clear_bits(value: int, bits: tuple) -> int:
79
+ def clear_bits(value: int, bits: tuple[int, int]) -> int:
81
80
  """
82
81
  Set the given bits in value to 0.
83
82
 
@@ -93,7 +92,7 @@ def clear_bits(value: int, bits: tuple) -> int:
93
92
  return value
94
93
 
95
94
 
96
- def toggle_bit(value: int, bit) -> int:
95
+ def toggle_bit(value: int, bit: int) -> int:
97
96
  """
98
97
  Toggle the bit in the given value.
99
98
 
@@ -107,7 +106,7 @@ def toggle_bit(value: int, bit) -> int:
107
106
  return value ^ (1 << bit)
108
107
 
109
108
 
110
- def bit_set(value: int, bit) -> bool:
109
+ def bit_set(value: int, bit: int) -> bool:
111
110
  """
112
111
  Return True if the bit is set.
113
112
 
@@ -122,27 +121,25 @@ def bit_set(value: int, bit) -> bool:
122
121
  return value & bit_value == bit_value
123
122
 
124
123
 
125
- def bits_set(value: int, *args: Union[int, Iterable[int]]) -> bool:
124
+ def bits_set(value: int, *args: int) -> bool:
126
125
  """
127
126
  Return True if all the bits are set.
128
127
 
129
128
  Args:
130
129
  value (int): the value to check
131
130
  args: a set of indices of the bits to check, starting from 0 at the LSB.
132
- All the indices can be given as separate arguments, or they can be passed
133
- in as a list.
131
+ All the indices shall be given as separate arguments, i.e. unpack a list
132
+ if needed.
134
133
 
135
134
  Returns:
136
135
  True if all the bits are set (1).
137
136
 
138
137
  Examples:
139
- >>> assert bits_set(0b0101_0000_1011, [0, 1, 3, 8, 10])
140
- >>> assert bits_set(0b0101_0000_1011, [3, 8])
141
- >>> assert not bits_set(0b0101_0000_1011, [1, 2, 3])
138
+ >>> assert bits_set(0b0101_0000_1011, 0, 1, 3, 8, 10)
139
+ >>> assert bits_set(0b0101_0000_1011, 3, 8)
140
+ >>> assert not bits_set(0b0101_0000_1011, *[1, 2, 3])
142
141
  """
143
142
 
144
- if len(args) == 1 and isinstance(args[0], list):
145
- args = args[0]
146
143
  return all([bit_set(value, bit) for bit in args])
147
144
 
148
145
 
@@ -506,7 +503,7 @@ def crc_calc(data: list[bytes | int], start: int, len_: int) -> int:
506
503
  Reference:
507
504
  The description of the CRC calculation for RMAP is given in the ECSS document
508
505
  _Space Engineering: SpaceWire - Remote Memory Access Protocol_, section A.3
509
- on page 80 [ECSSEST5052C].
506
+ on page 80 [ECSS-E-ST-50-52C].
510
507
 
511
508
  """
512
509
  crc: int = 0
@@ -548,7 +545,7 @@ def s16(value: int) -> int:
548
545
  >>> s16(0b1000_0000_0001_0001)
549
546
  -32751
550
547
 
551
- The 'bin()' fuction will return a strange representation of this number:
548
+ The 'bin()' function will return a strange representation of this number:
552
549
 
553
550
  >>> bin(-32751)
554
551
  '-0b111111111101111'
@@ -15,8 +15,8 @@ from typing import Optional
15
15
 
16
16
  import rich
17
17
 
18
- from egse.system import get_caller_info
19
18
  from egse.log import logger
19
+ from egse.system import get_caller_info
20
20
 
21
21
 
22
22
  def static_vars(**kwargs):
@@ -316,7 +316,10 @@ def debug(func):
316
316
 
317
317
 
318
318
  def profile_func(
319
- output_file: str = None, sort_by: str = "cumulative", lines_to_print: int = None, strip_dirs: bool = False
319
+ output_file: str | None = None,
320
+ sort_by: str = "cumulative",
321
+ lines_to_print: int | None = None,
322
+ strip_dirs: bool = False,
320
323
  ) -> Callable:
321
324
  """A time profiler decorator.
322
325
 
@@ -346,7 +349,7 @@ def profile_func(
346
349
  decorator](https://gist.github.com/ekhoda/2de44cf60d29ce24ad29758ce8635b78).
347
350
 
348
351
  Inspired by and modified the profile decorator of Giampaolo Rodola:
349
- [profile decorato](http://code.activestate.com/recipes/577817-profile-decorator/).
352
+ [profile decorator](http://code.activestate.com/recipes/577817-profile-decorator/).
350
353
 
351
354
 
352
355
  """
@@ -72,8 +72,8 @@ import os
72
72
  import warnings
73
73
  from pathlib import Path
74
74
 
75
- from dotenv import load_dotenv as _load_dotenv
76
75
  from dotenv import find_dotenv
76
+ from dotenv import load_dotenv as _load_dotenv
77
77
  from rich.console import Console
78
78
 
79
79
  from egse.decorators import static_vars
@@ -697,6 +697,7 @@ def env_var(**kwargs: str | int | float | bool | None):
697
697
  def main(args: list | None = None): # pragma: no cover
698
698
  import argparse
699
699
  import sys
700
+
700
701
  import rich
701
702
 
702
703
  parser = argparse.ArgumentParser()
@@ -61,3 +61,6 @@ class Abort(RuntimeError):
61
61
 
62
62
  class InitialisationError(Error):
63
63
  """Raised when an initialisation failed."""
64
+
65
+
66
+ InitializationError = InitialisationError # Alias with American spelling
@@ -18,6 +18,7 @@ __all__ = [
18
18
  "LOG_DATE_FORMAT_FULL",
19
19
  "LOG_DATE_FORMAT_CLEAN",
20
20
  "logger",
21
+ "logging", # export to guarantee that this module is imported and initialized before users use logging
21
22
  "root_logger",
22
23
  "egse_logger",
23
24
  "get_log_level_from_env",
@@ -84,7 +85,7 @@ class NonEGSEFilter(logging.Filter):
84
85
  return not record.name.startswith("egse")
85
86
 
86
87
 
87
- def get_log_level_from_env(env_var: str = "LOG_LEVEL", default: int = logging.INFO):
88
+ def get_log_level_from_env(env_var: str = "LOG_LEVEL", default: str = "INFO") -> int:
88
89
  """Read the log level from an environment variable."""
89
90
  log_level_str = os.getenv(env_var, default)
90
91
 
@@ -95,18 +96,16 @@ def get_log_level_from_env(env_var: str = "LOG_LEVEL", default: int = logging.IN
95
96
  if 10 <= log_level <= 50:
96
97
  return log_level
97
98
  else:
98
- logging.warning(
99
- f"Log level {log_level} outside standard range (10-50). Using {logging.getLevelName(default)}."
100
- )
101
- return default
99
+ logging.warning(f"Log level {log_level} outside standard range (10-50). Using {default.upper()}.")
100
+ return logging._nameToLevel[default.upper()]
102
101
 
103
102
  except ValueError:
104
103
  log_level_str = log_level_str.upper()
105
104
  try:
106
105
  return getattr(logging, log_level_str)
107
106
  except AttributeError:
108
- logging.error(f"Invalid LOG_LEVEL '{log_level_str}'. Using {logging.getLevelName(default)}.")
109
- return default
107
+ logging.error(f"Invalid LOG_LEVEL '{log_level_str}'. Using {default.upper()}.")
108
+ return logging._nameToLevel[default.upper()]
110
109
 
111
110
 
112
111
  egse_logger = logging.getLogger("egse")
@@ -145,7 +144,7 @@ if __name__ == "__main__":
145
144
  Environment variables:
146
145
  - LOG_LEVEL=debug|info|warning|critical
147
146
  - LOG_FORMAT=full|clean
148
-
147
+
149
148
  Example logging statements
150
149
  - logging level set to INFO
151
150
  - logging format set to full
@@ -9,12 +9,15 @@ from egse.device import AsyncDeviceTransport
9
9
  from egse.device import DeviceConnectionError
10
10
  from egse.device import DeviceError
11
11
  from egse.device import DeviceTimeoutError
12
+ from egse.env import bool_env
12
13
  from egse.log import logger
13
14
 
14
15
  DEFAULT_READ_TIMEOUT = 1.0 # seconds
15
16
  DEFAULT_CONNECT_TIMEOUT = 3.0 # seconds
16
17
  IDENTIFICATION_QUERY = "*IDN?"
17
18
 
19
+ VERBOSE_DEBUG = bool_env("VERBOSE_DEBUG")
20
+
18
21
  SEPARATOR = b"\n"
19
22
  SEPARATOR_STR = SEPARATOR.decode()
20
23
 
@@ -75,8 +78,7 @@ class AsyncSCPIInterface(AsyncDeviceInterface, AsyncDeviceTransport):
75
78
  self._connect_lock = asyncio.Lock()
76
79
  """Prevents multiple, simultaneous connect or disconnect attempts."""
77
80
  self._io_lock = asyncio.Lock()
78
- """Prevents multiple coroutines from attempting to read, write or query from the same stream
79
- at the same time."""
81
+ """Prevents multiple coroutines from attempting to read, write or query from the same stream at the same time."""
80
82
 
81
83
  def is_simulator(self) -> bool:
82
84
  return False
@@ -166,6 +168,10 @@ class AsyncSCPIInterface(AsyncDeviceInterface, AsyncDeviceTransport):
166
168
 
167
169
  self._is_connection_open = True
168
170
 
171
+ response = await self.read_string()
172
+ if VERBOSE_DEBUG:
173
+ logger.debug(f"Response after connection: {response}")
174
+
169
175
  logger.debug(f"Successfully connected to {self._device_name}.")
170
176
 
171
177
  except asyncio.TimeoutError as exc:
@@ -338,23 +344,23 @@ class AsyncSCPIInterface(AsyncDeviceInterface, AsyncDeviceTransport):
338
344
  if not self._is_connection_open or self._writer is None:
339
345
  raise DeviceConnectionError(self._device_name, "Device not connected, use connect() first")
340
346
 
341
- # Ensure command ends with newline
347
+ # Ensure command ends with the required terminator
342
348
  if not command.endswith(SEPARATOR_STR):
343
349
  command += SEPARATOR_STR
344
350
 
345
- logger.info(f"-----> {command}")
351
+ logger.info(f"-----> {command=}")
346
352
  self._writer.write(command.encode())
347
353
  await self._writer.drain()
348
354
 
349
- # First, small delay to allow device to prepare response
355
+ # First, small delay to allow the device to prepare a response
350
356
  await asyncio.sleep(0.01)
351
357
 
352
- # Try to read until newline (common SCPI terminator)
358
+ # Try to read until the required separator (common SCPI terminator)
353
359
  try:
354
360
  response = await asyncio.wait_for(
355
361
  self._reader.readuntil(separator=SEPARATOR), timeout=self.read_timeout
356
362
  )
357
- logger.info(f"<----- {response}")
363
+ logger.info(f"<----- {response=}")
358
364
  return response
359
365
 
360
366
  except asyncio.IncompleteReadError as exc:
@@ -380,6 +380,37 @@ class Settings:
380
380
 
381
381
  return msg.rstrip()
382
382
 
383
+ @classmethod
384
+ def from_string(cls, yaml_string: str, group: str | None = None) -> attrdict:
385
+ """
386
+ Creates a Settings object from a YAML string.
387
+
388
+ Args:
389
+ yaml_string (str): the YAML configuration as a string
390
+
391
+ Returns:
392
+ An attribute dictionary with all the settings from the given string.
393
+ """
394
+ try:
395
+ yaml_document = yaml.load(yaml_string, Loader=SAFE_LOADER)
396
+ settings = attrdict({name: value for name, value in yaml_document.items()}, label="Settings")
397
+ except yaml.YAMLError as exc:
398
+ logger.error(exc)
399
+ raise SettingsError("Error loading YAML document from string") from exc
400
+
401
+ if not settings:
402
+ logger.warning(
403
+ "The Settings YAML string is empty. No local settings were loaded, an empty dictionary is returned."
404
+ )
405
+
406
+ if group:
407
+ if group in settings:
408
+ settings = attrdict({name: value for name, value in settings[group].items()}, label=group)
409
+ else:
410
+ raise SettingsError(f"Group name '{group}' is not defined in the provided YAML string.")
411
+
412
+ return settings
413
+
383
414
 
384
415
  def main(args: list | None = None): # pragma: no cover
385
416
  # We provide convenience to inspect the settings by calling this module directly from Python.
@@ -155,7 +155,7 @@ class SocketDevice(DeviceConnectionInterface, DeviceTransport):
155
155
 
156
156
  try:
157
157
  while True:
158
- # compute remaining timeout for select, this is needed because we read in different parts
158
+ # compute the remaining timeout for select, this is needed because we read in different parts
159
159
  # until ETX is received, and we want to receive the complete messages including ETX within
160
160
  # the read timeout.
161
161
  if end_time is None: