cgse 2025.0.3__tar.gz → 2025.0.6__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 (334) hide show
  1. {cgse-2025.0.3 → cgse-2025.0.6}/NOTES.md +0 -23
  2. {cgse-2025.0.3 → cgse-2025.0.6}/PKG-INFO +1 -1
  3. cgse-2025.0.6/conftest.py +30 -0
  4. cgse-2025.0.6/docs/custom_theme/main.html +32 -0
  5. cgse-2025.0.6/docs/dev_guide/index.md +6 -0
  6. {cgse-2025.0.3 → cgse-2025.0.6}/docs/dev_guide/uv.md +30 -9
  7. cgse-2025.0.6/docs/getting_started.md +91 -0
  8. cgse-2025.0.6/docs/libs/cgse-common/images/load_methods.png +0 -0
  9. cgse-2025.0.6/docs/libs/cgse-common/index.md +37 -0
  10. cgse-2025.0.6/docs/libs/cgse-common/settings.md +253 -0
  11. cgse-2025.0.6/docs/libs/cgse-common/setup.md +1 -0
  12. cgse-2025.0.6/docs/libs/cgse-coordinates/index.md +2 -0
  13. cgse-2025.0.6/docs/libs/cgse-core/index.md +1 -0
  14. cgse-2025.0.6/docs/libs/cgse-gui/index.md +1 -0
  15. cgse-2025.0.6/docs/libs/index.md +11 -0
  16. cgse-2025.0.6/docs/package_list.md +16 -0
  17. cgse-2025.0.6/docs/projects/cgse-tools.md +2 -0
  18. cgse-2025.0.6/docs/projects/index.md +16 -0
  19. cgse-2025.0.6/docs/projects/symetrie-hexapod.md +2 -0
  20. {cgse-2025.0.3 → cgse-2025.0.6}/docs/stylesheets/custom.css +9 -33
  21. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/pyproject.toml +7 -3
  22. {cgse-2025.0.3/libs/cgse-common/src/egse → cgse-2025.0.6/libs/cgse-common/src/cgse_common}/settings.yaml +4 -1
  23. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/src/egse/command.py +1 -1
  24. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/src/egse/control.py +0 -1
  25. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/src/egse/decorators.py +13 -4
  26. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/src/egse/env.py +231 -35
  27. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/src/egse/hk.py +11 -13
  28. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/src/egse/plugin.py +68 -6
  29. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/src/egse/protocol.py +1 -1
  30. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/src/egse/response.py +2 -1
  31. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/src/egse/services.py +4 -1
  32. cgse-2025.0.6/libs/cgse-common/src/egse/settings.py +448 -0
  33. cgse-2025.0.6/libs/cgse-common/src/egse/settings.yaml +5 -0
  34. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/src/egse/setup.py +50 -27
  35. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/src/egse/system.py +23 -17
  36. cgse-2025.0.6/libs/cgse-common/tests/conftest.py +4 -0
  37. cgse-2025.0.6/libs/cgse-common/tests/data/LAB23/README.md +4 -0
  38. cgse-2025.0.6/libs/cgse-common/tests/data/common/telemetry/tm-dictionary-default.csv +3 -0
  39. cgse-2025.0.6/libs/cgse-common/tests/data/data/command.yaml +5 -0
  40. cgse-2025.0.6/libs/cgse-common/tests/data/data/local_settings.yaml +3 -0
  41. cgse-2025.0.6/libs/cgse-common/tests/fixtures/default_env.py +38 -0
  42. cgse-2025.0.6/libs/cgse-common/tests/fixtures/helpers.py +237 -0
  43. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/tests/test_decorators.py +7 -6
  44. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/tests/test_env.py +70 -34
  45. cgse-2025.0.6/libs/cgse-common/tests/test_fixtures.py +12 -0
  46. cgse-2025.0.6/libs/cgse-common/tests/test_hk.py +133 -0
  47. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/tests/test_resource.py +2 -2
  48. cgse-2025.0.6/libs/cgse-common/tests/test_settings.py +127 -0
  49. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/tests/test_setup.py +279 -77
  50. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/tests/test_system.py +2 -2
  51. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-coordinates/pyproject.toml +1 -1
  52. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-core/pyproject.toml +24 -5
  53. cgse-2025.0.6/libs/cgse-core/src/cgse_core/settings.yaml +35 -0
  54. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-core/src/egse/confman/__init__.py +47 -26
  55. cgse-2025.0.6/libs/cgse-core/src/egse/confman/__main__.py +0 -0
  56. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-core/src/egse/confman/confman_cs.py +7 -10
  57. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-core/src/egse/logger/log_cs.py +2 -2
  58. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-core/src/egse/procman/__init__.py +7 -2
  59. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-core/src/egse/storage/__init__.py +12 -11
  60. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-core/src/egse/storage/storage_cs.py +4 -4
  61. cgse-2025.0.6/libs/cgse-core/tests/conftest.py +5 -0
  62. cgse-2025.0.6/libs/cgse-core/tests/data/local_settings.yaml +8 -0
  63. cgse-2025.0.6/libs/cgse-core/tests/fixtures/default_env.py +38 -0
  64. cgse-2025.0.6/libs/cgse-core/tests/fixtures/helpers.py +237 -0
  65. cgse-2025.0.3/libs/cgse-core/tests/conftest.py → cgse-2025.0.6/libs/cgse-core/tests/fixtures/services.py +3 -6
  66. cgse-2025.0.6/libs/cgse-core/tests/test_confman_setups.py +35 -0
  67. cgse-2025.0.6/libs/cgse-core/tests/test_settings_core.py +92 -0
  68. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/pyproject.toml +1 -1
  69. {cgse-2025.0.3 → cgse-2025.0.6}/mkdocs.yml +42 -9
  70. {cgse-2025.0.3 → cgse-2025.0.6}/projects/generic/cgse-tools/pyproject.toml +1 -1
  71. {cgse-2025.0.3 → cgse-2025.0.6}/projects/generic/symetrie-hexapod/pyproject.toml +1 -1
  72. {cgse-2025.0.3 → cgse-2025.0.6}/projects/plato/plato-fits/pyproject.toml +1 -1
  73. cgse-2025.0.6/projects/plato/plato-hdf5/README.md +0 -0
  74. {cgse-2025.0.3 → cgse-2025.0.6}/projects/plato/plato-hdf5/pyproject.toml +1 -1
  75. cgse-2025.0.6/projects/plato/plato-spw/README.md +0 -0
  76. {cgse-2025.0.3 → cgse-2025.0.6}/projects/plato/plato-spw/pyproject.toml +1 -1
  77. {cgse-2025.0.3 → cgse-2025.0.6}/pyproject.toml +21 -1
  78. cgse-2025.0.3/docs/custom_theme/main.html +0 -54
  79. cgse-2025.0.3/docs/dev_guide/index.md +0 -3
  80. cgse-2025.0.3/docs/getting_started.md +0 -6
  81. cgse-2025.0.3/docs.zip +0 -0
  82. cgse-2025.0.3/libs/cgse-common/src/egse/settings.py +0 -381
  83. cgse-2025.0.3/libs/cgse-common/tests/helpers.py +0 -108
  84. cgse-2025.0.3/libs/cgse-common/tests/test_hk.py +0 -54
  85. cgse-2025.0.3/libs/cgse-core/tests/test_confman_setups.py +0 -25
  86. {cgse-2025.0.3 → cgse-2025.0.6}/.gitignore +0 -0
  87. {cgse-2025.0.3 → cgse-2025.0.6}/README.md +0 -0
  88. {cgse-2025.0.3 → cgse-2025.0.6}/TODO.md +0 -0
  89. {cgse-2025.0.3 → cgse-2025.0.6}/bump.py +0 -0
  90. {cgse-2025.0.3 → cgse-2025.0.6}/docs/dev_guide/coding_style.md +0 -0
  91. {cgse-2025.0.3 → cgse-2025.0.6}/docs/dev_guide/docs.md +0 -0
  92. {cgse-2025.0.3 → cgse-2025.0.6}/docs/dev_guide/installation.md +0 -0
  93. {cgse-2025.0.3 → cgse-2025.0.6}/docs/help.md +0 -0
  94. {cgse-2025.0.3 → cgse-2025.0.6}/docs/images/icons/cgse-logo-blue.svg +0 -0
  95. {cgse-2025.0.3 → cgse-2025.0.6}/docs/images/icons/cgse-logo.svg +0 -0
  96. {cgse-2025.0.3 → cgse-2025.0.6}/docs/index.md +0 -0
  97. {cgse-2025.0.3 → cgse-2025.0.6}/docs/tutorial.md +0 -0
  98. {cgse-2025.0.3 → cgse-2025.0.6}/docs/user_guide/index.md +0 -0
  99. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/README.md +0 -0
  100. /cgse-2025.0.3/libs/cgse-common/tests/data/conf/config-file.toml → /cgse-2025.0.6/libs/cgse-common/src/cgse_common/__init__.py +0 -0
  101. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/src/egse/bits.py +0 -0
  102. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/src/egse/calibration.py +0 -0
  103. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/src/egse/config.py +0 -0
  104. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/src/egse/device.py +0 -0
  105. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/src/egse/exceptions.py +0 -0
  106. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/src/egse/metrics.py +0 -0
  107. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/src/egse/mixin.py +0 -0
  108. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/src/egse/monitoring.py +0 -0
  109. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/src/egse/observer.py +0 -0
  110. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/src/egse/obsid.py +0 -0
  111. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/src/egse/persistence.py +0 -0
  112. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/src/egse/process.py +0 -0
  113. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/src/egse/proxy.py +0 -0
  114. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/src/egse/reload.py +0 -0
  115. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/src/egse/resource.py +0 -0
  116. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/src/egse/services.yaml +0 -0
  117. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/src/egse/state.py +0 -0
  118. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/src/egse/version.py +0 -0
  119. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/src/egse/zmq_ser.py +0 -0
  120. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00028_201028_155259.yaml +0 -0
  121. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00029_201028_155331.yaml +0 -0
  122. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00030_210311_134043.yaml +0 -0
  123. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00080_210917_105245.yaml +0 -0
  124. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00081_210922_142259.yaml +0 -0
  125. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00082_210923_094458.yaml +0 -0
  126. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/tests/data/CSL1/README.md +0 -0
  127. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/tests/data/CSL2/README.md +0 -0
  128. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/tests/data/IAS/README.md +0 -0
  129. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/tests/data/INTA/README.md +0 -0
  130. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00027_211119_140441.yaml +0 -0
  131. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00028_211119_160406.yaml +0 -0
  132. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00029_211119_172918.yaml +0 -0
  133. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00030_211122_103604.yaml +0 -0
  134. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00031_211123_124900.yaml +0 -0
  135. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/tests/data/conf/SETUP_20250114_1519.yaml +0 -0
  136. /cgse-2025.0.3/libs/cgse-common/tests/data/data/empty_data_file.txt → /cgse-2025.0.6/libs/cgse-common/tests/data/conf/config-file.toml +0 -0
  137. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/tests/data/data/cal_coeff_1234.csv +0 -0
  138. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/tests/data/data/calibration.csv +0 -0
  139. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/tests/data/data/calibration.yaml +0 -0
  140. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/tests/data/data/corrupt.yaml +0 -0
  141. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/tests/data/data/data-file.txt +0 -0
  142. /cgse-2025.0.3/libs/cgse-common/tests/data/lib/dev1/shared-lib.so → /cgse-2025.0.6/libs/cgse-common/tests/data/data/empty_data_file.txt +0 -0
  143. /cgse-2025.0.3/libs/cgse-common/tests/data/lib/dev2/shared-lib.so → /cgse-2025.0.6/libs/cgse-common/tests/data/data/empty_yaml_file.yaml +0 -0
  144. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/tests/data/data/test_setup.yaml +0 -0
  145. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/tests/data/icons/keyboard.png +0 -0
  146. /cgse-2025.0.3/libs/cgse-common/tests/test_control.py → /cgse-2025.0.6/libs/cgse-common/tests/data/lib/dev1/shared-lib.so +0 -0
  147. /cgse-2025.0.3/libs/cgse-core/src/egse/confman/__main__.py → /cgse-2025.0.6/libs/cgse-common/tests/data/lib/dev2/shared-lib.so +0 -0
  148. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/tests/dummy.py +0 -0
  149. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/tests/test_bits.py +0 -0
  150. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/tests/test_command.py +0 -0
  151. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/tests/test_config.py +0 -0
  152. /cgse-2025.0.3/projects/plato/plato-hdf5/README.md → /cgse-2025.0.6/libs/cgse-common/tests/test_control.py +0 -0
  153. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/tests/test_device.py +0 -0
  154. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-common/tests/test_response.py +0 -0
  155. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-coordinates/README.md +0 -0
  156. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-coordinates/src/egse/coordinates/__init__.py +0 -0
  157. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-coordinates/src/egse/coordinates/avoidance.py +0 -0
  158. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-coordinates/src/egse/coordinates/cslmodel.py +0 -0
  159. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-coordinates/src/egse/coordinates/laser_tracker_to_dict.py +0 -0
  160. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-coordinates/src/egse/coordinates/point.py +0 -0
  161. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-coordinates/src/egse/coordinates/pyplot.py +0 -0
  162. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-coordinates/src/egse/coordinates/referenceFrame.py +0 -0
  163. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-coordinates/src/egse/coordinates/refmodel.py +0 -0
  164. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-coordinates/src/egse/coordinates/rotationMatrix.py +0 -0
  165. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-coordinates/src/egse/coordinates/transform3d_addon.py +0 -0
  166. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-core/.envrc.disabled +0 -0
  167. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-core/README.md +0 -0
  168. /cgse-2025.0.3/projects/plato/plato-spw/README.md → /cgse-2025.0.6/libs/cgse-core/src/cgse_core/__init__.py +0 -0
  169. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-core/src/egse/confman/confman.yaml +0 -0
  170. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-core/src/egse/logger/__init__.py +0 -0
  171. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-core/src/egse/logger/__main__.py +0 -0
  172. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-core/src/egse/procman/procman.yaml +0 -0
  173. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-core/src/egse/procman/procman_cs.py +0 -0
  174. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-core/src/egse/storage/__main__.py +0 -0
  175. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-core/src/egse/storage/persistence.py +0 -0
  176. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-core/src/egse/storage/storage.yaml +0 -0
  177. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-core/src/scripts/cgse.py +0 -0
  178. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-core/tests/test_logger.py +0 -0
  179. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/README.md +0 -0
  180. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/__init__.py +0 -0
  181. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/buttons.py +0 -0
  182. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-start.svg +0 -0
  183. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-stop.svg +0 -0
  184. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/aeu-cs.svg +0 -0
  185. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-started.svg +0 -0
  186. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-stopped.svg +0 -0
  187. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/aeu_cs.svg +0 -0
  188. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/alert.svg +0 -0
  189. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/arrow-double-left.png +0 -0
  190. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/arrow-double-right.png +0 -0
  191. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/arrow-up.svg +0 -0
  192. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/backward.svg +0 -0
  193. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/busy.svg +0 -0
  194. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/cleaning.svg +0 -0
  195. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/color-scheme.svg +0 -0
  196. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/cs-connected-alert.svg +0 -0
  197. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/cs-connected-disabled.svg +0 -0
  198. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/cs-connected.svg +0 -0
  199. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/cs-not-connected.svg +0 -0
  200. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/double-left-arrow.svg +0 -0
  201. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/double-right-arrow.svg +0 -0
  202. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/erase-disabled.svg +0 -0
  203. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/erase.svg +0 -0
  204. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/fitsgen-start.svg +0 -0
  205. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/fitsgen-stop.svg +0 -0
  206. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/fitsgen.svg +0 -0
  207. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/forward.svg +0 -0
  208. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/fov-hk-start.svg +0 -0
  209. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/fov-hk-stop.svg +0 -0
  210. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/fov-hk.svg +0 -0
  211. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/front-desk.svg +0 -0
  212. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/home-actioned.svg +0 -0
  213. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/home-disabled.svg +0 -0
  214. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/home.svg +0 -0
  215. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/info.svg +0 -0
  216. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/invalid.png +0 -0
  217. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/led-green.svg +0 -0
  218. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/led-grey.svg +0 -0
  219. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/led-orange.svg +0 -0
  220. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/led-red.svg +0 -0
  221. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/led-square-green.svg +0 -0
  222. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/led-square-grey.svg +0 -0
  223. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/led-square-orange.svg +0 -0
  224. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/led-square-red.svg +0 -0
  225. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-green.svg +0 -0
  226. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-red.svg +0 -0
  227. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el+.svg +0 -0
  228. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el-.svg +0 -0
  229. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/location-marker.svg +0 -0
  230. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/logo-dpu.svg +0 -0
  231. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/logo-gimbal.svg +0 -0
  232. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/logo-huber.svg +0 -0
  233. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/logo-ogse.svg +0 -0
  234. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/logo-puna.svg +0 -0
  235. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/logo-tcs.svg +0 -0
  236. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/logo-zonda.svg +0 -0
  237. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/maximize.svg +0 -0
  238. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/meter.svg +0 -0
  239. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/more.svg +0 -0
  240. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-start.svg +0 -0
  241. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-stop.svg +0 -0
  242. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk.svg +0 -0
  243. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/observing-off.svg +0 -0
  244. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/observing-on.svg +0 -0
  245. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.png +0 -0
  246. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.svg +0 -0
  247. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/ops-mode.svg +0 -0
  248. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/play-green.svg +0 -0
  249. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/plugged-disabled.svg +0 -0
  250. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/plugged.svg +0 -0
  251. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/pm_ui.svg +0 -0
  252. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/power-button-green.svg +0 -0
  253. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/power-button-red.svg +0 -0
  254. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/power-button.svg +0 -0
  255. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/radar.svg +0 -0
  256. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/radioactive.svg +0 -0
  257. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/reload.svg +0 -0
  258. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/remote-control-off.svg +0 -0
  259. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/remote-control-on.svg +0 -0
  260. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/repeat-blue.svg +0 -0
  261. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/repeat.svg +0 -0
  262. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/settings.svg +0 -0
  263. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/shrink.svg +0 -0
  264. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/shutter.svg +0 -0
  265. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/sign-off.svg +0 -0
  266. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/sign-on.svg +0 -0
  267. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/sim-mode.svg +0 -0
  268. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/small-buttons-go.svg +0 -0
  269. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/small-buttons-minus.svg +0 -0
  270. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/small-buttons-plus.svg +0 -0
  271. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/sponge.svg +0 -0
  272. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/start-button-disabled.svg +0 -0
  273. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/start-button.svg +0 -0
  274. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/stop-button-disabled.svg +0 -0
  275. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/stop-button.svg +0 -0
  276. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/stop-red.svg +0 -0
  277. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/stop.svg +0 -0
  278. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/switch-disabled-square.svg +0 -0
  279. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/switch-disabled.svg +0 -0
  280. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/switch-off-square.svg +0 -0
  281. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/switch-off.svg +0 -0
  282. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/switch-on-square.svg +0 -0
  283. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/switch-on.svg +0 -0
  284. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/temperature-control.svg +0 -0
  285. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/th_ui_logo.svg +0 -0
  286. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/unplugged.svg +0 -0
  287. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/unvalid.png +0 -0
  288. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/user-interface.svg +0 -0
  289. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/vacuum.svg +0 -0
  290. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/valid.png +0 -0
  291. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-dark.svg +0 -0
  292. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-white.svg +0 -0
  293. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/led.py +0 -0
  294. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/limitswitch.py +0 -0
  295. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/states.py +0 -0
  296. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/styles/dark.qss +0 -0
  297. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/styles/default.qss +0 -0
  298. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/styles.qss +0 -0
  299. {cgse-2025.0.3 → cgse-2025.0.6}/libs/cgse-gui/src/egse/gui/switch.py +0 -0
  300. {cgse-2025.0.3 → cgse-2025.0.6}/projects/generic/cgse-tools/README.md +0 -0
  301. {cgse-2025.0.3 → cgse-2025.0.6}/projects/generic/cgse-tools/src/egse/tools/status.py +0 -0
  302. {cgse-2025.0.3 → cgse-2025.0.6}/projects/generic/cgse-tools/src/scripts/cgse_plugins.py +0 -0
  303. {cgse-2025.0.3 → cgse-2025.0.6}/projects/generic/cgse-tools/src/scripts/cgse_service_plugins.py +0 -0
  304. {cgse-2025.0.3 → cgse-2025.0.6}/projects/generic/symetrie-hexapod/README.md +0 -0
  305. {cgse-2025.0.3 → cgse-2025.0.6}/projects/generic/symetrie-hexapod/src/egse/hexapod/__init__.py +0 -0
  306. {cgse-2025.0.3 → cgse-2025.0.6}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/__init__.py +0 -0
  307. {cgse-2025.0.3 → cgse-2025.0.6}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/alpha.py +0 -0
  308. {cgse-2025.0.3 → cgse-2025.0.6}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/dynalpha.py +0 -0
  309. {cgse-2025.0.3 → cgse-2025.0.6}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod_ui.py +0 -0
  310. {cgse-2025.0.3 → cgse-2025.0.6}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.py +0 -0
  311. {cgse-2025.0.3 → cgse-2025.0.6}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.yaml +0 -0
  312. {cgse-2025.0.3 → cgse-2025.0.6}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_cs.py +0 -0
  313. {cgse-2025.0.3 → cgse-2025.0.6}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_protocol.py +0 -0
  314. {cgse-2025.0.3 → cgse-2025.0.6}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_ui.py +0 -0
  315. {cgse-2025.0.3 → cgse-2025.0.6}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac.py +0 -0
  316. {cgse-2025.0.3 → cgse-2025.0.6}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac_regex.py +0 -0
  317. {cgse-2025.0.3 → cgse-2025.0.6}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.py +0 -0
  318. {cgse-2025.0.3 → cgse-2025.0.6}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.yaml +0 -0
  319. {cgse-2025.0.3 → cgse-2025.0.6}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_cs.py +0 -0
  320. {cgse-2025.0.3 → cgse-2025.0.6}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_protocol.py +0 -0
  321. {cgse-2025.0.3 → cgse-2025.0.6}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_ui.py +0 -0
  322. {cgse-2025.0.3 → cgse-2025.0.6}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/punaplus.py +0 -0
  323. {cgse-2025.0.3 → cgse-2025.0.6}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.py +0 -0
  324. {cgse-2025.0.3 → cgse-2025.0.6}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.yaml +0 -0
  325. {cgse-2025.0.3 → cgse-2025.0.6}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_cs.py +0 -0
  326. {cgse-2025.0.3 → cgse-2025.0.6}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_devif.py +0 -0
  327. {cgse-2025.0.3 → cgse-2025.0.6}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_protocol.py +0 -0
  328. {cgse-2025.0.3 → cgse-2025.0.6}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_ui.py +0 -0
  329. {cgse-2025.0.3 → cgse-2025.0.6}/projects/generic/symetrie-hexapod/src/scripts/cgse_service_plugins.py +0 -0
  330. {cgse-2025.0.3 → cgse-2025.0.6}/projects/plato/plato-fits/README.md +0 -0
  331. {cgse-2025.0.3 → cgse-2025.0.6}/projects/plato/plato-fits/src/egse/plugins/storage/fits.py +0 -0
  332. {cgse-2025.0.3 → cgse-2025.0.6}/projects/plato/plato-hdf5/src/egse/plugins/storage/hdf5.py +0 -0
  333. {cgse-2025.0.3 → cgse-2025.0.6}/projects/plato/plato-spw/src/egse/spw.py +0 -0
  334. {cgse-2025.0.3 → cgse-2025.0.6}/ruff.toml +0 -0
