cgse 0.12.1__tar.gz → 0.13.1__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 (525) hide show
  1. {cgse-0.12.1 → cgse-0.13.1}/.gitignore +1 -0
  2. {cgse-0.12.1 → cgse-0.13.1}/PKG-INFO +1 -1
  3. {cgse-0.12.1 → cgse-0.13.1}/docs/libs/cgse-core/registry.md +3 -2
  4. {cgse-0.12.1 → cgse-0.13.1}/docs/roadmap.md +10 -6
  5. cgse-0.13.1/duckdb_metrics.db +0 -0
  6. cgse-0.13.1/duckdb_metrics.db.wal +0 -0
  7. {cgse-0.12.1 → cgse-0.13.1}/justfile +1 -1
  8. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/pyproject.toml +8 -7
  9. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/service_registry.db +0 -0
  10. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/cgse_common/cgse.py +22 -6
  11. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/command.py +0 -41
  12. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/control.py +21 -17
  13. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/dummy.py +16 -1
  14. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/metrics.py +122 -4
  15. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/plugin.py +93 -6
  16. cgse-0.13.1/libs/cgse-common/src/egse/plugins/metrics/duckdb.py +442 -0
  17. cgse-0.13.1/libs/cgse-common/src/egse/plugins/metrics/influxdb.py +189 -0
  18. cgse-0.13.1/libs/cgse-common/src/egse/plugins/metrics/timescaledb.py +596 -0
  19. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/setup.py +69 -434
  20. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/signal.py +5 -1
  21. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/state.py +24 -66
  22. cgse-0.13.1/libs/cgse-common/tests/test_client_server_interaction.py +107 -0
  23. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/test_command.py +0 -27
  24. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/test_hk.py +18 -20
  25. cgse-0.13.1/libs/cgse-common/tests/test_influxdb_plugin.py +142 -0
  26. cgse-0.13.1/libs/cgse-common/tests/test_metrics.py +25 -0
  27. cgse-0.13.1/libs/cgse-common/tests/test_plugin.py +29 -0
  28. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/test_process.py +1 -1
  29. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/test_setup.py +31 -26
  30. cgse-0.13.1/libs/cgse-common/tests/test_state.py +9 -0
  31. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-coordinates/pyproject.toml +1 -1
  32. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-coordinates/src/egse/coordinates/__init__.py +27 -26
  33. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-coordinates/src/egse/coordinates/avoidance.py +1 -2
  34. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/pyproject.toml +1 -1
  35. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/cgse_core/services.py +0 -6
  36. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/cgse_core/settings.yaml +12 -4
  37. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/egse/confman/__init__.py +4 -2
  38. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/egse/confman/confman_cs.py +1 -1
  39. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/egse/logger/log_cs.py +1 -1
  40. cgse-0.13.1/libs/cgse-core/src/egse/metricshub/server.py +271 -0
  41. cgse-0.13.1/libs/cgse-core/src/egse/notifyhub/__init__.py +8 -0
  42. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/egse/notifyhub/server.py +38 -18
  43. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/egse/notifyhub/services.py +7 -4
  44. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/egse/notifyhub/test.py +2 -2
  45. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/egse/procman/procman_cs.py +1 -1
  46. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/egse/procman/procman_protocol.py +5 -1
  47. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/egse/registry/server.py +1 -1
  48. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/egse/storage/__init__.py +2 -0
  49. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/egse/storage/persistence.py +2 -2
  50. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/egse/storage/storage_cs.py +1 -1
  51. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/pyproject.toml +1 -1
  52. {cgse-0.12.1 → cgse-0.13.1}/noxfile.py +1 -1
  53. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/cgse-tools/pyproject.toml +1 -1
  54. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/cgse-tools/src/cgse_tools/cgse_commands.py +2 -2
  55. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/cgse-tools/src/cgse_tools/cgse_services.py +1 -1
  56. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/keithley-tempcontrol/pyproject.toml +1 -1
  57. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_cs.py +40 -12
  58. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_mon.py +1 -1
  59. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_protocol.py +18 -35
  60. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/cgse_services.py +22 -4
  61. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/lakeshore-tempcontrol/pyproject.toml +1 -1
  62. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/cgse_services.py +0 -1
  63. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/symetrie-hexapod/pyproject.toml +1 -1
  64. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/cgse_services.py +3 -3
  65. {cgse-0.12.1 → cgse-0.13.1}/projects/plato/plato-fits/pyproject.toml +1 -1
  66. {cgse-0.12.1 → cgse-0.13.1}/projects/plato/plato-hdf5/pyproject.toml +1 -1
  67. {cgse-0.12.1 → cgse-0.13.1}/projects/plato/plato-spw/pyproject.toml +1 -1
  68. {cgse-0.12.1 → cgse-0.13.1}/projects/plato/plato-spw/src/egse/spw.py +22 -7
  69. {cgse-0.12.1 → cgse-0.13.1}/pyproject.toml +4 -4
  70. {cgse-0.12.1 → cgse-0.13.1}/ruff.toml +2 -2
  71. cgse-0.13.1/scratch/match-case.py +41 -0
  72. {cgse-0.12.1 → cgse-0.13.1}/service_registry.db +0 -0
  73. {cgse-0.12.1 → cgse-0.13.1}/service_registry.db-shm +0 -0
  74. {cgse-0.12.1 → cgse-0.13.1}/service_registry.db-wal +0 -0
  75. cgse-0.13.1/temperature_readings.log +43 -0
  76. cgse-0.12.1/TODO.md +0 -3
  77. cgse-0.12.1/check_import.py +0 -5
  78. cgse-0.12.1/libs/cgse-common/tests/test_client_server_interaction.py +0 -90
  79. cgse-0.12.1/requirements.txt +0 -1728
  80. cgse-0.12.1/scratch.py +0 -27
  81. {cgse-0.12.1 → cgse-0.13.1}/.github/workflows/ruff-format-check.yaml +0 -0
  82. {cgse-0.12.1 → cgse-0.13.1}/README.md +0 -0
  83. {cgse-0.12.1 → cgse-0.13.1}/bump.py +0 -0
  84. {cgse-0.12.1 → cgse-0.13.1}/conftest.py +0 -0
  85. {cgse-0.12.1 → cgse-0.13.1}/docs/api/bits.md +0 -0
  86. {cgse-0.12.1 → cgse-0.13.1}/docs/api/calibration.md +0 -0
  87. {cgse-0.12.1 → cgse-0.13.1}/docs/api/command.md +0 -0
  88. {cgse-0.12.1 → cgse-0.13.1}/docs/api/config.md +0 -0
  89. {cgse-0.12.1 → cgse-0.13.1}/docs/api/control.md +0 -0
  90. {cgse-0.12.1 → cgse-0.13.1}/docs/api/counter.md +0 -0
  91. {cgse-0.12.1 → cgse-0.13.1}/docs/api/decorators.md +0 -0
  92. {cgse-0.12.1 → cgse-0.13.1}/docs/api/device.md +0 -0
  93. {cgse-0.12.1 → cgse-0.13.1}/docs/api/dicts.md +0 -0
  94. {cgse-0.12.1 → cgse-0.13.1}/docs/api/dummy.md +0 -0
  95. {cgse-0.12.1 → cgse-0.13.1}/docs/api/env.md +0 -0
  96. {cgse-0.12.1 → cgse-0.13.1}/docs/api/exceptions.md +0 -0
  97. {cgse-0.12.1 → cgse-0.13.1}/docs/api/heartbeat.md +0 -0
  98. {cgse-0.12.1 → cgse-0.13.1}/docs/api/hk.md +0 -0
  99. {cgse-0.12.1 → cgse-0.13.1}/docs/api/index.md +0 -0
  100. {cgse-0.12.1 → cgse-0.13.1}/docs/api/listener.md +0 -0
  101. {cgse-0.12.1 → cgse-0.13.1}/docs/api/metrics.md +0 -0
  102. {cgse-0.12.1 → cgse-0.13.1}/docs/api/mixin.md +0 -0
  103. {cgse-0.12.1 → cgse-0.13.1}/docs/api/monitoring.md +0 -0
  104. {cgse-0.12.1 → cgse-0.13.1}/docs/api/observer.md +0 -0
  105. {cgse-0.12.1 → cgse-0.13.1}/docs/api/obsid.md +0 -0
  106. {cgse-0.12.1 → cgse-0.13.1}/docs/api/persistence.md +0 -0
  107. {cgse-0.12.1 → cgse-0.13.1}/docs/api/plugin.md +0 -0
  108. {cgse-0.12.1 → cgse-0.13.1}/docs/api/process.md +0 -0
  109. {cgse-0.12.1 → cgse-0.13.1}/docs/api/reload.md +0 -0
  110. {cgse-0.12.1 → cgse-0.13.1}/docs/api/settings.md +0 -0
  111. {cgse-0.12.1 → cgse-0.13.1}/docs/api/setup.md +0 -0
  112. {cgse-0.12.1 → cgse-0.13.1}/docs/api/system.md +0 -0
  113. {cgse-0.12.1 → cgse-0.13.1}/docs/custom_theme/main.html +0 -0
  114. {cgse-0.12.1 → cgse-0.13.1}/docs/dev_guide/coding_style.md +0 -0
  115. {cgse-0.12.1 → cgse-0.13.1}/docs/dev_guide/docs.md +0 -0
  116. {cgse-0.12.1 → cgse-0.13.1}/docs/dev_guide/index.md +0 -0
  117. {cgse-0.12.1 → cgse-0.13.1}/docs/dev_guide/installation.md +0 -0
  118. {cgse-0.12.1 → cgse-0.13.1}/docs/dev_guide/monitoring.md +0 -0
  119. {cgse-0.12.1 → cgse-0.13.1}/docs/dev_guide/monorepo.md +0 -0
  120. {cgse-0.12.1 → cgse-0.13.1}/docs/dev_guide/nox.md +0 -0
  121. {cgse-0.12.1 → cgse-0.13.1}/docs/dev_guide/plugins.md +0 -0
  122. {cgse-0.12.1 → cgse-0.13.1}/docs/dev_guide/project-configuration.md +0 -0
  123. {cgse-0.12.1 → cgse-0.13.1}/docs/dev_guide/unit_testing.md +0 -0
  124. {cgse-0.12.1 → cgse-0.13.1}/docs/dev_guide/uv.md +0 -0
  125. {cgse-0.12.1 → cgse-0.13.1}/docs/dev_guide/versioning.md +0 -0
  126. {cgse-0.12.1 → cgse-0.13.1}/docs/getting_started.md +0 -0
  127. {cgse-0.12.1 → cgse-0.13.1}/docs/help.md +0 -0
  128. {cgse-0.12.1 → cgse-0.13.1}/docs/images/github-fork-clone-dark.png +0 -0
  129. {cgse-0.12.1 → cgse-0.13.1}/docs/images/github-fork-clone.png +0 -0
  130. {cgse-0.12.1 → cgse-0.13.1}/docs/images/grafana-queries.png +0 -0
  131. {cgse-0.12.1 → cgse-0.13.1}/docs/images/icons/cgse-logo-blue.svg +0 -0
  132. {cgse-0.12.1 → cgse-0.13.1}/docs/images/icons/cgse-logo.svg +0 -0
  133. {cgse-0.12.1 → cgse-0.13.1}/docs/index.md +0 -0
  134. {cgse-0.12.1 → cgse-0.13.1}/docs/initialize.md +0 -0
  135. {cgse-0.12.1 → cgse-0.13.1}/docs/libs/cgse-common/images/load_methods.png +0 -0
  136. {cgse-0.12.1 → cgse-0.13.1}/docs/libs/cgse-common/index.md +0 -0
  137. {cgse-0.12.1 → cgse-0.13.1}/docs/libs/cgse-common/settings.md +0 -0
  138. {cgse-0.12.1 → cgse-0.13.1}/docs/libs/cgse-common/setup.md +0 -0
  139. {cgse-0.12.1 → cgse-0.13.1}/docs/libs/cgse-coordinates/index.md +0 -0
  140. {cgse-0.12.1 → cgse-0.13.1}/docs/libs/cgse-core/index.md +0 -0
  141. {cgse-0.12.1 → cgse-0.13.1}/docs/libs/cgse-gui/index.md +0 -0
  142. {cgse-0.12.1 → cgse-0.13.1}/docs/libs/index.md +0 -0
  143. {cgse-0.12.1 → cgse-0.13.1}/docs/package_list.md +0 -0
  144. {cgse-0.12.1 → cgse-0.13.1}/docs/projects/cgse-tools.md +0 -0
  145. {cgse-0.12.1 → cgse-0.13.1}/docs/projects/index.md +0 -0
  146. {cgse-0.12.1 → cgse-0.13.1}/docs/projects/symetrie-hexapod.md +0 -0
  147. {cgse-0.12.1 → cgse-0.13.1}/docs/stylesheets/custom.css +0 -0
  148. {cgse-0.12.1 → cgse-0.13.1}/docs/stylesheets/extra.css +0 -0
  149. {cgse-0.12.1 → cgse-0.13.1}/docs/tutorial.md +0 -0
  150. {cgse-0.12.1 → cgse-0.13.1}/docs/user_guide/index.md +0 -0
  151. {cgse-0.12.1 → cgse-0.13.1}/identifier.sqlite +0 -0
  152. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/README.md +0 -0
  153. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/justfile +0 -0
  154. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/noxfile.py +0 -0
  155. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/cgse_common/__init__.py +0 -0
  156. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/cgse_common/settings.yaml +0 -0
  157. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/async_control_claude.py +0 -0
  158. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/bits.py +0 -0
  159. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/calibration.py +0 -0
  160. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/config.py +0 -0
  161. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/counter.py +0 -0
  162. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/decorators.py +0 -0
  163. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/device.py +0 -0
  164. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/dicts.py +0 -0
  165. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/env.py +0 -0
  166. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/exceptions.py +0 -0
  167. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/heartbeat.py +0 -0
  168. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/hk.py +0 -0
  169. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/listener.py +0 -0
  170. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/mixin.py +0 -0
  171. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/monitoring.py +0 -0
  172. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/observer.py +0 -0
  173. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/obsid.py +0 -0
  174. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/persistence.py +0 -0
  175. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/process.py +0 -0
  176. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/protocol.py +0 -0
  177. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/proxy.py +0 -0
  178. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/py.typed +0 -0
  179. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/randomwalk.py +0 -0
  180. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/ratelimit.py +0 -0
  181. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/reload.py +0 -0
  182. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/resource.py +0 -0
  183. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/response.py +0 -0
  184. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/scpi.py +0 -0
  185. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/services.py +0 -0
  186. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/services.yaml +0 -0
  187. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/settings.py +0 -0
  188. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/settings.yaml +0 -0
  189. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/socketdevice.py +0 -0
  190. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/system.py +0 -0
  191. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/task.py +0 -0
  192. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/version.py +0 -0
  193. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/src/egse/zmq_ser.py +0 -0
  194. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/conftest.py +0 -0
  195. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/data/COPYING +0 -0
  196. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00028_201028_155259.yaml +0 -0
  197. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00029_201028_155331.yaml +0 -0
  198. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00030_210311_134043.yaml +0 -0
  199. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00080_210917_105245.yaml +0 -0
  200. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00081_210922_142259.yaml +0 -0
  201. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00082_210923_094458.yaml +0 -0
  202. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/data/CSL1/README.md +0 -0
  203. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/data/CSL2/README.md +0 -0
  204. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/data/IAS/README.md +0 -0
  205. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/data/INTA/README.md +0 -0
  206. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/data/LAB23/README.md +0 -0
  207. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00027_211119_140441.yaml +0 -0
  208. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00028_211119_160406.yaml +0 -0
  209. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00029_211119_172918.yaml +0 -0
  210. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00030_211122_103604.yaml +0 -0
  211. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00031_211123_124900.yaml +0 -0
  212. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/data/common/telemetry/tm-dictionary-default.csv +0 -0
  213. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/data/conf/SETUP_20250114_1519.yaml +0 -0
  214. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/data/conf/config-file.toml +0 -0
  215. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/data/data/cal_coeff_1234.csv +0 -0
  216. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/data/data/calibration.csv +0 -0
  217. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/data/data/calibration.yaml +0 -0
  218. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/data/data/command.yaml +0 -0
  219. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/data/data/corrupt.yaml +0 -0
  220. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/data/data/data-file.txt +0 -0
  221. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/data/data/empty_data_file.txt +0 -0
  222. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/data/data/empty_yaml_file.yaml +0 -0
  223. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/data/data/local_settings.yaml +0 -0
  224. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/data/data/new_local_settings.yaml +0 -0
  225. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/data/data/test_setup.yaml +0 -0
  226. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/data/icons/hourglass.svg +0 -0
  227. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/data/icons/keyboard.png +0 -0
  228. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/data/icons/soap_sponge.svg +0 -0
  229. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/data/lib/dev1/shared-lib.so +0 -0
  230. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/data/lib/dev2/shared-lib.so +0 -0
  231. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/fixtures/default_env.py +0 -0
  232. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/fixtures/helpers.py +0 -0
  233. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/scripts/empty_process.py +0 -0
  234. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/scripts/handle_sigterm.py +0 -0
  235. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/scripts/process_with_children.py +0 -0
  236. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/scripts/raise_value_error.py +0 -0
  237. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/scripts/void-0.py +0 -0
  238. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/scripts/void-1.py +0 -0
  239. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/test_bits.py +0 -0
  240. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/test_config.py +0 -0
  241. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/test_control.py +0 -0
  242. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/test_decorators.py +0 -0
  243. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/test_device.py +0 -0
  244. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/test_env.py +0 -0
  245. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/test_fixtures.py +0 -0
  246. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/test_listener.py +0 -0
  247. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/test_mixin.py +0 -0
  248. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/test_protocol.py +0 -0
  249. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/test_ratelimit.py +0 -0
  250. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/test_resource.py +0 -0
  251. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/test_response.py +0 -0
  252. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/test_settings.py +0 -0
  253. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/test_signal.py +0 -0
  254. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/test_system.py +0 -0
  255. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/test_task.py +0 -0
  256. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-common/tests/test_zmq_ser.py +0 -0
  257. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-coordinates/README.md +0 -0
  258. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-coordinates/src/cgse_coordinates/__init__.py +0 -0
  259. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-coordinates/src/cgse_coordinates/settings.yaml +0 -0
  260. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-coordinates/src/egse/coordinates/cslmodel.py +0 -0
  261. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-coordinates/src/egse/coordinates/laser_tracker_to_dict.py +0 -0
  262. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-coordinates/src/egse/coordinates/point.py +0 -0
  263. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-coordinates/src/egse/coordinates/pyplot.py +0 -0
  264. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-coordinates/src/egse/coordinates/referenceFrame.py +0 -0
  265. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-coordinates/src/egse/coordinates/refmodel.py +0 -0
  266. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-coordinates/src/egse/coordinates/rotationMatrix.py +0 -0
  267. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-coordinates/src/egse/coordinates/transform3d_addon.py +0 -0
  268. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-coordinates/tests/test_avoidance.py +0 -0
  269. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-coordinates/tests/test_coordinates_plot.py +0 -0
  270. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-coordinates/tests/test_coordinates_serialize.py +0 -0
  271. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-coordinates/tests/test_point.py +0 -0
  272. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-coordinates/tests/test_ref_model.py +0 -0
  273. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-coordinates/tests/test_reference_frames.py +0 -0
  274. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-coordinates/tests/test_refmodel.py +0 -0
  275. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/.envrc.disabled +0 -0
  276. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/README.md +0 -0
  277. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/service_registry.db +0 -0
  278. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/cgse_core/__init__.py +0 -0
  279. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/cgse_core/_start.py +0 -0
  280. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/cgse_core/_status.py +0 -0
  281. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/cgse_core/_stop.py +0 -0
  282. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/cgse_core/cgse_explore.py +0 -0
  283. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/egse/async_control.py +0 -0
  284. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/egse/confman/__main__.py +0 -0
  285. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/egse/confman/confman.yaml +0 -0
  286. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/egse/icons/busy.svg +0 -0
  287. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/egse/icons/operational-mode.svg +0 -0
  288. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/egse/icons/pm_ui.svg +0 -0
  289. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/egse/icons/simulator-mode.svg +0 -0
  290. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/egse/icons/start-process-button.svg +0 -0
  291. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/egse/icons/stop-process-button.svg +0 -0
  292. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/egse/icons/user-interface.svg +0 -0
  293. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/egse/logger/__init__.py +0 -0
  294. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/egse/logger/__main__.py +0 -0
  295. {cgse-0.12.1/libs/cgse-core/src/egse/notifyhub → cgse-0.13.1/libs/cgse-core/src/egse/metricshub}/__init__.py +0 -0
  296. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/egse/notifyhub/event.py +0 -0
  297. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/egse/procman/__init__.py +0 -0
  298. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/egse/procman/procman.yaml +0 -0
  299. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/egse/procman/procman_ui.py +0 -0
  300. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/egse/registry/__init__.py +0 -0
  301. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/egse/registry/backend.py +0 -0
  302. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/egse/registry/client.py +0 -0
  303. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/egse/registry/service.py +0 -0
  304. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/egse/storage/__main__.py +0 -0
  305. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/src/egse/storage/storage.yaml +0 -0
  306. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/tests/conftest.py +0 -0
  307. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/tests/data/local_settings.yaml +0 -0
  308. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/tests/fixtures/default_env.py +0 -0
  309. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/tests/fixtures/helpers.py +0 -0
  310. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/tests/fixtures/services.py +0 -0
  311. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/tests/script_test_async_registry_client.py +0 -0
  312. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/tests/script_test_registry_client_server.py +0 -0
  313. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/tests/script_test_service_registry_server.py +0 -0
  314. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/tests/script_test_sync_registry_client.py +0 -0
  315. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/tests/services.py +0 -0
  316. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/tests/stress_test_registry_server.py +0 -0
  317. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/tests/test_async_control.py +0 -0
  318. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/tests/test_cm_cs.py +0 -0
  319. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/tests/test_confman_setups.py +0 -0
  320. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/tests/test_logger.py +0 -0
  321. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/tests/test_registry_backend.py +0 -0
  322. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/tests/test_registry_service.py +0 -0
  323. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/tests/test_server_running.py +0 -0
  324. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/tests/test_server_running_with_fixture.py +0 -0
  325. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/tests/test_settings_core.py +0 -0
  326. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-core/tests/test_zmq_microservice.py +0 -0
  327. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/README.md +0 -0
  328. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/__init__.py +0 -0
  329. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/buttons.py +0 -0
  330. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-start.svg +0 -0
  331. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-stop.svg +0 -0
  332. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/aeu-cs.svg +0 -0
  333. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-started.svg +0 -0
  334. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-stopped.svg +0 -0
  335. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/aeu_cs.svg +0 -0
  336. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/alert.svg +0 -0
  337. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/arrow-double-left.png +0 -0
  338. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/arrow-double-right.png +0 -0
  339. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/arrow-up.svg +0 -0
  340. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/backward.svg +0 -0
  341. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/busy.svg +0 -0
  342. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/cleaning.svg +0 -0
  343. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/color-scheme.svg +0 -0
  344. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/cs-connected-alert.svg +0 -0
  345. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/cs-connected-disabled.svg +0 -0
  346. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/cs-connected.svg +0 -0
  347. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/cs-not-connected.svg +0 -0
  348. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/double-left-arrow.svg +0 -0
  349. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/double-right-arrow.svg +0 -0
  350. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/erase-disabled.svg +0 -0
  351. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/erase.svg +0 -0
  352. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/fitsgen-start.svg +0 -0
  353. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/fitsgen-stop.svg +0 -0
  354. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/fitsgen.svg +0 -0
  355. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/forward.svg +0 -0
  356. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/fov-hk-start.svg +0 -0
  357. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/fov-hk-stop.svg +0 -0
  358. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/fov-hk.svg +0 -0
  359. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/front-desk.svg +0 -0
  360. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/home-actioned.svg +0 -0
  361. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/home-disabled.svg +0 -0
  362. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/home.svg +0 -0
  363. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/info.svg +0 -0
  364. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/invalid.png +0 -0
  365. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/led-green.svg +0 -0
  366. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/led-grey.svg +0 -0
  367. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/led-orange.svg +0 -0
  368. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/led-red.svg +0 -0
  369. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/led-square-green.svg +0 -0
  370. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/led-square-grey.svg +0 -0
  371. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/led-square-orange.svg +0 -0
  372. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/led-square-red.svg +0 -0
  373. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-green.svg +0 -0
  374. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-red.svg +0 -0
  375. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el+.svg +0 -0
  376. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el-.svg +0 -0
  377. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/location-marker.svg +0 -0
  378. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/logo-dpu.svg +0 -0
  379. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/logo-gimbal.svg +0 -0
  380. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/logo-huber.svg +0 -0
  381. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/logo-ogse.svg +0 -0
  382. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/logo-puna.svg +0 -0
  383. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/logo-tcs.svg +0 -0
  384. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/logo-zonda.svg +0 -0
  385. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/maximize.svg +0 -0
  386. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/meter.svg +0 -0
  387. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/more.svg +0 -0
  388. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-start.svg +0 -0
  389. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-stop.svg +0 -0
  390. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk.svg +0 -0
  391. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/observing-off.svg +0 -0
  392. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/observing-on.svg +0 -0
  393. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.png +0 -0
  394. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.svg +0 -0
  395. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/ops-mode.svg +0 -0
  396. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/play-green.svg +0 -0
  397. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/plugged-disabled.svg +0 -0
  398. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/plugged.svg +0 -0
  399. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/pm_ui.svg +0 -0
  400. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/power-button-green.svg +0 -0
  401. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/power-button-red.svg +0 -0
  402. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/power-button.svg +0 -0
  403. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/radar.svg +0 -0
  404. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/radioactive.svg +0 -0
  405. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/reload.svg +0 -0
  406. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/remote-control-off.svg +0 -0
  407. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/remote-control-on.svg +0 -0
  408. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/repeat-blue.svg +0 -0
  409. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/repeat.svg +0 -0
  410. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/settings.svg +0 -0
  411. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/shrink.svg +0 -0
  412. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/shutter.svg +0 -0
  413. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/sign-off.svg +0 -0
  414. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/sign-on.svg +0 -0
  415. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/sim-mode.svg +0 -0
  416. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/small-buttons-go.svg +0 -0
  417. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/small-buttons-minus.svg +0 -0
  418. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/small-buttons-plus.svg +0 -0
  419. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/sponge.svg +0 -0
  420. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/start-button-disabled.svg +0 -0
  421. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/start-button.svg +0 -0
  422. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/stop-button-disabled.svg +0 -0
  423. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/stop-button.svg +0 -0
  424. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/stop-red.svg +0 -0
  425. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/stop.svg +0 -0
  426. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/switch-disabled-square.svg +0 -0
  427. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/switch-disabled.svg +0 -0
  428. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/switch-off-square.svg +0 -0
  429. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/switch-off.svg +0 -0
  430. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/switch-on-square.svg +0 -0
  431. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/switch-on.svg +0 -0
  432. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/temperature-control.svg +0 -0
  433. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/th_ui_logo.svg +0 -0
  434. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/unplugged.svg +0 -0
  435. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/unvalid.png +0 -0
  436. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/user-interface.svg +0 -0
  437. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/vacuum.svg +0 -0
  438. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/valid.png +0 -0
  439. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-dark.svg +0 -0
  440. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-white.svg +0 -0
  441. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/led.py +0 -0
  442. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/limitswitch.py +0 -0
  443. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/states.py +0 -0
  444. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/styles/dark.qss +0 -0
  445. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/styles/default.qss +0 -0
  446. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/styles.qss +0 -0
  447. {cgse-0.12.1 → cgse-0.13.1}/libs/cgse-gui/src/egse/gui/switch.py +0 -0
  448. {cgse-0.12.1 → cgse-0.13.1}/mkdocs.yml +0 -0
  449. {cgse-0.12.1 → cgse-0.13.1}/overrides/.icons/custom/dbend-dark.svg +0 -0
  450. {cgse-0.12.1 → cgse-0.13.1}/overrides/.icons/custom/dbend-light.svg +0 -0
  451. {cgse-0.12.1 → cgse-0.13.1}/overrides/.icons/custom/gear.svg +0 -0
  452. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/cgse-tools/README.md +0 -0
  453. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/cgse-tools/src/cgse_tools/__init__.py +0 -0
  454. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/cgse-tools/src/cgse_tools/cgse_clock.py +0 -0
  455. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/cgse-tools/src/egse/tools/status.py +0 -0
  456. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/keithley-tempcontrol/README.md +0 -0
  457. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/keithley-tempcontrol/justfile +0 -0
  458. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/keithley-tempcontrol/noxfile.py +0 -0
  459. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/keithley-tempcontrol/service_registry.db +0 -0
  460. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/__init__.py +0 -0
  461. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510.py +0 -0
  462. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510.yaml +0 -0
  463. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_adev.py +0 -0
  464. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_dev.py +0 -0
  465. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_sim.py +0 -0
  466. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/__init__.py +0 -0
  467. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/cgse_explore.py +0 -0
  468. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/settings.yaml +0 -0
  469. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/keithley-tempcontrol/temperature_readings.log +0 -0
  470. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/keithley-tempcontrol/tests/script_daq6510_mon.py +0 -0
  471. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/keithley-tempcontrol/tests/test_adev.py +0 -0
  472. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/keithley-tempcontrol/tests/test_dev.py +0 -0
  473. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/lakeshore-tempcontrol/README.md +0 -0
  474. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336.py +0 -0
  475. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336.yaml +0 -0
  476. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_cs.py +0 -0
  477. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_devif.py +0 -0
  478. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_protocol.py +0 -0
  479. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/__init__.py +0 -0
  480. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/cgse_explore.py +0 -0
  481. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/settings.yaml +0 -0
  482. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/lakeshore-tempcontrol/tests/test_lakeshore336_simulator.py +0 -0
  483. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/symetrie-hexapod/README.md +0 -0
  484. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/__init__.py +0 -0
  485. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/__init__.py +0 -0
  486. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/alpha.py +0 -0
  487. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/dynalpha.py +0 -0
  488. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod.py +0 -0
  489. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod_ui.py +0 -0
  490. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.py +0 -0
  491. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.yaml +0 -0
  492. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_cs.py +0 -0
  493. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_protocol.py +0 -0
  494. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_ui.py +0 -0
  495. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac.py +0 -0
  496. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac_regex.py +0 -0
  497. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.py +0 -0
  498. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.yaml +0 -0
  499. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_cs.py +0 -0
  500. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_protocol.py +0 -0
  501. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_sim.py +0 -0
  502. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_ui.py +0 -0
  503. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/punaplus.py +0 -0
  504. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.py +0 -0
  505. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.yaml +0 -0
  506. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_cs.py +0 -0
  507. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_devif.py +0 -0
  508. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_protocol.py +0 -0
  509. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_ui.py +0 -0
  510. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/__init__.py +0 -0
  511. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/cgse_explore.py +0 -0
  512. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/settings.yaml +0 -0
  513. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/symetrie-hexapod/tests/test_puna.py +0 -0
  514. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/symetrie-hexapod/tests/test_puna_cs.py +0 -0
  515. {cgse-0.12.1 → cgse-0.13.1}/projects/generic/symetrie-hexapod/tests/test_puna_simulator.py +0 -0
  516. {cgse-0.12.1 → cgse-0.13.1}/projects/plato/plato-fits/README.md +0 -0
  517. {cgse-0.12.1 → cgse-0.13.1}/projects/plato/plato-fits/src/egse/plugins/storage/fits.py +0 -0
  518. {cgse-0.12.1 → cgse-0.13.1}/projects/plato/plato-hdf5/README.md +0 -0
  519. {cgse-0.12.1 → cgse-0.13.1}/projects/plato/plato-hdf5/src/egse/plugins/storage/hdf5.py +0 -0
  520. {cgse-0.12.1 → cgse-0.13.1}/projects/plato/plato-spw/README.md +0 -0
  521. {cgse-0.12.1 → cgse-0.13.1/scratch}/advanced-process-monitoring.py +0 -0
  522. {cgse-0.12.1 → cgse-0.13.1/scratch}/live-process-monitoring.py +0 -0
  523. {cgse-0.12.1 → cgse-0.13.1/scratch}/processes.json +0 -0
  524. {cgse-0.12.1 → cgse-0.13.1/scratch}/simple-process-monitoring.py +0 -0
  525. {cgse-0.12.1 → cgse-0.13.1}/test_service_registry.db +0 -0
