cgse 0.16.3__tar.gz → 0.16.5__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 (540) hide show
  1. {cgse-0.16.3 → cgse-0.16.5}/PKG-INFO +1 -1
  2. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/pyproject.toml +1 -1
  3. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/egse/env.py +9 -0
  4. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/test_env.py +11 -0
  5. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-coordinates/pyproject.toml +1 -1
  6. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/pyproject.toml +1 -1
  7. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/cgse_core/_start.py +6 -6
  8. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/cgse_core/_stop.py +6 -6
  9. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/cgse_core/services.py +0 -6
  10. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/cgse_core/settings.yaml +2 -2
  11. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/async_control_claude.py +0 -88
  12. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/confman/__init__.py +0 -22
  13. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/confman/confman.yaml +0 -3
  14. cgse-0.16.5/libs/cgse-core/src/egse/connect.py +55 -0
  15. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/control.py +1 -124
  16. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/dummy.py +6 -57
  17. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/logger/log_cs.py +1 -1
  18. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/notifyhub/__init__.py +1 -1
  19. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/procman/__init__.py +3 -10
  20. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/procman/procman.yaml +1 -5
  21. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/procman/procman_cs.py +1 -12
  22. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/registry/client.py +9 -2
  23. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/storage/__init__.py +2 -19
  24. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/storage/storage.yaml +0 -4
  25. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/storage/storage_cs.py +7 -13
  26. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/pyproject.toml +1 -1
  27. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/cgse-tools/pyproject.toml +1 -1
  28. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/keithley-tempcontrol/pyproject.toml +1 -1
  29. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/lakeshore-tempcontrol/pyproject.toml +1 -1
  30. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/symetrie-hexapod/pyproject.toml +1 -1
  31. {cgse-0.16.3 → cgse-0.16.5}/projects/plato/plato-fits/pyproject.toml +1 -1
  32. {cgse-0.16.3 → cgse-0.16.5}/projects/plato/plato-hdf5/pyproject.toml +1 -1
  33. {cgse-0.16.3 → cgse-0.16.5}/projects/plato/plato-spw/pyproject.toml +1 -1
  34. {cgse-0.16.3 → cgse-0.16.5}/pyproject.toml +1 -1
  35. {cgse-0.16.3 → cgse-0.16.5}/service_registry.db +0 -0
  36. cgse-0.16.3/service_registry.db-shm +0 -0
  37. cgse-0.16.3/service_registry.db-wal +0 -0
  38. {cgse-0.16.3 → cgse-0.16.5}/.github/workflows/ruff-format-check.yaml +0 -0
  39. {cgse-0.16.3 → cgse-0.16.5}/.gitignore +0 -0
  40. {cgse-0.16.3 → cgse-0.16.5}/README.md +0 -0
  41. {cgse-0.16.3 → cgse-0.16.5}/buffer_vat.log +0 -0
  42. {cgse-0.16.3 → cgse-0.16.5}/buffer_vat.png +0 -0
  43. {cgse-0.16.3 → cgse-0.16.5}/bump.py +0 -0
  44. {cgse-0.16.3 → cgse-0.16.5}/conftest.py +0 -0
  45. {cgse-0.16.3 → cgse-0.16.5}/docs/api/bits.md +0 -0
  46. {cgse-0.16.3 → cgse-0.16.5}/docs/api/calibration.md +0 -0
  47. {cgse-0.16.3 → cgse-0.16.5}/docs/api/command.md +0 -0
  48. {cgse-0.16.3 → cgse-0.16.5}/docs/api/config.md +0 -0
  49. {cgse-0.16.3 → cgse-0.16.5}/docs/api/control.md +0 -0
  50. {cgse-0.16.3 → cgse-0.16.5}/docs/api/counter.md +0 -0
  51. {cgse-0.16.3 → cgse-0.16.5}/docs/api/decorators.md +0 -0
  52. {cgse-0.16.3 → cgse-0.16.5}/docs/api/device.md +0 -0
  53. {cgse-0.16.3 → cgse-0.16.5}/docs/api/dicts.md +0 -0
  54. {cgse-0.16.3 → cgse-0.16.5}/docs/api/dummy.md +0 -0
  55. {cgse-0.16.3 → cgse-0.16.5}/docs/api/env.md +0 -0
  56. {cgse-0.16.3 → cgse-0.16.5}/docs/api/exceptions.md +0 -0
  57. {cgse-0.16.3 → cgse-0.16.5}/docs/api/heartbeat.md +0 -0
  58. {cgse-0.16.3 → cgse-0.16.5}/docs/api/hk.md +0 -0
  59. {cgse-0.16.3 → cgse-0.16.5}/docs/api/index.md +0 -0
  60. {cgse-0.16.3 → cgse-0.16.5}/docs/api/listener.md +0 -0
  61. {cgse-0.16.3 → cgse-0.16.5}/docs/api/metrics.md +0 -0
  62. {cgse-0.16.3 → cgse-0.16.5}/docs/api/mixin.md +0 -0
  63. {cgse-0.16.3 → cgse-0.16.5}/docs/api/monitoring.md +0 -0
  64. {cgse-0.16.3 → cgse-0.16.5}/docs/api/observer.md +0 -0
  65. {cgse-0.16.3 → cgse-0.16.5}/docs/api/obsid.md +0 -0
  66. {cgse-0.16.3 → cgse-0.16.5}/docs/api/persistence.md +0 -0
  67. {cgse-0.16.3 → cgse-0.16.5}/docs/api/plugin.md +0 -0
  68. {cgse-0.16.3 → cgse-0.16.5}/docs/api/process.md +0 -0
  69. {cgse-0.16.3 → cgse-0.16.5}/docs/api/reload.md +0 -0
  70. {cgse-0.16.3 → cgse-0.16.5}/docs/api/settings.md +0 -0
  71. {cgse-0.16.3 → cgse-0.16.5}/docs/api/setup.md +0 -0
  72. {cgse-0.16.3 → cgse-0.16.5}/docs/api/system.md +0 -0
  73. {cgse-0.16.3 → cgse-0.16.5}/docs/custom_theme/main.html +0 -0
  74. {cgse-0.16.3 → cgse-0.16.5}/docs/dev_guide/coding_style.md +0 -0
  75. {cgse-0.16.3 → cgse-0.16.5}/docs/dev_guide/docs.md +0 -0
  76. {cgse-0.16.3 → cgse-0.16.5}/docs/dev_guide/index.md +0 -0
  77. {cgse-0.16.3 → cgse-0.16.5}/docs/dev_guide/installation.md +0 -0
  78. {cgse-0.16.3 → cgse-0.16.5}/docs/dev_guide/monitoring.md +0 -0
  79. {cgse-0.16.3 → cgse-0.16.5}/docs/dev_guide/monorepo.md +0 -0
  80. {cgse-0.16.3 → cgse-0.16.5}/docs/dev_guide/nox.md +0 -0
  81. {cgse-0.16.3 → cgse-0.16.5}/docs/dev_guide/plugins.md +0 -0
  82. {cgse-0.16.3 → cgse-0.16.5}/docs/dev_guide/project-configuration.md +0 -0
  83. {cgse-0.16.3 → cgse-0.16.5}/docs/dev_guide/unit_testing.md +0 -0
  84. {cgse-0.16.3 → cgse-0.16.5}/docs/dev_guide/uv.md +0 -0
  85. {cgse-0.16.3 → cgse-0.16.5}/docs/dev_guide/versioning.md +0 -0
  86. {cgse-0.16.3 → cgse-0.16.5}/docs/getting_started.md +0 -0
  87. {cgse-0.16.3 → cgse-0.16.5}/docs/help.md +0 -0
  88. {cgse-0.16.3 → cgse-0.16.5}/docs/images/cli-cgse.png +0 -0
  89. {cgse-0.16.3 → cgse-0.16.5}/docs/images/github-fork-clone-dark.png +0 -0
  90. {cgse-0.16.3 → cgse-0.16.5}/docs/images/github-fork-clone.png +0 -0
  91. {cgse-0.16.3 → cgse-0.16.5}/docs/images/grafana-queries.png +0 -0
  92. {cgse-0.16.3 → cgse-0.16.5}/docs/images/icons/cgse-logo-blue.svg +0 -0
  93. {cgse-0.16.3 → cgse-0.16.5}/docs/images/icons/cgse-logo.svg +0 -0
  94. {cgse-0.16.3 → cgse-0.16.5}/docs/index.md +0 -0
  95. {cgse-0.16.3 → cgse-0.16.5}/docs/initialize.md +0 -0
  96. {cgse-0.16.3 → cgse-0.16.5}/docs/libs/cgse-common/images/load_methods.png +0 -0
  97. {cgse-0.16.3 → cgse-0.16.5}/docs/libs/cgse-common/index.md +0 -0
  98. {cgse-0.16.3 → cgse-0.16.5}/docs/libs/cgse-common/settings.md +0 -0
  99. {cgse-0.16.3 → cgse-0.16.5}/docs/libs/cgse-common/setup.md +0 -0
  100. {cgse-0.16.3 → cgse-0.16.5}/docs/libs/cgse-coordinates/index.md +0 -0
  101. {cgse-0.16.3 → cgse-0.16.5}/docs/libs/cgse-core/index.md +0 -0
  102. {cgse-0.16.3 → cgse-0.16.5}/docs/libs/cgse-core/notifyhub.md +0 -0
  103. {cgse-0.16.3 → cgse-0.16.5}/docs/libs/cgse-core/registry.md +0 -0
  104. {cgse-0.16.3 → cgse-0.16.5}/docs/libs/cgse-gui/index.md +0 -0
  105. {cgse-0.16.3 → cgse-0.16.5}/docs/libs/index.md +0 -0
  106. {cgse-0.16.3 → cgse-0.16.5}/docs/package_list.md +0 -0
  107. {cgse-0.16.3 → cgse-0.16.5}/docs/projects/cgse-tools.md +0 -0
  108. {cgse-0.16.3 → cgse-0.16.5}/docs/projects/index.md +0 -0
  109. {cgse-0.16.3 → cgse-0.16.5}/docs/projects/symetrie-hexapod.md +0 -0
  110. {cgse-0.16.3 → cgse-0.16.5}/docs/roadmap.md +0 -0
  111. {cgse-0.16.3 → cgse-0.16.5}/docs/stylesheets/custom.css +0 -0
  112. {cgse-0.16.3 → cgse-0.16.5}/docs/stylesheets/extra.css +0 -0
  113. {cgse-0.16.3 → cgse-0.16.5}/docs/tutorial.md +0 -0
  114. {cgse-0.16.3 → cgse-0.16.5}/docs/user_guide/cli.md +0 -0
  115. {cgse-0.16.3 → cgse-0.16.5}/docs/user_guide/index.md +0 -0
  116. {cgse-0.16.3 → cgse-0.16.5}/duckdb_metrics.db +0 -0
  117. {cgse-0.16.3 → cgse-0.16.5}/duckdb_metrics.db.wal +0 -0
  118. {cgse-0.16.3 → cgse-0.16.5}/identifier.sqlite +0 -0
  119. {cgse-0.16.3 → cgse-0.16.5}/justfile +0 -0
  120. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/README.md +0 -0
  121. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/justfile +0 -0
  122. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/noxfile.py +0 -0
  123. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/service_registry.db +0 -0
  124. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/cgse_common/__init__.py +0 -0
  125. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/cgse_common/cgse.py +0 -0
  126. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/cgse_common/settings.yaml +0 -0
  127. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/egse/bits.py +0 -0
  128. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/egse/calibration.py +0 -0
  129. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/egse/config.py +0 -0
  130. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/egse/counter.py +0 -0
  131. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/egse/decorators.py +0 -0
  132. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/egse/device.py +0 -0
  133. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/egse/dicts.py +0 -0
  134. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/egse/exceptions.py +0 -0
  135. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/egse/heartbeat.py +0 -0
  136. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/egse/hk.py +0 -0
  137. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/egse/log.py +0 -0
  138. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/egse/metrics.py +0 -0
  139. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/egse/observer.py +0 -0
  140. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/egse/obsid.py +0 -0
  141. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/egse/persistence.py +0 -0
  142. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/egse/plugin.py +0 -0
  143. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/egse/plugins/metrics/duckdb.py +0 -0
  144. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/egse/plugins/metrics/influxdb.py +0 -0
  145. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/egse/plugins/metrics/timescaledb.py +0 -0
  146. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/egse/process.py +0 -0
  147. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/egse/py.typed +0 -0
  148. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/egse/randomwalk.py +0 -0
  149. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/egse/ratelimit.py +0 -0
  150. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/egse/reload.py +0 -0
  151. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/egse/resource.py +0 -0
  152. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/egse/response.py +0 -0
  153. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/egse/scpi.py +0 -0
  154. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/egse/settings.py +0 -0
  155. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/egse/settings.yaml +0 -0
  156. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/egse/setup.py +0 -0
  157. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/egse/signal.py +0 -0
  158. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/egse/socketdevice.py +0 -0
  159. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/egse/state.py +0 -0
  160. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/egse/system.py +0 -0
  161. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/egse/task.py +0 -0
  162. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/egse/version.py +0 -0
  163. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/src/egse/zmq_ser.py +0 -0
  164. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/conftest.py +0 -0
  165. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/data/COPYING +0 -0
  166. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00028_201028_155259.yaml +0 -0
  167. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00029_201028_155331.yaml +0 -0
  168. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00030_210311_134043.yaml +0 -0
  169. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00080_210917_105245.yaml +0 -0
  170. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00081_210922_142259.yaml +0 -0
  171. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00082_210923_094458.yaml +0 -0
  172. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/data/CSL1/README.md +0 -0
  173. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/data/CSL2/README.md +0 -0
  174. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/data/IAS/README.md +0 -0
  175. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/data/INTA/README.md +0 -0
  176. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/data/LAB23/README.md +0 -0
  177. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00027_211119_140441.yaml +0 -0
  178. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00028_211119_160406.yaml +0 -0
  179. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00029_211119_172918.yaml +0 -0
  180. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00030_211122_103604.yaml +0 -0
  181. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00031_211123_124900.yaml +0 -0
  182. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/data/common/telemetry/tm-dictionary-default.csv +0 -0
  183. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/data/conf/SETUP_20250114_1519.yaml +0 -0
  184. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/data/conf/config-file.toml +0 -0
  185. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/data/data/cal_coeff_1234.csv +0 -0
  186. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/data/data/calibration.csv +0 -0
  187. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/data/data/calibration.yaml +0 -0
  188. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/data/data/command.yaml +0 -0
  189. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/data/data/corrupt.yaml +0 -0
  190. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/data/data/data-file.txt +0 -0
  191. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/data/data/empty_data_file.txt +0 -0
  192. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/data/data/empty_yaml_file.yaml +0 -0
  193. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/data/data/local_settings.yaml +0 -0
  194. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/data/data/new_local_settings.yaml +0 -0
  195. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/data/data/test_setup.yaml +0 -0
  196. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/data/icons/hourglass.svg +0 -0
  197. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/data/icons/keyboard.png +0 -0
  198. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/data/icons/soap_sponge.svg +0 -0
  199. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/data/lib/dev1/shared-lib.so +0 -0
  200. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/data/lib/dev2/shared-lib.so +0 -0
  201. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/fixtures/default_env.py +0 -0
  202. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/fixtures/helpers.py +0 -0
  203. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/scripts/empty_process.py +0 -0
  204. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/scripts/handle_sigterm.py +0 -0
  205. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/scripts/process_with_children.py +0 -0
  206. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/scripts/raise_value_error.py +0 -0
  207. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/scripts/void-0.py +0 -0
  208. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/scripts/void-1.py +0 -0
  209. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/test_bits.py +0 -0
  210. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/test_config.py +0 -0
  211. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/test_decorators.py +0 -0
  212. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/test_device.py +0 -0
  213. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/test_fixtures.py +0 -0
  214. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/test_hk.py +0 -0
  215. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/test_influxdb_plugin.py +0 -0
  216. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/test_log.py +0 -0
  217. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/test_metrics.py +0 -0
  218. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/test_plugin.py +0 -0
  219. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/test_process.py +0 -0
  220. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/test_ratelimit.py +0 -0
  221. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/test_resource.py +0 -0
  222. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/test_response.py +0 -0
  223. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/test_settings.py +0 -0
  224. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/test_setup.py +0 -0
  225. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/test_signal.py +0 -0
  226. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/test_state.py +0 -0
  227. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/test_system.py +0 -0
  228. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/test_task.py +0 -0
  229. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-common/tests/test_zmq_ser.py +0 -0
  230. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-coordinates/README.md +0 -0
  231. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-coordinates/src/cgse_coordinates/__init__.py +0 -0
  232. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-coordinates/src/cgse_coordinates/settings.yaml +0 -0
  233. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-coordinates/src/egse/coordinates/__init__.py +0 -0
  234. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-coordinates/src/egse/coordinates/avoidance.py +0 -0
  235. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-coordinates/src/egse/coordinates/cslmodel.py +0 -0
  236. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-coordinates/src/egse/coordinates/laser_tracker_to_dict.py +0 -0
  237. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-coordinates/src/egse/coordinates/point.py +0 -0
  238. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-coordinates/src/egse/coordinates/pyplot.py +0 -0
  239. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-coordinates/src/egse/coordinates/referenceFrame.py +0 -0
  240. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-coordinates/src/egse/coordinates/refmodel.py +0 -0
  241. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-coordinates/src/egse/coordinates/rotationMatrix.py +0 -0
  242. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-coordinates/src/egse/coordinates/transform3d_addon.py +0 -0
  243. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-coordinates/tests/test_avoidance.py +0 -0
  244. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-coordinates/tests/test_coordinates_plot.py +0 -0
  245. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-coordinates/tests/test_coordinates_serialize.py +0 -0
  246. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-coordinates/tests/test_point.py +0 -0
  247. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-coordinates/tests/test_ref_model.py +0 -0
  248. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-coordinates/tests/test_reference_frames.py +0 -0
  249. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-coordinates/tests/test_refmodel.py +0 -0
  250. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/.envrc.disabled +0 -0
  251. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/README.md +0 -0
  252. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/service_registry.db +0 -0
  253. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/cgse_core/__init__.py +0 -0
  254. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/cgse_core/_status.py +0 -0
  255. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/cgse_core/cgse_explore.py +0 -0
  256. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/_setup_core.py +0 -0
  257. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/async_control.py +0 -0
  258. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/command.py +0 -0
  259. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/confman/__main__.py +0 -0
  260. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/confman/confman_cs.py +0 -0
  261. /cgse-0.16.3/libs/cgse-core/src/egse/connect.py → /cgse-0.16.5/libs/cgse-core/src/egse/connect-todo.py +0 -0
  262. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/icons/busy.svg +0 -0
  263. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/icons/operational-mode.svg +0 -0
  264. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/icons/pm_ui.svg +0 -0
  265. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/icons/simulator-mode.svg +0 -0
  266. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/icons/start-process-button.svg +0 -0
  267. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/icons/stop-process-button.svg +0 -0
  268. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/icons/user-interface.svg +0 -0
  269. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/listener.py +0 -0
  270. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/logger/__init__.py +0 -0
  271. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/logger/__main__.py +0 -0
  272. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/metricshub/__init__.py +0 -0
  273. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/metricshub/server.py +0 -0
  274. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/mixin.py +0 -0
  275. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/monitoring.py +0 -0
  276. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/notifyhub/client.py +0 -0
  277. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/notifyhub/event.py +0 -0
  278. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/notifyhub/server.py +0 -0
  279. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/notifyhub/services.py +0 -0
  280. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/notifyhub/test.py +0 -0
  281. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/procman/procman_protocol.py +0 -0
  282. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/procman/procman_ui.py +0 -0
  283. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/protocol.py +0 -0
  284. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/proxy.py +0 -0
  285. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/registry/__init__.py +0 -0
  286. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/registry/backend.py +0 -0
  287. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/registry/server.py +0 -0
  288. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/registry/service.py +0 -0
  289. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/services.py +0 -0
  290. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/services.yaml +0 -0
  291. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/storage/__main__.py +0 -0
  292. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/src/egse/storage/persistence.py +0 -0
  293. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/tests/conftest.py +0 -0
  294. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/tests/data/local_settings.yaml +0 -0
  295. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/tests/fixtures/default_env.py +0 -0
  296. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/tests/fixtures/helpers.py +0 -0
  297. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/tests/fixtures/services.py +0 -0
  298. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/tests/script_subscribe_to_notifyhub.py +0 -0
  299. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/tests/script_test_async_registry_client.py +0 -0
  300. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/tests/script_test_registry_client_server.py +0 -0
  301. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/tests/script_test_service_registry_server.py +0 -0
  302. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/tests/script_test_sync_registry_client.py +0 -0
  303. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/tests/services.py +0 -0
  304. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/tests/stress_test_registry_server.py +0 -0
  305. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/tests/test_async_control.py +0 -0
  306. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/tests/test_client_server_interaction.py +0 -0
  307. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/tests/test_cm_cs.py +0 -0
  308. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/tests/test_command.py +0 -0
  309. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/tests/test_confman_setups.py +0 -0
  310. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/tests/test_connect.py +0 -0
  311. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/tests/test_control.py +0 -0
  312. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/tests/test_dummy.py +0 -0
  313. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/tests/test_event_notification.py +0 -0
  314. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/tests/test_extensions.py +0 -0
  315. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/tests/test_listener.py +0 -0
  316. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/tests/test_logger.py +0 -0
  317. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/tests/test_mixin.py +0 -0
  318. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/tests/test_notify_hub.py +0 -0
  319. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/tests/test_protocol.py +0 -0
  320. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/tests/test_registry_backend.py +0 -0
  321. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/tests/test_registry_service.py +0 -0
  322. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/tests/test_server_running.py +0 -0
  323. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/tests/test_server_running_with_fixture.py +0 -0
  324. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/tests/test_settings_core.py +0 -0
  325. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-core/tests/test_zmq_microservice.py +0 -0
  326. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/README.md +0 -0
  327. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/__init__.py +0 -0
  328. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/buttons.py +0 -0
  329. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-start.svg +0 -0
  330. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-stop.svg +0 -0
  331. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/aeu-cs.svg +0 -0
  332. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-started.svg +0 -0
  333. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-stopped.svg +0 -0
  334. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/aeu_cs.svg +0 -0
  335. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/alert.svg +0 -0
  336. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/arrow-double-left.png +0 -0
  337. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/arrow-double-right.png +0 -0
  338. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/arrow-up.svg +0 -0
  339. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/backward.svg +0 -0
  340. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/busy.svg +0 -0
  341. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/cleaning.svg +0 -0
  342. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/color-scheme.svg +0 -0
  343. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/cs-connected-alert.svg +0 -0
  344. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/cs-connected-disabled.svg +0 -0
  345. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/cs-connected.svg +0 -0
  346. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/cs-not-connected.svg +0 -0
  347. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/double-left-arrow.svg +0 -0
  348. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/double-right-arrow.svg +0 -0
  349. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/erase-disabled.svg +0 -0
  350. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/erase.svg +0 -0
  351. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/fitsgen-start.svg +0 -0
  352. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/fitsgen-stop.svg +0 -0
  353. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/fitsgen.svg +0 -0
  354. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/forward.svg +0 -0
  355. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/fov-hk-start.svg +0 -0
  356. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/fov-hk-stop.svg +0 -0
  357. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/fov-hk.svg +0 -0
  358. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/front-desk.svg +0 -0
  359. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/home-actioned.svg +0 -0
  360. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/home-disabled.svg +0 -0
  361. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/home.svg +0 -0
  362. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/info.svg +0 -0
  363. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/invalid.png +0 -0
  364. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/led-green.svg +0 -0
  365. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/led-grey.svg +0 -0
  366. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/led-orange.svg +0 -0
  367. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/led-red.svg +0 -0
  368. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/led-square-green.svg +0 -0
  369. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/led-square-grey.svg +0 -0
  370. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/led-square-orange.svg +0 -0
  371. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/led-square-red.svg +0 -0
  372. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-green.svg +0 -0
  373. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-red.svg +0 -0
  374. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el+.svg +0 -0
  375. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el-.svg +0 -0
  376. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/location-marker.svg +0 -0
  377. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/logo-dpu.svg +0 -0
  378. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/logo-gimbal.svg +0 -0
  379. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/logo-huber.svg +0 -0
  380. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/logo-ogse.svg +0 -0
  381. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/logo-puna.svg +0 -0
  382. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/logo-tcs.svg +0 -0
  383. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/logo-zonda.svg +0 -0
  384. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/maximize.svg +0 -0
  385. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/meter.svg +0 -0
  386. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/more.svg +0 -0
  387. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-start.svg +0 -0
  388. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-stop.svg +0 -0
  389. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk.svg +0 -0
  390. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/observing-off.svg +0 -0
  391. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/observing-on.svg +0 -0
  392. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.png +0 -0
  393. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.svg +0 -0
  394. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/ops-mode.svg +0 -0
  395. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/play-green.svg +0 -0
  396. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/plugged-disabled.svg +0 -0
  397. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/plugged.svg +0 -0
  398. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/pm_ui.svg +0 -0
  399. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/power-button-green.svg +0 -0
  400. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/power-button-red.svg +0 -0
  401. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/power-button.svg +0 -0
  402. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/radar.svg +0 -0
  403. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/radioactive.svg +0 -0
  404. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/reload.svg +0 -0
  405. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/remote-control-off.svg +0 -0
  406. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/remote-control-on.svg +0 -0
  407. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/repeat-blue.svg +0 -0
  408. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/repeat.svg +0 -0
  409. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/settings.svg +0 -0
  410. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/shrink.svg +0 -0
  411. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/shutter.svg +0 -0
  412. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/sign-off.svg +0 -0
  413. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/sign-on.svg +0 -0
  414. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/sim-mode.svg +0 -0
  415. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/small-buttons-go.svg +0 -0
  416. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/small-buttons-minus.svg +0 -0
  417. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/small-buttons-plus.svg +0 -0
  418. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/sponge.svg +0 -0
  419. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/start-button-disabled.svg +0 -0
  420. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/start-button.svg +0 -0
  421. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/stop-button-disabled.svg +0 -0
  422. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/stop-button.svg +0 -0
  423. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/stop-red.svg +0 -0
  424. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/stop.svg +0 -0
  425. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/switch-disabled-square.svg +0 -0
  426. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/switch-disabled.svg +0 -0
  427. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/switch-off-square.svg +0 -0
  428. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/switch-off.svg +0 -0
  429. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/switch-on-square.svg +0 -0
  430. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/switch-on.svg +0 -0
  431. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/temperature-control.svg +0 -0
  432. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/th_ui_logo.svg +0 -0
  433. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/unplugged.svg +0 -0
  434. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/unvalid.png +0 -0
  435. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/user-interface.svg +0 -0
  436. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/vacuum.svg +0 -0
  437. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/valid.png +0 -0
  438. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-dark.svg +0 -0
  439. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-white.svg +0 -0
  440. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/led.py +0 -0
  441. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/limitswitch.py +0 -0
  442. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/states.py +0 -0
  443. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/styles/dark.qss +0 -0
  444. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/styles/default.qss +0 -0
  445. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/styles.qss +0 -0
  446. {cgse-0.16.3 → cgse-0.16.5}/libs/cgse-gui/src/egse/gui/switch.py +0 -0
  447. {cgse-0.16.3 → cgse-0.16.5}/mkdocs.yml +0 -0
  448. {cgse-0.16.3 → cgse-0.16.5}/noxfile.py +0 -0
  449. {cgse-0.16.3 → cgse-0.16.5}/overrides/.icons/custom/dbend-dark.svg +0 -0
  450. {cgse-0.16.3 → cgse-0.16.5}/overrides/.icons/custom/dbend-light.svg +0 -0
  451. {cgse-0.16.3 → cgse-0.16.5}/overrides/.icons/custom/gear.svg +0 -0
  452. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/cgse-tools/README.md +0 -0
  453. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/cgse-tools/src/cgse_tools/__init__.py +0 -0
  454. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/cgse-tools/src/cgse_tools/cgse_clock.py +0 -0
  455. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/cgse-tools/src/cgse_tools/cgse_commands.py +0 -0
  456. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/cgse-tools/src/cgse_tools/cgse_services.py +0 -0
  457. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/cgse-tools/src/egse/tools/status.py +0 -0
  458. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/keithley-tempcontrol/README.md +0 -0
  459. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/keithley-tempcontrol/justfile +0 -0
  460. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/keithley-tempcontrol/noxfile.py +0 -0
  461. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/keithley-tempcontrol/service_registry.db +0 -0
  462. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/__init__.py +0 -0
  463. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510.py +0 -0
  464. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510.yaml +0 -0
  465. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_acs.py +0 -0
  466. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_adev.py +0 -0
  467. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_cs.py +0 -0
  468. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_dev.py +0 -0
  469. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_mon.py +0 -0
  470. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_protocol.py +0 -0
  471. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_sim.py +0 -0
  472. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/__init__.py +0 -0
  473. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/cgse_explore.py +0 -0
  474. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/cgse_services.py +0 -0
  475. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/settings.yaml +0 -0
  476. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/keithley-tempcontrol/temperature_readings.log +0 -0
  477. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/keithley-tempcontrol/tests/script_daq6510_central_heating.py +0 -0
  478. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/keithley-tempcontrol/tests/script_daq6510_mon.py +0 -0
  479. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/keithley-tempcontrol/tests/script_plot_readings.py +0 -0
  480. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/keithley-tempcontrol/tests/test_adev.py +0 -0
  481. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/keithley-tempcontrol/tests/test_dev.py +0 -0
  482. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/lakeshore-tempcontrol/README.md +0 -0
  483. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336.py +0 -0
  484. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336.yaml +0 -0
  485. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_cs.py +0 -0
  486. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_devif.py +0 -0
  487. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_protocol.py +0 -0
  488. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/__init__.py +0 -0
  489. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/cgse_explore.py +0 -0
  490. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/cgse_services.py +0 -0
  491. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/settings.yaml +0 -0
  492. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/lakeshore-tempcontrol/tests/test_lakeshore336_simulator.py +0 -0
  493. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/symetrie-hexapod/README.md +0 -0
  494. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/symetrie-hexapod/src/egse/hexapod/__init__.py +0 -0
  495. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/__init__.py +0 -0
  496. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/alpha.py +0 -0
  497. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/dynalpha.py +0 -0
  498. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod.py +0 -0
  499. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod_ui.py +0 -0
  500. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.py +0 -0
  501. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.yaml +0 -0
  502. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_cs.py +0 -0
  503. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_protocol.py +0 -0
  504. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_ui.py +0 -0
  505. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac.py +0 -0
  506. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac_regex.py +0 -0
  507. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.py +0 -0
  508. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.yaml +0 -0
  509. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_cs.py +0 -0
  510. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_protocol.py +0 -0
  511. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_sim.py +0 -0
  512. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_ui.py +0 -0
  513. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/punaplus.py +0 -0
  514. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.py +0 -0
  515. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.yaml +0 -0
  516. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_cs.py +0 -0
  517. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_devif.py +0 -0
  518. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_protocol.py +0 -0
  519. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_ui.py +0 -0
  520. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/__init__.py +0 -0
  521. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/cgse_explore.py +0 -0
  522. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/cgse_services.py +0 -0
  523. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/settings.yaml +0 -0
  524. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/symetrie-hexapod/tests/test_puna.py +0 -0
  525. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/symetrie-hexapod/tests/test_puna_cs.py +0 -0
  526. {cgse-0.16.3 → cgse-0.16.5}/projects/generic/symetrie-hexapod/tests/test_puna_simulator.py +0 -0
  527. {cgse-0.16.3 → cgse-0.16.5}/projects/plato/plato-fits/README.md +0 -0
  528. {cgse-0.16.3 → cgse-0.16.5}/projects/plato/plato-fits/src/egse/plugins/storage/fits.py +0 -0
  529. {cgse-0.16.3 → cgse-0.16.5}/projects/plato/plato-hdf5/README.md +0 -0
  530. {cgse-0.16.3 → cgse-0.16.5}/projects/plato/plato-hdf5/src/egse/plugins/storage/hdf5.py +0 -0
  531. {cgse-0.16.3 → cgse-0.16.5}/projects/plato/plato-spw/README.md +0 -0
  532. {cgse-0.16.3 → cgse-0.16.5}/projects/plato/plato-spw/src/egse/spw.py +0 -0
  533. {cgse-0.16.3 → cgse-0.16.5}/ruff.toml +0 -0
  534. {cgse-0.16.3 → cgse-0.16.5}/scratch/advanced-process-monitoring.py +0 -0
  535. {cgse-0.16.3 → cgse-0.16.5}/scratch/live-process-monitoring.py +0 -0
  536. {cgse-0.16.3 → cgse-0.16.5}/scratch/match-case.py +0 -0
  537. {cgse-0.16.3 → cgse-0.16.5}/scratch/processes.json +0 -0
  538. {cgse-0.16.3 → cgse-0.16.5}/scratch/simple-process-monitoring.py +0 -0
  539. {cgse-0.16.3 → cgse-0.16.5}/temperature_readings.log +0 -0
  540. {cgse-0.16.3 → cgse-0.16.5}/test_service_registry.db +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cgse
