cgse 0.16.12__tar.gz → 0.16.14__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 (542) hide show
  1. {cgse-0.16.12 → cgse-0.16.14}/PKG-INFO +1 -1
  2. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/pyproject.toml +1 -1
  3. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/pyproject.toml +1 -1
  4. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/pyproject.toml +1 -1
  5. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/async_control.py +0 -1
  6. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/mixin.py +90 -43
  7. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_mixin.py +72 -2
  8. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/pyproject.toml +1 -1
  9. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/cgse-tools/pyproject.toml +1 -1
  10. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/pyproject.toml +1 -1
  11. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/lakeshore-tempcontrol/pyproject.toml +1 -1
  12. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/pyproject.toml +1 -1
  13. {cgse-0.16.12 → cgse-0.16.14}/projects/plato/plato-fits/pyproject.toml +1 -1
  14. {cgse-0.16.12 → cgse-0.16.14}/projects/plato/plato-hdf5/pyproject.toml +1 -1
  15. {cgse-0.16.12 → cgse-0.16.14}/projects/plato/plato-spw/pyproject.toml +1 -1
  16. {cgse-0.16.12 → cgse-0.16.14}/pyproject.toml +1 -1
  17. {cgse-0.16.12 → cgse-0.16.14}/service_registry.db +0 -0
  18. {cgse-0.16.12 → cgse-0.16.14}/service_registry.db-shm +0 -0
  19. {cgse-0.16.12 → cgse-0.16.14}/service_registry.db-wal +0 -0
  20. {cgse-0.16.12 → cgse-0.16.14}/.github/workflows/ruff-format-check.yaml +0 -0
  21. {cgse-0.16.12 → cgse-0.16.14}/.gitignore +0 -0
  22. {cgse-0.16.12 → cgse-0.16.14}/README.md +0 -0
  23. {cgse-0.16.12 → cgse-0.16.14}/buffer_vat.log +0 -0
  24. {cgse-0.16.12 → cgse-0.16.14}/buffer_vat.png +0 -0
  25. {cgse-0.16.12 → cgse-0.16.14}/bump.py +0 -0
  26. {cgse-0.16.12 → cgse-0.16.14}/conftest.py +0 -0
  27. {cgse-0.16.12 → cgse-0.16.14}/docs/api/bits.md +0 -0
  28. {cgse-0.16.12 → cgse-0.16.14}/docs/api/calibration.md +0 -0
  29. {cgse-0.16.12 → cgse-0.16.14}/docs/api/command.md +0 -0
  30. {cgse-0.16.12 → cgse-0.16.14}/docs/api/config.md +0 -0
  31. {cgse-0.16.12 → cgse-0.16.14}/docs/api/control.md +0 -0
  32. {cgse-0.16.12 → cgse-0.16.14}/docs/api/counter.md +0 -0
  33. {cgse-0.16.12 → cgse-0.16.14}/docs/api/decorators.md +0 -0
  34. {cgse-0.16.12 → cgse-0.16.14}/docs/api/device.md +0 -0
  35. {cgse-0.16.12 → cgse-0.16.14}/docs/api/dicts.md +0 -0
  36. {cgse-0.16.12 → cgse-0.16.14}/docs/api/dummy.md +0 -0
  37. {cgse-0.16.12 → cgse-0.16.14}/docs/api/env.md +0 -0
  38. {cgse-0.16.12 → cgse-0.16.14}/docs/api/exceptions.md +0 -0
  39. {cgse-0.16.12 → cgse-0.16.14}/docs/api/heartbeat.md +0 -0
  40. {cgse-0.16.12 → cgse-0.16.14}/docs/api/hk.md +0 -0
  41. {cgse-0.16.12 → cgse-0.16.14}/docs/api/index.md +0 -0
  42. {cgse-0.16.12 → cgse-0.16.14}/docs/api/listener.md +0 -0
  43. {cgse-0.16.12 → cgse-0.16.14}/docs/api/metrics.md +0 -0
  44. {cgse-0.16.12 → cgse-0.16.14}/docs/api/mixin.md +0 -0
  45. {cgse-0.16.12 → cgse-0.16.14}/docs/api/monitoring.md +0 -0
  46. {cgse-0.16.12 → cgse-0.16.14}/docs/api/observer.md +0 -0
  47. {cgse-0.16.12 → cgse-0.16.14}/docs/api/obsid.md +0 -0
  48. {cgse-0.16.12 → cgse-0.16.14}/docs/api/persistence.md +0 -0
  49. {cgse-0.16.12 → cgse-0.16.14}/docs/api/plugin.md +0 -0
  50. {cgse-0.16.12 → cgse-0.16.14}/docs/api/process.md +0 -0
  51. {cgse-0.16.12 → cgse-0.16.14}/docs/api/reload.md +0 -0
  52. {cgse-0.16.12 → cgse-0.16.14}/docs/api/settings.md +0 -0
  53. {cgse-0.16.12 → cgse-0.16.14}/docs/api/setup.md +0 -0
  54. {cgse-0.16.12 → cgse-0.16.14}/docs/api/system.md +0 -0
  55. {cgse-0.16.12 → cgse-0.16.14}/docs/custom_theme/main.html +0 -0
  56. {cgse-0.16.12 → cgse-0.16.14}/docs/dev_guide/coding_style.md +0 -0
  57. {cgse-0.16.12 → cgse-0.16.14}/docs/dev_guide/docs.md +0 -0
  58. {cgse-0.16.12 → cgse-0.16.14}/docs/dev_guide/index.md +0 -0
  59. {cgse-0.16.12 → cgse-0.16.14}/docs/dev_guide/installation.md +0 -0
  60. {cgse-0.16.12 → cgse-0.16.14}/docs/dev_guide/monitoring.md +0 -0
  61. {cgse-0.16.12 → cgse-0.16.14}/docs/dev_guide/monorepo.md +0 -0
  62. {cgse-0.16.12 → cgse-0.16.14}/docs/dev_guide/nox.md +0 -0
  63. {cgse-0.16.12 → cgse-0.16.14}/docs/dev_guide/plugins.md +0 -0
  64. {cgse-0.16.12 → cgse-0.16.14}/docs/dev_guide/project-configuration.md +0 -0
  65. {cgse-0.16.12 → cgse-0.16.14}/docs/dev_guide/unit_testing.md +0 -0
  66. {cgse-0.16.12 → cgse-0.16.14}/docs/dev_guide/uv.md +0 -0
  67. {cgse-0.16.12 → cgse-0.16.14}/docs/dev_guide/versioning.md +0 -0
  68. {cgse-0.16.12 → cgse-0.16.14}/docs/getting_started.md +0 -0
  69. {cgse-0.16.12 → cgse-0.16.14}/docs/help.md +0 -0
  70. {cgse-0.16.12 → cgse-0.16.14}/docs/images/cli-cgse.png +0 -0
  71. {cgse-0.16.12 → cgse-0.16.14}/docs/images/github-fork-clone-dark.png +0 -0
  72. {cgse-0.16.12 → cgse-0.16.14}/docs/images/github-fork-clone.png +0 -0
  73. {cgse-0.16.12 → cgse-0.16.14}/docs/images/grafana-queries.png +0 -0
  74. {cgse-0.16.12 → cgse-0.16.14}/docs/images/icons/cgse-logo-blue.svg +0 -0
  75. {cgse-0.16.12 → cgse-0.16.14}/docs/images/icons/cgse-logo.svg +0 -0
  76. {cgse-0.16.12 → cgse-0.16.14}/docs/index.md +0 -0
  77. {cgse-0.16.12 → cgse-0.16.14}/docs/initialize.md +0 -0
  78. {cgse-0.16.12 → cgse-0.16.14}/docs/libs/cgse-common/images/load_methods.png +0 -0
  79. {cgse-0.16.12 → cgse-0.16.14}/docs/libs/cgse-common/index.md +0 -0
  80. {cgse-0.16.12 → cgse-0.16.14}/docs/libs/cgse-common/settings.md +0 -0
  81. {cgse-0.16.12 → cgse-0.16.14}/docs/libs/cgse-common/setup.md +0 -0
  82. {cgse-0.16.12 → cgse-0.16.14}/docs/libs/cgse-coordinates/index.md +0 -0
  83. {cgse-0.16.12 → cgse-0.16.14}/docs/libs/cgse-core/index.md +0 -0
  84. {cgse-0.16.12 → cgse-0.16.14}/docs/libs/cgse-core/notifyhub.md +0 -0
  85. {cgse-0.16.12 → cgse-0.16.14}/docs/libs/cgse-core/registry.md +0 -0
  86. {cgse-0.16.12 → cgse-0.16.14}/docs/libs/cgse-gui/index.md +0 -0
  87. {cgse-0.16.12 → cgse-0.16.14}/docs/libs/index.md +0 -0
  88. {cgse-0.16.12 → cgse-0.16.14}/docs/package_list.md +0 -0
  89. {cgse-0.16.12 → cgse-0.16.14}/docs/projects/cgse-tools.md +0 -0
  90. {cgse-0.16.12 → cgse-0.16.14}/docs/projects/index.md +0 -0
  91. {cgse-0.16.12 → cgse-0.16.14}/docs/projects/symetrie-hexapod.md +0 -0
  92. {cgse-0.16.12 → cgse-0.16.14}/docs/roadmap.md +0 -0
  93. {cgse-0.16.12 → cgse-0.16.14}/docs/stylesheets/custom.css +0 -0
  94. {cgse-0.16.12 → cgse-0.16.14}/docs/stylesheets/extra.css +0 -0
  95. {cgse-0.16.12 → cgse-0.16.14}/docs/tutorial.md +0 -0
  96. {cgse-0.16.12 → cgse-0.16.14}/docs/user_guide/cli.md +0 -0
  97. {cgse-0.16.12 → cgse-0.16.14}/docs/user_guide/index.md +0 -0
  98. {cgse-0.16.12 → cgse-0.16.14}/duckdb_metrics.db +0 -0
  99. {cgse-0.16.12 → cgse-0.16.14}/duckdb_metrics.db.wal +0 -0
  100. {cgse-0.16.12 → cgse-0.16.14}/identifier.sqlite +0 -0
  101. {cgse-0.16.12 → cgse-0.16.14}/justfile +0 -0
  102. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/README.md +0 -0
  103. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/justfile +0 -0
  104. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/noxfile.py +0 -0
  105. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/service_registry.db +0 -0
  106. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/cgse_common/__init__.py +0 -0
  107. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/cgse_common/cgse.py +0 -0
  108. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/cgse_common/settings.yaml +0 -0
  109. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/bits.py +0 -0
  110. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/calibration.py +0 -0
  111. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/config.py +0 -0
  112. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/counter.py +0 -0
  113. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/decorators.py +0 -0
  114. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/device.py +0 -0
  115. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/dicts.py +0 -0
  116. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/env.py +0 -0
  117. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/exceptions.py +0 -0
  118. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/heartbeat.py +0 -0
  119. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/hk.py +0 -0
  120. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/log.py +0 -0
  121. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/metrics.py +0 -0
  122. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/observer.py +0 -0
  123. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/obsid.py +0 -0
  124. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/persistence.py +0 -0
  125. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/plugin.py +0 -0
  126. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/plugins/metrics/duckdb.py +0 -0
  127. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/plugins/metrics/influxdb.py +0 -0
  128. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/plugins/metrics/timescaledb.py +0 -0
  129. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/process.py +0 -0
  130. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/py.typed +0 -0
  131. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/randomwalk.py +0 -0
  132. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/ratelimit.py +0 -0
  133. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/reload.py +0 -0
  134. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/resource.py +0 -0
  135. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/response.py +0 -0
  136. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/scpi.py +0 -0
  137. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/settings.py +0 -0
  138. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/settings.yaml +0 -0
  139. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/setup.py +0 -0
  140. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/signal.py +0 -0
  141. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/socketdevice.py +0 -0
  142. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/state.py +0 -0
  143. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/system.py +0 -0
  144. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/task.py +0 -0
  145. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/version.py +0 -0
  146. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/zmq_ser.py +0 -0
  147. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/conftest.py +0 -0
  148. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/COPYING +0 -0
  149. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00028_201028_155259.yaml +0 -0
  150. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00029_201028_155331.yaml +0 -0
  151. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00030_210311_134043.yaml +0 -0
  152. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00080_210917_105245.yaml +0 -0
  153. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00081_210922_142259.yaml +0 -0
  154. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00082_210923_094458.yaml +0 -0
  155. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/CSL1/README.md +0 -0
  156. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/CSL2/README.md +0 -0
  157. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/IAS/README.md +0 -0
  158. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/INTA/README.md +0 -0
  159. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/LAB23/README.md +0 -0
  160. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00027_211119_140441.yaml +0 -0
  161. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00028_211119_160406.yaml +0 -0
  162. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00029_211119_172918.yaml +0 -0
  163. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00030_211122_103604.yaml +0 -0
  164. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00031_211123_124900.yaml +0 -0
  165. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/common/telemetry/tm-dictionary-default.csv +0 -0
  166. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/conf/SETUP_20250114_1519.yaml +0 -0
  167. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/conf/config-file.toml +0 -0
  168. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/data/cal_coeff_1234.csv +0 -0
  169. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/data/calibration.csv +0 -0
  170. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/data/calibration.yaml +0 -0
  171. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/data/command.yaml +0 -0
  172. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/data/corrupt.yaml +0 -0
  173. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/data/data-file.txt +0 -0
  174. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/data/empty_data_file.txt +0 -0
  175. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/data/empty_yaml_file.yaml +0 -0
  176. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/data/local_settings.yaml +0 -0
  177. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/data/new_local_settings.yaml +0 -0
  178. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/data/test_setup.yaml +0 -0
  179. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/icons/hourglass.svg +0 -0
  180. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/icons/keyboard.png +0 -0
  181. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/icons/soap_sponge.svg +0 -0
  182. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/lib/dev1/shared-lib.so +0 -0
  183. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/lib/dev2/shared-lib.so +0 -0
  184. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/fixtures/default_env.py +0 -0
  185. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/fixtures/helpers.py +0 -0
  186. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/scripts/empty_process.py +0 -0
  187. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/scripts/handle_sigterm.py +0 -0
  188. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/scripts/process_with_children.py +0 -0
  189. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/scripts/raise_value_error.py +0 -0
  190. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/scripts/void-0.py +0 -0
  191. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/scripts/void-1.py +0 -0
  192. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_bits.py +0 -0
  193. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_config.py +0 -0
  194. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_decorators.py +0 -0
  195. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_device.py +0 -0
  196. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_env.py +0 -0
  197. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_fixtures.py +0 -0
  198. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_hk.py +0 -0
  199. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_influxdb_plugin.py +0 -0
  200. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_log.py +0 -0
  201. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_metrics.py +0 -0
  202. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_plugin.py +0 -0
  203. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_process.py +0 -0
  204. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_ratelimit.py +0 -0
  205. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_resource.py +0 -0
  206. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_response.py +0 -0
  207. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_settings.py +0 -0
  208. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_setup.py +0 -0
  209. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_signal.py +0 -0
  210. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_state.py +0 -0
  211. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_system.py +0 -0
  212. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_task.py +0 -0
  213. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_zmq_ser.py +0 -0
  214. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/README.md +0 -0
  215. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/src/cgse_coordinates/__init__.py +0 -0
  216. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/src/cgse_coordinates/settings.yaml +0 -0
  217. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/src/egse/coordinates/__init__.py +0 -0
  218. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/src/egse/coordinates/avoidance.py +0 -0
  219. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/src/egse/coordinates/cslmodel.py +0 -0
  220. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/src/egse/coordinates/laser_tracker_to_dict.py +0 -0
  221. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/src/egse/coordinates/point.py +0 -0
  222. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/src/egse/coordinates/pyplot.py +0 -0
  223. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/src/egse/coordinates/referenceFrame.py +0 -0
  224. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/src/egse/coordinates/refmodel.py +0 -0
  225. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/src/egse/coordinates/rotationMatrix.py +0 -0
  226. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/src/egse/coordinates/transform3d_addon.py +0 -0
  227. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/tests/test_avoidance.py +0 -0
  228. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/tests/test_coordinates_plot.py +0 -0
  229. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/tests/test_coordinates_serialize.py +0 -0
  230. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/tests/test_point.py +0 -0
  231. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/tests/test_ref_model.py +0 -0
  232. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/tests/test_reference_frames.py +0 -0
  233. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/tests/test_refmodel.py +0 -0
  234. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/.envrc.disabled +0 -0
  235. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/README.md +0 -0
  236. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/service_registry.db +0 -0
  237. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/cgse_core/__init__.py +0 -0
  238. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/cgse_core/_start.py +0 -0
  239. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/cgse_core/_status.py +0 -0
  240. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/cgse_core/_stop.py +0 -0
  241. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/cgse_core/cgse_explore.py +0 -0
  242. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/cgse_core/services.py +0 -0
  243. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/cgse_core/settings.yaml +0 -0
  244. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/_setup_core.py +0 -0
  245. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/async_control_claude.py +0 -0
  246. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/command.py +0 -0
  247. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/confman/__init__.py +0 -0
  248. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/confman/__main__.py +0 -0
  249. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/confman/confman.yaml +0 -0
  250. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/confman/confman_acs.py +0 -0
  251. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/confman/confman_cs.py +0 -0
  252. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/connect-todo.py +0 -0
  253. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/connect.py +0 -0
  254. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/control.py +0 -0
  255. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/dummy.py +0 -0
  256. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/icons/busy.svg +0 -0
  257. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/icons/operational-mode.svg +0 -0
  258. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/icons/pm_ui.svg +0 -0
  259. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/icons/simulator-mode.svg +0 -0
  260. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/icons/start-process-button.svg +0 -0
  261. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/icons/stop-process-button.svg +0 -0
  262. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/icons/user-interface.svg +0 -0
  263. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/listener.py +0 -0
  264. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/logger/__init__.py +0 -0
  265. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/logger/__main__.py +0 -0
  266. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/logger/log_cs.py +0 -0
  267. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/metricshub/__init__.py +0 -0
  268. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/metricshub/server.py +0 -0
  269. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/monitoring.py +0 -0
  270. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/notifyhub/__init__.py +0 -0
  271. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/notifyhub/client.py +0 -0
  272. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/notifyhub/event.py +0 -0
  273. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/notifyhub/server.py +0 -0
  274. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/notifyhub/services.py +0 -0
  275. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/notifyhub/test.py +0 -0
  276. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/procman/__init__.py +0 -0
  277. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/procman/procman.yaml +0 -0
  278. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/procman/procman_cs.py +0 -0
  279. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/procman/procman_protocol.py +0 -0
  280. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/procman/procman_ui.py +0 -0
  281. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/protocol.py +0 -0
  282. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/proxy.py +0 -0
  283. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/registry/__init__.py +0 -0
  284. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/registry/backend.py +0 -0
  285. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/registry/client.py +0 -0
  286. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/registry/server.py +0 -0
  287. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/registry/service.py +0 -0
  288. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/services.py +0 -0
  289. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/services.yaml +0 -0
  290. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/storage/__init__.py +0 -0
  291. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/storage/__main__.py +0 -0
  292. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/storage/persistence.py +0 -0
  293. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/storage/storage.yaml +0 -0
  294. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/storage/storage_cs.py +0 -0
  295. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/conftest.py +0 -0
  296. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/data/local_settings.yaml +0 -0
  297. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/fixtures/default_env.py +0 -0
  298. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/fixtures/helpers.py +0 -0
  299. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/fixtures/services.py +0 -0
  300. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/marimo/intro.py +0 -0
  301. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/script_subscribe_to_notifyhub.py +0 -0
  302. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/script_test_async_registry_client.py +0 -0
  303. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/script_test_registry_client_server.py +0 -0
  304. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/script_test_service_registry_server.py +0 -0
  305. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/script_test_sync_registry_client.py +0 -0
  306. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/services.py +0 -0
  307. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/stress_test_registry_server.py +0 -0
  308. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_async_control.py +0 -0
  309. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_client_server_interaction.py +0 -0
  310. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_cm_cs.py +0 -0
  311. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_command.py +0 -0
  312. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_confman_setups.py +0 -0
  313. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_connect.py +0 -0
  314. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_control.py +0 -0
  315. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_dummy.py +0 -0
  316. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_event_notification.py +0 -0
  317. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_extensions.py +0 -0
  318. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_listener.py +0 -0
  319. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_logger.py +0 -0
  320. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_notify_hub.py +0 -0
  321. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_protocol.py +0 -0
  322. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_registry_backend.py +0 -0
  323. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_registry_service.py +0 -0
  324. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_server_running.py +0 -0
  325. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_server_running_with_fixture.py +0 -0
  326. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_settings_core.py +0 -0
  327. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_zmq_microservice.py +0 -0
  328. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/README.md +0 -0
  329. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/__init__.py +0 -0
  330. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/buttons.py +0 -0
  331. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-start.svg +0 -0
  332. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-stop.svg +0 -0
  333. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/aeu-cs.svg +0 -0
  334. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-started.svg +0 -0
  335. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-stopped.svg +0 -0
  336. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/aeu_cs.svg +0 -0
  337. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/alert.svg +0 -0
  338. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/arrow-double-left.png +0 -0
  339. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/arrow-double-right.png +0 -0
  340. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/arrow-up.svg +0 -0
  341. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/backward.svg +0 -0
  342. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/busy.svg +0 -0
  343. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/cleaning.svg +0 -0
  344. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/color-scheme.svg +0 -0
  345. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/cs-connected-alert.svg +0 -0
  346. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/cs-connected-disabled.svg +0 -0
  347. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/cs-connected.svg +0 -0
  348. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/cs-not-connected.svg +0 -0
  349. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/double-left-arrow.svg +0 -0
  350. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/double-right-arrow.svg +0 -0
  351. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/erase-disabled.svg +0 -0
  352. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/erase.svg +0 -0
  353. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/fitsgen-start.svg +0 -0
  354. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/fitsgen-stop.svg +0 -0
  355. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/fitsgen.svg +0 -0
  356. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/forward.svg +0 -0
  357. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/fov-hk-start.svg +0 -0
  358. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/fov-hk-stop.svg +0 -0
  359. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/fov-hk.svg +0 -0
  360. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/front-desk.svg +0 -0
  361. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/home-actioned.svg +0 -0
  362. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/home-disabled.svg +0 -0
  363. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/home.svg +0 -0
  364. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/info.svg +0 -0
  365. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/invalid.png +0 -0
  366. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/led-green.svg +0 -0
  367. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/led-grey.svg +0 -0
  368. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/led-orange.svg +0 -0
  369. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/led-red.svg +0 -0
  370. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/led-square-green.svg +0 -0
  371. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/led-square-grey.svg +0 -0
  372. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/led-square-orange.svg +0 -0
  373. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/led-square-red.svg +0 -0
  374. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-green.svg +0 -0
  375. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-red.svg +0 -0
  376. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el+.svg +0 -0
  377. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el-.svg +0 -0
  378. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/location-marker.svg +0 -0
  379. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/logo-dpu.svg +0 -0
  380. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/logo-gimbal.svg +0 -0
  381. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/logo-huber.svg +0 -0
  382. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/logo-ogse.svg +0 -0
  383. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/logo-puna.svg +0 -0
  384. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/logo-tcs.svg +0 -0
  385. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/logo-zonda.svg +0 -0
  386. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/maximize.svg +0 -0
  387. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/meter.svg +0 -0
  388. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/more.svg +0 -0
  389. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-start.svg +0 -0
  390. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-stop.svg +0 -0
  391. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk.svg +0 -0
  392. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/observing-off.svg +0 -0
  393. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/observing-on.svg +0 -0
  394. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.png +0 -0
  395. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.svg +0 -0
  396. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/ops-mode.svg +0 -0
  397. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/play-green.svg +0 -0
  398. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/plugged-disabled.svg +0 -0
  399. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/plugged.svg +0 -0
  400. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/pm_ui.svg +0 -0
  401. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/power-button-green.svg +0 -0
  402. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/power-button-red.svg +0 -0
  403. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/power-button.svg +0 -0
  404. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/radar.svg +0 -0
  405. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/radioactive.svg +0 -0
  406. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/reload.svg +0 -0
  407. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/remote-control-off.svg +0 -0
  408. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/remote-control-on.svg +0 -0
  409. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/repeat-blue.svg +0 -0
  410. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/repeat.svg +0 -0
  411. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/settings.svg +0 -0
  412. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/shrink.svg +0 -0
  413. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/shutter.svg +0 -0
  414. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/sign-off.svg +0 -0
  415. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/sign-on.svg +0 -0
  416. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/sim-mode.svg +0 -0
  417. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/small-buttons-go.svg +0 -0
  418. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/small-buttons-minus.svg +0 -0
  419. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/small-buttons-plus.svg +0 -0
  420. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/sponge.svg +0 -0
  421. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/start-button-disabled.svg +0 -0
  422. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/start-button.svg +0 -0
  423. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/stop-button-disabled.svg +0 -0
  424. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/stop-button.svg +0 -0
  425. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/stop-red.svg +0 -0
  426. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/stop.svg +0 -0
  427. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/switch-disabled-square.svg +0 -0
  428. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/switch-disabled.svg +0 -0
  429. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/switch-off-square.svg +0 -0
  430. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/switch-off.svg +0 -0
  431. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/switch-on-square.svg +0 -0
  432. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/switch-on.svg +0 -0
  433. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/temperature-control.svg +0 -0
  434. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/th_ui_logo.svg +0 -0
  435. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/unplugged.svg +0 -0
  436. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/unvalid.png +0 -0
  437. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/user-interface.svg +0 -0
  438. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/vacuum.svg +0 -0
  439. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/valid.png +0 -0
  440. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-dark.svg +0 -0
  441. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-white.svg +0 -0
  442. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/led.py +0 -0
  443. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/limitswitch.py +0 -0
  444. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/states.py +0 -0
  445. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/styles/dark.qss +0 -0
  446. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/styles/default.qss +0 -0
  447. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/styles.qss +0 -0
  448. {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/switch.py +0 -0
  449. {cgse-0.16.12 → cgse-0.16.14}/mkdocs.yml +0 -0
  450. {cgse-0.16.12 → cgse-0.16.14}/noxfile.py +0 -0
  451. {cgse-0.16.12 → cgse-0.16.14}/overrides/.icons/custom/dbend-dark.svg +0 -0
  452. {cgse-0.16.12 → cgse-0.16.14}/overrides/.icons/custom/dbend-light.svg +0 -0
  453. {cgse-0.16.12 → cgse-0.16.14}/overrides/.icons/custom/gear.svg +0 -0
  454. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/cgse-tools/README.md +0 -0
  455. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/cgse-tools/src/cgse_tools/__init__.py +0 -0
  456. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/cgse-tools/src/cgse_tools/cgse_clock.py +0 -0
  457. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/cgse-tools/src/cgse_tools/cgse_commands.py +0 -0
  458. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/cgse-tools/src/cgse_tools/cgse_services.py +0 -0
  459. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/cgse-tools/src/egse/tools/status.py +0 -0
  460. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/README.md +0 -0
  461. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/justfile +0 -0
  462. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/noxfile.py +0 -0
  463. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/service_registry.db +0 -0
  464. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/__init__.py +0 -0
  465. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510.py +0 -0
  466. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510.yaml +0 -0
  467. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_acs.py +0 -0
  468. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_adev.py +0 -0
  469. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_cs.py +0 -0
  470. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_dev.py +0 -0
  471. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_mon.py +0 -0
  472. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_protocol.py +0 -0
  473. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_sim.py +0 -0
  474. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/__init__.py +0 -0
  475. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/cgse_explore.py +0 -0
  476. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/cgse_services.py +0 -0
  477. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/settings.yaml +0 -0
  478. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/temperature_readings.log +0 -0
  479. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/tests/script_daq6510_central_heating.py +0 -0
  480. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/tests/script_daq6510_mon.py +0 -0
  481. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/tests/script_plot_readings.py +0 -0
  482. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/tests/test_adev.py +0 -0
  483. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/tests/test_dev.py +0 -0
  484. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/lakeshore-tempcontrol/README.md +0 -0
  485. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336.py +0 -0
  486. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336.yaml +0 -0
  487. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_cs.py +0 -0
  488. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_devif.py +0 -0
  489. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_protocol.py +0 -0
  490. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/__init__.py +0 -0
  491. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/cgse_explore.py +0 -0
  492. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/cgse_services.py +0 -0
  493. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/settings.yaml +0 -0
  494. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/lakeshore-tempcontrol/tests/test_lakeshore336_simulator.py +0 -0
  495. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/README.md +0 -0
  496. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/__init__.py +0 -0
  497. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/__init__.py +0 -0
  498. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/alpha.py +0 -0
  499. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/dynalpha.py +0 -0
  500. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod.py +0 -0
  501. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod_ui.py +0 -0
  502. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.py +0 -0
  503. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.yaml +0 -0
  504. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_cs.py +0 -0
  505. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_protocol.py +0 -0
  506. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_ui.py +0 -0
  507. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac.py +0 -0
  508. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac_regex.py +0 -0
  509. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.py +0 -0
  510. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.yaml +0 -0
  511. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_cs.py +0 -0
  512. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_protocol.py +0 -0
  513. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_sim.py +0 -0
  514. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_ui.py +0 -0
  515. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/punaplus.py +0 -0
  516. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.py +0 -0
  517. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.yaml +0 -0
  518. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_cs.py +0 -0
  519. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_devif.py +0 -0
  520. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_protocol.py +0 -0
  521. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_ui.py +0 -0
  522. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/__init__.py +0 -0
  523. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/cgse_explore.py +0 -0
  524. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/cgse_services.py +0 -0
  525. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/settings.yaml +0 -0
  526. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/tests/test_puna.py +0 -0
  527. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/tests/test_puna_cs.py +0 -0
  528. {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/tests/test_puna_simulator.py +0 -0
  529. {cgse-0.16.12 → cgse-0.16.14}/projects/plato/plato-fits/README.md +0 -0
  530. {cgse-0.16.12 → cgse-0.16.14}/projects/plato/plato-fits/src/egse/plugins/storage/fits.py +0 -0
  531. {cgse-0.16.12 → cgse-0.16.14}/projects/plato/plato-hdf5/README.md +0 -0
  532. {cgse-0.16.12 → cgse-0.16.14}/projects/plato/plato-hdf5/src/egse/plugins/storage/hdf5.py +0 -0
  533. {cgse-0.16.12 → cgse-0.16.14}/projects/plato/plato-spw/README.md +0 -0
  534. {cgse-0.16.12 → cgse-0.16.14}/projects/plato/plato-spw/src/egse/spw.py +0 -0
  535. {cgse-0.16.12 → cgse-0.16.14}/ruff.toml +0 -0
  536. {cgse-0.16.12 → cgse-0.16.14}/scratch/advanced-process-monitoring.py +0 -0
  537. {cgse-0.16.12 → cgse-0.16.14}/scratch/live-process-monitoring.py +0 -0
  538. {cgse-0.16.12 → cgse-0.16.14}/scratch/match-case.py +0 -0
  539. {cgse-0.16.12 → cgse-0.16.14}/scratch/processes.json +0 -0
  540. {cgse-0.16.12 → cgse-0.16.14}/scratch/simple-process-monitoring.py +0 -0
  541. {cgse-0.16.12 → cgse-0.16.14}/temperature_readings.log +0 -0
  542. {cgse-0.16.12 → cgse-0.16.14}/test_service_registry.db +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cgse
3
- Version: 0.16.12
3
+ Version: 0.16.14
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.12"
3
+ version = "0.16.14"
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.12"
3
+ version = "0.16.14"
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.12"
3
+ version = "0.16.14"
4
4
  description = "Core services for the CGSE framework"
5
5
  authors = [
6
6
  {name = "IvS KU Leuven"}
@@ -18,7 +18,6 @@ from rich.traceback import Traceback
18
18
  from egse.env import bool_env
19
19
  from egse.exceptions import InitialisationError
20
20
  from egse.log import logging
21
- from egse.process import ProcessStatus
22
21
  from egse.registry.client import AsyncRegistryClient
23
22
  from egse.system import Periodic
24
23
  from egse.system import get_current_location
@@ -104,7 +104,7 @@ def add_cr_lf(cmd_string: str) -> str:
104
104
  return cmd_string
105
105
 
106
106
 
107
- def expand_kwargs(kwargs: Dict):
107
+ def expand_kwargs(kwargs: Dict) -> str:
108
108
  """Expand keyword arguments and their values as 'key=value' separated by spaces."""
109
109
  return " ".join(f"{k}={v}" for k, v in kwargs.items())
110
110
 
@@ -121,6 +121,7 @@ def dynamic_command(
121
121
  *,
122
122
  cmd_type: str, # required keyword-only argument
123
123
  cmd_string: str = None,
124
+ cmd_string_func: Callable = None,
124
125
  process_response: Callable = None,
125
126
  process_cmd_string: Callable = None,
126
127
  process_kwargs: Callable = None,
@@ -179,6 +180,7 @@ def dynamic_command(
179
180
  Args:
180
181
  cmd_type (str): one of 'read', 'write', 'query', or 'transaction' [required keyword]
181
182
  cmd_string (str): format string for the generation of the instrument command
183
+ cmd_string_func (Callable): DIY function that will create a command string
182
184
  process_response (Callable): function to process the response
183
185
  process_cmd_string (Callable): function to process the command string after substitution
184
186
  process_kwargs (Callable): function to expand the kwargs after substitution
@@ -192,8 +194,8 @@ def dynamic_command(
192
194
  if cmd_type not in COMMAND_TYPES:
193
195
  raise ValueError(f"Unknown type passed into dynamic command decorator: {type=}")
194
196
 
195
- if cmd_type in ("write", "query", "transaction") and cmd_string is None:
196
- raise ValueError(f"No cmd_string was provided for {cmd_type=}.")
197
+ if cmd_type in ("write", "query", "transaction") and cmd_string is None and cmd_string_func is None:
198
+ raise ValueError(f"No cmd_string nor a cmd_string_func was provided for {cmd_type=}.")
197
199
 
198
200
  def func_wrapper(func: Callable):
199
201
  """Adds the different static attributes."""
@@ -205,6 +207,9 @@ def dynamic_command(
205
207
  if cmd_string is not None:
206
208
  setattr(func, "__cmd_string", cmd_string)
207
209
 
210
+ if cmd_string_func is not None:
211
+ setattr(func, "__cmd_string_func", cmd_string_func)
212
+
208
213
  if process_response is not None:
209
214
  setattr(func, "__process_response", process_response)
210
215
 
@@ -250,11 +255,31 @@ class DynamicCommandMixin:
250
255
  raise AttributeError("Transport was not defined in sub-class of DynamicInterfaceMixin")
251
256
 
252
257
  @staticmethod
253
- def create_command_string(func: Callable, template_str: str, *args, **kwargs):
258
+ def create_command_string(func: Callable, provider: str | Callable[..., str], *args, **kwargs) -> str:
254
259
  """
255
- Creates a command string that is understood by the instrument. This can be an SCPI
256
- command or a specific proprietary command string. The `cmd_str` can contain placeholders
257
- similar to what is used in string formatting.
260
+ Create the instrument command string from a template or from a provider callable.
261
+
262
+ The resulting string can be an SCPI command or a specific proprietary command string.
263
+
264
+ The `provider` argument controls how the raw command string is produced:
265
+
266
+ - If `provider` is a **callable**, it is invoked as `provider(*args, **kwargs)` and must
267
+ return the fully formed command string. This allows arbitrary construction logic
268
+ (e.g. conditional pieces, lookups, or complex formatting) outside the template
269
+ mechanics used below.
270
+
271
+ - If `provider` is a **string**, it is treated as a template and variables are
272
+ substituted from the bound arguments of `func`. Two string styles are supported:
273
+
274
+ - Template style using `string.Template` with `$name` placeholders (safe substitution).
275
+ - Format style using `str.format` with `{name}` placeholders, activated when
276
+ the wrapped `func` has the `__use_format` attribute set.
277
+
278
+ The code binds `args` and `kwargs` to `func`'s signature to produce a mapping of
279
+ parameter names to values. For parameters declared as `**kwargs` the mixin will
280
+ expand them with a `__process_kwargs` callable if present on `func`, otherwise
281
+ it uses the default `expand_kwargs`. When template substitution is used, enum
282
+ values are converted to their `.value`.
258
283
 
259
284
  As an example, we have a function with two positional arguments 'a', and 'b' and one keyword
260
285
  argument flag:
@@ -265,49 +290,67 @@ class DynamicCommandMixin:
265
290
  We have the following template string: `CREATE:FUN:${a} ${b} [${flag}]`.
266
291
 
267
292
  When we call the function as follows: `func("TEMP", 23)`, we would then expect
268
- the returned string to be "CREATE:FUN:TEMP 23 [True]"
293
+ the returned string to be "CREATE:FUN:TEMP 23 [True]".This function will be called as:
269
294
 
270
- DynamicCommandMixin.create_command_string(func, template, "TEMP", 23)
295
+ DynamicCommandMixin.create_command_string(func, provider, "TEMP", 23)
296
+
297
+ Note:
298
+ The processing attributes `__process_kwargs` and `__use_format` are only used when
299
+ `provider` is a string. The attribute `__process_cmd_string` is used when `provider`
300
+ is a template/format string or when it's a callable. The `__process_cmd_string` is
301
+ the last action taken before the result is returned.
271
302
 
272
303
  Args:
273
- func (Callable): a function or method that provides the signature
274
- template_str (str): a template for the command
304
+ func (Callable): a function or method that provides the signature which defines
305
+ the names available for substitution. The function may also carry processing
306
+ attributes (`__use_format`, `__process_kwargs`, `__process_cmd_string`).
307
+ provider (str | Callable): a template/format string or a function that returns a string
275
308
  args (tuple): positional arguments that will be used in the command string
276
309
  kwargs (dict): keywords arguments that will be used in the command string
277
- """
278
- try:
279
- process_kwargs = getattr(func, "__process_kwargs")
280
- except AttributeError:
281
- process_kwargs = expand_kwargs
282
310
 
283
- template = string.Template(template_str)
311
+ Returns:
312
+ the final command string ready to be sent to the transport.
284
313
 
285
- sig = inspect.signature(func)
286
- try:
287
- bound = sig.bind(*args, **kwargs)
288
- except TypeError as exc:
289
- raise CommandError(
290
- f"Arguments {args}, {kwargs} do not match function signature for {func.__name__}{sig}"
291
- ) from exc
292
-
293
- variables = {}
294
- for idx, par in enumerate(sig.parameters.values()):
295
- # if the argument is of signature '**kwargs' then expand the kwargs
296
- if par.kind == inspect.Parameter.VAR_KEYWORD:
297
- variables[par.name] = process_kwargs(bound.arguments[par.name])
298
- continue
299
-
300
- # otherwise, use the argument value or the default
301
- try:
302
- variables[par.name] = bound.arguments[par.name]
303
- except KeyError:
304
- variables[par.name] = par.default
314
+ Raises:
315
+ CommandError: if `args`/`kwargs` cannot be bound to `func`'s signature.
316
+ """
305
317
 
306
- if hasattr(func, "__use_format"):
307
- cmd_string = template_str.format(**variables)
318
+ if callable(provider):
319
+ cmd_string = provider(*args, **kwargs)
308
320
  else:
309
- variables = {k: v.value if isinstance(v, enum.Enum) else v for k, v in variables.items()}
310
- cmd_string = template.safe_substitute(variables)
321
+ try:
322
+ process_kwargs = getattr(func, "__process_kwargs")
323
+ except AttributeError:
324
+ process_kwargs = expand_kwargs
325
+
326
+ template = string.Template(template_str := provider)
327
+
328
+ sig = inspect.signature(func)
329
+ try:
330
+ bound = sig.bind(*args, **kwargs)
331
+ except TypeError as exc:
332
+ raise CommandError(
333
+ f"Arguments {args}, {kwargs} do not match function signature for {func.__name__}{sig}"
334
+ ) from exc
335
+
336
+ variables = {}
337
+ for idx, par in enumerate(sig.parameters.values()):
338
+ # if the argument is of signature '**kwargs' then expand the kwargs
339
+ if par.kind == inspect.Parameter.VAR_KEYWORD:
340
+ variables[par.name] = process_kwargs(bound.arguments[par.name])
341
+ continue
342
+
343
+ # otherwise, use the argument value or the default
344
+ try:
345
+ variables[par.name] = bound.arguments[par.name]
346
+ except KeyError:
347
+ variables[par.name] = par.default
348
+
349
+ if hasattr(func, "__use_format"):
350
+ cmd_string = template_str.format(**variables)
351
+ else:
352
+ variables = {k: v.value if isinstance(v, enum.Enum) else v for k, v in variables.items()}
353
+ cmd_string = template.safe_substitute(variables)
311
354
 
312
355
  try:
313
356
  process_cmd_string = getattr(func, "__process_cmd_string")
@@ -337,10 +380,14 @@ class DynamicCommandMixin:
337
380
  @functools.wraps(attr)
338
381
  def command_wrapper(*args, **kwargs):
339
382
  """Generates command strings and executes the transport functions."""
340
- try:
383
+
384
+ if hasattr(attr, "__cmd_string"):
341
385
  cmd_str = getattr(attr, "__cmd_string")
342
386
  cmd_str = self.create_command_string(attr, cmd_str, *args, **kwargs)
343
- except AttributeError:
387
+ elif hasattr(attr, "__cmd_string_func"):
388
+ func = getattr(attr, "__cmd_string_func")
389
+ cmd_str = self.create_command_string(attr, func, *args, **kwargs)
390
+ else:
344
391
  cmd_str = None
345
392
 
346
393
  response = None
@@ -201,11 +201,32 @@ def pre_command(transport: DeviceTransport = None, **kwargs):
201
201
  LOGGER.info(f"Inside pre_command({transport.__class__.__name__}, {kwargs})")
202
202
 
203
203
 
204
- def post_command(transport: DeviceTransport = None, response: bytes = None):
204
+ def post_command(transport: DeviceTransport = None, response: bytes = None) -> bytes:
205
205
  LOGGER.info(f"Inside post_command(transport={transport.__class__.__name__}, {response=})")
206
206
  return response
207
207
 
208
208
 
209
+ def rewrite_kwargs(kwargs: dict) -> str:
210
+ """Rewrite some of the keyword arguments according to device specs."""
211
+
212
+ def calc_crc(data) -> int:
213
+ return len(data)
214
+
215
+ # assume we need to build our own fancy device command string...
216
+ address = kwargs.get("address")
217
+ identifier = kwargs.get("identifier")
218
+ cargo1 = kwargs.get("cargo1", 1)
219
+ cargo2 = kwargs.get("cargo2", 2)
220
+
221
+ cmd = f"{address:06X} 0x{identifier:06x} DEV_07463 CARGO1={cargo1:04d} CARGO2={cargo2}"
222
+
223
+ return f"{cmd} {calc_crc(cmd)}"
224
+
225
+
226
+ def create_fancy_cmd_string(a: str, b: int, *, c: float, d: str) -> str:
227
+ return f"FANCY {a}, {d} – {b:04d} {c=:.3f}"
228
+
229
+
209
230
  class NewStyleCommandInterface:
210
231
  """Interface definition for new style dynamic commands."""
211
232
 
@@ -251,10 +272,26 @@ class NewStyleCommandInterface:
251
272
  def test_cmd_enum_with_format(self, enumeration: MyEnum):
252
273
  """Returns the command string"""
253
274
 
275
+ @dynamic_command(cmd_type="transaction", cmd_string="ARG_EXPANSION::{mode}::{crc:06x}", use_format=True)
276
+ def test_cmd_with_arg_expansion(self, *, mode, crc):
277
+ """Return the command string, after processing the arguments in the overriding function."""
278
+
254
279
  @dynamic_command(cmd_type="transaction", cmd_string="msg = ${msg}", pre_cmd=pre_command, post_cmd=post_command)
255
- def test_cmd_pre_post(self, msg: str):
280
+ def test_cmd_pre_post(self, msg: str) -> bytes:
256
281
  """Return the command string, executes pre- and post-commands."""
257
282
 
283
+ @dynamic_command(cmd_type="transaction", cmd_string="TRANS ${a} ${kwargs}")
284
+ def test_cmd_process_kwargs(self, *, a, **kwargs):
285
+ """Returns the command string."""
286
+
287
+ @dynamic_command(cmd_type="transaction", cmd_string="TRANS ${kwargs}", process_kwargs=rewrite_kwargs)
288
+ def test_cmd_rewrite_kwargs(self, **kwargs):
289
+ """Returns the command string with rewritten kwargs."""
290
+
291
+ @dynamic_command(cmd_type="transaction", cmd_string_func=create_fancy_cmd_string)
292
+ def test_cmd_string_func(self, a: str, b: int, *, c: float, d: str) -> bytes:
293
+ """Returns a command string based on the arguments."""
294
+
258
295
 
259
296
  class NewStyleCommand(DynamicCommandMixin, NewStyleCommandInterface):
260
297
  """Simple new style commanding interface."""
@@ -263,6 +300,26 @@ class NewStyleCommand(DynamicCommandMixin, NewStyleCommandInterface):
263
300
  self.transport = NewStyleTransport()
264
301
  super().__init__()
265
302
 
303
+ def test_cmd_with_arg_expansion(self, *, mode, **kwargs):
304
+ # This function overrides the function from the NewStyleCommandInterface. The reason for doing that is
305
+ # because we need to reformat and/or process the arguments before passing them to the decorated function.
306
+
307
+ # rewrite 'mode'
308
+ mode = f"{mode:04x}"
309
+
310
+ if "crc" in kwargs:
311
+ crc = kwargs["crc"]
312
+ else:
313
+ # 'calculate' the checksum
314
+ crc = 0x1234
315
+
316
+ # pass the method as defined in the NewStyleCommandInterface, to the handle_dynamic_command method of
317
+ # the mixin class. Provide the expected parameters as if the decorated function would have been called.
318
+ return DynamicCommandMixin.handle_dynamic_command(self, super().test_cmd_with_arg_expansion)(mode=mode, crc=crc)
319
+
320
+ # Note that the following doesn't work, I didn't really figure out why yet...
321
+ # return super().test_cmd_with_mode_expansion(mode, crc)
322
+
266
323
 
267
324
  def test_new_style(caplog):
268
325
  caplog.set_level(logging.INFO)
@@ -319,6 +376,19 @@ def test_new_style(caplog):
319
376
  in caplog.text
320
377
  )
321
378
 
379
+ assert ns.test_cmd_with_arg_expansion(mode=23) == b"ARG_EXPANSION::0017::001234"
380
+ assert ns.test_cmd_with_arg_expansion(mode=0x10, crc=5678) == b"ARG_EXPANSION::0010::00162e"
381
+
382
+ # This tests the expansion of kwargs in the function's signature, by the default `expand_kwargs`
383
+ assert ns.test_cmd_process_kwargs(a=5, b=2, c=3) == b"TRANS 5 b=2 c=3"
384
+
385
+ tcu_mode = 42 # == 0x2A
386
+ assert ns.test_cmd_rewrite_kwargs(address=5, identifier=2, cargo2=f"{hex(int(tcu_mode))[2:].zfill(4)}") == (
387
+ b"TRANS 000005 0x000002 DEV_07463 CARGO1=0001 CARGO2=002a 49"
388
+ )
389
+
390
+ assert ns.test_cmd_string_func("Hello!", 5, c=3.14, d="World!").decode() == "FANCY Hello!, World! – 0005 c=3.140"
391
+
322
392
 
323
393
  def test_interface_definition():
324
394
  with pytest.raises(TypeError):
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "cgse-gui"
3
- version = "0.16.12"
3
+ version = "0.16.14"
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.12"
3
+ version = "0.16.14"
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.12"
3
+ version = "0.16.14"
4
4
  description = "Keithley Temperature Control for CGSE"
5
5
  authors = [
6
6
  {name = "IvS KU Leuven"}
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "lakeshore-tempcontrol"
3
- version = "0.16.12"
3
+ version = "0.16.14"
4
4
  description = "Lakeshore Temperature Control for CGSE"
5
5
  authors = [
6
6
  {name = "IVS KU Leuven"}
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "symetrie-hexapod"
3
- version = "0.16.12"
3
+ version = "0.16.14"
4
4
  description = "Symetrie Hexapod implementation for CGSE"
5
5
  authors = [
6
6
  {name = "IvS KU Leuven"}
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "plato-fits"
3
- version = "0.16.12"
3
+ version = "0.16.14"
4
4
  description = "FITS Persistence implementation for CGSE"
5
5
  authors = [
6
6
  {name = "IvS KU Leuven"}
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "plato-hdf5"
3
- version = "0.16.12"
3
+ version = "0.16.14"
4
4
  description = "HDF5 Persistence sub-class for CGSE"
5
5
  authors = [
6
6
  {name = "IvS KU Leuven"}
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "plato-spw"
3
- version = "0.16.12"
3
+ version = "0.16.14"
4
4
  description = "SpaceWire implementation for CGSE"
5
5
  authors = [
6
6
  {name = "IvS KU Leuven"}
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "cgse"
3
- version = "0.16.12"
3
+ version = "0.16.14"
4
4
  description = "Generic Common-EGSE: Commanding and monitoring lab equipment"
5
5
  authors = [
6
6
  {name = "IvS KU Leuven"}
index 7a86c87..cf0d803 100644
Binary file
index f188d32..8ba4405 100644
Binary file
index 8bddc71..46bd6a9 100644
Binary file
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes