cgse 0.16.8__tar.gz → 0.16.10__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.8 → cgse-0.16.10}/PKG-INFO +1 -1
  2. {cgse-0.16.8 → cgse-0.16.10}/docs/libs/cgse-common/settings.md +4 -4
  3. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/pyproject.toml +1 -1
  4. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-coordinates/pyproject.toml +1 -1
  5. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/pyproject.toml +1 -1
  6. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/cgse_core/settings.yaml +2 -2
  7. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/logger/__init__.py +2 -1
  8. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/logger/log_cs.py +2 -2
  9. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/registry/client.py +20 -130
  10. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/registry/server.py +27 -20
  11. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/storage/storage_cs.py +2 -7
  12. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/tests/script_test_registry_client_server.py +3 -9
  13. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/tests/test_registry_service.py +0 -67
  14. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/pyproject.toml +1 -1
  15. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/cgse-tools/pyproject.toml +1 -1
  16. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/keithley-tempcontrol/pyproject.toml +1 -1
  17. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/lakeshore-tempcontrol/pyproject.toml +1 -1
  18. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/symetrie-hexapod/pyproject.toml +1 -1
  19. {cgse-0.16.8 → cgse-0.16.10}/projects/plato/plato-fits/pyproject.toml +1 -1
  20. {cgse-0.16.8 → cgse-0.16.10}/projects/plato/plato-hdf5/pyproject.toml +1 -1
  21. {cgse-0.16.8 → cgse-0.16.10}/projects/plato/plato-spw/pyproject.toml +1 -1
  22. {cgse-0.16.8 → cgse-0.16.10}/pyproject.toml +1 -1
  23. {cgse-0.16.8 → cgse-0.16.10}/service_registry.db +0 -0
  24. cgse-0.16.8/service_registry.db-shm +0 -0
  25. cgse-0.16.8/service_registry.db-wal +0 -0
  26. {cgse-0.16.8 → cgse-0.16.10}/.github/workflows/ruff-format-check.yaml +0 -0
  27. {cgse-0.16.8 → cgse-0.16.10}/.gitignore +0 -0
  28. {cgse-0.16.8 → cgse-0.16.10}/README.md +0 -0
  29. {cgse-0.16.8 → cgse-0.16.10}/buffer_vat.log +0 -0
  30. {cgse-0.16.8 → cgse-0.16.10}/buffer_vat.png +0 -0
  31. {cgse-0.16.8 → cgse-0.16.10}/bump.py +0 -0
  32. {cgse-0.16.8 → cgse-0.16.10}/conftest.py +0 -0
  33. {cgse-0.16.8 → cgse-0.16.10}/docs/api/bits.md +0 -0
  34. {cgse-0.16.8 → cgse-0.16.10}/docs/api/calibration.md +0 -0
  35. {cgse-0.16.8 → cgse-0.16.10}/docs/api/command.md +0 -0
  36. {cgse-0.16.8 → cgse-0.16.10}/docs/api/config.md +0 -0
  37. {cgse-0.16.8 → cgse-0.16.10}/docs/api/control.md +0 -0
  38. {cgse-0.16.8 → cgse-0.16.10}/docs/api/counter.md +0 -0
  39. {cgse-0.16.8 → cgse-0.16.10}/docs/api/decorators.md +0 -0
  40. {cgse-0.16.8 → cgse-0.16.10}/docs/api/device.md +0 -0
  41. {cgse-0.16.8 → cgse-0.16.10}/docs/api/dicts.md +0 -0
  42. {cgse-0.16.8 → cgse-0.16.10}/docs/api/dummy.md +0 -0
  43. {cgse-0.16.8 → cgse-0.16.10}/docs/api/env.md +0 -0
  44. {cgse-0.16.8 → cgse-0.16.10}/docs/api/exceptions.md +0 -0
  45. {cgse-0.16.8 → cgse-0.16.10}/docs/api/heartbeat.md +0 -0
  46. {cgse-0.16.8 → cgse-0.16.10}/docs/api/hk.md +0 -0
  47. {cgse-0.16.8 → cgse-0.16.10}/docs/api/index.md +0 -0
  48. {cgse-0.16.8 → cgse-0.16.10}/docs/api/listener.md +0 -0
  49. {cgse-0.16.8 → cgse-0.16.10}/docs/api/metrics.md +0 -0
  50. {cgse-0.16.8 → cgse-0.16.10}/docs/api/mixin.md +0 -0
  51. {cgse-0.16.8 → cgse-0.16.10}/docs/api/monitoring.md +0 -0
  52. {cgse-0.16.8 → cgse-0.16.10}/docs/api/observer.md +0 -0
  53. {cgse-0.16.8 → cgse-0.16.10}/docs/api/obsid.md +0 -0
  54. {cgse-0.16.8 → cgse-0.16.10}/docs/api/persistence.md +0 -0
  55. {cgse-0.16.8 → cgse-0.16.10}/docs/api/plugin.md +0 -0
  56. {cgse-0.16.8 → cgse-0.16.10}/docs/api/process.md +0 -0
  57. {cgse-0.16.8 → cgse-0.16.10}/docs/api/reload.md +0 -0
  58. {cgse-0.16.8 → cgse-0.16.10}/docs/api/settings.md +0 -0
  59. {cgse-0.16.8 → cgse-0.16.10}/docs/api/setup.md +0 -0
  60. {cgse-0.16.8 → cgse-0.16.10}/docs/api/system.md +0 -0
  61. {cgse-0.16.8 → cgse-0.16.10}/docs/custom_theme/main.html +0 -0
  62. {cgse-0.16.8 → cgse-0.16.10}/docs/dev_guide/coding_style.md +0 -0
  63. {cgse-0.16.8 → cgse-0.16.10}/docs/dev_guide/docs.md +0 -0
  64. {cgse-0.16.8 → cgse-0.16.10}/docs/dev_guide/index.md +0 -0
  65. {cgse-0.16.8 → cgse-0.16.10}/docs/dev_guide/installation.md +0 -0
  66. {cgse-0.16.8 → cgse-0.16.10}/docs/dev_guide/monitoring.md +0 -0
  67. {cgse-0.16.8 → cgse-0.16.10}/docs/dev_guide/monorepo.md +0 -0
  68. {cgse-0.16.8 → cgse-0.16.10}/docs/dev_guide/nox.md +0 -0
  69. {cgse-0.16.8 → cgse-0.16.10}/docs/dev_guide/plugins.md +0 -0
  70. {cgse-0.16.8 → cgse-0.16.10}/docs/dev_guide/project-configuration.md +0 -0
  71. {cgse-0.16.8 → cgse-0.16.10}/docs/dev_guide/unit_testing.md +0 -0
  72. {cgse-0.16.8 → cgse-0.16.10}/docs/dev_guide/uv.md +0 -0
  73. {cgse-0.16.8 → cgse-0.16.10}/docs/dev_guide/versioning.md +0 -0
  74. {cgse-0.16.8 → cgse-0.16.10}/docs/getting_started.md +0 -0
  75. {cgse-0.16.8 → cgse-0.16.10}/docs/help.md +0 -0
  76. {cgse-0.16.8 → cgse-0.16.10}/docs/images/cli-cgse.png +0 -0
  77. {cgse-0.16.8 → cgse-0.16.10}/docs/images/github-fork-clone-dark.png +0 -0
  78. {cgse-0.16.8 → cgse-0.16.10}/docs/images/github-fork-clone.png +0 -0
  79. {cgse-0.16.8 → cgse-0.16.10}/docs/images/grafana-queries.png +0 -0
  80. {cgse-0.16.8 → cgse-0.16.10}/docs/images/icons/cgse-logo-blue.svg +0 -0
  81. {cgse-0.16.8 → cgse-0.16.10}/docs/images/icons/cgse-logo.svg +0 -0
  82. {cgse-0.16.8 → cgse-0.16.10}/docs/index.md +0 -0
  83. {cgse-0.16.8 → cgse-0.16.10}/docs/initialize.md +0 -0
  84. {cgse-0.16.8 → cgse-0.16.10}/docs/libs/cgse-common/images/load_methods.png +0 -0
  85. {cgse-0.16.8 → cgse-0.16.10}/docs/libs/cgse-common/index.md +0 -0
  86. {cgse-0.16.8 → cgse-0.16.10}/docs/libs/cgse-common/setup.md +0 -0
  87. {cgse-0.16.8 → cgse-0.16.10}/docs/libs/cgse-coordinates/index.md +0 -0
  88. {cgse-0.16.8 → cgse-0.16.10}/docs/libs/cgse-core/index.md +0 -0
  89. {cgse-0.16.8 → cgse-0.16.10}/docs/libs/cgse-core/notifyhub.md +0 -0
  90. {cgse-0.16.8 → cgse-0.16.10}/docs/libs/cgse-core/registry.md +0 -0
  91. {cgse-0.16.8 → cgse-0.16.10}/docs/libs/cgse-gui/index.md +0 -0
  92. {cgse-0.16.8 → cgse-0.16.10}/docs/libs/index.md +0 -0
  93. {cgse-0.16.8 → cgse-0.16.10}/docs/package_list.md +0 -0
  94. {cgse-0.16.8 → cgse-0.16.10}/docs/projects/cgse-tools.md +0 -0
  95. {cgse-0.16.8 → cgse-0.16.10}/docs/projects/index.md +0 -0
  96. {cgse-0.16.8 → cgse-0.16.10}/docs/projects/symetrie-hexapod.md +0 -0
  97. {cgse-0.16.8 → cgse-0.16.10}/docs/roadmap.md +0 -0
  98. {cgse-0.16.8 → cgse-0.16.10}/docs/stylesheets/custom.css +0 -0
  99. {cgse-0.16.8 → cgse-0.16.10}/docs/stylesheets/extra.css +0 -0
  100. {cgse-0.16.8 → cgse-0.16.10}/docs/tutorial.md +0 -0
  101. {cgse-0.16.8 → cgse-0.16.10}/docs/user_guide/cli.md +0 -0
  102. {cgse-0.16.8 → cgse-0.16.10}/docs/user_guide/index.md +0 -0
  103. {cgse-0.16.8 → cgse-0.16.10}/duckdb_metrics.db +0 -0
  104. {cgse-0.16.8 → cgse-0.16.10}/duckdb_metrics.db.wal +0 -0
  105. {cgse-0.16.8 → cgse-0.16.10}/identifier.sqlite +0 -0
  106. {cgse-0.16.8 → cgse-0.16.10}/justfile +0 -0
  107. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/README.md +0 -0
  108. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/justfile +0 -0
  109. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/noxfile.py +0 -0
  110. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/service_registry.db +0 -0
  111. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/cgse_common/__init__.py +0 -0
  112. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/cgse_common/cgse.py +0 -0
  113. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/cgse_common/settings.yaml +0 -0
  114. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/egse/bits.py +0 -0
  115. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/egse/calibration.py +0 -0
  116. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/egse/config.py +0 -0
  117. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/egse/counter.py +0 -0
  118. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/egse/decorators.py +0 -0
  119. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/egse/device.py +0 -0
  120. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/egse/dicts.py +0 -0
  121. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/egse/env.py +0 -0
  122. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/egse/exceptions.py +0 -0
  123. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/egse/heartbeat.py +0 -0
  124. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/egse/hk.py +0 -0
  125. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/egse/log.py +0 -0
  126. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/egse/metrics.py +0 -0
  127. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/egse/observer.py +0 -0
  128. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/egse/obsid.py +0 -0
  129. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/egse/persistence.py +0 -0
  130. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/egse/plugin.py +0 -0
  131. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/egse/plugins/metrics/duckdb.py +0 -0
  132. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/egse/plugins/metrics/influxdb.py +0 -0
  133. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/egse/plugins/metrics/timescaledb.py +0 -0
  134. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/egse/process.py +0 -0
  135. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/egse/py.typed +0 -0
  136. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/egse/randomwalk.py +0 -0
  137. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/egse/ratelimit.py +0 -0
  138. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/egse/reload.py +0 -0
  139. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/egse/resource.py +0 -0
  140. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/egse/response.py +0 -0
  141. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/egse/scpi.py +0 -0
  142. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/egse/settings.py +0 -0
  143. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/egse/settings.yaml +0 -0
  144. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/egse/setup.py +0 -0
  145. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/egse/signal.py +0 -0
  146. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/egse/socketdevice.py +0 -0
  147. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/egse/state.py +0 -0
  148. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/egse/system.py +0 -0
  149. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/egse/task.py +0 -0
  150. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/egse/version.py +0 -0
  151. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/src/egse/zmq_ser.py +0 -0
  152. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/conftest.py +0 -0
  153. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/data/COPYING +0 -0
  154. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00028_201028_155259.yaml +0 -0
  155. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00029_201028_155331.yaml +0 -0
  156. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00030_210311_134043.yaml +0 -0
  157. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00080_210917_105245.yaml +0 -0
  158. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00081_210922_142259.yaml +0 -0
  159. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00082_210923_094458.yaml +0 -0
  160. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/data/CSL1/README.md +0 -0
  161. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/data/CSL2/README.md +0 -0
  162. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/data/IAS/README.md +0 -0
  163. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/data/INTA/README.md +0 -0
  164. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/data/LAB23/README.md +0 -0
  165. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00027_211119_140441.yaml +0 -0
  166. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00028_211119_160406.yaml +0 -0
  167. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00029_211119_172918.yaml +0 -0
  168. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00030_211122_103604.yaml +0 -0
  169. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00031_211123_124900.yaml +0 -0
  170. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/data/common/telemetry/tm-dictionary-default.csv +0 -0
  171. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/data/conf/SETUP_20250114_1519.yaml +0 -0
  172. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/data/conf/config-file.toml +0 -0
  173. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/data/data/cal_coeff_1234.csv +0 -0
  174. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/data/data/calibration.csv +0 -0
  175. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/data/data/calibration.yaml +0 -0
  176. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/data/data/command.yaml +0 -0
  177. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/data/data/corrupt.yaml +0 -0
  178. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/data/data/data-file.txt +0 -0
  179. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/data/data/empty_data_file.txt +0 -0
  180. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/data/data/empty_yaml_file.yaml +0 -0
  181. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/data/data/local_settings.yaml +0 -0
  182. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/data/data/new_local_settings.yaml +0 -0
  183. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/data/data/test_setup.yaml +0 -0
  184. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/data/icons/hourglass.svg +0 -0
  185. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/data/icons/keyboard.png +0 -0
  186. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/data/icons/soap_sponge.svg +0 -0
  187. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/data/lib/dev1/shared-lib.so +0 -0
  188. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/data/lib/dev2/shared-lib.so +0 -0
  189. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/fixtures/default_env.py +0 -0
  190. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/fixtures/helpers.py +0 -0
  191. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/scripts/empty_process.py +0 -0
  192. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/scripts/handle_sigterm.py +0 -0
  193. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/scripts/process_with_children.py +0 -0
  194. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/scripts/raise_value_error.py +0 -0
  195. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/scripts/void-0.py +0 -0
  196. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/scripts/void-1.py +0 -0
  197. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/test_bits.py +0 -0
  198. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/test_config.py +0 -0
  199. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/test_decorators.py +0 -0
  200. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/test_device.py +0 -0
  201. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/test_env.py +0 -0
  202. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/test_fixtures.py +0 -0
  203. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/test_hk.py +0 -0
  204. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/test_influxdb_plugin.py +0 -0
  205. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/test_log.py +0 -0
  206. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/test_metrics.py +0 -0
  207. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/test_plugin.py +0 -0
  208. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/test_process.py +0 -0
  209. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/test_ratelimit.py +0 -0
  210. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/test_resource.py +0 -0
  211. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/test_response.py +0 -0
  212. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/test_settings.py +0 -0
  213. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/test_setup.py +0 -0
  214. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/test_signal.py +0 -0
  215. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/test_state.py +0 -0
  216. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/test_system.py +0 -0
  217. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/test_task.py +0 -0
  218. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-common/tests/test_zmq_ser.py +0 -0
  219. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-coordinates/README.md +0 -0
  220. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-coordinates/src/cgse_coordinates/__init__.py +0 -0
  221. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-coordinates/src/cgse_coordinates/settings.yaml +0 -0
  222. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-coordinates/src/egse/coordinates/__init__.py +0 -0
  223. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-coordinates/src/egse/coordinates/avoidance.py +0 -0
  224. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-coordinates/src/egse/coordinates/cslmodel.py +0 -0
  225. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-coordinates/src/egse/coordinates/laser_tracker_to_dict.py +0 -0
  226. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-coordinates/src/egse/coordinates/point.py +0 -0
  227. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-coordinates/src/egse/coordinates/pyplot.py +0 -0
  228. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-coordinates/src/egse/coordinates/referenceFrame.py +0 -0
  229. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-coordinates/src/egse/coordinates/refmodel.py +0 -0
  230. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-coordinates/src/egse/coordinates/rotationMatrix.py +0 -0
  231. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-coordinates/src/egse/coordinates/transform3d_addon.py +0 -0
  232. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-coordinates/tests/test_avoidance.py +0 -0
  233. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-coordinates/tests/test_coordinates_plot.py +0 -0
  234. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-coordinates/tests/test_coordinates_serialize.py +0 -0
  235. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-coordinates/tests/test_point.py +0 -0
  236. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-coordinates/tests/test_ref_model.py +0 -0
  237. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-coordinates/tests/test_reference_frames.py +0 -0
  238. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-coordinates/tests/test_refmodel.py +0 -0
  239. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/.envrc.disabled +0 -0
  240. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/README.md +0 -0
  241. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/service_registry.db +0 -0
  242. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/cgse_core/__init__.py +0 -0
  243. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/cgse_core/_start.py +0 -0
  244. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/cgse_core/_status.py +0 -0
  245. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/cgse_core/_stop.py +0 -0
  246. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/cgse_core/cgse_explore.py +0 -0
  247. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/cgse_core/services.py +0 -0
  248. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/_setup_core.py +0 -0
  249. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/async_control.py +0 -0
  250. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/async_control_claude.py +0 -0
  251. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/command.py +0 -0
  252. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/confman/__init__.py +0 -0
  253. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/confman/__main__.py +0 -0
  254. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/confman/confman.yaml +0 -0
  255. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/confman/confman_cs.py +0 -0
  256. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/connect-todo.py +0 -0
  257. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/connect.py +0 -0
  258. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/control.py +0 -0
  259. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/dummy.py +0 -0
  260. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/icons/busy.svg +0 -0
  261. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/icons/operational-mode.svg +0 -0
  262. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/icons/pm_ui.svg +0 -0
  263. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/icons/simulator-mode.svg +0 -0
  264. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/icons/start-process-button.svg +0 -0
  265. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/icons/stop-process-button.svg +0 -0
  266. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/icons/user-interface.svg +0 -0
  267. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/listener.py +0 -0
  268. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/logger/__main__.py +0 -0
  269. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/metricshub/__init__.py +0 -0
  270. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/metricshub/server.py +0 -0
  271. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/mixin.py +0 -0
  272. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/monitoring.py +0 -0
  273. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/notifyhub/__init__.py +0 -0
  274. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/notifyhub/client.py +0 -0
  275. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/notifyhub/event.py +0 -0
  276. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/notifyhub/server.py +0 -0
  277. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/notifyhub/services.py +0 -0
  278. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/notifyhub/test.py +0 -0
  279. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/procman/__init__.py +0 -0
  280. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/procman/procman.yaml +0 -0
  281. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/procman/procman_cs.py +0 -0
  282. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/procman/procman_protocol.py +0 -0
  283. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/procman/procman_ui.py +0 -0
  284. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/protocol.py +0 -0
  285. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/proxy.py +0 -0
  286. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/registry/__init__.py +0 -0
  287. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/registry/backend.py +0 -0
  288. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/registry/service.py +0 -0
  289. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/services.py +0 -0
  290. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/services.yaml +0 -0
  291. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/storage/__init__.py +0 -0
  292. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/storage/__main__.py +0 -0
  293. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/storage/persistence.py +0 -0
  294. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/src/egse/storage/storage.yaml +0 -0
  295. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/tests/conftest.py +0 -0
  296. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/tests/data/local_settings.yaml +0 -0
  297. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/tests/fixtures/default_env.py +0 -0
  298. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/tests/fixtures/helpers.py +0 -0
  299. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/tests/fixtures/services.py +0 -0
  300. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/tests/script_subscribe_to_notifyhub.py +0 -0
  301. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/tests/script_test_async_registry_client.py +0 -0
  302. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/tests/script_test_service_registry_server.py +0 -0
  303. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/tests/script_test_sync_registry_client.py +0 -0
  304. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/tests/services.py +0 -0
  305. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/tests/stress_test_registry_server.py +0 -0
  306. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/tests/test_async_control.py +0 -0
  307. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/tests/test_client_server_interaction.py +0 -0
  308. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/tests/test_cm_cs.py +0 -0
  309. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/tests/test_command.py +0 -0
  310. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/tests/test_confman_setups.py +0 -0
  311. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/tests/test_connect.py +0 -0
  312. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/tests/test_control.py +0 -0
  313. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/tests/test_dummy.py +0 -0
  314. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/tests/test_event_notification.py +0 -0
  315. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/tests/test_extensions.py +0 -0
  316. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/tests/test_listener.py +0 -0
  317. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/tests/test_logger.py +0 -0
  318. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/tests/test_mixin.py +0 -0
  319. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/tests/test_notify_hub.py +0 -0
  320. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/tests/test_protocol.py +0 -0
  321. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/tests/test_registry_backend.py +0 -0
  322. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/tests/test_server_running.py +0 -0
  323. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/tests/test_server_running_with_fixture.py +0 -0
  324. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/tests/test_settings_core.py +0 -0
  325. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-core/tests/test_zmq_microservice.py +0 -0
  326. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/README.md +0 -0
  327. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/__init__.py +0 -0
  328. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/buttons.py +0 -0
  329. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-start.svg +0 -0
  330. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-stop.svg +0 -0
  331. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/aeu-cs.svg +0 -0
  332. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-started.svg +0 -0
  333. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-stopped.svg +0 -0
  334. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/aeu_cs.svg +0 -0
  335. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/alert.svg +0 -0
  336. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/arrow-double-left.png +0 -0
  337. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/arrow-double-right.png +0 -0
  338. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/arrow-up.svg +0 -0
  339. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/backward.svg +0 -0
  340. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/busy.svg +0 -0
  341. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/cleaning.svg +0 -0
  342. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/color-scheme.svg +0 -0
  343. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/cs-connected-alert.svg +0 -0
  344. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/cs-connected-disabled.svg +0 -0
  345. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/cs-connected.svg +0 -0
  346. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/cs-not-connected.svg +0 -0
  347. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/double-left-arrow.svg +0 -0
  348. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/double-right-arrow.svg +0 -0
  349. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/erase-disabled.svg +0 -0
  350. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/erase.svg +0 -0
  351. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/fitsgen-start.svg +0 -0
  352. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/fitsgen-stop.svg +0 -0
  353. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/fitsgen.svg +0 -0
  354. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/forward.svg +0 -0
  355. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/fov-hk-start.svg +0 -0
  356. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/fov-hk-stop.svg +0 -0
  357. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/fov-hk.svg +0 -0
  358. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/front-desk.svg +0 -0
  359. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/home-actioned.svg +0 -0
  360. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/home-disabled.svg +0 -0
  361. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/home.svg +0 -0
  362. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/info.svg +0 -0
  363. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/invalid.png +0 -0
  364. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/led-green.svg +0 -0
  365. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/led-grey.svg +0 -0
  366. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/led-orange.svg +0 -0
  367. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/led-red.svg +0 -0
  368. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/led-square-green.svg +0 -0
  369. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/led-square-grey.svg +0 -0
  370. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/led-square-orange.svg +0 -0
  371. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/led-square-red.svg +0 -0
  372. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-green.svg +0 -0
  373. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-red.svg +0 -0
  374. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el+.svg +0 -0
  375. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el-.svg +0 -0
  376. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/location-marker.svg +0 -0
  377. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/logo-dpu.svg +0 -0
  378. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/logo-gimbal.svg +0 -0
  379. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/logo-huber.svg +0 -0
  380. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/logo-ogse.svg +0 -0
  381. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/logo-puna.svg +0 -0
  382. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/logo-tcs.svg +0 -0
  383. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/logo-zonda.svg +0 -0
  384. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/maximize.svg +0 -0
  385. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/meter.svg +0 -0
  386. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/more.svg +0 -0
  387. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-start.svg +0 -0
  388. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-stop.svg +0 -0
  389. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk.svg +0 -0
  390. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/observing-off.svg +0 -0
  391. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/observing-on.svg +0 -0
  392. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.png +0 -0
  393. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.svg +0 -0
  394. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/ops-mode.svg +0 -0
  395. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/play-green.svg +0 -0
  396. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/plugged-disabled.svg +0 -0
  397. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/plugged.svg +0 -0
  398. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/pm_ui.svg +0 -0
  399. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/power-button-green.svg +0 -0
  400. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/power-button-red.svg +0 -0
  401. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/power-button.svg +0 -0
  402. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/radar.svg +0 -0
  403. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/radioactive.svg +0 -0
  404. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/reload.svg +0 -0
  405. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/remote-control-off.svg +0 -0
  406. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/remote-control-on.svg +0 -0
  407. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/repeat-blue.svg +0 -0
  408. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/repeat.svg +0 -0
  409. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/settings.svg +0 -0
  410. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/shrink.svg +0 -0
  411. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/shutter.svg +0 -0
  412. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/sign-off.svg +0 -0
  413. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/sign-on.svg +0 -0
  414. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/sim-mode.svg +0 -0
  415. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/small-buttons-go.svg +0 -0
  416. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/small-buttons-minus.svg +0 -0
  417. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/small-buttons-plus.svg +0 -0
  418. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/sponge.svg +0 -0
  419. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/start-button-disabled.svg +0 -0
  420. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/start-button.svg +0 -0
  421. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/stop-button-disabled.svg +0 -0
  422. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/stop-button.svg +0 -0
  423. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/stop-red.svg +0 -0
  424. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/stop.svg +0 -0
  425. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/switch-disabled-square.svg +0 -0
  426. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/switch-disabled.svg +0 -0
  427. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/switch-off-square.svg +0 -0
  428. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/switch-off.svg +0 -0
  429. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/switch-on-square.svg +0 -0
  430. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/switch-on.svg +0 -0
  431. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/temperature-control.svg +0 -0
  432. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/th_ui_logo.svg +0 -0
  433. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/unplugged.svg +0 -0
  434. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/unvalid.png +0 -0
  435. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/user-interface.svg +0 -0
  436. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/vacuum.svg +0 -0
  437. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/valid.png +0 -0
  438. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-dark.svg +0 -0
  439. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-white.svg +0 -0
  440. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/led.py +0 -0
  441. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/limitswitch.py +0 -0
  442. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/states.py +0 -0
  443. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/styles/dark.qss +0 -0
  444. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/styles/default.qss +0 -0
  445. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/styles.qss +0 -0
  446. {cgse-0.16.8 → cgse-0.16.10}/libs/cgse-gui/src/egse/gui/switch.py +0 -0
  447. {cgse-0.16.8 → cgse-0.16.10}/mkdocs.yml +0 -0
  448. {cgse-0.16.8 → cgse-0.16.10}/noxfile.py +0 -0
  449. {cgse-0.16.8 → cgse-0.16.10}/overrides/.icons/custom/dbend-dark.svg +0 -0
  450. {cgse-0.16.8 → cgse-0.16.10}/overrides/.icons/custom/dbend-light.svg +0 -0
  451. {cgse-0.16.8 → cgse-0.16.10}/overrides/.icons/custom/gear.svg +0 -0
  452. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/cgse-tools/README.md +0 -0
  453. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/cgse-tools/src/cgse_tools/__init__.py +0 -0
  454. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/cgse-tools/src/cgse_tools/cgse_clock.py +0 -0
  455. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/cgse-tools/src/cgse_tools/cgse_commands.py +0 -0
  456. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/cgse-tools/src/cgse_tools/cgse_services.py +0 -0
  457. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/cgse-tools/src/egse/tools/status.py +0 -0
  458. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/keithley-tempcontrol/README.md +0 -0
  459. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/keithley-tempcontrol/justfile +0 -0
  460. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/keithley-tempcontrol/noxfile.py +0 -0
  461. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/keithley-tempcontrol/service_registry.db +0 -0
  462. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/__init__.py +0 -0
  463. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510.py +0 -0
  464. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510.yaml +0 -0
  465. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_acs.py +0 -0
  466. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_adev.py +0 -0
  467. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_cs.py +0 -0
  468. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_dev.py +0 -0
  469. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_mon.py +0 -0
  470. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_protocol.py +0 -0
  471. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_sim.py +0 -0
  472. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/__init__.py +0 -0
  473. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/cgse_explore.py +0 -0
  474. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/cgse_services.py +0 -0
  475. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/settings.yaml +0 -0
  476. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/keithley-tempcontrol/temperature_readings.log +0 -0
  477. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/keithley-tempcontrol/tests/script_daq6510_central_heating.py +0 -0
  478. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/keithley-tempcontrol/tests/script_daq6510_mon.py +0 -0
  479. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/keithley-tempcontrol/tests/script_plot_readings.py +0 -0
  480. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/keithley-tempcontrol/tests/test_adev.py +0 -0
  481. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/keithley-tempcontrol/tests/test_dev.py +0 -0
  482. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/lakeshore-tempcontrol/README.md +0 -0
  483. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336.py +0 -0
  484. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336.yaml +0 -0
  485. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_cs.py +0 -0
  486. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_devif.py +0 -0
  487. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_protocol.py +0 -0
  488. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/__init__.py +0 -0
  489. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/cgse_explore.py +0 -0
  490. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/cgse_services.py +0 -0
  491. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/settings.yaml +0 -0
  492. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/lakeshore-tempcontrol/tests/test_lakeshore336_simulator.py +0 -0
  493. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/symetrie-hexapod/README.md +0 -0
  494. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/symetrie-hexapod/src/egse/hexapod/__init__.py +0 -0
  495. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/__init__.py +0 -0
  496. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/alpha.py +0 -0
  497. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/dynalpha.py +0 -0
  498. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod.py +0 -0
  499. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod_ui.py +0 -0
  500. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.py +0 -0
  501. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.yaml +0 -0
  502. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_cs.py +0 -0
  503. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_protocol.py +0 -0
  504. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_ui.py +0 -0
  505. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac.py +0 -0
  506. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac_regex.py +0 -0
  507. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.py +0 -0
  508. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.yaml +0 -0
  509. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_cs.py +0 -0
  510. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_protocol.py +0 -0
  511. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_sim.py +0 -0
  512. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_ui.py +0 -0
  513. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/punaplus.py +0 -0
  514. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.py +0 -0
  515. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.yaml +0 -0
  516. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_cs.py +0 -0
  517. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_devif.py +0 -0
  518. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_protocol.py +0 -0
  519. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_ui.py +0 -0
  520. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/__init__.py +0 -0
  521. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/cgse_explore.py +0 -0
  522. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/cgse_services.py +0 -0
  523. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/settings.yaml +0 -0
  524. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/symetrie-hexapod/tests/test_puna.py +0 -0
  525. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/symetrie-hexapod/tests/test_puna_cs.py +0 -0
  526. {cgse-0.16.8 → cgse-0.16.10}/projects/generic/symetrie-hexapod/tests/test_puna_simulator.py +0 -0
  527. {cgse-0.16.8 → cgse-0.16.10}/projects/plato/plato-fits/README.md +0 -0
  528. {cgse-0.16.8 → cgse-0.16.10}/projects/plato/plato-fits/src/egse/plugins/storage/fits.py +0 -0
  529. {cgse-0.16.8 → cgse-0.16.10}/projects/plato/plato-hdf5/README.md +0 -0
  530. {cgse-0.16.8 → cgse-0.16.10}/projects/plato/plato-hdf5/src/egse/plugins/storage/hdf5.py +0 -0
  531. {cgse-0.16.8 → cgse-0.16.10}/projects/plato/plato-spw/README.md +0 -0
  532. {cgse-0.16.8 → cgse-0.16.10}/projects/plato/plato-spw/src/egse/spw.py +0 -0
  533. {cgse-0.16.8 → cgse-0.16.10}/ruff.toml +0 -0
  534. {cgse-0.16.8 → cgse-0.16.10}/scratch/advanced-process-monitoring.py +0 -0
  535. {cgse-0.16.8 → cgse-0.16.10}/scratch/live-process-monitoring.py +0 -0
  536. {cgse-0.16.8 → cgse-0.16.10}/scratch/match-case.py +0 -0
  537. {cgse-0.16.8 → cgse-0.16.10}/scratch/processes.json +0 -0
  538. {cgse-0.16.8 → cgse-0.16.10}/scratch/simple-process-monitoring.py +0 -0
  539. {cgse-0.16.8 → cgse-0.16.10}/temperature_readings.log +0 -0
  540. {cgse-0.16.8 → cgse-0.16.10}/test_service_registry.db +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cgse
