cgse 0.12.1__tar.gz → 0.13.0__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 (533) hide show
  1. {cgse-0.12.1 → cgse-0.13.0}/PKG-INFO +1 -1
  2. {cgse-0.12.1 → cgse-0.13.0}/docs/libs/cgse-core/registry.md +3 -2
  3. {cgse-0.12.1 → cgse-0.13.0}/docs/roadmap.md +8 -5
  4. cgse-0.13.0/duckdb_metrics.db +0 -0
  5. cgse-0.13.0/duckdb_metrics.db.wal +0 -0
  6. cgse-0.13.0/libs/cgse-common/duckdb_metrics.db +0 -0
  7. cgse-0.13.0/libs/cgse-common/my-dcuckdb-timeseries.db +0 -0
  8. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/pyproject.toml +5 -4
  9. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/service_registry.db +0 -0
  10. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/command.py +0 -41
  11. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/control.py +21 -17
  12. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/dummy.py +16 -1
  13. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/metrics.py +122 -4
  14. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/plugin.py +93 -6
  15. cgse-0.13.0/libs/cgse-common/src/egse/plugins/metrics/duckdb.py +442 -0
  16. cgse-0.13.0/libs/cgse-common/src/egse/plugins/metrics/influxdb.py +189 -0
  17. cgse-0.13.0/libs/cgse-common/src/egse/plugins/metrics/timescaledb.py +596 -0
  18. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/setup.py +69 -434
  19. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/signal.py +5 -1
  20. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/state.py +24 -66
  21. cgse-0.13.0/libs/cgse-common/tests/.coverage.girtab.80252.XZOQZiYx +0 -0
  22. cgse-0.13.0/libs/cgse-common/tests/.coverage.girtab.80253.XXVQVQVx +0 -0
  23. cgse-0.13.0/libs/cgse-common/tests/.coverage.girtab.80254.XKhSeTLx +0 -0
  24. cgse-0.13.0/libs/cgse-common/tests/.coverage.girtab.80264.XDdhJbzx +0 -0
  25. cgse-0.13.0/libs/cgse-common/tests/.coverage.girtab.80265.XUECESrx +0 -0
  26. cgse-0.13.0/libs/cgse-common/tests/test_client_server_interaction.py +107 -0
  27. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_command.py +0 -27
  28. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_hk.py +18 -20
  29. cgse-0.13.0/libs/cgse-common/tests/test_influxdb_plugin.py +142 -0
  30. cgse-0.13.0/libs/cgse-common/tests/test_metrics.py +25 -0
  31. cgse-0.13.0/libs/cgse-common/tests/test_plugin.py +29 -0
  32. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_process.py +1 -1
  33. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_setup.py +31 -26
  34. cgse-0.13.0/libs/cgse-common/tests/test_state.py +9 -0
  35. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/pyproject.toml +1 -1
  36. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/src/egse/coordinates/__init__.py +27 -26
  37. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/src/egse/coordinates/avoidance.py +1 -2
  38. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/pyproject.toml +1 -1
  39. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/cgse_core/settings.yaml +12 -4
  40. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/confman/__init__.py +4 -2
  41. cgse-0.13.0/libs/cgse-core/src/egse/metricshub/server.py +271 -0
  42. cgse-0.13.0/libs/cgse-core/src/egse/notifyhub/__init__.py +8 -0
  43. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/notifyhub/server.py +38 -18
  44. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/notifyhub/services.py +7 -4
  45. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/notifyhub/test.py +2 -2
  46. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/procman/procman_protocol.py +5 -1
  47. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/storage/__init__.py +2 -0
  48. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/storage/persistence.py +2 -2
  49. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/pyproject.toml +1 -1
  50. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/cgse-tools/pyproject.toml +1 -1
  51. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/pyproject.toml +1 -1
  52. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_cs.py +40 -12
  53. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_mon.py +1 -1
  54. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_protocol.py +18 -35
  55. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/cgse_services.py +21 -1
  56. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/lakeshore-tempcontrol/pyproject.toml +1 -1
  57. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/pyproject.toml +1 -1
  58. {cgse-0.12.1 → cgse-0.13.0}/projects/plato/plato-fits/pyproject.toml +1 -1
  59. {cgse-0.12.1 → cgse-0.13.0}/projects/plato/plato-hdf5/pyproject.toml +1 -1
  60. cgse-0.13.0/projects/plato/plato-spw/README.md +0 -0
  61. {cgse-0.12.1 → cgse-0.13.0}/projects/plato/plato-spw/pyproject.toml +1 -1
  62. {cgse-0.12.1 → cgse-0.13.0}/projects/plato/plato-spw/src/egse/spw.py +22 -7
  63. {cgse-0.12.1 → cgse-0.13.0}/pyproject.toml +1 -1
  64. cgse-0.13.0/scratch/match-case.py +41 -0
  65. {cgse-0.12.1 → cgse-0.13.0}/service_registry.db +0 -0
  66. {cgse-0.12.1 → cgse-0.13.0}/service_registry.db-shm +0 -0
  67. {cgse-0.12.1 → cgse-0.13.0}/service_registry.db-wal +0 -0
  68. cgse-0.13.0/temperature_readings.log +43 -0
  69. cgse-0.12.1/check_import.py +0 -5
  70. cgse-0.12.1/libs/cgse-common/tests/test_client_server_interaction.py +0 -90
  71. cgse-0.12.1/requirements.txt +0 -1728
  72. cgse-0.12.1/scratch.py +0 -27
  73. {cgse-0.12.1 → cgse-0.13.0}/.github/workflows/ruff-format-check.yaml +0 -0
  74. {cgse-0.12.1 → cgse-0.13.0}/.gitignore +0 -0
  75. /cgse-0.12.1/identifier.sqlite → /cgse-0.13.0/=0.5.1 +0 -0
  76. {cgse-0.12.1 → cgse-0.13.0}/README.md +0 -0
  77. {cgse-0.12.1 → cgse-0.13.0}/TODO.md +0 -0
  78. {cgse-0.12.1 → cgse-0.13.0}/bump.py +0 -0
  79. {cgse-0.12.1 → cgse-0.13.0}/conftest.py +0 -0
  80. {cgse-0.12.1 → cgse-0.13.0}/docs/api/bits.md +0 -0
  81. {cgse-0.12.1 → cgse-0.13.0}/docs/api/calibration.md +0 -0
  82. {cgse-0.12.1 → cgse-0.13.0}/docs/api/command.md +0 -0
  83. {cgse-0.12.1 → cgse-0.13.0}/docs/api/config.md +0 -0
  84. {cgse-0.12.1 → cgse-0.13.0}/docs/api/control.md +0 -0
  85. {cgse-0.12.1 → cgse-0.13.0}/docs/api/counter.md +0 -0
  86. {cgse-0.12.1 → cgse-0.13.0}/docs/api/decorators.md +0 -0
  87. {cgse-0.12.1 → cgse-0.13.0}/docs/api/device.md +0 -0
  88. {cgse-0.12.1 → cgse-0.13.0}/docs/api/dicts.md +0 -0
  89. {cgse-0.12.1 → cgse-0.13.0}/docs/api/dummy.md +0 -0
  90. {cgse-0.12.1 → cgse-0.13.0}/docs/api/env.md +0 -0
  91. {cgse-0.12.1 → cgse-0.13.0}/docs/api/exceptions.md +0 -0
  92. {cgse-0.12.1 → cgse-0.13.0}/docs/api/heartbeat.md +0 -0
  93. {cgse-0.12.1 → cgse-0.13.0}/docs/api/hk.md +0 -0
  94. {cgse-0.12.1 → cgse-0.13.0}/docs/api/index.md +0 -0
  95. {cgse-0.12.1 → cgse-0.13.0}/docs/api/listener.md +0 -0
  96. {cgse-0.12.1 → cgse-0.13.0}/docs/api/metrics.md +0 -0
  97. {cgse-0.12.1 → cgse-0.13.0}/docs/api/mixin.md +0 -0
  98. {cgse-0.12.1 → cgse-0.13.0}/docs/api/monitoring.md +0 -0
  99. {cgse-0.12.1 → cgse-0.13.0}/docs/api/observer.md +0 -0
  100. {cgse-0.12.1 → cgse-0.13.0}/docs/api/obsid.md +0 -0
  101. {cgse-0.12.1 → cgse-0.13.0}/docs/api/persistence.md +0 -0
  102. {cgse-0.12.1 → cgse-0.13.0}/docs/api/plugin.md +0 -0
  103. {cgse-0.12.1 → cgse-0.13.0}/docs/api/process.md +0 -0
  104. {cgse-0.12.1 → cgse-0.13.0}/docs/api/reload.md +0 -0
  105. {cgse-0.12.1 → cgse-0.13.0}/docs/api/settings.md +0 -0
  106. {cgse-0.12.1 → cgse-0.13.0}/docs/api/setup.md +0 -0
  107. {cgse-0.12.1 → cgse-0.13.0}/docs/api/system.md +0 -0
  108. {cgse-0.12.1 → cgse-0.13.0}/docs/custom_theme/main.html +0 -0
  109. {cgse-0.12.1 → cgse-0.13.0}/docs/dev_guide/coding_style.md +0 -0
  110. {cgse-0.12.1 → cgse-0.13.0}/docs/dev_guide/docs.md +0 -0
  111. {cgse-0.12.1 → cgse-0.13.0}/docs/dev_guide/index.md +0 -0
  112. {cgse-0.12.1 → cgse-0.13.0}/docs/dev_guide/installation.md +0 -0
  113. {cgse-0.12.1 → cgse-0.13.0}/docs/dev_guide/monitoring.md +0 -0
  114. {cgse-0.12.1 → cgse-0.13.0}/docs/dev_guide/monorepo.md +0 -0
  115. {cgse-0.12.1 → cgse-0.13.0}/docs/dev_guide/nox.md +0 -0
  116. {cgse-0.12.1 → cgse-0.13.0}/docs/dev_guide/plugins.md +0 -0
  117. {cgse-0.12.1 → cgse-0.13.0}/docs/dev_guide/project-configuration.md +0 -0
  118. {cgse-0.12.1 → cgse-0.13.0}/docs/dev_guide/unit_testing.md +0 -0
  119. {cgse-0.12.1 → cgse-0.13.0}/docs/dev_guide/uv.md +0 -0
  120. {cgse-0.12.1 → cgse-0.13.0}/docs/dev_guide/versioning.md +0 -0
  121. {cgse-0.12.1 → cgse-0.13.0}/docs/getting_started.md +0 -0
  122. {cgse-0.12.1 → cgse-0.13.0}/docs/help.md +0 -0
  123. {cgse-0.12.1 → cgse-0.13.0}/docs/images/github-fork-clone-dark.png +0 -0
  124. {cgse-0.12.1 → cgse-0.13.0}/docs/images/github-fork-clone.png +0 -0
  125. {cgse-0.12.1 → cgse-0.13.0}/docs/images/grafana-queries.png +0 -0
  126. {cgse-0.12.1 → cgse-0.13.0}/docs/images/icons/cgse-logo-blue.svg +0 -0
  127. {cgse-0.12.1 → cgse-0.13.0}/docs/images/icons/cgse-logo.svg +0 -0
  128. {cgse-0.12.1 → cgse-0.13.0}/docs/index.md +0 -0
  129. {cgse-0.12.1 → cgse-0.13.0}/docs/initialize.md +0 -0
  130. {cgse-0.12.1 → cgse-0.13.0}/docs/libs/cgse-common/images/load_methods.png +0 -0
  131. {cgse-0.12.1 → cgse-0.13.0}/docs/libs/cgse-common/index.md +0 -0
  132. {cgse-0.12.1 → cgse-0.13.0}/docs/libs/cgse-common/settings.md +0 -0
  133. {cgse-0.12.1 → cgse-0.13.0}/docs/libs/cgse-common/setup.md +0 -0
  134. {cgse-0.12.1 → cgse-0.13.0}/docs/libs/cgse-coordinates/index.md +0 -0
  135. {cgse-0.12.1 → cgse-0.13.0}/docs/libs/cgse-core/index.md +0 -0
  136. {cgse-0.12.1 → cgse-0.13.0}/docs/libs/cgse-gui/index.md +0 -0
  137. {cgse-0.12.1 → cgse-0.13.0}/docs/libs/index.md +0 -0
  138. {cgse-0.12.1 → cgse-0.13.0}/docs/package_list.md +0 -0
  139. {cgse-0.12.1 → cgse-0.13.0}/docs/projects/cgse-tools.md +0 -0
  140. {cgse-0.12.1 → cgse-0.13.0}/docs/projects/index.md +0 -0
  141. {cgse-0.12.1 → cgse-0.13.0}/docs/projects/symetrie-hexapod.md +0 -0
  142. {cgse-0.12.1 → cgse-0.13.0}/docs/stylesheets/custom.css +0 -0
  143. {cgse-0.12.1 → cgse-0.13.0}/docs/stylesheets/extra.css +0 -0
  144. {cgse-0.12.1 → cgse-0.13.0}/docs/tutorial.md +0 -0
  145. {cgse-0.12.1 → cgse-0.13.0}/docs/user_guide/index.md +0 -0
  146. /cgse-0.12.1/libs/cgse-common/src/egse/py.typed → /cgse-0.13.0/identifier.sqlite +0 -0
  147. {cgse-0.12.1 → cgse-0.13.0}/justfile +0 -0
  148. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/README.md +0 -0
  149. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/justfile +0 -0
  150. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/noxfile.py +0 -0
  151. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/cgse_common/__init__.py +0 -0
  152. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/cgse_common/cgse.py +0 -0
  153. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/cgse_common/settings.yaml +0 -0
  154. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/async_control_claude.py +0 -0
  155. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/bits.py +0 -0
  156. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/calibration.py +0 -0
  157. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/config.py +0 -0
  158. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/counter.py +0 -0
  159. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/decorators.py +0 -0
  160. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/device.py +0 -0
  161. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/dicts.py +0 -0
  162. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/env.py +0 -0
  163. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/exceptions.py +0 -0
  164. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/heartbeat.py +0 -0
  165. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/hk.py +0 -0
  166. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/listener.py +0 -0
  167. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/mixin.py +0 -0
  168. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/monitoring.py +0 -0
  169. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/observer.py +0 -0
  170. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/obsid.py +0 -0
  171. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/persistence.py +0 -0
  172. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/process.py +0 -0
  173. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/protocol.py +0 -0
  174. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/proxy.py +0 -0
  175. /cgse-0.12.1/libs/cgse-common/tests/data/conf/config-file.toml → /cgse-0.13.0/libs/cgse-common/src/egse/py.typed +0 -0
  176. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/randomwalk.py +0 -0
  177. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/ratelimit.py +0 -0
  178. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/reload.py +0 -0
  179. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/resource.py +0 -0
  180. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/response.py +0 -0
  181. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/scpi.py +0 -0
  182. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/services.py +0 -0
  183. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/services.yaml +0 -0
  184. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/settings.py +0 -0
  185. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/settings.yaml +0 -0
  186. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/socketdevice.py +0 -0
  187. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/system.py +0 -0
  188. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/task.py +0 -0
  189. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/version.py +0 -0
  190. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/zmq_ser.py +0 -0
  191. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/conftest.py +0 -0
  192. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/COPYING +0 -0
  193. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00028_201028_155259.yaml +0 -0
  194. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00029_201028_155331.yaml +0 -0
  195. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00030_210311_134043.yaml +0 -0
  196. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00080_210917_105245.yaml +0 -0
  197. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00081_210922_142259.yaml +0 -0
  198. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00082_210923_094458.yaml +0 -0
  199. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/CSL1/README.md +0 -0
  200. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/CSL2/README.md +0 -0
  201. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/IAS/README.md +0 -0
  202. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/INTA/README.md +0 -0
  203. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/LAB23/README.md +0 -0
  204. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00027_211119_140441.yaml +0 -0
  205. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00028_211119_160406.yaml +0 -0
  206. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00029_211119_172918.yaml +0 -0
  207. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00030_211122_103604.yaml +0 -0
  208. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00031_211123_124900.yaml +0 -0
  209. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/common/telemetry/tm-dictionary-default.csv +0 -0
  210. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/conf/SETUP_20250114_1519.yaml +0 -0
  211. /cgse-0.12.1/libs/cgse-common/tests/data/data/empty_data_file.txt → /cgse-0.13.0/libs/cgse-common/tests/data/conf/config-file.toml +0 -0
  212. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/data/cal_coeff_1234.csv +0 -0
  213. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/data/calibration.csv +0 -0
  214. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/data/calibration.yaml +0 -0
  215. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/data/command.yaml +0 -0
  216. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/data/corrupt.yaml +0 -0
  217. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/data/data-file.txt +0 -0
  218. /cgse-0.12.1/libs/cgse-common/tests/data/data/empty_yaml_file.yaml → /cgse-0.13.0/libs/cgse-common/tests/data/data/empty_data_file.txt +0 -0
  219. /cgse-0.12.1/libs/cgse-common/tests/data/lib/dev1/shared-lib.so → /cgse-0.13.0/libs/cgse-common/tests/data/data/empty_yaml_file.yaml +0 -0
  220. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/data/local_settings.yaml +0 -0
  221. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/data/new_local_settings.yaml +0 -0
  222. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/data/test_setup.yaml +0 -0
  223. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/icons/hourglass.svg +0 -0
  224. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/icons/keyboard.png +0 -0
  225. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/icons/soap_sponge.svg +0 -0
  226. {cgse-0.12.1/libs/cgse-common/tests/data/lib/dev2 → cgse-0.13.0/libs/cgse-common/tests/data/lib/dev1}/shared-lib.so +0 -0
  227. /cgse-0.12.1/libs/cgse-common/tests/test_control.py → /cgse-0.13.0/libs/cgse-common/tests/data/lib/dev2/shared-lib.so +0 -0
  228. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/fixtures/default_env.py +0 -0
  229. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/fixtures/helpers.py +0 -0
  230. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/scripts/empty_process.py +0 -0
  231. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/scripts/handle_sigterm.py +0 -0
  232. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/scripts/process_with_children.py +0 -0
  233. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/scripts/raise_value_error.py +0 -0
  234. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/scripts/void-0.py +0 -0
  235. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/scripts/void-1.py +0 -0
  236. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_bits.py +0 -0
  237. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_config.py +0 -0
  238. /cgse-0.12.1/libs/cgse-coordinates/src/cgse_coordinates/__init__.py → /cgse-0.13.0/libs/cgse-common/tests/test_control.py +0 -0
  239. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_decorators.py +0 -0
  240. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_device.py +0 -0
  241. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_env.py +0 -0
  242. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_fixtures.py +0 -0
  243. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_listener.py +0 -0
  244. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_mixin.py +0 -0
  245. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_protocol.py +0 -0
  246. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_ratelimit.py +0 -0
  247. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_resource.py +0 -0
  248. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_response.py +0 -0
  249. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_settings.py +0 -0
  250. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_signal.py +0 -0
  251. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_system.py +0 -0
  252. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_task.py +0 -0
  253. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_zmq_ser.py +0 -0
  254. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/README.md +0 -0
  255. {cgse-0.12.1/libs/cgse-core/src/cgse_core → cgse-0.13.0/libs/cgse-coordinates/src/cgse_coordinates}/__init__.py +0 -0
  256. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/src/cgse_coordinates/settings.yaml +0 -0
  257. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/src/egse/coordinates/cslmodel.py +0 -0
  258. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/src/egse/coordinates/laser_tracker_to_dict.py +0 -0
  259. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/src/egse/coordinates/point.py +0 -0
  260. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/src/egse/coordinates/pyplot.py +0 -0
  261. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/src/egse/coordinates/referenceFrame.py +0 -0
  262. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/src/egse/coordinates/refmodel.py +0 -0
  263. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/src/egse/coordinates/rotationMatrix.py +0 -0
  264. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/src/egse/coordinates/transform3d_addon.py +0 -0
  265. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/tests/test_avoidance.py +0 -0
  266. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/tests/test_coordinates_plot.py +0 -0
  267. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/tests/test_coordinates_serialize.py +0 -0
  268. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/tests/test_point.py +0 -0
  269. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/tests/test_ref_model.py +0 -0
  270. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/tests/test_reference_frames.py +0 -0
  271. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/tests/test_refmodel.py +0 -0
  272. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/.envrc.disabled +0 -0
  273. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/README.md +0 -0
  274. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/service_registry.db +0 -0
  275. {cgse-0.12.1/libs/cgse-core/src/egse/notifyhub → cgse-0.13.0/libs/cgse-core/src/cgse_core}/__init__.py +0 -0
  276. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/cgse_core/_start.py +0 -0
  277. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/cgse_core/_status.py +0 -0
  278. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/cgse_core/_stop.py +0 -0
  279. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/cgse_core/cgse_explore.py +0 -0
  280. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/cgse_core/services.py +0 -0
  281. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/async_control.py +0 -0
  282. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/confman/__main__.py +0 -0
  283. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/confman/confman.yaml +0 -0
  284. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/confman/confman_cs.py +0 -0
  285. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/icons/busy.svg +0 -0
  286. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/icons/operational-mode.svg +0 -0
  287. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/icons/pm_ui.svg +0 -0
  288. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/icons/simulator-mode.svg +0 -0
  289. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/icons/start-process-button.svg +0 -0
  290. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/icons/stop-process-button.svg +0 -0
  291. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/icons/user-interface.svg +0 -0
  292. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/logger/__init__.py +0 -0
  293. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/logger/__main__.py +0 -0
  294. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/logger/log_cs.py +0 -0
  295. {cgse-0.12.1/projects/generic/cgse-tools/src/cgse_tools → cgse-0.13.0/libs/cgse-core/src/egse/metricshub}/__init__.py +0 -0
  296. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/notifyhub/event.py +0 -0
  297. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/procman/__init__.py +0 -0
  298. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/procman/procman.yaml +0 -0
  299. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/procman/procman_cs.py +0 -0
  300. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/procman/procman_ui.py +0 -0
  301. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/registry/__init__.py +0 -0
  302. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/registry/backend.py +0 -0
  303. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/registry/client.py +0 -0
  304. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/registry/server.py +0 -0
  305. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/registry/service.py +0 -0
  306. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/storage/__main__.py +0 -0
  307. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/storage/storage.yaml +0 -0
  308. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/storage/storage_cs.py +0 -0
  309. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/conftest.py +0 -0
  310. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/data/local_settings.yaml +0 -0
  311. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/fixtures/default_env.py +0 -0
  312. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/fixtures/helpers.py +0 -0
  313. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/fixtures/services.py +0 -0
  314. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/script_test_async_registry_client.py +0 -0
  315. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/script_test_registry_client_server.py +0 -0
  316. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/script_test_service_registry_server.py +0 -0
  317. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/script_test_sync_registry_client.py +0 -0
  318. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/services.py +0 -0
  319. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/stress_test_registry_server.py +0 -0
  320. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/test_async_control.py +0 -0
  321. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/test_cm_cs.py +0 -0
  322. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/test_confman_setups.py +0 -0
  323. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/test_logger.py +0 -0
  324. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/test_registry_backend.py +0 -0
  325. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/test_registry_service.py +0 -0
  326. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/test_server_running.py +0 -0
  327. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/test_server_running_with_fixture.py +0 -0
  328. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/test_settings_core.py +0 -0
  329. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/test_zmq_microservice.py +0 -0
  330. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/README.md +0 -0
  331. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/__init__.py +0 -0
  332. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/buttons.py +0 -0
  333. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-start.svg +0 -0
  334. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-stop.svg +0 -0
  335. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/aeu-cs.svg +0 -0
  336. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-started.svg +0 -0
  337. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-stopped.svg +0 -0
  338. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/aeu_cs.svg +0 -0
  339. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/alert.svg +0 -0
  340. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/arrow-double-left.png +0 -0
  341. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/arrow-double-right.png +0 -0
  342. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/arrow-up.svg +0 -0
  343. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/backward.svg +0 -0
  344. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/busy.svg +0 -0
  345. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/cleaning.svg +0 -0
  346. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/color-scheme.svg +0 -0
  347. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/cs-connected-alert.svg +0 -0
  348. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/cs-connected-disabled.svg +0 -0
  349. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/cs-connected.svg +0 -0
  350. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/cs-not-connected.svg +0 -0
  351. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/double-left-arrow.svg +0 -0
  352. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/double-right-arrow.svg +0 -0
  353. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/erase-disabled.svg +0 -0
  354. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/erase.svg +0 -0
  355. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/fitsgen-start.svg +0 -0
  356. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/fitsgen-stop.svg +0 -0
  357. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/fitsgen.svg +0 -0
  358. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/forward.svg +0 -0
  359. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/fov-hk-start.svg +0 -0
  360. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/fov-hk-stop.svg +0 -0
  361. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/fov-hk.svg +0 -0
  362. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/front-desk.svg +0 -0
  363. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/home-actioned.svg +0 -0
  364. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/home-disabled.svg +0 -0
  365. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/home.svg +0 -0
  366. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/info.svg +0 -0
  367. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/invalid.png +0 -0
  368. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/led-green.svg +0 -0
  369. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/led-grey.svg +0 -0
  370. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/led-orange.svg +0 -0
  371. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/led-red.svg +0 -0
  372. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/led-square-green.svg +0 -0
  373. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/led-square-grey.svg +0 -0
  374. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/led-square-orange.svg +0 -0
  375. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/led-square-red.svg +0 -0
  376. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-green.svg +0 -0
  377. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-red.svg +0 -0
  378. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el+.svg +0 -0
  379. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el-.svg +0 -0
  380. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/location-marker.svg +0 -0
  381. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/logo-dpu.svg +0 -0
  382. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/logo-gimbal.svg +0 -0
  383. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/logo-huber.svg +0 -0
  384. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/logo-ogse.svg +0 -0
  385. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/logo-puna.svg +0 -0
  386. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/logo-tcs.svg +0 -0
  387. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/logo-zonda.svg +0 -0
  388. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/maximize.svg +0 -0
  389. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/meter.svg +0 -0
  390. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/more.svg +0 -0
  391. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-start.svg +0 -0
  392. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-stop.svg +0 -0
  393. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk.svg +0 -0
  394. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/observing-off.svg +0 -0
  395. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/observing-on.svg +0 -0
  396. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.png +0 -0
  397. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.svg +0 -0
  398. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/ops-mode.svg +0 -0
  399. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/play-green.svg +0 -0
  400. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/plugged-disabled.svg +0 -0
  401. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/plugged.svg +0 -0
  402. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/pm_ui.svg +0 -0
  403. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/power-button-green.svg +0 -0
  404. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/power-button-red.svg +0 -0
  405. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/power-button.svg +0 -0
  406. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/radar.svg +0 -0
  407. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/radioactive.svg +0 -0
  408. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/reload.svg +0 -0
  409. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/remote-control-off.svg +0 -0
  410. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/remote-control-on.svg +0 -0
  411. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/repeat-blue.svg +0 -0
  412. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/repeat.svg +0 -0
  413. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/settings.svg +0 -0
  414. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/shrink.svg +0 -0
  415. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/shutter.svg +0 -0
  416. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/sign-off.svg +0 -0
  417. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/sign-on.svg +0 -0
  418. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/sim-mode.svg +0 -0
  419. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/small-buttons-go.svg +0 -0
  420. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/small-buttons-minus.svg +0 -0
  421. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/small-buttons-plus.svg +0 -0
  422. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/sponge.svg +0 -0
  423. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/start-button-disabled.svg +0 -0
  424. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/start-button.svg +0 -0
  425. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/stop-button-disabled.svg +0 -0
  426. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/stop-button.svg +0 -0
  427. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/stop-red.svg +0 -0
  428. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/stop.svg +0 -0
  429. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/switch-disabled-square.svg +0 -0
  430. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/switch-disabled.svg +0 -0
  431. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/switch-off-square.svg +0 -0
  432. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/switch-off.svg +0 -0
  433. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/switch-on-square.svg +0 -0
  434. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/switch-on.svg +0 -0
  435. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/temperature-control.svg +0 -0
  436. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/th_ui_logo.svg +0 -0
  437. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/unplugged.svg +0 -0
  438. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/unvalid.png +0 -0
  439. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/user-interface.svg +0 -0
  440. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/vacuum.svg +0 -0
  441. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/valid.png +0 -0
  442. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-dark.svg +0 -0
  443. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-white.svg +0 -0
  444. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/led.py +0 -0
  445. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/limitswitch.py +0 -0
  446. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/states.py +0 -0
  447. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/styles/dark.qss +0 -0
  448. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/styles/default.qss +0 -0
  449. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/styles.qss +0 -0
  450. {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/switch.py +0 -0
  451. {cgse-0.12.1 → cgse-0.13.0}/mkdocs.yml +0 -0
  452. {cgse-0.12.1 → cgse-0.13.0}/noxfile.py +0 -0
  453. {cgse-0.12.1 → cgse-0.13.0}/overrides/.icons/custom/dbend-dark.svg +0 -0
  454. {cgse-0.12.1 → cgse-0.13.0}/overrides/.icons/custom/dbend-light.svg +0 -0
  455. {cgse-0.12.1 → cgse-0.13.0}/overrides/.icons/custom/gear.svg +0 -0
  456. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/cgse-tools/README.md +0 -0
  457. {cgse-0.12.1/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol → cgse-0.13.0/projects/generic/cgse-tools/src/cgse_tools}/__init__.py +0 -0
  458. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/cgse-tools/src/cgse_tools/cgse_clock.py +0 -0
  459. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/cgse-tools/src/cgse_tools/cgse_commands.py +0 -0
  460. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/cgse-tools/src/cgse_tools/cgse_services.py +0 -0
  461. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/cgse-tools/src/egse/tools/status.py +0 -0
  462. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/README.md +0 -0
  463. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/justfile +0 -0
  464. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/noxfile.py +0 -0
  465. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/service_registry.db +0 -0
  466. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/__init__.py +0 -0
  467. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510.py +0 -0
  468. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510.yaml +0 -0
  469. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_adev.py +0 -0
  470. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_dev.py +0 -0
  471. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_sim.py +0 -0
  472. {cgse-0.12.1/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol → cgse-0.13.0/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol}/__init__.py +0 -0
  473. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/cgse_explore.py +0 -0
  474. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/settings.yaml +0 -0
  475. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/temperature_readings.log +0 -0
  476. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/tests/script_daq6510_mon.py +0 -0
  477. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/tests/test_adev.py +0 -0
  478. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/tests/test_dev.py +0 -0
  479. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/lakeshore-tempcontrol/README.md +0 -0
  480. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336.py +0 -0
  481. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336.yaml +0 -0
  482. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_cs.py +0 -0
  483. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_devif.py +0 -0
  484. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_protocol.py +0 -0
  485. {cgse-0.12.1/projects/generic/symetrie-hexapod/src/symetrie_hexapod → cgse-0.13.0/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol}/__init__.py +0 -0
  486. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/cgse_explore.py +0 -0
  487. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/cgse_services.py +0 -0
  488. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/settings.yaml +0 -0
  489. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/lakeshore-tempcontrol/tests/test_lakeshore336_simulator.py +0 -0
  490. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/README.md +0 -0
  491. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/__init__.py +0 -0
  492. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/__init__.py +0 -0
  493. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/alpha.py +0 -0
  494. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/dynalpha.py +0 -0
  495. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod.py +0 -0
  496. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod_ui.py +0 -0
  497. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.py +0 -0
  498. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.yaml +0 -0
  499. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_cs.py +0 -0
  500. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_protocol.py +0 -0
  501. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_ui.py +0 -0
  502. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac.py +0 -0
  503. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac_regex.py +0 -0
  504. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.py +0 -0
  505. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.yaml +0 -0
  506. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_cs.py +0 -0
  507. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_protocol.py +0 -0
  508. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_sim.py +0 -0
  509. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_ui.py +0 -0
  510. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/punaplus.py +0 -0
  511. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.py +0 -0
  512. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.yaml +0 -0
  513. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_cs.py +0 -0
  514. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_devif.py +0 -0
  515. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_protocol.py +0 -0
  516. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_ui.py +0 -0
  517. /cgse-0.12.1/projects/plato/plato-hdf5/README.md → /cgse-0.13.0/projects/generic/symetrie-hexapod/src/symetrie_hexapod/__init__.py +0 -0
  518. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/cgse_explore.py +0 -0
  519. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/cgse_services.py +0 -0
  520. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/settings.yaml +0 -0
  521. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/tests/test_puna.py +0 -0
  522. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/tests/test_puna_cs.py +0 -0
  523. {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/tests/test_puna_simulator.py +0 -0
  524. {cgse-0.12.1 → cgse-0.13.0}/projects/plato/plato-fits/README.md +0 -0
  525. {cgse-0.12.1 → cgse-0.13.0}/projects/plato/plato-fits/src/egse/plugins/storage/fits.py +0 -0
  526. {cgse-0.12.1/projects/plato/plato-spw → cgse-0.13.0/projects/plato/plato-hdf5}/README.md +0 -0
  527. {cgse-0.12.1 → cgse-0.13.0}/projects/plato/plato-hdf5/src/egse/plugins/storage/hdf5.py +0 -0
  528. {cgse-0.12.1 → cgse-0.13.0}/ruff.toml +0 -0
  529. {cgse-0.12.1 → cgse-0.13.0/scratch}/advanced-process-monitoring.py +0 -0
  530. {cgse-0.12.1 → cgse-0.13.0/scratch}/live-process-monitoring.py +0 -0
  531. {cgse-0.12.1 → cgse-0.13.0/scratch}/processes.json +0 -0
  532. {cgse-0.12.1 → cgse-0.13.0/scratch}/simple-process-monitoring.py +0 -0
  533. {cgse-0.12.1 → cgse-0.13.0}/test_service_registry.db +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cgse
3
- Version: 0.12.1
3
+ Version: 0.13.0
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
 
@@ -72,7 +72,8 @@ Provide a `cgse` command that is extensible with new commands and command groups
72
72
 
73
73
  ## Removals
74
74
 
75
- - [ ] The `get_common_egse_root()` is of no use anymore and needs to be removed or replaced in some
75
+ - [x] The `get_common_egse_root()` is of no use anymore and needs to be
76
+ removed or replaced in some
76
77
  cases.
77
78
 
78
79
  ## Testing
@@ -80,4 +81,6 @@ Provide a `cgse` command that is extensible with new commands and command groups
80
81
  - [x] Add unit testing with `nox` running tests for Python 3.9, 3.10, 3.11, and 3.12
81
82
  - [ ] Add proper unit tests for all packages – using `pytest`
82
83
  - [ ] Add a CI test suite
83
- - [ ] Use GitHub Actions for running tests before merging
84
+ - [ ] Add GitHub Action to check proper formatting of all the code in a pull
85
+ request
86
+ - [ ] Add GitHub Actions for running tests before merging
Binary file
Binary file
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "cgse-common"
3
- version = "0.12.1"
3
+ version = "0.13.0"
4
4
  description = "Software framework to support hardware testing"
5
5
  authors = [
6
6
  {name = "IvS KU Leuven"}
@@ -28,8 +28,7 @@ dependencies = [
28
28
  "pyyaml>=6.0.2",
29
29
  "rich>=13.9.4",
30
30
  "typer>=0.15.1",
31
- "navdict>=0.2.4",
32
-
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]
@@ -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}.")
@@ -3,18 +3,25 @@ This module provides function to load plugins and settings from entry-points.
3
3
  """
4
4
 
5
5
  __all__ = [
6
- "load_plugins",
6
+ "load_plugins_ep",
7
+ "load_plugins_fn",
7
8
  "get_file_infos",
8
9
  "entry_points",
9
10
  "HierarchicalEntryPoints",
10
11
  ]
12
+
13
+ import importlib.util
11
14
  import logging
12
15
  import os
13
16
  import sys
14
17
  import textwrap
15
18
  import traceback
19
+ import types
20
+ from functools import lru_cache
16
21
  from pathlib import Path
17
22
 
23
+ from egse.system import type_name
24
+
18
25
  if sys.version_info >= (3, 12): # Use the standard library version (Python 3.10+)
19
26
  from importlib.metadata import entry_points as lib_entry_points
20
27
  from importlib.metadata import EntryPoint
@@ -26,7 +33,8 @@ else:
26
33
  import click
27
34
  import rich
28
35
 
29
- _LOGGER = logging.getLogger(__name__)
36
+ logger = logging.getLogger(__name__)
37
+ HERE = Path(__file__).parent
30
38
 
31
39
 
32
40
  def entry_points(group: str) -> set[EntryPoint]:
@@ -43,7 +51,7 @@ def entry_points(group: str) -> set[EntryPoint]:
43
51
  return set()
44
52
 
45
53
 
46
- def load_plugins(entry_point: str) -> dict:
54
+ def load_plugins_ep(entry_point: str) -> dict:
47
55
  """
48
56
  Returns a dictionary with plugins loaded. The keys are the names of the entry-points,
49
57
  the values are the loaded modules or objects.
@@ -58,11 +66,90 @@ def load_plugins(entry_point: str) -> dict:
58
66
  eps[ep.name] = ep.load()
59
67
  except Exception as exc:
60
68
  eps[ep.name] = None
61
- _LOGGER.error(f"Couldn't load entry point: {exc}")
69
+ logger.error(f"Couldn't load entry point {entry_point}: {type_name(exc)} – {exc}")
62
70
 
63
71
  return eps
64
72
 
65
73
 
74
+ @lru_cache
75
+ def load_plugins_fn(pattern: str, package_name: str = None) -> dict[str, types.ModuleType]:
76
+ """
77
+ Returns a dictionary with plugins loaded for the filenames that match the given pattern.
78
+ The keys are the names of the modules, the values are the loaded modules.
79
+
80
+ If no package_name is provided, the pattern is relative to the location of this module
81
+ (which is in the top-level module `egse`).
82
+
83
+ If the pattern results in two or more modules with the same name, a warning will be logged
84
+ and only the last imported module will be returned in the dictionary.
85
+
86
+ Plugins are usually located in the `egse.plugins` module. Remember that `egse.plugins`
87
+ is a namespace and external packages can also deliver plugin modules in that location.
88
+
89
+ Note:
90
+ When a plugin cannot be loaded, an error is logged.
91
+
92
+ This function uses an LRU cache to avoid reloading modules. If you need to reload,
93
+ use `load_plugins_fn.cache_clear()` to reset the cache.
94
+
95
+ Raises:
96
+ ImportError when the given package_name cannot be imported as a module.
97
+
98
+ Examples:
99
+
100
+ # Loading the InfluxDB plugin for time series metrics
101
+ >>> influxdb = load_plugins_fn("influxdb.py", "egse.plugins.metrics")
102
+
103
+ # Loading the HDF5 storage plugin for PLATO
104
+ >>> hdf5 = load_plugins_fn("hdf5.py", "egse.plugins.storage")
105
+
106
+ # Loading all plugins
107
+ >>> x = load_plugins_fn("**/*.py", "egse.plugins")
108
+
109
+ """
110
+ loaded_modules = {}
111
+ failed_modules = {} # we keep failed modules for housekeeping only
112
+
113
+ if package_name is None:
114
+ package_path = [HERE]
115
+ else:
116
+ try:
117
+ package = importlib.import_module(package_name)
118
+ except ImportError as exc:
119
+ raise ImportError(f"Cannot import package '{package_name}': {exc}")
120
+
121
+ if hasattr(package, "__path__"):
122
+ package_path = package.__path__
123
+ else:
124
+ package_path = [package.__file__.replace("__init__.py", "")]
125
+
126
+ # rich.print(package_path)
127
+
128
+ for path_entry in map(Path, package_path):
129
+ # rich.print(path_entry)
130
+ for plugin_file in path_entry.rglob(pattern):
131
+ # rich.print(" ", plugin_file)
132
+ module_name = plugin_file.stem
133
+ try:
134
+ spec = importlib.util.spec_from_file_location(module_name, plugin_file)
135
+ module = importlib.util.module_from_spec(spec)
136
+ spec.loader.exec_module(module)
137
+ if module_name in loaded_modules:
138
+ logger.warning(
139
+ f"Overwriting module '{module_name}' from {loaded_modules[module_name].__file__} "
140
+ f"with {plugin_file}."
141
+ )
142
+ loaded_modules[module_name] = module
143
+ except Exception as exc:
144
+ error_msg = f"Couldn't load module '{module_name}' from {plugin_file}: {type_name(exc)} – {exc}"
145
+ logger.error(error_msg)
146
+ if module_name in failed_modules:
147
+ logger.warning(f"Overwriting previously unloaded module '{module_name}' with {plugin_file}.")
148
+ failed_modules[module_name] = error_msg
149
+
150
+ return loaded_modules
151
+
152
+
66
153
  def get_file_infos(entry_point: str) -> dict[str, tuple[Path, str]]:
67
154
  """
68
155
  Returns a dictionary with location and filename of all the entries found for
@@ -93,7 +180,7 @@ def get_file_infos(entry_point: str) -> dict[str, tuple[Path, str]]:
93
180
  path = get_module_location(ep.module)
94
181
 
95
182
  if path is None:
96
- _LOGGER.error(
183
+ logger.error(
97
184
  f"The entry-point '{ep.name}' is ill defined. The module part doesn't exist or is a "
98
185
  f"namespace. No settings are loaded for this entry-point."
99
186
  )
@@ -101,7 +188,7 @@ def get_file_infos(entry_point: str) -> dict[str, tuple[Path, str]]:
101
188
  eps[ep.name] = (path, ep.attr)
102
189
 
103
190
  except Exception as exc:
104
- _LOGGER.error(f"The entry point '{ep.name}' is ill defined: {exc}")
191
+ logger.error(f"The entry point '{ep.name}' is ill defined: {exc}")
105
192
 
106
193
  return eps
107
194