@@ -18,6 +18,7 @@ dist
18
18
 
19
19
  .pytest_cache
20
20
  .coverage
21
+ .coverage.*
21
22
  .nox
22
23
  htmlcov
23
24
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cgse
3
- Version: 0.12.1
3
+ Version: 0.13.1
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>
@@ -44,11 +44,12 @@ A microservice can register as follows:
44
44
  from egse.registry.client import AsyncRegistryClient
45
45
 
46
46
  registry_client = AsyncRegistryClient()
47
+ registry_client.connect()
47
48
 
48
49
  service_id = await registry_client.register(
49
50
  name=service_name,
50
- host=get_host_ip(),
51
- port=get_port(),
51
+ host=hostname,
52
+ port=port_number,
52
53
  service_type=service_type,
53
54
  metadata={},
54
55
  ttl=30,
@@ -31,20 +31,20 @@ Provide a `cgse` command that is extensible with new commands and command groups
31
31
 
32
32
  - [ ] Reference Frames and coordinate transformations -> Graphs
33
33
  - [ ] Metrics for all devices will be handled using InfluxDB
34
- - [ ] Use of Grafana to visualize the metrics
34
+ - [x] Use of Grafana to visualize the metrics
35
35
 
36
36
  ## Core Services
37
37
 
38
38
  - [ ] Process Manager needs to be added with optimised design and performance
39
39
  - [ ] Synoptic Manager
40
40
  - [x] Distributed Service Registry
41
- - [ ] dynamic port assignment for all services
41
+ - [x] dynamic port assignment for all services -> service registry
42
42
 
43
43
  ## Devices
44
44
 
45
45
  - [x] The Symétrie Hexapods: PUNA, ZONDA, JORAN
46
46
  - [x] The Keithley Data Acquisition Multimeter
47
- - [ ] The Lakeshore temperature controller
47
+ - [x] The Lakeshore temperature controller
48
48
 
49
49
  ## Projects
50
50
 
@@ -67,12 +67,14 @@ Provide a `cgse` command that is extensible with new commands and command groups
67
67
  use of command YAML files, replace `dynamic_interface` with `dynamic_command`.
68
68
  - [ ] Introduce asyncio into the commanding protocol, e.g. `get_status()`
69
69
  and `get_housekeeping()` shall be handled asynchronously.
70
- - [ ] GlobalState Setup needs some redesign, especially `GlobalState.setup` which should not consult
70
+ - [x] GlobalState Setup needs some redesign, especially `GlobalState.setup`
71
+ which should not consult
71
72
  the configuration manager by default.
72
73
 
73
74
  ## Removals
74
75
 
75
- - [ ] The `get_common_egse_root()` is of no use anymore and needs to be removed or replaced in some
76
+ - [x] The `get_common_egse_root()` is of no use anymore and needs to be
77
+ removed or replaced in some
76
78
  cases.
77
79
 
78
80
  ## Testing
@@ -80,4 +82,6 @@ Provide a `cgse` command that is extensible with new commands and command groups
80
82
  - [x] Add unit testing with `nox` running tests for Python 3.9, 3.10, 3.11, and 3.12
81
83
  - [ ] Add proper unit tests for all packages – using `pytest`
82
84
  - [ ] Add a CI test suite
83
- - [ ] Use GitHub Actions for running tests before merging
85
+ - [ ] Add GitHub Action to check proper formatting of all the code in a pull
86
+ request
87
+ - [ ] Add GitHub Actions for running tests before merging
Binary file
Binary file
@@ -25,7 +25,7 @@ hello arg="":
25
25
  system-info:
26
26
  @echo "This is an {{arch()}} machine, running {{os()}}".
27
27
 
28
- default_python := "3.9.20"
28
+ default_python := "3.10"
29
29
 
30
30
  # Start an IPython session
31
31
  ipython version=default_python:
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "cgse-common"
3
- version = "0.12.1"
3
+ version = "0.13.1"
4
4
  description = "Software framework to support hardware testing"
5
5
  authors = [
6
6
  {name = "IvS KU Leuven"}
@@ -19,7 +19,7 @@ keywords = [
19
19
  "software framework"
20
20
  ]
21
21
  dependencies = [
22
- "click>=8.1.8",
22
+ "click>=8.2.1",
23
23
  "deepdiff>=8.1.1",
24
24
  "distro>=1.9.0",
25
25
  "gitpython>=3.1.44",
@@ -27,9 +27,8 @@ dependencies = [
27
27
  "psutil>=6.1.1",
28
28
  "pyyaml>=6.0.2",
29
29
  "rich>=13.9.4",
30
- "typer>=0.15.1",
31
- "navdict>=0.2.4",
32
-
30
+ "typer>=0.16.0",
31
+ "navdict>=0.5.9",
33
32
  # Python 3.9 specific dependencies
34
33
  "numpy==1.26.4; python_version == '3.9'",
35
34
  "pandas==1.5.1; python_version == '3.9'",
@@ -38,10 +37,12 @@ dependencies = [
38
37
  "numpy>=2.1; python_version >= '3.10'",
39
38
  "pandas>=2.2.0; python_version >= '3.10'",
40
39
  "pyzmq>=25.1.0; python_version >= '3.10'",
41
-
42
40
  # Python 3.10+ entrypoints interface changed
43
41
  "importlib_metadata>=4.6.0; python_version <= '3.11'",
44
42
  "influxdb3-python",
43
+ "duckdb>=1.3.1",
44
+ "requests>=2.32.4",
45
+ "psycopg>=3.2.9",
45
46
  ]
46
47
 
47
48
  [project.scripts]
@@ -57,7 +58,7 @@ cgse-common = "cgse_common:settings.yaml"
57
58
  [tool.pytest.ini_options]
58
59
  pythonpath = "src"
59
60
  testpaths = ["tests"]
60
- addopts = "-rA --cov --cov-branch --cov-report html"
61
+ addopts = "-ra --cov --cov-branch --cov-report html"
61
62
  log_cli = true
62
63
  log_cli_level = "INFO"
63
64
  filterwarnings = [
@@ -85,7 +85,7 @@ class SortedCommandGroup(TyperGroup):
85
85
  return sorted(commands, key=get_command_priority)
86
86
 
87
87
 
88
- app = typer.Typer(add_completion=True, cls=SortedCommandGroup, rich_markup_mode="markdown")
88
+ app = typer.Typer(add_completion=True, cls=SortedCommandGroup)
89
89
 
90
90
 
91
91
  @app.command()
@@ -121,22 +121,33 @@ def version(ctx: typer.Context):
121
121
  )
122
122
 
123
123
 
124
+ def subcommand_callback(ctx: typer.Context):
125
+ """Normal callback."""
126
+ if ctx.invoked_subcommand is None:
127
+ typer.echo("No command specified:")
128
+ typer.echo(ctx.get_help())
129
+ raise typer.Exit()
130
+
131
+
124
132
  def build_app():
125
133
  global app
126
134
 
135
+ # rich.print("Available command groups:", entry_points("cgse.command"))
136
+
127
137
  for ep in entry_points("cgse.command"):
128
138
  try:
129
139
  obj = ep.load()
130
140
  if isinstance(obj, typer.Typer):
131
- app.add_typer(ep.load(), name=ep.name)
141
+ obj.callback(invoke_without_command=True)(subcommand_callback)
142
+ app.add_typer(obj, name=ep.name)
132
143
  else:
133
- app.command()(ep.load())
144
+ app.command()(obj)
134
145
  except Exception as exc:
135
146
  app.command()(broken_command(ep.name, ep.module, exc))
136
147
 
137
148
  cgse_eps = HierarchicalEntryPoints("cgse.service")
138
149
 
139
- # rich.print("Available groups:", cgse_eps.get_all_groups())
150
+ # rich.print("Available services groups:", cgse_eps.get_all_groups())
140
151
 
141
152
  for group in cgse_eps.get_all_groups():
142
153
  for ep in entry_points(group):
@@ -145,12 +156,14 @@ def build_app():
145
156
  app.add_typer(ep.load(), name=ep.name)
146
157
  else:
147
158
  command_group = snake_to_title(group.split(".")[-1])
148
- app.add_typer(ep.load(), name=ep.name, rich_help_panel=command_group)
159
+ plugin_app: typer.Typer = ep.load()
160
+ plugin_app.callback(invoke_without_command=True)(subcommand_callback)
161
+ app.add_typer(plugin_app, name=ep.name, rich_help_panel=command_group)
149
162
  except Exception as exc:
150
163
  app.command()(broken_command(ep.name, ep.module, exc))
151
164
 
152
165
 
153
- @app.callback(no_args_is_help=True, invoke_without_command=True)
166
+ @app.callback(invoke_without_command=True)
154
167
  def main(ctx: typer.Context, verbose: bool = False):
155
168
  """
156
169
  The `cgse` command is used to:
@@ -167,6 +180,9 @@ def main(ctx: typer.Context, verbose: bool = False):
167
180
 
168
181
  ctx.obj = AppState(verbose=verbose)
169
182
 
183
+ if ctx.invoked_subcommand is None:
184
+ # print("Try 'cgse --help' for a list of commands.")
185
+ typer.echo(ctx.get_help())
170
186
 
171
187
  build_app()
172
188
 
@@ -145,46 +145,6 @@ def stringify_function_call(function_info: dict) -> str:
145
145
  return result
146
146
 
147
147
 
148
- def dry_run(func: Callable) -> Callable:
149
- """This decorator prepares the function to handle a dry run.
150
-
151
- A dry run is used to check the logic of an instrument commanding script without
152
- actually executing the instrument commands. The commands are instead added to the
153
- command sequence in the global state.
154
-
155
- Args:
156
- func: the function that needs to be executed
157
-
158
- Returns:
159
- A wrapper around the given function.
160
- """
161
-
162
- @functools.wraps(func)
163
- def func_wrapper(self, *args, **kwargs):
164
- from egse.state import GlobalState # prevent circular import
165
-
166
- if GlobalState.dry_run:
167
- if callable(func) and func.__name__ == "client_call":
168
- # This client_call function takes an additional argument which is the Proxy.
169
- # the Proxy is not part of the CommandExecution signature and shall be removed
170
- # FIXME: do we introduce a memory leak here by adding 'self' to this GlobalState?
171
- args = args[1:]
172
- try:
173
- self.validate_arguments(*args, **kwargs)
174
- except CommandError as e_ce:
175
- GlobalState.add_command(InvalidCommandExecution(e_ce, self, *args, **kwargs))
176
- else:
177
- GlobalState.add_command(CommandExecution(self, *args, **kwargs))
178
- else:
179
- FunctionExecution = namedtuple("FunctionExecution", ["name", "args", "kwargs"])
180
- GlobalState.add_command(FunctionExecution(func.__name__, args, kwargs))
181
- return Success("Command execution appended to command sequence, function not executed in dry_run.")
182
- else:
183
- return func(self, *args, **kwargs)
184
-
185
- return func_wrapper
186
-
187
-
188
148
  def parse_format_string(fstring):
189
149
  """
190
150
  Parse and decode the format string.
@@ -479,7 +439,6 @@ class Command:
479
439
 
480
440
 
481
441
  class ClientServerCommand(Command):
482
- @dry_run
483
442
  def client_call(self, other: type, *args: tuple, **kwargs: dict) -> Any:
484
443
  """
485
444
  This method is called at the client side. It is used by the Proxy
@@ -22,12 +22,15 @@ from urllib3.exceptions import NewConnectionError
22
22
  from egse.decorators import retry
23
23
  from egse.decorators import retry_with_exponential_backoff
24
24
  from egse.listener import Listeners
25
+ from egse.metrics import get_metrics_repo
25
26
  from egse.registry.client import RegistryClient
26
27
  from egse.signal import FileBasedSignaling
27
28
  from egse.system import SignalCatcher
28
29
  from egse.system import camel_to_kebab
29
30
  from egse.system import camel_to_snake
31
+ from egse.system import str_to_datetime
30
32
  from egse.system import time_in_ms
33
+ from egse.system import type_name
31
34
  from egse.zmq_ser import get_port_number
32
35
 
33
36
  try:
@@ -47,9 +50,6 @@ from egse.system import get_average_execution_times
47
50
  from egse.system import get_full_classname
48
51
  from egse.system import get_host_ip
49
52
  from egse.system import save_average_execution_time
50
- from influxdb_client_3 import InfluxDBClient3
51
- from influxdb_client_3.write_client.domain.write_precision import WritePrecision
52
- from influxdb_client_3 import Point
53
53
 
54
54
  _LOGGER = logging.getLogger(__name__)
55
55
 
@@ -179,12 +179,15 @@ class ControlServer(metaclass=abc.ABCMeta):
179
179
 
180
180
  token = os.getenv("INFLUXDB3_AUTH_TOKEN")
181
181
  project = os.getenv("PROJECT")
182
- self.metrics_time_precision = WritePrecision.MS
183
182
 
184
183
  if project and token:
185
- self.client = InfluxDBClient3(database=project, host="http://localhost:8181", token=token)
184
+ self.metrics_client = get_metrics_repo(
185
+ "influxdb", {"host": "http://localhost:8181", "database": project, "token": token}
186
+ )
187
+ # self.metrics_client = get_metrics_repo("duckdb", {"db_path": "duckdb_metrics.db", "table_name": "cs_timeseries"})
188
+ self.metrics_client.connect()
186
189
  else:
187
- self.client = None
190
+ self.metrics_client = None
188
191
  _LOGGER.warning(
189
192
  "INFLUXDB3_AUTH_TOKEN and/or PROJECT environment variable is not set. "
190
193
  "Metrics will not be propagated to InfluxDB."
@@ -545,7 +548,7 @@ class ControlServer(metaclass=abc.ABCMeta):
545
548
  except Exception as exc:
546
549
  _LOGGER.error(
547
550
  textwrap.dedent(
548
- f"""\
551
+ f"""{type_name(exc)}
549
552
  An Exception occurred while collecting housekeeping from the device to be stored in {self.get_storage_mnemonic()}.
550
553
  This might be a temporary problem, still needs to be looked into:
551
554
 
@@ -659,20 +662,21 @@ class ControlServer(metaclass=abc.ABCMeta):
659
662
  return
660
663
 
661
664
  try:
662
- if self.client:
663
- metrics_dictionary = {
664
- "measurement": origin.lower(), # Table name
665
- "tags": {"site_id": SITE_ID, "origin": origin}, # Site ID, Origin
666
- "fields": dict((hk_name.lower(), hk[hk_name]) for hk_name in hk if hk_name != "timestamp"),
667
- "time": hk["timestamp"],
665
+ if self.metrics_client:
666
+ point = {
667
+ "measurement": origin.lower(),
668
+ "tags": {"site_id": SITE_ID, "origin": origin},
669
+ "fields": {hk_name.lower(): hk[hk_name] for hk_name in hk if hk_name != "timestamp"},
670
+ "time": str_to_datetime(hk["timestamp"]),
668
671
  }
669
- point = Point.from_dict(metrics_dictionary, write_precision=self.metrics_time_precision)
670
- self.client.write(point)
672
+ self.metrics_client.write(point)
671
673
  else:
672
- _LOGGER.warning(f"Could not write {origin} metrics to InfluxDB (self.client is None).")
674
+ _LOGGER.warning(
675
+ f"Could not write {origin} metrics to the time series database (self.metrics_client is None)."
676
+ )
673
677
  except NewConnectionError:
674
678
  _LOGGER.warning(
675
- f"No connection to InfluxDB could be established to propagate {origin} metrics. Check "
679
+ f"No connection to the time series database could be established to propagate {origin} metrics. Check "
676
680
  f"whether this service is (still) running."
677
681
  )
678
682
 
@@ -52,7 +52,6 @@ from egse.listener import Event
52
52
  from egse.listener import EventInterface
53
53
  from egse.protocol import CommandProtocol
54
54
  from egse.proxy import Proxy
55
- from egse.response import Failure
56
55
  from egse.settings import Settings
57
56
  from egse.system import SignalCatcher
58
57
  from egse.system import attrdict
@@ -648,6 +647,10 @@ def start_dev():
648
647
  if not data:
649
648
  _LOGGER.info("Connection closed by peer, waiting for connection..")
650
649
  break # connection closed by peer
650
+ if data.decode().strip() == "QUIT":
651
+ _LOGGER.info("QUIT command received, terminating...")
652
+ quit_request = True
653
+ break
651
654
  if (response := process_command(data.decode().rstrip())) is not None:
652
655
  response = f"{response}\r\n".encode()
653
656
  conn.sendall(response)
@@ -667,6 +670,18 @@ def start_dev():
667
670
  _LOGGER.info("Dummy Device terminated.")
668
671
 
669
672
 
673
+ @app.command()
674
+ def stop_dev():
675
+ multiprocessing.current_process().name = "dummy_dev"
676
+
677
+ _LOGGER.info("Stopping the Dummy Device simulator")
678
+
679
+ dev = DummyDeviceEthernetInterface(DEV_HOST, DEV_PORT)
680
+ dev.connect()
681
+ dev.write("QUIT\n")
682
+ dev.disconnect()
683
+
684
+
670
685
  COMMAND_ACTIONS_RESPONSES = {"info": (None, f"Dummy Device {__version__}"), "get_value": (None, random.random)}
671
686
 
672
687
 
@@ -1,14 +1,31 @@
1
+ __all__ = [
2
+ "DataPoint",
3
+ "TimeSeriesRepository",
4
+ "define_metrics",
5
+ "get_metrics_repo",
6
+ ]
7
+
1
8
  import logging
9
+ from dataclasses import dataclass
10
+ from typing import Any
2
11
  from typing import Optional
12
+ from typing import Protocol
13
+ from typing import Self
3
14
 
4
15
  import numpy as np
5
16
  from prometheus_client import Gauge
6
17
 
7
18
  from egse.hk import TmDictionaryColumns
19
+ from egse.plugin import load_plugins_fn
8
20
  from egse.settings import Settings
9
- from egse.setup import SetupError, load_setup, Setup
21
+ from egse.setup import Setup
22
+ from egse.setup import SetupError
23
+ from egse.setup import load_setup
24
+ from egse.system import format_datetime
25
+ from egse.system import str_to_datetime
26
+
27
+ logger = logging.getLogger("egse.metrics")
10
28
 
11
- LOGGER = logging.getLogger(__name__)
12
29
  SITE_ID = Settings.load("SITE").ID
13
30
 
14
31
 
@@ -64,7 +81,7 @@ def define_metrics(origin: str, dashboard: str = None, use_site: bool = False, s
64
81
  try:
65
82
  metrics[syn_name] = Gauge(syn_name, description)
66
83
  except ValueError:
67
- LOGGER.warning(f"ValueError for {syn_name}")
84
+ logger.warning(f"ValueError for {syn_name}")
68
85
 
69
86
  return metrics
70
87
 
@@ -100,4 +117,105 @@ def update_metrics(metrics: dict, updates: dict):
100
117
  else:
101
118
  metrics[metric_name].set(float(value))
102
119
  except KeyError:
103
- LOGGER.warning(f"Unknown metric name: {metric_name=}")
120
+ logger.warning(f"Unknown metric name: {metric_name=}")
121
+
122
+
123
+ class PointLike(Protocol):
124
+ @staticmethod
125
+ def measurement(measurement_name: str) -> "PointLike": ...
126
+
127
+ def tag(self, key, value) -> Self: ...
128
+
129
+ def field(self, field, value) -> Self: ...
130
+
131
+ def time(self, time) -> Self: ...
132
+
133
+ def as_dict(self) -> dict: ...
134
+
135
+
136
+ class DataPoint(PointLike):
137
+ def __init__(self, measurement_name: str):
138
+ self.measurement: str = measurement_name
139
+ self.tags: dict[str, str] = {}
140
+ self.fields: dict[str, Any] = {}
141
+ self.timestamp: int | str = format_datetime()
142
+
143
+ def as_dict(self):
144
+ if isinstance(self.timestamp, str):
145
+ timestamp = str_to_datetime(self.timestamp).timestamp()
146
+ else:
147
+ timestamp = self.timestamp
148
+
149
+ return {
150
+ "measurement": self.measurement,
151
+ "tags": self.tags,
152
+ "fields": self.fields,
153
+ "time": timestamp,
154
+ }
155
+
156
+ @staticmethod
157
+ def measurement(measurement_name):
158
+ p = DataPoint(measurement_name)
159
+ return p
160
+
161
+ def tag(self, key, value):
162
+ self.tags[key] = value
163
+ return self
164
+
165
+ def field(self, field, value):
166
+ self.fields[field] = value
167
+ return self
168
+
169
+ def time(self, time):
170
+ self.timestamp = time
171
+ return self
172
+
173
+
174
+ class TimeSeriesRepository(Protocol):
175
+ def connect(self) -> None: ...
176
+
177
+ def write(self, points: PointLike | dict | list[PointLike | dict]) -> None: ...
178
+
179
+ def query(self, query_str: str, mode: str) -> Any: ...
180
+
181
+ def get_table_names(self) -> list[str]: ...
182
+
183
+ def get_column_names(self, table_name: str) -> list[str]: ...
184
+
185
+ def get_values_last_hours(self, table_name: str, column_name: str, hours: int, mode: str) -> Any: ...
186
+
187
+ def get_values_in_range(
188
+ self, table_name: str, column_name: str, start_time: str, end_time: str, mode: str
189
+ ) -> Any: ...
190
+
191
+ def close(self) -> None: ...
192
+
193
+
194
+ def get_metrics_repo(plugin_name: str, config: dict[str, Any]) -> TimeSeriesRepository:
195
+ """
196
+ Create a TimeSeriesRepository instance from a plugin.
197
+
198
+ Args:
199
+ plugin_name: Name of the plugin (without .py extension)
200
+ config: Configuration parameters for the repository
201
+
202
+ Returns:
203
+ Configured TimeSeriesRepository instance.
204
+
205
+ Raises:
206
+ ModuleNotFoundError: If plugin not found
207
+ NotImplementedError: If plugin is missing get_repository_class()
208
+ """
209
+
210
+ package_name = "egse.plugins"
211
+ plugins = load_plugins_fn(f"{plugin_name}.py", package_name)
212
+
213
+ if plugin_name in plugins:
214
+ plugin = plugins[plugin_name]
215
+ if hasattr(plugin, "get_repository_class"):
216
+ repo_class = plugin.get_repository_class()
217
+ else:
218
+ raise NotImplementedError(f"Missing 'get_repository_class()` function in metrics plugin {plugin_name}.")
219
+ return repo_class(**config)
220
+ else:
221
+ raise ModuleNotFoundError(f"No plugin found for {plugin_name} in {package_name}.")