3
- Version: 0.16.8
3
+ Version: 0.16.10
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>
@@ -39,8 +39,8 @@ Settings
39
39
  │ ├── METRICS_PORT: 7003
40
40
  │ ├── MAX_NR_LOG_FILES: 20
41
41
  │ ├── MAX_SIZE_LOG_FILES: 20
42
- │ ├── TEXTUALOG_IP_ADDRESS: 127.0.0.1
43
- │ └── TEXTUALOG_LISTENING_PORT: 19996
42
+ │ ├── EXTERN_LOG_HOST: 127.0.0.1
43
+ │ └── EXTERN_LOG_PORT: 19996
44
44
  ├── Configuration Manager Control Server
45
45
  │ ├── PROTOCOL: tcp
46
46
  │ ├── HOSTNAME: localhost
@@ -146,8 +146,8 @@ Logging Control Server: # LOG_CS
146
146
  METRICS_PORT: 7003 # The HTTP port where Prometheus will connect to for retrieving metrics
147
147
  MAX_NR_LOG_FILES: 20 # The maximum number of log files that will be maintained in a roll-over
148
148
  MAX_SIZE_LOG_FILES: 20 # The maximum size one log file can become
149
- TEXTUALOG_IP_ADDRESS: 127.0.0.1 # The IP address of the textualog listening server
150
- TEXTUALOG_LISTENING_PORT: 19996 # The port number on which the textualog server is listening
149
+ EXTERN_LOG_HOST: 127.0.0.1 # The IP address of the external logger
150
+ EXTERN_LOG_PORT: 19996 # The port number on which the external logger is listening
151
151
 