@@ -55,29 +55,6 @@ Note that each library or project is a standalone Poetry package with its own `p
55
55
 
56
56
  All packages in the monorepo will have the same version. This can be maintained with the `bump.py` script. This script will read the version from the `pyproject.toml` file at the root of the monorepo and propagate the version to all libs and projects in the monorepo. Note that you –for now– will have to update the version number in the `pyproject.toml` file located at the monorepo root folder manually.
57
57
 
58
- # Use of Poetry (DEPRECATED: see below)
59
-
60
- I have now Poetry configurations for all `libs` in this monorepo. So, how do we use Poetry in this project?
61
-
62
- First thing to understand, Poetry is a development and dependency management tool. So, if you are installing the different packages in this repo from PyPI there is no need to use Poetry. The package will be installed in your current virtual environment.
63
-
64
- You can choose how you want to manage your virtual environments for each of the packages in the monorepo. I personally use `pyenv` to manage my virtual environments and I disable the virtual environment that would normally be used by Poetry.
65
-
66
- > Explain how to use `pyenv` for your virtual environments
67
-
68
- The following command starts a new sub-shell and activates the virtual environment:
69
- ```
70
- $ poetry shell
71
- ```
72
-
73
- If you do not want to start a new shell, but just want to execute a command in the virtual environment, use the `poetry run` command, e.g.
74
- ```
75
- $ poetry run pytest tests/test_bits.py
76
- ```
77
- Or
78
- ```
79
- $ poetry run python -m egse.monitoring localhost 6001
80
- ```
81
58
 
82
59
  # Build and Publish
83
60
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cgse
3
- Version: 2025.0.3
3
+ Version: 2025.0.6
4
4
  Summary: Generic Common-EGSE: Commanding and monitoring lab equipment
5
5
  Author-email: Rik Huygen <rik.huygen@kuleuven.be>, Sara Regibo <sara.regibo@kuleuven.be>
6
6
  License: MIT
@@ -0,0 +1,30 @@
1
+ from glob import glob
2
+
3
+ import rich
4
+
5
+ # Quick hack to load plugins from different places.
6
+ # This doesn't work, I get an import error.
7
+
8
+ # def refactor(string: str) -> str:
9
+ # entry = string.replace("/", ".").replace("\\", ".").replace(".py", "")
10
+ # rich.print(f"[green]{entry = }[/]")
11
+ # return entry
12
+ #
13
+ # pytest_plugins = [
14
+ # refactor(conftest)
15
+ # for conftest in glob("**/tests/fixtures/*.py", recursive=True)
16
+ # if "__" not in conftest
17
+ # ]
18
+
19
+ # Doesn't work, with the following error:
20
+ #
21
+ # File "/Users/rik/github/cgse/libs/cgse-common/tests/fixtures/default_env.py", line 7, in <module>
22
+ # from fixtures.helpers import setup_data_storage_layout, teardown_data_storage_layout
23
+ # ImportError: Error importing plugin "libs.cgse-common.tests.fixtures.default_env": No module named 'fixtures'
24
+ #
25
+
26
+ # pytest_plugins = [
27
+ # "libs.cgse-common.tests.fixtures.helpers",
28
+ # "libs.cgse-common.tests.fixtures.default_env",
29
+ # "libs.cgse-core.tests.fixtures.services",
30
+ # ]
@@ -0,0 +1,32 @@
1
+ {% extends "base.html" %}
2
+
3
+ {% block extrahead %}
4
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/fira_code.min.css" integrity="sha512-MbysAYimH1hH2xYzkkMHB6MqxBqfP0megxsCLknbYqHVwXTCg9IqHbk+ZP/vnhO8UEW6PaXAkKe2vQ+SWACxxA==" crossorigin="anonymous" referrerpolicy="no-referrer" />
5
+ <!-- Fathom - beautiful, simple website analytics -->
6
+ <script src="https://cdn.usefathom.com/script.js" data-site="TAUKXRLQ" defer></script>
7
+ <!-- / Fathom -->
8
+
9
+
10
+ <meta property="og:title" content="CGSE - {{ page.title }}">
11
+ <meta property="og:type" content="article">
12
+ <meta property="og:url" content="{{ page.canonical_url | url }}">
13
+ <meta property="og:site_name" content="CGSE Documentation">
14
+ <meta property="og:description" content="CGSE is an instrument test framework for Python.">
15
+ <meta property="og:image" content="https://raw.githubusercontent.com/IvS-KULeuven/cgse/refs/heads/main/docs/images/icons/cgse-logo.svg">
16
+
17
+ <style>
18
+
19
+ @font-face {
20
+ font-family: "Virgil";
21
+ src: url("https://unpkg.com/@excalidraw/excalidraw@0.12.0/dist/excalidraw-assets/Virgil.woff2");
22
+ }
23
+ @font-face {
24
+ font-family: "Cascadia";
25
+ src: url("https://unpkg.com/@excalidraw/excalidraw@0.12.0/dist/excalidraw-assets/Cascadia.woff2");
26
+ }
27
+
28
+
29
+
30
+ </style>
31
+
32
+ {% endblock %}
@@ -0,0 +1,6 @@
1
+ # Developer Guide
2
+
3
+ Welcome to the CGSE developer guide! An in-depth reference on how to contribute to the CGSE.
4
+
5
+ First thing to know is that this repository is actually a monorepo, meaning it contains a bunch of related but
6
+ self-standing packages with a minimum of interdependencies. These packages are
@@ -40,15 +40,23 @@ $ uv python install 3.9.20
40
40
 
41
41
  You can check which Python versions are installed already on your system:
42
42
 
43
- ```shell
44
- $ uv python list --only-installed
45
- cpython-3.12.8-macos-aarch64-none /Users/rik/Library/Application Support/uv/python/cpython-3.12.8-macos-aarch64-none/bin/python3.12
46
- cpython-3.10.16-macos-aarch64-none /Users/rik/Library/Application Support/uv/python/cpython-3.10.16-macos-aarch64-none/bin/python3.10
47
- cpython-3.9.21-macos-aarch64-none /Users/rik/Library/Application Support/uv/python/cpython-3.9.21-macos-aarch64-none/bin/python3.9
48
- cpython-3.9.20-macos-aarch64-none /Users/rik/Library/Application Support/uv/python/cpython-3.9.20-macos-aarch64-none/bin/python3.9
49
- cpython-3.9.6-macos-aarch64-none /Library/Developer/CommandLineTools/usr/bin/python3 -> ../../Library/Frameworks/Python3.framework/Versions/3.9/bin/python3
50
- cpython-3.8.17-macos-aarch64-none /Users/rik/Library/Application Support/uv/python/cpython-3.8.17-macos-aarch64-none/bin/python3.8
51
- ```
43
+ === "Command"
44
+
45
+ ```bash
46
+ $ uv python list --only-installed
47
+ ```
48
+
49
+ === "Output"
50
+
51
+ ```
52
+ cpython-3.12.8-macos-aarch64-none /Users/rik/Library/Application Support/uv/python/cpython-3.12.8-macos-aarch64-none/bin/python3.12
53
+ cpython-3.10.16-macos-aarch64-none /Users/rik/Library/Application Support/uv/python/cpython-3.10.16-macos-aarch64-none/bin/python3.10
54
+ cpython-3.9.21-macos-aarch64-none /Users/rik/Library/Application Support/uv/python/cpython-3.9.21-macos-aarch64-none/bin/python3.9
55
+ cpython-3.9.20-macos-aarch64-none /Users/rik/Library/Application Support/uv/python/cpython-3.9.20-macos-aarch64-none/bin/python3.9
56
+ cpython-3.9.6-macos-aarch64-none /Library/Developer/CommandLineTools/usr/bin/python3 -> ../../Library/Frameworks/Python3.framework/Versions/3.9/bin/python3
57
+ cpython-3.8.17-macos-aarch64-none /Users/rik/Library/Application Support/uv/python/cpython-3.8.17-macos-aarch64-none/bin/python3.8
58
+ ```
59
+
52
60
 
53
61
  ## Create a virtual environment
54
62
 
@@ -94,6 +102,19 @@ $ uv pip install -e .
94
102
  $ source .venv/bin/activate
95
103
  ```