3
- Version: 0.16.3
3
+ Version: 0.16.5
4
4
  Summary: Generic Common-EGSE: Commanding and monitoring lab equipment
5
5
  Author: IvS KU Leuven
6
6
  Maintainer-email: Rik Huygen <rik.huygen@kuleuven.be>, Sara Regibo <sara.regibo@kuleuven.be>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "cgse-common"
3
- version = "0.16.3"
3
+ version = "0.16.5"
4
4
  description = "Software framework to support hardware testing"
5
5
  authors = [
6
6
  {name = "IvS KU Leuven"}
@@ -573,6 +573,15 @@ def print_env():
573
573
  console.print(f" {get_local_settings_env_name():{col_width}s}: {get_local_settings_path()}")
574
574
 
575
575
 
576
+ def bool_env(var_name: str) -> bool:
577
+ """Return True if the environment variable is set to 1, true, yes, or on. All case-insensitive."""
578
+
579
+ if value := os.getenv(var_name):
580
+ return value.strip().lower() in {"1", "true", "yes", "on"}
581
+
582
+ return False
583
+
584
+
576
585
  @contextlib.contextmanager
577
586
  def env_var(**kwargs: str | int | float | bool | None):
578
587
  """
@@ -2,6 +2,7 @@ import logging
2
2
 
3
3
  import pytest
4
4
 
5
+ from egse.env import bool_env
5
6
  from egse.env import get_conf_repo_location
6
7
  from egse.env import get_project_name
7
8
  from egse.env import get_site_id
@@ -207,3 +208,13 @@ def test_main(capsys):
207
208
  assert "PYTHONSTARTUP=my_script.py" in captured.out # noqa
208
209
 
209
210
  _LOGGER.info(f"{get_project_name() = }, {get_site_id() = }")
211
+
212
+
213
+ def test_bool_env():
214
+ for option in ["1", "true", "True", "TRUE", "on", "On", "ON", "yes", "Yes", "YES"]:
215
+ with env_var(VERBOSE_DEBUG=option):
216
+ assert bool_env("VERBOSE_DEBUG")
217
+
218
+ for option in ["0", "false", "no", "off"]:
219
+ with env_var(VERBOSE_DEBUG=option):
220
+ assert not bool_env("VERBOSE_DEBUG")
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "cgse-coordinates"
3
- version = "0.16.3"
3
+ version = "0.16.5"
4
4
  description = "Reference Frames and Coordinate Transofrmations for CGSE"
5
5
  authors = [
6
6
  {name = "IvS KU Leuven"}
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "cgse-core"
3
- version = "0.16.3"
3
+ version = "0.16.5"
4
4
  description = "Core services for the CGSE framework"
5
5
  authors = [
6
6
  {name = "IvS KU Leuven"}
@@ -9,7 +9,7 @@ from egse.system import redirect_output_to_log
9
9
  def start_rm_cs(log_level: str):
10
10
  rich.print("Starting the service registry manager core service...")
11
11
 
12
- out = redirect_output_to_log(".rm_cs.start.log")
12
+ out = redirect_output_to_log("rm_cs.start.log")
13
13
 
14
14
  subprocess.Popen(
15
15
  [sys.executable, "-m", "egse.registry.server", "start", "--log-level", log_level],
@@ -23,7 +23,7 @@ def start_rm_cs(log_level: str):
23
23
  def start_log_cs():
24
24
  rich.print("Starting the logging core service...")
25
25
 
26
- out = redirect_output_to_log(".log_cs.start.log")
26
+ out = redirect_output_to_log("log_cs.start.log")
27
27
 
28
28
  subprocess.Popen(
29
29
  [sys.executable, "-m", "egse.logger.log_cs", "start"],
@@ -37,7 +37,7 @@ def start_log_cs():
37
37
  def start_sm_cs():
38
38
  rich.print("Starting the storage manager core service...")
39
39
 
40
- out = redirect_output_to_log(".sm_cs.start.log")
40
+ out = redirect_output_to_log("sm_cs.start.log")
41
41
 
42
42
  subprocess.Popen(
43
43
  [sys.executable, "-m", "egse.storage.storage_cs", "start"],
@@ -51,7 +51,7 @@ def start_sm_cs():
51
51
  def start_cm_cs():
52
52
  rich.print("Starting the configuration manager core service...")
53
53
 
54
- out = redirect_output_to_log(".cm_cs.start.log")
54
+ out = redirect_output_to_log("cm_cs.start.log")
55
55
 
56
56
  subprocess.Popen(
57
57
  [sys.executable, "-m", "egse.confman.confman_cs", "start"],
@@ -65,7 +65,7 @@ def start_cm_cs():
65
65
  def start_pm_cs():
66
66
  rich.print("Starting the process manager core service...")
67
67
 
68
- out = redirect_output_to_log(".pm_cs.start.log")
68
+ out = redirect_output_to_log("pm_cs.start.log")
69
69
 
70
70
  subprocess.Popen(
71
71
  [sys.executable, "-m", "egse.procman.procman_cs", "start"],
@@ -79,7 +79,7 @@ def start_pm_cs():
79
79
  def start_notifyhub():
80
80
  rich.print("Starting the notification hub core service...")
81
81
 
82
- out = redirect_output_to_log(".nh_cs.start.log")
82
+ out = redirect_output_to_log("nh_cs.start.log")
83
83
 
84
84
  subprocess.Popen(
85
85
  [sys.executable, "-m", "egse.notifyhub.server", "start"],
@@ -15,7 +15,7 @@ from egse.system import waiting_for
15
15
  def stop_rm_cs():
16
16
  rich.print("Terminating the service registry manager core service...")
17
17
 
18
- out = redirect_output_to_log(".rm_cs.stop.log")
18
+ out = redirect_output_to_log("rm_cs.stop.log")
19
19
 
20
20
  subprocess.Popen(
21
21
  [sys.executable, "-m", "egse.registry.server", "stop"],
@@ -35,7 +35,7 @@ def stop_rm_cs():
35
35
  def stop_log_cs():
36
36
  rich.print("Terminating the logging core service...")
37
37
 
38
- out = redirect_output_to_log(".log_cs.stop.log")
38
+ out = redirect_output_to_log("log_cs.stop.log")
39
39
 
40
40
  subprocess.Popen(
41
41
  [sys.executable, "-m", "egse.logger.log_cs", "stop"],
@@ -49,7 +49,7 @@ def stop_log_cs():
49
49
  def stop_sm_cs():
50
50
  rich.print("Terminating the storage manager core service...")
51
51
 
52
- out = redirect_output_to_log(".sm_cs.stop.log")
52
+ out = redirect_output_to_log("sm_cs.stop.log")
53
53
 
54
54
  subprocess.Popen(
55
55
  [sys.executable, "-m", "egse.storage.storage_cs", "stop"],
@@ -69,7 +69,7 @@ def stop_sm_cs():
69
69
  def stop_cm_cs():
70
70
  rich.print("Terminating the configuration manager core service...")
71
71
 
72
- out = redirect_output_to_log(".cm_cs.stop.log")
72
+ out = redirect_output_to_log("cm_cs.stop.log")
73
73
 
74
74
  subprocess.Popen(
75
75
  [sys.executable, "-m", "egse.confman.confman_cs", "stop"],
@@ -89,7 +89,7 @@ def stop_cm_cs():
89
89
  def stop_pm_cs():
90
90
  rich.print("Terminating the process manager core service...")
91
91
 
92
- out = redirect_output_to_log(".pm_cs.stop.log")
92
+ out = redirect_output_to_log("pm_cs.stop.log")
93
93
 
94
94
  subprocess.Popen(
95
95
  [sys.executable, "-m", "egse.procman.procman_cs", "stop"],
@@ -109,7 +109,7 @@ def stop_pm_cs():
109
109
  def stop_notifyhub():
110
110
  rich.print("Terminating the notification hub core service...")
111
111
 
112
- out = redirect_output_to_log(".nh_cs.stop.log")
112
+ out = redirect_output_to_log("nh_cs.stop.log")
113
113
 
114
114
  subprocess.Popen(
115
115
  [sys.executable, "-m", "egse.notifyhub.server", "stop"],
@@ -75,12 +75,6 @@ def stop_core_services():
75
75
  @core.command(name="status")
76
76
  def status_core_services(full: bool = False, suppress_errors: bool = True):
77
77
  """Print the status of the core services."""
78
- # from scripts._status import status_log_cs, status_sm_cs, status_cm_cs
79
-
80
- logging.basicConfig(
81
- level=logging.WARNING,
82
- format="[%(asctime)s] %(threadName)-12s %(levelname)-8s %(name)-20s %(lineno)5d:%(module)-20s %(message)s",
83
- )
84
78
 
85
79
  rich.print("[green]Status of the core services...[/]")
86
80
 
@@ -52,7 +52,7 @@ Process Manager Control Server: # PM_CS
52
52
 
53
53
  Notify Hub:
54
54
 
55
- SERVICE_TYPE: NOTIFY_HUB
55
+ SERVICE_TYPE: NH_CS
56
56
  SERVICE_ID: nh_cs_1
57
57
  PROCESS_NAME: nh_cs
58
58
  COLLECTOR_PORT: 6125
@@ -61,7 +61,7 @@ Notify Hub:
61
61
 
62
62
  Metrics Hub:
63
63
 
64
- SERVICE_TYPE: METRICS_HUB
64
+ SERVICE_TYPE: MH_CS
65
65
  SERVICE_ID: mh_cs_1
66
66
  PROCESS_NAME: mh_cs
67
67
  COLLECTOR_PORT: 6130
@@ -805,91 +805,3 @@ class ControlServer(abc.ABC):
805
805
  the `egse.storage` module might not be available, it is provided by the `cgse-core` package.
806
806
  """
807
807
  pass
808
-
809
- async def notify_listeners(self, event_id: int = 0, context: dict = None):
810
- """
811
- Notifies registered listeners about an event.
812
-
813
- This function creates an Event object with the provided `event_id` and `context`
814
- and notifies all registered listeners with the created event.
815
-
816
- Args:
817
- event_id (int, optional): The identifier for the event. Defaults to 0.
818
- context (dict, optional): Additional context information associated with the event.
819
- Defaults to None.
820
-
821
- Note:
822
- The notification is performed by the `notify_listeners` method of the `listeners` object
823
- associated with this instance.
824
- The notification is executed as a task to avoid blocking the commanding chain.
825
- """
826
- self.logger.info(f"Notifying listeners for {EVENT_ID(event_id).name}")
827
-
828
- # Create a task for notification instead of a daemon thread
829
- event = Event(event_id=event_id, context=context)
830
- asyncio.create_task(self.listeners.notify_listeners_async(event))
831
-
832
- def get_listener_names(self):
833
- return self.listeners.get_listener_names()
834
-
835
- async def register_as_listener(self, proxy: Type, listener: dict):
836
- """
837
- Registers a listener with the specified proxy.
838
-
839
- This function attempts to add the provided listener to the specified proxy.
840
- It employs a retry mechanism to handle potential ConnectionError exceptions.
841
-
842
- Args:
843
- proxy: A callable object representing the proxy to which the listener will be added.
844
- listener (dict): The listener to be registered. Should be a dictionary containing
845
- listener details.
846
-
847
- Raises:
848
- ConnectionError: If the connection to the proxy encounters issues even after
849
- multiple retry attempts.
850
- """
851
-
852
- @retry_with_exponential_backoff(exceptions=[ConnectionError])
853
- async def _add_listener(proxy, listener):
854
- async with proxy() as x, x.get_service_proxy() as srv:
855
- rc = await srv.add_listener_async(listener)
856
- _LOGGER.info(f"Response from {proxy.__name__} service add_listener: {rc}")
857
-
858
- _LOGGER.info(f"Registering {self.__class__.__name__} as a listener to {proxy.__name__}")
859
- await _add_listener(proxy, listener)
860
-
861
- async def unregister_as_listener(self, proxy: Type, listener: dict):
862
- """
863
- Removes a registered listener from the specified proxy.
864
-
865
- This function attempts to remove the provided listener from the specified proxy.
866
- It employs a retry mechanism to handle potential ConnectionError exceptions.
867
-
868
- Args:
869
- proxy: A callable object representing the proxy from which the listener will be removed.
870
- listener (dict): The listener to be removed. Should be a dictionary containing
871
- listener details.
872
-
873
- Raises:
874
- ConnectionError: If the connection to the proxy encounters issues even after
875
- multiple retry attempts.
876
- """
877
-
878
- @retry(times=5, exceptions=[ConnectionError])
879
- async def _remove_listener(proxy, listener):
880
- async with proxy() as x, x.get_service_proxy() as srv:
881
- rc = await srv.remove_listener_async(listener)
882
- _LOGGER.debug(f"Response from remove_listener: {rc=}")
883
-
884
- # Check if the CS is available
885
- try:
886
- async with proxy():
887
- pass
888
- except ConnectionError:
889
- _LOGGER.warning(
890
- f"The {proxy.__class__.__name__} endpoint is not responding, {listener['name']} not un-registered."
891
- )
892
- return
893
-
894
- _LOGGER.info(f"Removing {self.__class__.__name__} as a listener from {proxy.__name__}")
895
- await _remove_listener(proxy, listener)
@@ -138,7 +138,6 @@ from egse.env import get_conf_repo_location
138
138
  from egse.env import get_project_name
139
139
  from egse.env import get_site_id
140
140
  from egse.exceptions import InternalError
141
- from egse.listener import EVENT_ID
142
141
  from egse.log import logger
143
142
  from egse.notifyhub.event import NotificationEvent
144
143
  from egse.notifyhub.services import EventPublisher
@@ -552,10 +551,6 @@ class ConfigurationManagerInterface:
552
551
  def get_setup_for_obsid(self, obsid):
553
552
  raise NotImplementedError
554
553
 
555
- @dynamic_interface
556
- def get_listener_names(self):
557
- raise NotImplementedError
558
-
559
554
 
560
555
  class ConfigurationManagerController(ConfigurationManagerInterface):
561
556
  """Handles the commands that are sent to the configuration manager.
@@ -763,12 +758,6 @@ class ConfigurationManagerController(ConfigurationManagerInterface):
763
758
  self._sut_name = _get_sut_id_for_setup(self._setup)
764
759
  logger.info(f"New Setup loaded from {setup_file}")
765
760
  save_last_setup_id(self._setup_id)
766
- if self._control_server:
767
- logger.info("Notifying listeners for a new Setup!")
768
- with Timer(f"Notify Listeners for Setup change, Setup={self._setup_id}"):
769
- self._control_server.notify_listeners(
770
- EVENT_ID.SETUP, {"event_type": "new_setup", "setup_id": self._setup_id}
771
- )
772
761
 
773
762
  with EventPublisher() as pub:
774
763
  pub.publish(
@@ -952,12 +941,6 @@ class ConfigurationManagerController(ConfigurationManagerInterface):
952
941
  logger.info(f"New Setup was submitted and loaded: {setup_id=}")
953
942
  self._sut_name = self._setup.camera.ID.lower()
954
943
  save_last_setup_id(setup_id)
955
- if self._control_server:
956
- logger.info("Notifying listeners for a new Setup!")
957
- with Timer(f"Notify Listeners for Setup change, Setup={self._setup_id}"):
958
- self._control_server.notify_listeners(
959
- EVENT_ID.SETUP, {"event_type": "new_setup", "setup_id": setup_id}
960
- )
961
944
 
962
945
  with EventPublisher() as pub:
963
946
  pub.publish(
@@ -980,10 +963,6 @@ class ConfigurationManagerController(ConfigurationManagerInterface):
980
963
 
981
964
  return int(setup_id) + 1
982
965
 
983
- def get_listener_names(self):
984
- """Returns the names of the control servers that are listening for a new Setup."""
985
- return self._control_server.get_listener_names()
986
-
987
966
 
988
967
  class ConfigurationManagerCommand(ClientServerCommand):
989
968
  pass
@@ -1119,7 +1098,6 @@ def get_status():
1119
1098
  Monitoring port: {cm.get_monitoring_port()}
1120
1099
  Commanding port: {cm.get_commanding_port()}
1121
1100
  Service port: {cm.get_service_port()}
1122
- Listeners: {", ".join(cm.get_listener_names())}
1123
1101
  """
1124
1102
  )
1125
1103
  except ConnectionError as exc:
@@ -62,9 +62,6 @@ Commands:
62
62
  description: Submit a (new) Setup to the configuration manager. The Setup will be
63
63
  assigned a unique identifier and committed to the git repository.
64
64
  cmd: "{setup} {description} {replace}"
65
-
66
- get_listener_names:
67
- description: Returns a list of names of listeners that need to be notified when a new Setup is loaded.
68
65
 
69
66
  # Commands that are mainly used by the ProcessManager
70
67
 
@@ -0,0 +1,55 @@
1
+ from egse.env import bool_env
2
+ from egse.log import logging
3
+ from egse.zmq_ser import connect_address
4
+
5
+ logger = logging.getLogger("egse.connect")
6
+
7
+ # random.seed(time.monotonic()) # uncomment for testing only, main application should set a seed.
8
+
9
+ VERBOSE_DEBUG = bool_env("VERBOSE_DEBUG")
10
+
11
+
12
+ def get_endpoint(
13
+ service_type: str,
14
+ protocol: str = None,
15
+ hostname: str = None,
16
+ port: int = 0,
17
+ ):
18
+ """
19
+ Returns the endpoint for a service, either from the registry or by constructing
20
+ it from protocol, hostname and port.
21
+
22
+ If port is 0 (the default), attempt to retrieve the endpoint from the service registry.
23
+
24
+ Args:
25
+ service_type: The service type to look up in the registry.
26
+ protocol: Protocol to use if constructing the endpoint.
27
+ hostname: Hostname to use if constructing the endpoint.
28
+ port: Port to use if constructing the endpoint.
29
+
30
+ Returns:
31
+ The endpoint string.
32
+
33
+ Raises:
34
+ RuntimeError: If no endpoint can be determined.
35
+ """
36
+ endpoint = None
37
+ from egse.registry.client import RegistryClient
38
+
39
+ if port == 0:
40
+ with RegistryClient() as reg:
41
+ endpoint = reg.get_endpoint(service_type)
42
+ if endpoint:
43
+ if VERBOSE_DEBUG:
44
+ logger.debug(f"Endpoint for {service_type} found in registry: {endpoint}")
45
+ else:
46
+ logger.warning(f"No endpoint for {service_type} found in registry.")
47
+
48
+ if not endpoint:
49
+ if port == 0:
50
+ raise RuntimeError(f"No service registered as {service_type} and no port provided.")
51
+ endpoint = connect_address(protocol, hostname, port)
52
+ if VERBOSE_DEBUG:
53
+ logger.debug(f"Endpoint constructed from protocol/hostname/port: {endpoint}")
54
+
55
+ return endpoint
@@ -634,6 +634,7 @@ class ControlServer(metaclass=abc.ABCMeta):
634
634
  # FIXME: not sure if the stop heartbeat is necessary here, but I see that after