152
152
  Configuration Manager Control Server: # CM_CS
153
153
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "cgse-common"
3
- version = "0.16.8"
3
+ version = "0.16.10"
4
4
  description = "Software framework to support hardware testing"
5
5
  authors = [
6
6
  {name = "IvS KU Leuven"}
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "cgse-coordinates"
3
- version = "0.16.8"
3
+ version = "0.16.10"
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.8"
3
+ version = "0.16.10"
4
4
  description = "Core services for the CGSE framework"
5
5
  authors = [
6
6
  {name = "IvS KU Leuven"}
@@ -18,8 +18,8 @@ Logging Control Server: # LOG_CS
18
18
  MAX_SIZE_LOG_FILES: 20 # The maximum size one log file can become
19
19
  RECEIVER_PORT: 6105
20
20
  COMMANDER_PORT: 6106
21
- TEXTUALOG_IP_ADDRESS: 127.0.0.1 # The IP address of the textualog listening server
22
- TEXTUALOG_LISTENING_PORT: 19996 # The port number on which the textualog server is listening
21
+ EXTERN_LOG_HOST: 127.0.0.1 # The IP address of the external logger
22
+ EXTERN_LOG_PORT: 19996 # The port number on which the external logger is listening
23
23
 
24
24
  Configuration Manager Control Server: # CM_CS
25
25
 
@@ -35,6 +35,7 @@ import zmq
35
35
  from egse.log import LOG_FORMAT_FULL
36
36
  from egse.log import PackageFilter
37
37
  from egse.log import egse_logger
38
+ from egse.log import get_log_level_from_env
38
39
  from egse.log import logger
39
40
  from egse.log import root_logger
40
41
  from egse.registry.client import RegistryClient
@@ -201,7 +202,7 @@ def setup_logging():
201
202
 
202
203
  logging.disable(logging.NOTSET)
203
204
  for handler in root_logger.handlers:
204
- handler.setLevel(logging.INFO)
205
+ handler.setLevel(get_log_level_from_env())
205
206
 
206
207
  egse_logger.setLevel(logging.DEBUG)
207
208
 
@@ -144,9 +144,9 @@ def start():
144
144
  stream_handler.setFormatter(stream_formatter)
145
145
  stream_handler.addFilter(PackageFilter())
146
146
 
147
- # Log records are also sent to the textualog listening server
147
+ # Log records are also sent to the external logger
148
148
 
149
- socket_handler = SocketHandler(CTRL_SETTINGS.TEXTUALOG_IP_ADDRESS, CTRL_SETTINGS.TEXTUALOG_LISTENING_PORT)
149
+ socket_handler = SocketHandler(CTRL_SETTINGS.EXTERN_LOG_HOST, CTRL_SETTINGS.EXTERN_LOG_PORT)
150
150
  socket_handler.addFilter(PackageFilter())
151
151
  socket_handler.setFormatter(file_formatter)
152
152
 
@@ -114,8 +114,9 @@ class RegistryClient:
114
114
  self.poller.register(self.sub_socket, zmq.POLLIN)
115
115
 
116
116
  def _connect_hb_socket(self):
117
- self.hb_socket = self.context.socket(zmq.REQ)
117
+ self.hb_socket = self.context.socket(zmq.DEALER)
118
118
  self.hb_socket.setsockopt(zmq.LINGER, 0) # Don't wait for unsent messages on close()
119
+ self.hb_socket.setsockopt(zmq.IDENTITY, self._client_id)
119
120
  self.hb_socket.connect(self.registry_hb_endpoint)
120
121
 
121
122
  def disconnect(self):
@@ -214,9 +215,6 @@ class RegistryClient:
214
215
  return response
215
216
  else:
216
217
  self.logger.error(f"Request timed out after {HEART_BEAT_TIMEOUT:.2f}s")
217
- self._disconnect_hb_socket()
218
- time.sleep(HEART_BEAT_RECONNECT)
219
- self._connect_hb_socket()
220
218
  return {"success": False, "error": "Request timed out"}
221
219
 
222
220
  except zmq.ZMQError as exc:
@@ -329,7 +327,7 @@ class RegistryClient:
329
327
  metadata=self._service_info["metadata"],
330
328
  )
331
329
 
332
- def discover_service(self, service_type: str, use_cache: bool = False) -> dict[str, Any] | None:
330
+ def discover_service(self, service_type: str) -> dict[str, Any] | None:
333
331
  """
334
332
  Discover a service of the specified type. The service is guaranteed to be healthy at the time of discovery.
335
333
 
@@ -341,15 +339,10 @@ class RegistryClient:
341
339
 
342
340
  Args:
343
341
  service_type: Type of service to discover
344
- use_cache: Whether to use cached service information
345
342
 
346
343
  Returns:
347
344
  Service information if found, None otherwise
348
345
  """
349
- # Try to use cache first if enabled
350
- if use_cache:
351
- self.logger.info("Cache not yet implemented.")
352
-
353
346
  request = {"action": "discover", "service_type": service_type}
354
347
 
355
348
  response = self._send_request(MessageType.REQUEST_WITH_REPLY, request)
@@ -363,14 +356,13 @@ class RegistryClient:
363
356
  self.logger.warning(f"Service discovery failed: {response.get('error')}")
364
357
  return None
365
358
 
366
- def get_service(self, service_id: str | None = None, use_cache: bool = True) -> dict[str, Any] | None:
359
+ def get_service(self, service_id: str | None = None) -> dict[str, Any] | None:
367
360
  """
368
361
  Get information about a specific service. When no service_id is given,
369
362
  the service_id known to this client will be used.
370
363
 
371
364
  Args:
372
365
  service_id: ID of the service to get [default=None]
373
- use_cache: Whether to use cached service information
374
366
 
375
367
  Returns:
376
368
  Service information if found, None otherwise.
@@ -479,14 +471,14 @@ class RegistryClient:
479
471
 
480
472
  # Do a health check
481
473
  if not self.health_check():
482
- self.logger.warning("ServiceRegistry not responding.")
474
+ self.logger.warning("Heartbeat failed: ServiceRegistry not responding.")
483
475
  return
484
476
  else:
485
- self.logger.info("Health check succeeded, reregistering...")
477
+ self.logger.info("Heartbeat failed, but health check succeeded, reregistering...")
486
478
  self.reregister()
487
479
 
488
480
  else:
489
- self.logger.debug(response.get("message"))
481
+ self.logger.debug(f"Heartbeat succeeded: {response.get('message')}")
490
482
 
491
483
  except Exception as exc:
492
484
  self.logger.error(f"Error sending heartbeat: {exc}")
@@ -582,10 +574,6 @@ class AsyncRegistryClient:
582
574
 
583
575
  self._event_handlers = {}
584
576
 
585
- # Service cache (for discovery)
586
- self._service_cache = {}
587
- self._service_cache_lock = None
588
-
589
577
  self.req_socket: zmq.asyncio.Socket | None = None
590
578
  self.sub_socket: zmq.asyncio.Socket | None = None
591
579
  self.hb_socket: zmq.asyncio.Socket | None = None
@@ -613,8 +601,9 @@ class AsyncRegistryClient:
613
601
  self.sub_socket.setsockopt_string(zmq.SUBSCRIBE, "")
614
602
 
615
603
  def _connect_hb_socket(self):
616
- self.hb_socket = self.context.socket(zmq.REQ)
604
+ self.hb_socket = self.context.socket(zmq.DEALER)
617
605
  self.hb_socket.setsockopt(zmq.LINGER, 0) # Don't wait for unsent messages on close()
606
+ self.hb_socket.setsockopt(zmq.IDENTITY, self._client_id)
618
607
  self.hb_socket.connect(self.registry_hb_endpoint)
619
608
 
620
609
  def disconnect(self):
@@ -634,11 +623,6 @@ class AsyncRegistryClient:
634
623
  self.hb_socket.close()
635
624
  self.hb_socket = None
636
625
 
637
- def _get_service_cache_lock(self):
638
- if self._service_cache_lock is None:
639
- self._service_cache_lock = asyncio.Lock()
640
- return self._service_cache_lock
641
-
642
626
  async def _send_request(
643
627
  self, msg_type: MessageType, request: dict[str, Any], timeout: float = None
644
628
  ) -> dict[str, Any]:
@@ -713,11 +697,8 @@ class AsyncRegistryClient:
713
697
  return response
714
698
  except asyncio.TimeoutError:
715
699
  self.logger.error(f"Heartbeat request timed out after {HEART_BEAT_TIMEOUT:.2f}s")
716
- # Reset the socket to avoid invalid state
717
- self._disconnect_hb_socket()
718
- await asyncio.sleep(HEART_BEAT_RECONNECT)
719
- self._connect_hb_socket()
720
700
  return {"success": False, "error": "Heartbeat request timed out"}
701
+
721
702
  except zmq.ZMQError as exc:
722
703
  self.logger.error(f"ZMQ error: {exc}", exc_info=True)
723
704
  return {"success": False, "error": str(exc)}
@@ -873,14 +854,14 @@ class AsyncRegistryClient:
873
854
 
874
855
  # Do a health check
875
856
  if not await self.health_check():
876
- self.logger.warning("ServiceRegistry not responding.")
857
+ self.logger.warning("Heartbeat failed: ServiceRegistry not responding.")
877
858
  continue
878
859
  else:
879
- self.logger.info("Health check succeeded, reregistering...")
860
+ self.logger.info("Heartbeat failed, but health check succeeded, reregistering...")
880
861
  await self.reregister()
881
862
 
882
863
  else:
883
- self.logger.debug(response.get("message"))
864
+ self.logger.debug(f"Heartbeat succeeded: {response.get('message')}")
884
865
  except Exception as exc:
885
866
  self.logger.error(f"Error in heartbeat loop: {exc}", exc_info=True)
886
867
 
@@ -992,9 +973,6 @@ class AsyncRegistryClient:
992
973
 
993
974
  self.logger.debug(f"Received event: {event_type}")
994
975
 
995
- # Update service cache based on events
996
- await self._update_cache_from_event(event_type, event)
997
-
998
976
  # Call registered handlers
999
977
  handlers = self._event_handlers.get(event_type, [])
1000
978
  for handler in handlers:
@@ -1022,30 +1000,7 @@ class AsyncRegistryClient:
1022
1000
  self.logger.info("Started event listener task")
1023
1001
  return task
1024
1002
 
1025
- async def _update_cache_from_event(self, event_type: str, event: dict[str, Any]) -> None:
1026
- """
1027
- Update the service cache based on registry events.
1028
-
1029
- Args:
1030
- event_type: Type of the event.
1031
- event: Event data
1032
- """
1033
- async with self._get_service_cache_lock():
1034
- data = event.get("data", {})
1035
- service_id = data.get("service_id")
1036
-
1037
- if not service_id:
1038
- return
1039
-
1040
- if event_type == "register":
1041
- service_info = data.get("service_info", {})
1042
- if service_info:
1043
- self._service_cache[service_id] = service_info
1044
- elif event_type in ("deregister", "expire"):
1045
- if service_id in self._service_cache:
1046
- del self._service_cache[service_id]
1047
-
1048
- async def discover_service(self, service_type: str, use_cache: bool = True) -> dict[str, Any] | None:
1003
+ async def discover_service(self, service_type: str) -> dict[str, Any] | None:
1049
1004
  """
1050
1005
  Discover a service of the specified type. The service is guaranteed to be healthy at the time of discovery.
1051
1006
 
@@ -1057,27 +1012,11 @@ class AsyncRegistryClient:
1057
1012
 
1058
1013
  Args:
1059
1014
  service_type: Type of service to discover
1060
- use_cache: Whether to use cached service information
1061
1015
 
1062
1016
  Returns:
1063
1017
  Service information if found, None otherwise
1064
1018
  """
1065
- # Try to use cache first if enabled
1066
- if use_cache:
1067
- async with self._get_service_cache_lock():
1068
- # Find services of the specified type
1069
- matching_services = []
1070
- for service_id, service_info in self._service_cache.items():
1071
- if service_info.get("type") == service_type or service_type in service_info.get("tags", []):
1072
- matching_services.append(service_info)
1073
-
1074
- if matching_services:
1075
- # Simple load balancing - random selection
1076
- import random
1077
-
1078
- return random.choice(matching_services)
1079
-
1080
- # If not found in cache or cache disabled, ask the registry
1019
+
1081
1020
  request = {"action": "discover", "service_type": service_type}
1082
1021
 
1083
1022
  response = await self._send_request(MessageType.REQUEST_WITH_REPLY, request)
@@ -1087,34 +1026,25 @@ class AsyncRegistryClient:
1087
1026
  if response.get("success"):
1088
1027
  service = response.get("service")
1089
1028
 
1090
- # Update cache
1091
- if service and "id" in service:
1092
- async with self._get_service_cache_lock():
1093
- self._service_cache[service["id"]] = service
1094
-
1095
1029
  return service
1096
1030
  else:
1097
1031
  self.logger.warning(f"Service discovery failed: {response.get('error')}")
1098
1032
  return None
1099
1033
 
1100
- async def get_service(self, service_id: str, use_cache: bool = True) -> dict[str, Any] | None:
1034
+ async def get_service(self, service_id: str | None = None) -> dict[str, Any] | None:
1101
1035
  """
1102
- Get information about a specific service.
1036
+ Get information about a specific service. When no service_id is given,
1037
+ the service_id known to this client will be used.
1103
1038
 
1104
1039
  Args:
1105
1040
  service_id: ID of the service to get
1106
- use_cache: Whether to use cached service information
1107
1041
 
1108
1042
  Returns:
1109
1043
  Service information if found, None otherwise
1110
1044
  """
1111
- # Try to use cache first if enabled
1112
- if use_cache:
1113
- async with self._get_service_cache_lock():
1114
- if service_id in self._service_cache:
1115
- return self._service_cache[service_id]
1116
1045
 
1117
- # If not found in cache or cache disabled, ask the registry
1046
+ service_id = service_id or self._service_id
1047
+
1118
1048
  request = {"action": "get", "service_id": service_id}
1119
1049
 
1120
1050
  response = await self._send_request(MessageType.REQUEST_WITH_REPLY, request)
@@ -1122,11 +1052,6 @@ class AsyncRegistryClient:
1122
1052
  if response.get("success"):
1123
1053
  service = response.get("service")
1124
1054
 
1125
- # Update cache
1126
- if service:
1127
- async with self._get_service_cache_lock():
1128
- self._service_cache[service_id] = service
1129
-
1130
1055
  return service
1131
1056
  else:
1132
1057
  self.logger.warning(f"Get service failed: {response.get('error')}")
@@ -1149,12 +1074,6 @@ class AsyncRegistryClient:
1149
1074
  if response.get("success"):
1150
1075
  services = response.get("services", [])
1151
1076
 
1152
- # Update cache
1153
- async with self._get_service_cache_lock():
1154
- for service in services:
1155
- if "id" in service:
1156
- self._service_cache[service["id"]] = service
1157
-
1158
1077
  return services
1159
1078
  else:
1160
1079
  self.logger.warning(f"List services failed: {response.get('error')}")
@@ -1224,35 +1143,6 @@ class AsyncRegistryClient:
1224
1143
  except Exception as exc:
1225
1144
  self.logger.error(f"Error during cleanup: {exc}")
1226
1145
 
1227
- @asynccontextmanager
1228
- async def register_context(self, *args, **kwargs):
1229
- """
1230
- Async context manager for service registration.
1231
-
1232
- Example:
1233
- async with client.register_context("my-service", "localhost", 8080):
1234
- # Service is registered
1235
- await app.start()
1236
- # Service is automatically deregistered
1237
- """
1238
- service_id = await self.register(*args, **kwargs)
1239
-
1240
- if not service_id:
1241
- raise RuntimeError("Failed to register service")
1242
-
1243
- # Start heartbeat and event listener
1244
- await self.start_heartbeat()
1245
- await self.start_event_listener()
1246
-
1247
- try:
1248
- yield service_id
1249
- finally:
1250
- # Clean up
1251
- await self.stop_event_listener()
1252
- await self.stop_heartbeat()
1253
- await self.deregister()
1254
- # await self.close() # client shall not be closed by this context manager !!
1255
-
1256
1146
 
1257
1147
  def is_service_registered(service_type: str):
1258
1148
  """Convenience function to check if a service is registered."""
@@ -101,19 +101,19 @@ class AsyncRegistryServer:
101
101
  req_rep_endpoint = f"tcp://*:{self.req_port}"
102
102
  self.req_socket = self.context.socket(zmq.ROUTER)
103
103
  self.req_socket.bind(req_rep_endpoint)
104
- self.logger.info(f"Binding request socket to {req_rep_endpoint}")
104
+ self.logger.debug(f"Binding request ROUTER socket to {req_rep_endpoint}")
105
105
 
106
106
  # Socket to publish service events
107
107
  pub_endpoint = f"tcp://*:{self.pub_port}"
108
108
  self.pub_socket = self.context.socket(zmq.PUB)
109
109
  self.pub_socket.bind(pub_endpoint)
110
- self.logger.info(f"Binding publish socket to {pub_endpoint}")
110
+ self.logger.debug(f"Binding publish PUB socket to {pub_endpoint}")
111
111
 
112
112
  # Socket to handle heartbeats
113
113
  hb_endpoint = f"tcp://*:{self.hb_port}"
114
- self.hb_socket = self.context.socket(zmq.REP)
114
+ self.hb_socket = self.context.socket(zmq.ROUTER)
115
115
  self.hb_socket.bind(hb_endpoint)
116
- self.logger.info(f"Binding heartbeat socket to {hb_endpoint}")
116
+ self.logger.debug(f"Binding heartbeat ROUTER socket to {hb_endpoint}")
117
117
 
118
118
  async def initialize_backend(self):
119
119
  """Initialize the storage backend."""
@@ -137,8 +137,8 @@ class AsyncRegistryServer:
137
137
 
138
138
  self._running = True
139
139
  self.logger.info(
140
- f"Async registry server started on ports {self.req_port} (ROUTER-DEALER), {self.pub_port} (PUB), "
141
- f"and {self.hb_port} (Heartbeat)"
140
+ f"Async registry server started on ports {self.req_port} (Requests ROUTER-DEALER), "
141
+ f"{self.pub_port} (Publish PUB), and {self.hb_port} (Heartbeat ROUTER)"
142
142
  )
143
143
 
144
144
  # Start the cleanup task
@@ -400,22 +400,35 @@ class AsyncRegistryServer:
400
400
  self.logger.info("Started heartbeats handler task")
401
401
 
402
402
  try:
403
+ message_parts = None
403
404
  while self._running:
404
405
  try:
405
406
  # Receive heartbeat (non-blocking with timeout)
406
- message_json = await asyncio.wait_for(self.hb_socket.recv_string(), timeout=1.0)
407
+ message_parts = await asyncio.wait_for(self.hb_socket.recv_multipart(), timeout=1.0)
408
+
409
+ self.logger.debug(f"{message_parts=}")
410
+
411
+ if len(message_parts) == 2:
412
+ client_id = message_parts[0]
413
+ request = message_parts[1]
414
+
415
+ # Parse the request
416
+ request = json.loads(request)
417
+ self.logger.info(f"Received heartbeat request: {request}")
407
418
 
408
- # Parse the request
409
- request = json.loads(message_json)
410
- self.logger.info(f"Received heartbeat request: {request}")
419
+ response = await self._handle_renew(request)
420
+ if VERBOSE_DEBUG:
421
+ self.logger.debug(f"{response=}")
411
422
 
412
- response = await self._handle_renew(request)
423
+ # Send the response
424
+ await self.hb_socket.send_multipart([client_id, json.dumps(response).encode()])
413
425
 
414
- # Send the response
415
- await self.hb_socket.send_string(json.dumps(response))
426
+ else:
427
+ self.logger.warning("Heartbeat request: message corrupted, check debug messages.")
416
428
 
417
429
  except asyncio.TimeoutError:
418
- # self.logger.debug("waiting for heartbeat...")
430
+ if VERBOSE_DEBUG:
431
+ self.logger.debug("waiting for heartbeat...")
419
432
  continue
420
433
 
421
434
  except Exception as exc:
@@ -526,12 +539,6 @@ async def start(
526
539
  ):
527
540
  """Run the registry server with signal handling."""
528
541
 
529
- logging.basicConfig(
530
- level=get_logging_level(log_level),
531
- format="[%(asctime)s] %(threadName)-12s %(levelname)-8s %(name)-12s %(lineno)5d:%(module)-20s %(message)s",
532
- )
533
- logging.getLogger("aiosqlite").setLevel(logging.INFO)
534
-
535
542
  with remote_logging():
536
543
  server = AsyncRegistryServer(
537
544
  req_port=req_port,
@@ -62,6 +62,8 @@ class StorageControlServer(ControlServer):
62
62
 
63
63
  multiprocessing.current_process().name = PROCESS_NAME
64
64
 
65
+ self.scheduler: BackgroundScheduler | None = None
66
+
65
67
  self.logger = logger
66
68
  self.service_name = PROCESS_NAME
67
69
  self.service_type = SERVICE_TYPE
@@ -76,13 +78,6 @@ class StorageControlServer(ControlServer):
76
78
 
77
79
  self.register_service(service_type=SERVICE_TYPE)
78
80
 
79
- # NOTE:
80
- # Since the CM CS is started after the SM CS in the normal startup sequence, delay the task to load
81
- # the Setup until after the CM CS has been properly started. We do that now with a delay time of 30s,
82
- # but we might in the future use a function returning a boolean, until...
83
- # from egse.confman import is_configuration_manager_active
84
- # self.schedule_task(self.device_protocol.controller.load_setup, after=10.0, when=is_configuration_manager_active)
85
-
86
81
  def before_serve(self):
87
82
  self.scheduler = BackgroundScheduler(timezone=utc)
88
83
  self.scheduler.start()
@@ -30,7 +30,6 @@ Notes:
30
30
  """
31
31
 
32
32
  import asyncio
33
- import logging
34
33
  import sys
35
34
  import time
36
35
 
@@ -88,7 +87,7 @@ def test_proper_termination_of_tasks_sync(
88
87
  assert response["name"] == "sync-context-test-service"
89
88
  assert response["metadata"]["msg"] == "Hello, World!"
90
89
 
91
- print("Sleeping for 10s to let some heartbeats come through...")
90
+ print("Sleeping for 50s to let some heartbeats come through...")
92
91
  time.sleep(50.0)
93
92
 
94
93
  client.stop_heartbeat()
@@ -134,8 +133,8 @@ async def test_proper_termination_of_tasks_async(
134
133
  assert response["name"] == "async-context-test-service"
135
134
  assert response["metadata"]["msg"] == "Hello, World!"
136
135
 
137
- print("Sleeping for 10s to let some heartbeats come through...")
138
- await asyncio.sleep(10.0)
136
+ print("Sleeping for 50s to let some heartbeats come through...")
137
+ await asyncio.sleep(50.0)
139
138
 
140
139
  await client.stop_heartbeat()
141
140
  await client.deregister(service_id)
@@ -166,9 +165,4 @@ def main(
166
165
 
167
166
 
168
167
  if __name__ == "__main__":
169
- logging.basicConfig(
170
- level=logging.DEBUG,
171
- format="[%(asctime)s] %(threadName)-12s %(levelname)-8s %(name)-12s %(lineno)5d:%(module)-20s %(message)s",
172
- )
173
-
174
168
  sys.exit(app())
@@ -787,70 +787,3 @@ async def test_client_health_check(client, server):
787
787
  """Test health check."""
788
788
  health = await client.health_check()
789
789
  assert health is True
790
-
791
-
792
- @pytest.mark.asyncio
793
- async def test_client_caching(client, server):
794
- """Test client's service caching."""
795
-
796
- service_id = await client.register("cache-test-service", "localhost", 8080, service_type="cache-test")
797
-
798
- # Look up the service (should populate cache)
799
- service = await client.get_service(service_id)
800
- assert service is not None
801
-
802
- # Check if it's in the cache
803
- async with client._service_cache_lock:
804
- assert service_id in client._service_cache
805
-
806
- # Look up by type (should use cache when use_cache=True)
807
- with patch.object(client, "_send_request", new_callable=AsyncMock) as mock_send:
808
- # First call with use_cache=True should check cache
809
- service = await client.discover_service("cache-test", use_cache=True)
810
- assert service is not None
811
- assert service["id"] == service_id
812
-
813
- # Configure the mock to return a dictionary that matches what _send_request would return
814
- mock_send.return_value = {
815
- "success": True,
816
- "service": {
817
- "id": service_id,
818
- "name": "cache-test-service",
819
- "host": "localhost",
820
- "port": 8080,
821
- "type": "cache-test",
822
- },
823
- }
824
-
825
- # Second call with use_cache=False should make a request
826
- service = await client.discover_service("cache-test", use_cache=False)
827
- assert service is not None
828
- assert mock_send.called
829
-
830
-
831
- @pytest.mark.asyncio
832
- async def test_client_register_context(client, server, req_socket):
833
- """Test the register_context context manager."""
834
-
835
- # Use the context manager
836
- async with client.register_context(
837
- "context-test-service", "localhost", 8080, service_type="context-test"
838
- ) as service_id:
839
- # Verify the service was registered
840
- response = await send_request(
841
- MessageType.REQUEST_WITH_REPLY, req_socket, {"action": "get", "service_id": service_id}
842
- )
843
-
844
- logger.info(f"----- In test_client_register_context: {response}")
845
-
846
- assert response["success"] is True
847
- assert response["service"]["name"] == "context-test-service"
848
-
849
- logger.info("----- In test_client_register_context: after context...")
850
-
851
- # After exiting the context, the service should be deregistered
852
- response = await send_request(
853
- MessageType.REQUEST_WITH_REPLY, req_socket, {"action": "get", "service_id": service_id}
854
- )
855
-
856
- assert response["success"] is False
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "cgse-gui"
3
- version = "0.16.8"
3
+ version = "0.16.10"
4
4
  description = "GUI components for CGSE"
5
5
  authors = [
6
6
  {name = "Rik Huygen", email = "rik.huygen@kuleuven.be"},
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "cgse-tools"
3
- version = "0.16.8"
3
+ version = "0.16.10"
4
4
  description = "Tools for CGSE"
5
5
  authors = [
6
6
  {name = "IvS KU Leuven"}
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "keithley-tempcontrol"
3
- version = "0.16.8"
3
+ version = "0.16.10"
4
4
  description = "Keithley Temperature Control for CGSE"
5
5
  authors = [
6
6
  {name = "IvS KU Leuven"}