96
104
 
105
+ !!! info
106
+
107
+ In a workspace, maintaining a virtual environment per package might be a hassle and most of the time that is not
108
+ needed. A good approach is to always use the virtual environment at the workspace root. This `venv` which will be
109
+ automatically created if you run a command or if you use `uv sync` in the package folder. With `uv sync` you can
110
+ make sure the virtual environment is up-to-date and contains only those dependencies that are required for the
111
+ package you are in. So, each time you switch to another package and want to run a comand or a test for that
112
+ package, use
113
+
114
+ ```
115
+ $ uv sync
116
+ ```
117
+
97
118
  ## Building and publishing all packages
98
119
 
99
120
  We have chosen for one and the same version number for all packages in the `cgse` monorepo. That means that whenever
@@ -0,0 +1,91 @@
1
+ All you need to get started using and building the CGSE.
2
+
3
+ ## Requirements
4
+
5
+ - Python 3.9.x (we do not yet support higher versions, but are working to extend the list)
6
+ - macOS or Linux
7
+
8
+ ## Virtual environment
9
+
10
+ You should always work inside a virtual environment to somehow containerize your project such that it doesn't
11
+ pollute your global environment and you can run different projects next to each other. Create and activate a new
12
+ virtual environment as follows. It should be Python >= 3.9
13
+
14
+ ```shell
15
+ $ python -m venv venv
16
+ $ source venv/bin/activate
17
+ ```
18
+
19
+ ## Installation
20
+
21
+ The easiest way to install the CGSE is to use the `pip` command. Since the CGSE is a monorepo and consists of
22
+ several packages, you will need to make your choice which package you need for your project. You can however start
23
+ with the `cgse-common` which contains all common code that is generic and useful as a basis for other packages.
24
+
25
+ ```shell
26
+ $ pip install cgse-common
27
+ ```
28
+
29
+ Check the [list of packages](./package_list.md) that are part of the CGSE repo and can be installed with `pip`. The
30
+ packages are described in more detail in the sections [Libs](./libs/index.md) and [Projects](./projects/index.md).
31
+
32
+ ## Set up your environment
33
+
34
+ To check your installation and set up your environment, here are a few tips.
35
+
36
+ The version of the core packages and any plugin packages can be verified as follows. The version you installed will
37
+ probably be higher and more lines will appear when other packages are installed.
38
+
39
+ ```shell
40
+ $ py -m egse.version
41
+ CGSE version in Settings: 2025.0.5
42
+ Installed version for cgse-common= 2025.0.5
43
+ ```
44
+
45
+ Check your environment with the command below. This will probably print out some warning since you have not defined
46
+ the expected environment variables yet. There are two mandatory environment variables: `PROJECT` and `SITE_ID`. The
47
+ former shall contain the name of your project without spaces and preferably a single word or an acronym like PLATO,
48
+ ARIEL, MARVEL, MERCATOR. The latter is the name of the site or lab where the tests will be performed. Good names are
49
+ KUL, ESA, LAB23.
50
+
51
+ The other environment variables follow the pattern `<PROJECT>_...`, i.e. they all start with the project name as
52
+ defined
53
+ in the PROJECT environment variable. You should define at least `<PROJECT>_DATA_STORAGE_LOCATION`. The configuration
54
+ data and log file location will be derived from it unless they are explicitly set themselves.
55
+
56
+
57
+ Let's define the three expected environment variables:
58
+
59
+ ```shell
60
+ $ export PROJECT=ARIEL
61
+ $ export SITE_ID=VACUUM_LAB
62
+ $ export ARIEL_DATA_STORAGE_LOCATION=~/data
63
+ ```
64
+
65
+ Rerunning the above command now gives:
66
+
67
+ ```
68
+ $ py -m egse.env
69
+ Environment variables:
70
+ PROJECT = ARIEL
71
+ SITE_ID = VACUUM_LAB
72
+ ARIEL_DATA_STORAGE_LOCATION = /Users/rik/data
73
+ ARIEL_CONF_DATA_LOCATION = not set
74
+ ARIEL_CONF_REPO_LOCATION = not set
75
+ ARIEL_LOG_FILE_LOCATION = not set
76
+ ARIEL_LOCAL_SETTINGS = not set
77
+
78
+ Generated locations and filenames
79
+ get_data_storage_location() = '/Users/rik/data/VACUUM_LAB' ⟶ ERROR: The data storage location doesn't exist!
80
+ get_conf_data_location() = '/Users/rik/data/VACUUM_LAB/conf' ⟶ ERROR: The configuration data location doesn't exist!
81
+ get_conf_repo_location() = None ⟶ ERROR: The configuration repository location doesn't exist!
82
+ get_log_file_location() = '/Users/rik/data/VACUUM_LAB/log' ⟶ ERROR: The log files location doesn't exist!
83
+ get_local_settings() = None ⟶ ERROR: The local settings file is not defined or doesn't exist!
84
+
85
+ use the '--full' flag to get a more detailed report, '--doc' for help on the variables.
86
+ ```
87
+
88
+ !!! Note
89
+
90
+ The folders that do not exist (and are not None) can be created by adding the option `--mkdir` to the above
91
+ command.
@@ -0,0 +1,37 @@
1
+ # Common Code
2
+
3
+
4
+ This package `cgse-common` contains modules that are used by all other packages.
5
+
6
+ | Module Name | Description |
7
+ |--------------------|---------------------------------------------------------------------------------|
8
+ | `egse.bits` | convenience functions to work with bits, bytes and integers |
9
+ | `egse.calibration` | functions to handle conversions and apply correction |
10
+ | `egse.command` | classes and functions to work with commands that operate hardware devices |
11
+ | `egse.config` | convenience functions to configure the system and find folders and files |
12
+ | `egse.control` | defines abstract classes and convenience functions for any control server |
13
+ | `egse.decorators` | a collection of useful decorator functions |
14
+ | `egse.device` | defines the generic interfaces to connect devices |
15
+ | `egse.env` | functionality to work with and check your environment variables |
16
+ | `egse.exceptions` | common Exceptions and Errors |
17
+ | `egse.hk` | functions to retrieve and convert housekeping parameter values |
18
+ | `egse.metrics` | functions to define and update metrics |
19
+ | `egse.mixin` | defines the mixin classes for dynamic commanding |
20
+ | `egse.monitoring` | the monitoring application / function |
21
+ | `egse.observer` | the classic observer and observable |
22
+ | `egse.obsid` | functions to define and work with the OBSID |
23
+ | `egse.persistence` | the persistence layer interface |
24
+ | `egse.plugin` | functions to load plugins and settings from entry-points |
25
+ | `egse.process` | functions and classes to work with processes and sub-processes |
26
+ | `egse.protocol` | base class for communicating commands with the hardware or the control server |
27
+ | `egse.proxy` | base class for the Proxy objects for each device controller |
28
+ | `egse.reload` | a slightly better approach to reloading modules and function |
29
+ | `egse.resource` | convenience functions to use resources in your code |
30
+ | `egse.response` | defines the classes to handle responses from the control servers |
31
+ | `egse.services` | provides the services to the control servers |
32
+ | `egse.settings` | provides functions to handle user and configuration settings |
33
+ | `egse.setup` | defines the Setup, containing the complete configuration for a test |
34
+ | `egse.state` | classes and functions to handle state, e.g. the GlobalState |
35
+ | `egse.system` | convenience functions that provide information on system specific functionality |
36
+ | `egse.version` | functions to load specific version information |
37
+ | `egse.zmq_ser` | serialization function used in a ZeroMQ context |
@@ -0,0 +1,253 @@
1
+ # The Settings
2
+
3
+ The Settings class contains all static information needed to configure your system, the environment you are using
4
+ and the test equipment. The Settings also contain all the IP addresses and port number for all the known devices,
5
+ together with other static information like the device name, default settings for the device like speed, timeout, delay
6
+ time, firmware version, etc. We will go into more details about the content later, let’s now first look at the format
7
+ and usage of the Settings.
8
+
9
+ ## Loading the Settings
10
+
11
+ The Settings can be loaded as follows:
12
+
13
+ ```python
14
+ >>> from egse.settings import Settings
15
+ >>> settings = Settings.load()
16
+ ```
17
+
18
+ The `settings` object will be a dictionary where the keys are the top-level groups that are defined in the settings
19
+ for each package. For a system that has only `cgse-common` and `cgse-core` installed, the `settings` will contain
20
+ something like this:
21
+
22
+ ```text
23
+ >>> print(settings)
24
+ Settings
25
+ ├── PACKAGES
26
+ │ ├── CGSE_COMMON: Common classes, functions, decorators, etc. for the CGSE
27
+ │ └── CGSE_CORE: The core services of the CGSE
28
+ ├── SITE
29
+ │ ├── ID: LAB42
30
+ │ ├── SSH_SERVER: localhost
31
+ │ └── SSH_PORT: 22
32
+ ├── PROCESS
33
+ │ └── METRICS_INTERVAL: 10
34
+ ├── Logging Control Server
35
+ │ ├── PROTOCOL: tcp
36
+ │ ├── HOSTNAME: localhost
37
+ │ ├── LOGGING_PORT: 7000
38
+ │ ├── COMMANDING_PORT: 7001
39
+ │ ├── METRICS_PORT: 7003
40
+ │ ├── MAX_NR_LOG_FILES: 20
41
+ │ ├── MAX_SIZE_LOG_FILES: 20
42
+ │ ├── TEXTUALOG_IP_ADDRESS: 127.0.0.1
43
+ │ └── TEXTUALOG_LISTENING_PORT: 19996
44
+ ├── Configuration Manager Control Server
45
+ │ ├── PROTOCOL: tcp
46
+ │ ├── HOSTNAME: localhost
47
+ │ ├── COMMANDING_PORT: 6000
48
+ │ ├── MONITORING_PORT: 6001
49
+ │ ├── SERVICE_PORT: 6002
50
+ │ ├── METRICS_PORT: 6003
51
+ │ ├── DELAY: 1
52
+ │ └── STORAGE_MNEMONIC: CM
53
+ └── Storage Control Server
54
+ ├── PROTOCOL: tcp
55
+ ├── HOSTNAME: localhost
56
+ ├── COMMANDING_PORT: 6100
57
+ ├── MONITORING_PORT: 6101
58
+ ├── SERVICE_PORT: 6102
59
+ ├── METRICS_PORT: 6103
60
+ └── DELAY: 1
61
+ ```
62
+
63
+ If you only need the settings for a particular component, specify that group's name:
64
+
65
+ ```python
66
+ >>> storage_settings = Settings.load("Storage Control Server")
67
+
68
+ >>> print(storage_settings)
69
+ Storage
70
+ Control
71
+ Server
72
+ ├── PROTOCOL: tcp
73
+ ├── HOSTNAME: localhost
74
+ ├── COMMANDING_PORT: 6100
75
+ ├── MONITORING_PORT: 6101
76
+ ├── SERVICE_PORT: 6102
77
+ ├── METRICS_PORT: 6103
78
+ └── DELAY: 1
79
+ ```
80
+
81
+ The values can be accessed as usual with a dictionary, by specifying the name of the parameter as the key:
82
+
83
+ ```python
84
+ >>> print(storage_settings["COMMANDING_PORT"])
85
+ 6100
86
+ ```
87
+
88
+ We usually only go one level deep when defining settings, and as a convenience, that first level of variables can
89
+ also be accessed with the dot-notation.
90
+
91
+ ```python
92
+ >>> print(storage_settings.COMMANDING_PORT)
93
+ 6100
94
+ ```
95
+
96
+ ## Entry-points
97
+
98
+ The Settings are collected from a set of YAML files which are provided by the packages through the entry-point
99
+ `cgse.settings`. The default Settings file is named `settings.yaml` but this can be changed by the entry-point (see
100
+ below).
101
+
102
+ Let's take a look at how the settings are provided for the `cgse-core` package. First, the `pyproject.toml` file of
103
+ the project shall define the entry-point. In the snippet below, the entry-point `cgse-core` is defined for the group
104
+ `cgse.settings`.
105
+
106
+ ```toml
107
+ [project.entry-points."cgse.settings"]
108
+ cgse-core = "cgse_core:settings.yaml"
109
+ ```
110
+
111
+ The entry-point itself has the following format: `<name> = "<module>.<filename>"`, where
112
+
113
+ - `<name>` is the name of the entry-point given in the `pyproject.toml` file, usually this is the package name,
114
+ - `<module>` is a valid module name that can be imported and from which the location can be determined, and
115
+ - `<filename>` is the name of the target file, e.g. a YAML file.
116
+
117
+ !!! Note
118
+
119
+ The module name for this entry point has an underscore instead of a dash, i.e. `cgse_core` instead of
120
+ `cgse-core`. The reason is that module names with a dash will generate a SyntaxError during import.
121
+
122
+ The above example will load the settings for this package from the `settings.yaml` file that is located in the
123
+ `cgse_core` module. That is, the package shall also provide this as follows:
124
+
125
+ ```text
126
+ cgse-core
127
+ ├── pyproject.toml
128
+ └── src
129
+ └── cgse_core
130
+ ├── __init__.py
131
+ └── settings.yaml
132
+ ```
133
+
134
+ The `settigs.yaml` file for this module looks something like this:
135
+
136
+ ```text
137
+ PACKAGES:
138
+ CGSE_CORE: The core services of the CGSE
139
+
140
+ Logging Control Server: # LOG_CS
141
+
142
+ PROTOCOL: tcp
143
+ HOSTNAME: localhost # The hostname that client shall connect to, e.g. pleiad01 @ KU Leuven
144
+ LOGGING_PORT: 7000
145
+ COMMANDING_PORT: 7001
146
+ METRICS_PORT: 7003 # The HTTP port where Prometheus will connect to for retrieving metrics
147
+ MAX_NR_LOG_FILES: 20 # The maximum number of log files that will be maintained in a roll-over
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
151
+
152
+ Configuration Manager Control Server: # CM_CS
153
+
154
+ ...
155
+ ```
156
+
157
+ ## Local Settings
158
+
159
+ You can, and you should, define local settings for your project and put those settings in a known folder
160
+ on your system. The usual place is `~/cgse/local-settings.yaml`. This file will be automatically loaded by the
161
+ `Settings.load()` function when you define the local settings environment variable. That variable name is
162
+ `<PROJECT>_LOCAL_SETTINGS` where `<PROJECT>` is the name of your project as defined by the `PROJECT` environment
163
+ variable. For a `PROJECT=LAB23` the local settings would be defined as follows:
164
+
165
+ ```text
166
+ $ export LAB23_LOCAL_SETTINGS=~/cgse/local-settings-lab23.yaml
167
+ ```
168
+
169
+ The local settings take higher precedence that will overwrite the global settings when loaded. You only need to define
170
+ the settings that actually change for your local installation, respect the full hierarchy when specifying those
171
+ settings. You are allowed to define new entries at any level in the Settings hierarchy.
172
+
173
+ The usual parameters to put into a local settings file are:
174
+
175
+ - the SITE ID
176
+ - the hostnames of the different devices that you use
177
+ - the hostname of the server where core services or device control servers are running
178
+ - port numbers that have been changed from the default
179
+
180
+ ## Terminal Command
181
+
182
+ You can check the current settings from the terminal with the following command:
183
+
184
+ ```shell
185
+ $ py -m egse.settings
186
+ Settings
187
+ ├── PACKAGES
188
+ │ ├── CGSE_COMMON: Common classes, functions, decorators, etc. for the CGSE
189
+ │ └── CGSE_CORE: The core services of the CGSE
190
+ ├── SITE
191
+ │ ├── ID: LAB42
192
+ │ ├── SSH_SERVER: localhost
193
+ │ └── SSH_PORT: 22
194
+ ├── PROCESS
195
+ │ └── METRICS_INTERVAL: 10
196
+ ├── Logging Control Server
197
+ │ ├── PROTOCOL: tcp
198
+ │ ├── HOSTNAME: localhost
199
+ │ ├── LOGGING_PORT: 7000
200
+ │ ├── COMMANDING_PORT: 7001
201
+ ... ...
202
+ └── Storage Control Server
203
+ ├── PROTOCOL: tcp
204
+ ├── HOSTNAME: localhost
205
+ ├── COMMANDING_PORT: 6100
206
+ ├── MONITORING_PORT: 6101
207
+ ├── SERVICE_PORT: 6102
208
+ ├── METRICS_PORT: 6103
209
+ └── DELAY: 1
210
+ Memoized locations:
211
+ ['/Users/rik/github/cgse/libs/cgse-common/src/cgse_common/settings.yaml', '/Users/rik/github/cgse/libs/cgse-core/src/cgse_core/settings.yaml', '/Users/rik/cgse/local_settings_ariel.yaml']
212
+ ```
213
+
214
+ The _memoized locations_ are the settings files that have been loaded and cached. Once the application has started and
215
+ the settings have been loaded, they can only be reloaded by explicitly forcing a reload as follows:
216
+
217
+ ```python
218
+ >>> settings = Settings.load(force=True)
219
+ ```
220
+
221
+ !!! Warning
222
+
223
+ The `force` reload does however not guarantee that the settings will propagate properly throughout the application
224
+ or to client apps. Settings can be saved in local variables or class instances that have no knowledge of a Settings
225
+ reload. So, be careful when changing your Settings. If there are parameters that change often and are not as
226
+ static as thought, maybe they belong in the [Setup](./setup.md) instead of the Settings. Examples are:
227
+
228
+ - calibration parameters
229
+ - SUT parameters
230
+ - conversion functions
231
+ - coordinates and reference frames
232
+ - models
233
+
234
+
235
+ ## The design of the `load()` method
236
+
237
+ A word about the `Settings.load()` method. Depending on the parameters provided, this method either loads all
238
+ settings, a group of settings or just one single YAML file. We have already explained how to load a specific group
239
+ of settings by giving the name of the group as a parameter. When you want to load just one YAML file, you need to
240
+ specify its location also. When a location is given as a str or a Path, the Settings will be loaded from that file
241
+ only, using the default `settings.yaml` name or another name given through the `filename` argument.
242
+
243
+ This can be used to e.g. load command files for a device:
244
+
245
+ ```python
246
+ >>> commands = Settings.load(location="~", filename="DAQ5610.yaml")
247
+ ```
248
+
249
+ The mechanism behind the `Settings.load()` method is shown in the following diagram. For simplicity, parameters are
250
+ not shown and only the success path is presented, not any exceptions or error handling.
251
+
252
+
253
+ ![load_methods](./images/load_methods.png)
@@ -0,0 +1 @@
1
+ # The Setup
@@ -0,0 +1,2 @@
1
+
2
+ # Reference Coordinates
@@ -0,0 +1 @@
1
+ # Core Services
@@ -0,0 +1 @@
1
+ # GUI Components
@@ -0,0 +1,11 @@
1
+
2
+ # Libraries
3
+
4
+ The libraries are those packages that make up the CGSE framework.
5
+
6
+ The libraries are located under the `libs` folder, and we currently find the following packages there:
7
+
8
+ - `cgse-common`
9
+ - `cgse-core`
10
+ - `cgse-coordinates`
11
+ - `cgse-gui`
@@ -0,0 +1,16 @@
1
+ # Packages in the CGSE
2
+
3
+ The CGSE is a monorepo and consists of numerous packages. Each of these packages are individually installable from
4
+ PyPI. We maintain a list here with all the packages in the monorepo.
5
+
6
+ | Package | Description |
7
+ |--------------------|--------------------------------------------------|
8
+ | `cgse-common` | The common code used by all other packages |
9
+ | `cgse-core` | The core services |
10
+ | `cgse-coordinates` | Coordinate reference Frames |
11
+ | `cgse-gui` | GUI components and styles (PyQt5) |
12
+ | `cgse-tools` | Plugin that adds functions to the `cgse` command |
13
+ | `symetrie-hexapod` | Device drivers for the Symétrie Hexapods |
14
+ | ` plato-fits` | FITS driver with PLATO specific format |
15
+ | `plato-hdf5` | HDF5 driver with PLATO specific format |
16
+ | `plato-spw` | SpaceWire driver with PATO specific packets |
@@ -0,0 +1,2 @@
1
+
2
+ # Tools for the CGSE framework
@@ -0,0 +1,16 @@
1
+ # Projects
2
+
3
+ The projects are those packages that add functionality to the CGSE framework.
4
+
5
+ The projects live under the folder `projects`, and they are organised in _generic_ and _specific_ projects. Generic
6
+ projects do not have an implementation that is specific for one particular project, while, obviously, specific
7
+ projects have. We currently have the following generic packages:
8
+
9
+ - `cgse-tools`
10
+ - `symetrie-hexapod`
11
+
12
+ and then there are the project specific packages:
13
+
14
+ - `plato-fits`
15
+ - `plato-hdf5`
16
+ - `plato-spw`
@@ -0,0 +1,2 @@
1
+
2
+ # The Symétrie Hexapods