635
635
  # a re-registration signal, the heartbeat socket is None.
636
636
  # self.registry.stop_heartbeat()
637
+
637
638
  self.register_service(self.service_type)
638
639
 
639
640
  def register_service(self, service_type: str):
@@ -748,127 +749,3 @@ class ControlServer(metaclass=abc.ABCMeta):
748
749
  """
749
750
 
750
751
  pass
751
-
752
- def notify_listeners(self, event_id: int = 0, context: dict = None):
753
- """
754
- Notifies registered listeners about an event.
755
-
756
- This function creates an Event object with the provided `event_id` and `context`
757
- and notifies all registered listeners with the created event.
758
-
759
- Args:
760
- event_id (int, optional): The identifier for the event. Defaults to 0.
761
- context (dict, optional): Additional context information associated with the event.
762
- Defaults to None.
763
-
764
- Note:
765
- The notification is performed by the `notify_listeners` method of the `listeners` object
766
- associated with this instance.
767
- The notification is executed in a daemon thread to avoid blocking the commanding
768
- chain.
769
-
770
- """
771
- from egse.listener import Event, EVENT_ID
772
-
773
- self.logger.info(f"Notifying listeners for {EVENT_ID(event_id).name}")
774
-
775
- retry_thread = threading.Thread(
776
- target=self.listeners.notify_listeners, args=(Event(event_id=event_id, context=context),)
777
- )
778
- retry_thread.daemon = True
779
- retry_thread.start()
780
-
781
- def get_listener_names(self):
782
- return self.listeners.get_listener_names()
783
-
784
- def register_as_listener(self, proxy: Type, listener: dict):
785
- """
786
- Registers a listener with the specified proxy.
787
-
788
- This function attempts to add the provided listener to the specified proxy.
789
- It employs a retry mechanism to handle potential ConnectionError exceptions,
790
- making up to 5 attempts to add the listener.
791
-
792
- Args:
793
- proxy: A callable object representing the proxy to which the listener will be added.
794
- listener (dict): The listener to be registered. Should be a dictionary containing
795
- listener details.
796
-
797
- Raises:
798
- ConnectionError: If the connection to the proxy encounters issues even after
799
- multiple retry attempts.
800
-
801
- Note:
802
- The function runs in a separate daemon thread to avoid blocking the main thread.
803
-
804
- """
805
-
806
- @retry_with_exponential_backoff(exceptions=[ConnectionError])
807
- def _add_listener(proxy, listener):
808
- try:
809
- with proxy() as x, x.get_service_proxy() as srv:
810
- response = srv.add_listener(listener)
811
- logger.info(f"Response from {proxy.__name__} service add_listener: {response}")
812
- except Exception as exc:
813
- logger.error(f"Caught {type_name(exc)}: {exc} – listener '{listener['name']}' could not be registered")
814
-
815
- logger.info(f"Registering {self.__class__.__name__} as a listener to {proxy.__name__}")
816
-
817
- retry_thread = threading.Thread(target=_add_listener, args=(proxy, listener))
818
- retry_thread.daemon = True
819
- retry_thread.start()
820
-
821
- def unregister_as_listener(self, proxy: Type, listener: dict):
822
- """
823
- Removes a registered listener from the specified proxy.
824
-
825
- This function attempts to remove the provided listener from the specified proxy.
826
- It employs a retry mechanism to handle potential ConnectionError exceptions,
827
- making up to 5 attempts to add the listener.
828
-
829
- Args:
830
- proxy: A callable object representing the proxy from which the listener will be removed.
831
- listener (dict): The listener to be removed. Should be a dictionary containing
832
- listener details.
833
-
834
- Raises:
835
- ConnectionError: If the connection to the proxy encounters issues even after
836
- multiple retry attempts.
837
-
838
- Note:
839
- The function runs in a separate thread but will block until the de-registration is finished.
840
- The reason being that this method is usually called in a `after_serve` block so it needs to
841
- finish before the ZeroMQ context is destroyed.
842
-
843
- """
844
-
845
- @retry(times=5, exceptions=[ConnectionError])
846
- def _remove_listener(proxy, listener):
847
- with proxy() as x, x.get_service_proxy() as srv:
848
- rc = srv.remove_listener(listener)
849
- logger.debug(f"Response from remove_listener: {rc=}")
850
-
851
- # Since we do not have the endpoint available, we can not check if the CS is active, and to get the endpoint
852
- # we have to use the proxy anyway. So, let's use the proxy object to check if the CS is available.
853
-
854
- try:
855
- with proxy():
856
- pass
857
- except ConnectionError:
858
- logger.warning(
859
- f"The {proxy.__class__.__name__} endpoint is not responding, {listener['name']} not un-registered."
860
- )
861
- return
862
-
863
- logger.info(f"Removing {self.__class__.__name__} as a listener from {proxy.__name__}")
864
-
865
- retry_thread = threading.Thread(target=_remove_listener, args=(proxy, listener))
866
- retry_thread.daemon = False
867
- retry_thread.start()
868
-
869
- # Block until the listener has been removed. This is needed because this unregister function will usually
870
- # be called in the `after_server()` method of the control server (which is the listener) and if we do not
871
- # wait until the thread is finished the ZeroMQ Context will be destroyed before the reply can be sent.
872
- # Note: we could probably do without the thread, and directly call the `_remove_listener()` function.
873
-
874
- retry_thread.join()