cgse 2025.0.3__tar.gz → 2025.0.4__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 (301) hide show
  1. {cgse-2025.0.3 → cgse-2025.0.4}/PKG-INFO +1 -1
  2. cgse-2025.0.4/docs/custom_theme/main.html +32 -0
  3. {cgse-2025.0.3 → cgse-2025.0.4}/docs/stylesheets/custom.css +9 -33
  4. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/pyproject.toml +1 -1
  5. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/command.py +1 -1
  6. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/env.py +10 -0
  7. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/hk.py +11 -13
  8. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/setup.py +1 -1
  9. cgse-2025.0.4/libs/cgse-common/tests/conftest.py +19 -0
  10. cgse-2025.0.4/libs/cgse-common/tests/data/LAB23/README.md +4 -0
  11. cgse-2025.0.4/libs/cgse-common/tests/data/common/telemetry/tm-dictionary-default.csv +3 -0
  12. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/test_env.py +17 -0
  13. cgse-2025.0.4/libs/cgse-common/tests/test_hk.py +113 -0
  14. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-coordinates/pyproject.toml +1 -1
  15. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/pyproject.toml +1 -1
  16. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/pyproject.toml +1 -1
  17. {cgse-2025.0.3 → cgse-2025.0.4}/mkdocs.yml +1 -0
  18. {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/cgse-tools/pyproject.toml +1 -1
  19. {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/pyproject.toml +1 -1
  20. {cgse-2025.0.3 → cgse-2025.0.4}/projects/plato/plato-fits/pyproject.toml +1 -1
  21. {cgse-2025.0.3 → cgse-2025.0.4}/projects/plato/plato-hdf5/pyproject.toml +1 -1
  22. {cgse-2025.0.3 → cgse-2025.0.4}/projects/plato/plato-spw/pyproject.toml +1 -1
  23. {cgse-2025.0.3 → cgse-2025.0.4}/pyproject.toml +1 -1
  24. cgse-2025.0.3/docs/custom_theme/main.html +0 -54
  25. cgse-2025.0.3/libs/cgse-common/tests/test_hk.py +0 -54
  26. {cgse-2025.0.3 → cgse-2025.0.4}/.gitignore +0 -0
  27. {cgse-2025.0.3 → cgse-2025.0.4}/NOTES.md +0 -0
  28. {cgse-2025.0.3 → cgse-2025.0.4}/README.md +0 -0
  29. {cgse-2025.0.3 → cgse-2025.0.4}/TODO.md +0 -0
  30. {cgse-2025.0.3 → cgse-2025.0.4}/bump.py +0 -0
  31. {cgse-2025.0.3 → cgse-2025.0.4}/docs/dev_guide/coding_style.md +0 -0
  32. {cgse-2025.0.3 → cgse-2025.0.4}/docs/dev_guide/docs.md +0 -0
  33. {cgse-2025.0.3 → cgse-2025.0.4}/docs/dev_guide/index.md +0 -0
  34. {cgse-2025.0.3 → cgse-2025.0.4}/docs/dev_guide/installation.md +0 -0
  35. {cgse-2025.0.3 → cgse-2025.0.4}/docs/dev_guide/uv.md +0 -0
  36. {cgse-2025.0.3 → cgse-2025.0.4}/docs/getting_started.md +0 -0
  37. {cgse-2025.0.3 → cgse-2025.0.4}/docs/help.md +0 -0
  38. {cgse-2025.0.3 → cgse-2025.0.4}/docs/images/icons/cgse-logo-blue.svg +0 -0
  39. {cgse-2025.0.3 → cgse-2025.0.4}/docs/images/icons/cgse-logo.svg +0 -0
  40. {cgse-2025.0.3 → cgse-2025.0.4}/docs/index.md +0 -0
  41. {cgse-2025.0.3 → cgse-2025.0.4}/docs/tutorial.md +0 -0
  42. {cgse-2025.0.3 → cgse-2025.0.4}/docs/user_guide/index.md +0 -0
  43. {cgse-2025.0.3 → cgse-2025.0.4}/docs.zip +0 -0
  44. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/README.md +0 -0
  45. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/bits.py +0 -0
  46. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/calibration.py +0 -0
  47. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/config.py +0 -0
  48. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/control.py +0 -0
  49. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/decorators.py +0 -0
  50. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/device.py +0 -0
  51. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/exceptions.py +0 -0
  52. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/metrics.py +0 -0
  53. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/mixin.py +0 -0
  54. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/monitoring.py +0 -0
  55. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/observer.py +0 -0
  56. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/obsid.py +0 -0
  57. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/persistence.py +0 -0
  58. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/plugin.py +0 -0
  59. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/process.py +0 -0
  60. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/protocol.py +0 -0
  61. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/proxy.py +0 -0
  62. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/reload.py +0 -0
  63. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/resource.py +0 -0
  64. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/response.py +0 -0
  65. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/services.py +0 -0
  66. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/services.yaml +0 -0
  67. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/settings.py +0 -0
  68. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/settings.yaml +0 -0
  69. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/state.py +0 -0
  70. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/system.py +0 -0
  71. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/version.py +0 -0
  72. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/zmq_ser.py +0 -0
  73. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00028_201028_155259.yaml +0 -0
  74. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00029_201028_155331.yaml +0 -0
  75. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00030_210311_134043.yaml +0 -0
  76. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00080_210917_105245.yaml +0 -0
  77. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00081_210922_142259.yaml +0 -0
  78. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00082_210923_094458.yaml +0 -0
  79. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/CSL1/README.md +0 -0
  80. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/CSL2/README.md +0 -0
  81. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/IAS/README.md +0 -0
  82. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/INTA/README.md +0 -0
  83. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00027_211119_140441.yaml +0 -0
  84. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00028_211119_160406.yaml +0 -0
  85. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00029_211119_172918.yaml +0 -0
  86. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00030_211122_103604.yaml +0 -0
  87. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00031_211123_124900.yaml +0 -0
  88. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/conf/SETUP_20250114_1519.yaml +0 -0
  89. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/conf/config-file.toml +0 -0
  90. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/data/cal_coeff_1234.csv +0 -0
  91. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/data/calibration.csv +0 -0
  92. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/data/calibration.yaml +0 -0
  93. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/data/corrupt.yaml +0 -0
  94. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/data/data-file.txt +0 -0
  95. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/data/empty_data_file.txt +0 -0
  96. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/data/test_setup.yaml +0 -0
  97. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/icons/keyboard.png +0 -0
  98. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/lib/dev1/shared-lib.so +0 -0
  99. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/lib/dev2/shared-lib.so +0 -0
  100. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/dummy.py +0 -0
  101. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/helpers.py +0 -0
  102. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/test_bits.py +0 -0
  103. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/test_command.py +0 -0
  104. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/test_config.py +0 -0
  105. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/test_control.py +0 -0
  106. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/test_decorators.py +0 -0
  107. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/test_device.py +0 -0
  108. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/test_resource.py +0 -0
  109. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/test_response.py +0 -0
  110. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/test_setup.py +0 -0
  111. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/test_system.py +0 -0
  112. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-coordinates/README.md +0 -0
  113. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-coordinates/src/egse/coordinates/__init__.py +0 -0
  114. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-coordinates/src/egse/coordinates/avoidance.py +0 -0
  115. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-coordinates/src/egse/coordinates/cslmodel.py +0 -0
  116. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-coordinates/src/egse/coordinates/laser_tracker_to_dict.py +0 -0
  117. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-coordinates/src/egse/coordinates/point.py +0 -0
  118. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-coordinates/src/egse/coordinates/pyplot.py +0 -0
  119. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-coordinates/src/egse/coordinates/referenceFrame.py +0 -0
  120. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-coordinates/src/egse/coordinates/refmodel.py +0 -0
  121. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-coordinates/src/egse/coordinates/rotationMatrix.py +0 -0
  122. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-coordinates/src/egse/coordinates/transform3d_addon.py +0 -0
  123. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/.envrc.disabled +0 -0
  124. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/README.md +0 -0
  125. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/src/egse/confman/__init__.py +0 -0
  126. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/src/egse/confman/__main__.py +0 -0
  127. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/src/egse/confman/confman.yaml +0 -0
  128. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/src/egse/confman/confman_cs.py +0 -0
  129. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/src/egse/logger/__init__.py +0 -0
  130. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/src/egse/logger/__main__.py +0 -0
  131. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/src/egse/logger/log_cs.py +0 -0
  132. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/src/egse/procman/__init__.py +0 -0
  133. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/src/egse/procman/procman.yaml +0 -0
  134. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/src/egse/procman/procman_cs.py +0 -0
  135. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/src/egse/storage/__init__.py +0 -0
  136. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/src/egse/storage/__main__.py +0 -0
  137. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/src/egse/storage/persistence.py +0 -0
  138. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/src/egse/storage/storage.yaml +0 -0
  139. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/src/egse/storage/storage_cs.py +0 -0
  140. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/src/scripts/cgse.py +0 -0
  141. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/tests/conftest.py +0 -0
  142. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/tests/test_confman_setups.py +0 -0
  143. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/tests/test_logger.py +0 -0
  144. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/README.md +0 -0
  145. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/__init__.py +0 -0
  146. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/buttons.py +0 -0
  147. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-start.svg +0 -0
  148. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-stop.svg +0 -0
  149. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/aeu-cs.svg +0 -0
  150. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-started.svg +0 -0
  151. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-stopped.svg +0 -0
  152. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/aeu_cs.svg +0 -0
  153. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/alert.svg +0 -0
  154. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/arrow-double-left.png +0 -0
  155. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/arrow-double-right.png +0 -0
  156. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/arrow-up.svg +0 -0
  157. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/backward.svg +0 -0
  158. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/busy.svg +0 -0
  159. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/cleaning.svg +0 -0
  160. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/color-scheme.svg +0 -0
  161. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/cs-connected-alert.svg +0 -0
  162. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/cs-connected-disabled.svg +0 -0
  163. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/cs-connected.svg +0 -0
  164. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/cs-not-connected.svg +0 -0
  165. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/double-left-arrow.svg +0 -0
  166. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/double-right-arrow.svg +0 -0
  167. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/erase-disabled.svg +0 -0
  168. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/erase.svg +0 -0
  169. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/fitsgen-start.svg +0 -0
  170. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/fitsgen-stop.svg +0 -0
  171. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/fitsgen.svg +0 -0
  172. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/forward.svg +0 -0
  173. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/fov-hk-start.svg +0 -0
  174. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/fov-hk-stop.svg +0 -0
  175. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/fov-hk.svg +0 -0
  176. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/front-desk.svg +0 -0
  177. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/home-actioned.svg +0 -0
  178. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/home-disabled.svg +0 -0
  179. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/home.svg +0 -0
  180. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/info.svg +0 -0
  181. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/invalid.png +0 -0
  182. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/led-green.svg +0 -0
  183. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/led-grey.svg +0 -0
  184. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/led-orange.svg +0 -0
  185. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/led-red.svg +0 -0
  186. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/led-square-green.svg +0 -0
  187. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/led-square-grey.svg +0 -0
  188. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/led-square-orange.svg +0 -0
  189. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/led-square-red.svg +0 -0
  190. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-green.svg +0 -0
  191. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-red.svg +0 -0
  192. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el+.svg +0 -0
  193. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el-.svg +0 -0
  194. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/location-marker.svg +0 -0
  195. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/logo-dpu.svg +0 -0
  196. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/logo-gimbal.svg +0 -0
  197. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/logo-huber.svg +0 -0
  198. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/logo-ogse.svg +0 -0
  199. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/logo-puna.svg +0 -0
  200. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/logo-tcs.svg +0 -0
  201. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/logo-zonda.svg +0 -0
  202. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/maximize.svg +0 -0
  203. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/meter.svg +0 -0
  204. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/more.svg +0 -0
  205. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-start.svg +0 -0
  206. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-stop.svg +0 -0
  207. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk.svg +0 -0
  208. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/observing-off.svg +0 -0
  209. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/observing-on.svg +0 -0
  210. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.png +0 -0
  211. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.svg +0 -0
  212. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/ops-mode.svg +0 -0
  213. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/play-green.svg +0 -0
  214. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/plugged-disabled.svg +0 -0
  215. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/plugged.svg +0 -0
  216. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/pm_ui.svg +0 -0
  217. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/power-button-green.svg +0 -0
  218. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/power-button-red.svg +0 -0
  219. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/power-button.svg +0 -0
  220. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/radar.svg +0 -0
  221. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/radioactive.svg +0 -0
  222. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/reload.svg +0 -0
  223. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/remote-control-off.svg +0 -0
  224. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/remote-control-on.svg +0 -0
  225. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/repeat-blue.svg +0 -0
  226. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/repeat.svg +0 -0
  227. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/settings.svg +0 -0
  228. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/shrink.svg +0 -0
  229. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/shutter.svg +0 -0
  230. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/sign-off.svg +0 -0
  231. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/sign-on.svg +0 -0
  232. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/sim-mode.svg +0 -0
  233. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/small-buttons-go.svg +0 -0
  234. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/small-buttons-minus.svg +0 -0
  235. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/small-buttons-plus.svg +0 -0
  236. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/sponge.svg +0 -0
  237. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/start-button-disabled.svg +0 -0
  238. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/start-button.svg +0 -0
  239. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/stop-button-disabled.svg +0 -0
  240. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/stop-button.svg +0 -0
  241. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/stop-red.svg +0 -0
  242. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/stop.svg +0 -0
  243. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/switch-disabled-square.svg +0 -0
  244. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/switch-disabled.svg +0 -0
  245. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/switch-off-square.svg +0 -0
  246. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/switch-off.svg +0 -0
  247. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/switch-on-square.svg +0 -0
  248. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/switch-on.svg +0 -0
  249. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/temperature-control.svg +0 -0
  250. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/th_ui_logo.svg +0 -0
  251. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/unplugged.svg +0 -0
  252. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/unvalid.png +0 -0
  253. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/user-interface.svg +0 -0
  254. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/vacuum.svg +0 -0
  255. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/valid.png +0 -0
  256. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-dark.svg +0 -0
  257. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-white.svg +0 -0
  258. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/led.py +0 -0
  259. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/limitswitch.py +0 -0
  260. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/states.py +0 -0
  261. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/styles/dark.qss +0 -0
  262. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/styles/default.qss +0 -0
  263. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/styles.qss +0 -0
  264. {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/switch.py +0 -0
  265. {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/cgse-tools/README.md +0 -0
  266. {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/cgse-tools/src/egse/tools/status.py +0 -0
  267. {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/cgse-tools/src/scripts/cgse_plugins.py +0 -0
  268. {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/cgse-tools/src/scripts/cgse_service_plugins.py +0 -0
  269. {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/README.md +0 -0
  270. {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/__init__.py +0 -0
  271. {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/__init__.py +0 -0
  272. {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/alpha.py +0 -0
  273. {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/dynalpha.py +0 -0
  274. {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod_ui.py +0 -0
  275. {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.py +0 -0
  276. {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.yaml +0 -0
  277. {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_cs.py +0 -0
  278. {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_protocol.py +0 -0
  279. {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_ui.py +0 -0
  280. {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac.py +0 -0
  281. {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac_regex.py +0 -0
  282. {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.py +0 -0
  283. {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.yaml +0 -0
  284. {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_cs.py +0 -0
  285. {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_protocol.py +0 -0
  286. {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_ui.py +0 -0
  287. {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/punaplus.py +0 -0
  288. {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.py +0 -0
  289. {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.yaml +0 -0
  290. {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_cs.py +0 -0
  291. {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_devif.py +0 -0
  292. {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_protocol.py +0 -0
  293. {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_ui.py +0 -0
  294. {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/scripts/cgse_service_plugins.py +0 -0
  295. {cgse-2025.0.3 → cgse-2025.0.4}/projects/plato/plato-fits/README.md +0 -0
  296. {cgse-2025.0.3 → cgse-2025.0.4}/projects/plato/plato-fits/src/egse/plugins/storage/fits.py +0 -0
  297. {cgse-2025.0.3 → cgse-2025.0.4}/projects/plato/plato-hdf5/README.md +0 -0
  298. {cgse-2025.0.3 → cgse-2025.0.4}/projects/plato/plato-hdf5/src/egse/plugins/storage/hdf5.py +0 -0
  299. {cgse-2025.0.3 → cgse-2025.0.4}/projects/plato/plato-spw/README.md +0 -0
  300. {cgse-2025.0.3 → cgse-2025.0.4}/projects/plato/plato-spw/src/egse/spw.py +0 -0
  301. {cgse-2025.0.3 → cgse-2025.0.4}/ruff.toml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cgse
3
- Version: 2025.0.3
3
+ Version: 2025.0.4
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,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 %}
@@ -78,44 +78,20 @@ td code {
78
78
 
79
79
  }
80
80
 
81
- .textual-web-demo iframe {
82
- border: none;
83
- width: 100%;
84
- aspect-ratio: 16 / 9;
85
- padding: 0;
86
- margin: 0;
87
- }
88
-
89
-
90
- .textual-web-demo {
91
- display: flex;
92
- width: 100%;
93
- aspect-ratio: 16 / 9;
94
- padding: 0;
95
- margin: 0;
96
- opacity: 0;
97
- transition: 0.3s opacity;
98
- }
99
-
100
- .textual-web-demo.-loaded {
101
- opacity: 1.0;
102
- transition: 0.3s opacity;
103
- }
104
-
105
81
  :root {
106
- --md-admonition-icon--textualize: url('/images/icons/logo light transparent.svg')
82
+ --md-admonition-icon--cgse: url('/images/icons/cgse-logo.svg')
107
83
  }
108
- .md-typeset .admonition.textualize,
109
- .md-typeset details.textualize {
84
+ .md-typeset .admonition.cgse,
85
+ .md-typeset details.cgse {
110
86
  border-color: rgb(43, 155, 70);
111
87
  }
112
- .md-typeset .textualize > .admonition-title,
113
- .md-typeset .textualize > summary {
88
+ .md-typeset .cgse > .admonition-title,
89
+ .md-typeset .cgse > summary {
114
90
  background-color: rgba(43, 155, 70, 0.1);
115
91
  }
116
- .md-typeset .textualize > .admonition-title::before,
117
- .md-typeset .textualize > summary::before {
92
+ .md-typeset .cgse > .admonition-title::before,
93
+ .md-typeset .cgse > summary::before {
118
94
  background-color: rgb(43, 155, 70);
119
- -webkit-mask-image: var(--md-admonition-icon--textualize);
120
- mask-image: var(--md-admonition-icon--textualize);
95
+ -webkit-mask-image: var(--md-admonition-icon--cgse);
96
+ mask-image: var(--md-admonition-icon--cgse);
121
97
  }
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "cgse-common"
3
- version = "2025.0.3"
3
+ version = "2025.0.4"
4
4
  description = "Software framework to support hardware testing"
5
5
  authors = [
6
6
  {name = "IVS KU Leuven"}
@@ -95,7 +95,7 @@ import re
95
95
  from collections import namedtuple
96
96
  from typing import Callable
97
97
 
98
- from egse.control import Success
98
+ from egse.response import Success
99
99
  from egse.exceptions import Error
100
100
 
101
101
  logger = logging.getLogger(__name__)
@@ -40,6 +40,8 @@ WARNING:
40
40
  from __future__ import annotations
41
41
 
42
42
  __all__ = [
43
+ "get_project_name",
44
+ "get_site_id",
43
45
  "get_data_storage_location",
44
46
  "set_data_storage_location",
45
47
  "get_data_storage_location_env_name",
@@ -164,6 +166,14 @@ def _check_no_value(var_name, value):
164
166
  )
165
167
 
166
168
 
169
+ def get_project_name():
170
+ return _env.get("PROJECT") or None
171
+
172
+
173
+ def get_site_id():
174
+ return _env.get("SITE_ID") or None
175
+
176
+
167
177
  def get_data_storage_location_env_name() -> str:
168
178
  """Returns the name of the environment variable for the project."""
169
179
  project = _env.get("PROJECT")
@@ -16,9 +16,9 @@ import dateutil.parser as date_parser
16
16
  import numpy as np
17
17
  from egse.config import find_files
18
18
  from egse.env import get_data_storage_location
19
+ from egse.env import get_site_id
19
20
  from egse.obsid import ObservationIdentifier
20
21
  from egse.obsid import obsid_from_storage
21
- from egse.settings import Settings
22
22
  from egse.setup import Setup
23
23
  from egse.setup import SetupError
24
24
  from egse.setup import load_setup
@@ -30,8 +30,6 @@ from egse.system import time_since_epoch_1958
30
30
 
31
31
  _LOGGER = logging.getLogger(__name__)
32
32
 
33
- SITE_ID = Settings.load("SITE").ID
34
-
35
33
 
36
34
  class TmDictionaryColumns(str, Enum):
37
35
  """ Enumeration of the relevant columns in the TM dictionary spreadsheet.
@@ -50,7 +48,7 @@ class TmDictionaryColumns(str, Enum):
50
48
  STORAGE_MNEMONIC = "Storage mnemonic"
51
49
  CORRECT_HK_NAMES = "CAM EGSE mnemonic"
52
50
  ORIGINAL_EGSE_HK_NAMES = "Original name in EGSE"
53
- SYNOPTICS_ORIGIN = f"Origin of synoptics at {SITE_ID}"
51
+ SYNOPTICS_ORIGIN = f"Origin of synoptics at {get_site_id()}"
54
52
  TIMESTAMP_NAMES = "Name of corresponding timestamp"
55
53
  DESCRIPTION = "Description"
56
54
  DASHBOARD = "MON screen"
@@ -120,7 +118,7 @@ def get_housekeeping(hk_name: str, obsid: Union[ObservationIdentifier, str, int]
120
118
  try:
121
119
  return _get_housekeeping_obsid(hk_name, data_dir, obsid=obsid, time_window=time_window, setup=setup)
122
120
  except (ValueError, StopIteration, FileNotFoundError) as exc:
123
- raise HKError(f"No HK found for {hk_name} for obsid {obsid} at {SITE_ID}") from exc
121
+ raise HKError(f"No HK found for {hk_name} for obsid {obsid} at {get_site_id()}") from exc
124
122
 
125
123
  # Specified OD
126
124
 
@@ -129,14 +127,14 @@ def get_housekeeping(hk_name: str, obsid: Union[ObservationIdentifier, str, int]
129
127
  try:
130
128
  return _get_housekeeping_od(hk_name, data_dir, od=od, time_window=time_window, setup=setup)
131
129
  except (ValueError, StopIteration, FileNotFoundError) as exc:
132
- raise HKError(f"No HK found for {hk_name} for OD {od} at {SITE_ID}") from exc
130
+ raise HKError(f"No HK found for {hk_name} for OD {od} at {get_site_id()}") from exc
133
131
 
134
132
  # Didn't specify neither the obsid nor the OD
135
133
 
136
134
  try:
137
135
  return _get_housekeeping_daily(hk_name, data_dir, time_window=time_window, setup=setup)
138
136
  except (ValueError, StopIteration, FileNotFoundError) as exc:
139
- raise HKError(f"No HK found for {hk_name} for today at {SITE_ID}") from exc
137
+ raise HKError(f"No HK found for {hk_name} for today at {get_site_id()}") from exc
140
138
 
141
139
 
142
140
  def _get_housekeeping(hk_name: str, timestamp_name: str, hk_dir: str, files, time_window: int = None):
@@ -272,7 +270,7 @@ def _get_housekeeping_od(hk_name: str, data_dir, od: str, time_window: int = Non
272
270
  raise HKError(f"Cannot determine which EGSE component generated HK parameter {hk_name}")
273
271
 
274
272
  hk_dir += f"{od}/"
275
- hk_files = [f"{od}_{SITE_ID}_{origin}.csv"]
273
+ hk_files = [f"{od}_{get_site_id()}_{origin}.csv"]
276
274
 
277
275
  return _get_housekeeping(hk_name, timestamp_name, hk_dir, hk_files, time_window=time_window)
278
276
 
@@ -326,7 +324,7 @@ def _get_housekeeping_obsid(hk_name: str, data_dir, obsid: Union[ObservationIden
326
324
 
327
325
  if len(hk_files) == 0:
328
326
 
329
- raise HKError(f"No HK found for the {origin} at {SITE_ID} for obsid {obsid}")
327
+ raise HKError(f"No HK found for the {origin} at {get_site_id()} for obsid {obsid}")
330
328
 
331
329
  hk_files = [hk_files[-1].name]
332
330
 
@@ -387,7 +385,7 @@ def _get_housekeeping_daily(hk_name: str, data_dir, time_window: int = None, set
387
385
 
388
386
  timestamp = datetime.datetime.now(tz=datetime.timezone.utc).strftime("%Y%m%d")
389
387
  hk_dir += f"{timestamp}/"
390
- filename = f"{timestamp}_{SITE_ID}_{origin}.csv"
388
+ filename = f"{timestamp}_{get_site_id()}_{origin}.csv"
391
389
 
392
390
  timestamp_index, hk_index = get_indices(hk_dir + filename, hk_name, timestamp_name)
393
391
  return get_last_non_empty(hk_dir + filename, timestamp_index, hk_index)
@@ -412,7 +410,7 @@ def _get_housekeeping_daily(hk_name: str, data_dir, time_window: int = None, set
412
410
 
413
411
  # Determine which columns will be needed from which file
414
412
 
415
- filename = f"{start_od}/{start_od}_{SITE_ID}_{origin}.csv"
413
+ filename = f"{start_od}/{start_od}_{get_site_id()}_{origin}.csv"
416
414
 
417
415
  if Path(hk_dir + filename).exists():
418
416
 
@@ -456,7 +454,7 @@ def _get_housekeeping_daily(hk_name: str, data_dir, time_window: int = None, set
456
454
  while day <= last_day:
457
455
 
458
456
  od = f"{day.year}{day.month:02d}{day.day:02d}"
459
- filename = f"{od}/{od}_{SITE_ID}_{origin}.csv"
457
+ filename = f"{od}/{od}_{get_site_id()}_{origin}.csv"
460
458
 
461
459
  if Path(hk_dir + filename).exists():
462
460
 
@@ -684,7 +682,7 @@ def read_conversion_dict(storage_mnemonic: str, use_site: bool = False, setup: O
684
682
 
685
683
  if use_site:
686
684
 
687
- th_prefix = f"G{SITE_ID}_"
685
+ th_prefix = f"G{get_site_id()}_"
688
686
 
689
687
  th_conversion_dict = {}
690
688
 
@@ -237,7 +237,7 @@ def _load_pandas(resource_name: str, separator: str):
237
237
 
238
238
  parts = resource_name[8:].rsplit("/", 1)
239
239
  [in_dir, fn] = parts if len(parts) > 1 else [None, parts[0]]
240
- conf_location = os.environ['PLATO_CONF_DATA_LOCATION']
240
+ conf_location = get_conf_data_location()
241
241
 
242
242
  try:
243
243
  pandas_file_location = Path(conf_location) / in_dir / fn
@@ -0,0 +1,19 @@
1
+ import os
2
+ from pathlib import Path
3
+
4
+ import pytest
5
+
6
+ import egse.env
7
+
8
+ HERE = Path(__file__).parent
9
+
10
+
11
+ @pytest.fixture(scope="module")
12
+ def default_env():
13
+
14
+ os.environ['PROJECT'] = "CGSE"
15
+ os.environ["SITE_ID"] = "LAB23"
16
+
17
+ os.environ["CGSE_DATA_STORAGE_LOCATION"] = str(HERE / "data")
18
+
19
+ egse.env.initialize()
@@ -0,0 +1,4 @@
1
+
2
+ DO NOT REMOVE THIS FOLDER
3
+
4
+ This empty folder is used by the unit tests for checking the functions that handle the persistence of last setup id.
@@ -0,0 +1,3 @@
1
+ TM source;Storage mnemonic;CAM EGSE mnemonic;Original name in EGSE;Name of corresponding timestamp;Origin of synoptics at CSL;Origin of synoptics at CSL1;Origin of synoptics at CSL2;Origin of synoptics at SRON;Origin of synoptics at IAS;Origin of synoptics at INTA;Description;MON screen;unit cal1;offset b cal1;slope a cal1;calibration function;MAX nonops;MIN nonops;MAX ops;MIN ops;Comment
2
+
3
+ Unit Test Manager;DAQ-TM;TEMP_ABC_001;ABC_001;timestamp;;;;;;;Temperature of ABC;;;;;;;;;;
@@ -1,6 +1,9 @@
1
1
  import pytest
2
2
 
3
+ import egse.env
3
4
  from egse.env import get_conf_repo_location
5
+ from egse.env import get_project_name
6
+ from egse.env import get_site_id
4
7
  from egse.env import initialize as env_initialize
5
8
  from egse.env import get_conf_data_location
6
9
  from egse.env import get_data_storage_location
@@ -15,6 +18,20 @@ from egse.env import set_log_file_location
15
18
  from egse.system import env_var
16
19
 
17
20
 
21
+ def test_get_project_name():
22
+
23
+ with env_var(PROJECT="CGSE"):
24
+ egse.env.initialize()
25
+ assert get_project_name() == "CGSE"
26
+
27
+
28
+ def test_get_site_id():
29
+
30
+ with env_var(SITE_ID="HOME"):
31
+ egse.env.initialize()
32
+ assert get_site_id() == "HOME"
33
+
34
+
18
35
  def test_get_data_storage_location():
19
36
 
20
37
  print()
@@ -0,0 +1,113 @@
1
+ import datetime
2
+ import textwrap
3
+ from pathlib import Path
4
+
5
+ import rich
6
+
7
+ from egse.env import get_site_id
8
+ from egse.setup import Setup
9
+ from egse.system import EPOCH_1958_1970
10
+ from egse.system import format_datetime
11
+
12
+
13
+ HERE = Path(__file__).parent
14
+
15
+
16
+ def test_get_housekeeping(default_env):
17
+ from egse.hk import get_housekeeping
18
+
19
+ # The get_housekeeping() function will by default search for HK telemetry in the daily CSV file that contains the
20
+ # HK parameter that is passed into the function. Since we have no operational system running during the tess,
21
+ # we will need to create sample data for that parameter in the correct file. The file will be located in the
22
+ # data storage location folder (defined by the default_env fixture) at
23
+ # `HERE/data/LAB23/daily/YYYYMMDD/YYYYMMDD_LAB23_DAQ-TM.csv`, where 'LAB23' is the SITE_ID and 'DAQ-TM' is the
24
+ # storage mnemonic of the device (this is read from the TM dictionary file).
25
+
26
+ today = format_datetime("today")
27
+ today_with_dash = format_datetime("today", fmt="%Y-%m-%d")
28
+
29
+ hk_path = HERE / f"data/{get_site_id()}/daily/{today}/"
30
+ hk_filename = f"{today}_{get_site_id()}_DAQ-TM.csv"
31
+
32
+ hk_path.mkdir(mode=0o777, parents=True, exist_ok=True)
33
+
34
+ with (hk_path / hk_filename).open(mode='w') as fd:
35
+ fd.writelines(textwrap.dedent(
36
+ f"""\
37
+ timestamp,TEMPT_ABC_000,TEMP_ABC_001,TEMP_ABC_002
38
+ {today_with_dash}T00:00:23.324+0000,21.333,23.3421,26.234
39
+ {today_with_dash}T00:00:42.123+0000,22.145,23.4567,27.333
40
+ """
41
+ ))
42
+
43
+ setup = Setup.from_yaml_string(
44
+ textwrap.dedent(
45
+ """
46
+ telemetry:
47
+ dictionary: pandas//../../common/telemetry/tm-dictionary-default.csv
48
+ separator: ;
49
+ """
50
+ )
51
+ )
52
+
53
+ rich.print("telemetry", setup.telemetry.dictionary)
54
+
55
+ try:
56
+ timestamp, data = get_housekeeping("TEMP_ABC_001", setup=setup)
57
+ timestamp -= EPOCH_1958_1970
58
+ dt = datetime.datetime.utcfromtimestamp(timestamp)
59
+
60
+ rich.print(f"{timestamp}, {dt}, {data}")
61
+
62
+ assert data.strip() == '23.4567'
63
+ assert format_datetime(dt, fmt="%Y-%m-%d").startswith(today_with_dash)
64
+
65
+ finally:
66
+ # Get rid of the CSV file
67
+ (hk_path / hk_filename).unlink()
68
+
69
+ # Get rid of today's folder
70
+ hk_path.rmdir()
71
+
72
+
73
+ def test_convert_hk_names():
74
+
75
+ a = {
76
+ 'aaa': 1,
77
+ 'bbb': 2,
78
+ 'ccc': 3,
79
+ 'eee': 4,
80
+ }
81
+
82
+ c = {
83
+ 'aaa': 'AAA',
84
+ 'bbb': 'BBB',
85
+ 'ccc': 'CCC',
86
+ 'ddd': 'DDD',
87
+ }
88
+
89
+ from egse.hk import convert_hk_names
90
+
91
+ b = convert_hk_names(a, c)
92
+
93
+ # Result:
94
+ # * all keys in 'a' that have a conversion in 'c' shall be in 'b' with the converted key
95
+ # * all keys in 'a' that do not have a conversion in 'c', shall be in 'b' with their original key
96
+ # * all conversion keys that are in 'c' but not in 'a' shall just be ignored
97
+
98
+ assert 'AAA' in b
99
+ assert 'BBB' in b
100
+ assert 'CCC' in b
101
+ assert 'eee' in b
102
+
103
+ assert 'aaa' not in b
104
+ assert 'bbb' not in b
105
+ assert 'ccc' not in b
106
+ assert 'ddd' not in b
107
+ assert 'DDD' not in b
108
+
109
+ for k, v in a.items():
110
+ if k == 'eee':
111
+ assert b[k] == v
112
+ else:
113
+ assert b[k.upper()] == v
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "cgse-coordinates"
3
- version = "2025.0.3"
3
+ version = "2025.0.4"
4
4
  description = "Reference Frames and Coordinate Transofrmations 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-core"
3
- version = "2025.0.3"
3
+ version = "2025.0.4"
4
4
  description = "Core services for the CGSE framework"
5
5
  authors = [
6
6
  {name = "Rik Huygen", email = "rik.huygen@kuleuven.be"},
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "cgse-gui"
3
- version = "2025.0.3"
3
+ version = "2025.0.4"
4
4
  description = "GUI components for CGSE"
5
5
  authors = [
6
6
  {name = "Rik Huygen", email = "rik.huygen@kuleuven.be"},
@@ -1,5 +1,6 @@
1
1
 
2
2
  # Project information
3
+
3
4
  site_name: CGSE
4
5
  site_url: https://ivs-kuleuven.github.io/cgse/
5
6
  site_author: Rik Huygen
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "cgse-tools"
3
- version = "2025.0.3"
3
+ version = "2025.0.4"
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 = "symetrie-hexapod"
3
- version = "2025.0.3"
3
+ version = "2025.0.4"
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 = "2025.0.3"
3
+ version = "2025.0.4"
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 = "2025.0.3"
3
+ version = "2025.0.4"
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 = "2025.0.3"
3
+ version = "2025.0.4"
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 = "2025.0.3"
3
+ version = "2025.0.4"
4
4
  description = "Generic Common-EGSE: Commanding and monitoring lab equipment"
5
5
  authors = [
6
6
  {name = "Rik Huygen", email = "rik.huygen@kuleuven.be"},
@@ -1,54 +0,0 @@
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 name="twitter:card" content="summary">
11
- <meta name="twitter:site" content="@textualizeio">
12
- <meta name="twitter:creator" content="@willmcgugan">
13
- <meta property="og:title" content="Textual - {{ page.title }}">
14
- <meta property="og:type" content="article">
15
- <meta property="og:url" content="{{ page.canonical_url | url }}">
16
- <meta property="og:site_name" content="Textual Documentation">
17
- <meta property="og:description" content="Textual is a TUI framework for Python, inspired by modern web development.">
18
- <meta property="og:image" content="https://raw.githubusercontent.com/Textualize/textual/main/imgs/textual.png">
19
-
20
- <style>
21
-
22
- @font-face {
23
- font-family: "Virgil";
24
- src: url("https://unpkg.com/@excalidraw/excalidraw@0.12.0/dist/excalidraw-assets/Virgil.woff2");
25
- }
26
- @font-face {
27
- font-family: "Cascadia";
28
- src: url("https://unpkg.com/@excalidraw/excalidraw@0.12.0/dist/excalidraw-assets/Cascadia.woff2");
29
- }
30
-
31
-
32
-
33
- </style>
34
-
35
- <script lang="js">
36
- window.onload = async (event) => {
37
- const demos = document.querySelectorAll(".textual-web-demo");
38
-
39
- if (demos.length){
40
- await fetch("https://textual-web-demos.fly.dev/health-check/", {
41
- method: 'GET',
42
- mode: 'no-cors'
43
- });
44
- demos.forEach((element)=>{
45
- const app = element.dataset.app;
46
- const iframe_html = `<div class="textual-web-demo"><iframe width="100%" onload="this.parentElement.classList.add('-loaded');" src="https://textual-web.io/textualize/${app}?delay=y&fontsize=12&ping=https://textual-web-demos.fly.dev/health-check/"></iframe></div>`;
47
- element.outerHTML = iframe_html;
48
- });
49
- }
50
- }
51
-
52
- </script>
53
-
54
- {% endblock %}
@@ -1,54 +0,0 @@
1
- import rich
2
-
3
-
4
- def test_get_housekeeping():
5
- from egse.hk import get_housekeeping
6
-
7
- data = get_housekeeping("TEMP_ABC_001")
8
-
9
- rich.print(data)
10
-
11
- assert data
12
-
13
-
14
- def test_convert_hk_names():
15
-
16
- a = {
17
- 'aaa': 1,
18
- 'bbb': 2,
19
- 'ccc': 3,
20
- 'eee': 4,
21
- }
22
-
23
- c = {
24
- 'aaa': 'AAA',
25
- 'bbb': 'BBB',
26
- 'ccc': 'CCC',
27
- 'ddd': 'DDD',
28
- }
29
-
30
- from egse.hk import convert_hk_names
31
-
32
- b = convert_hk_names(a, c)
33
-
34
- # Result:
35
- # * all keys in 'a' that have a conversion in 'c' shall be in 'b' with the converted key
36
- # * all keys in 'a' that do not have a conversion in 'c', shall be in 'b' with their original key
37
- # * all conversion keys that are in 'c' but not in 'a' shall just be ignored
38
-
39
- assert 'AAA' in b
40
- assert 'BBB' in b
41
- assert 'CCC' in b
42
- assert 'eee' in b
43
-
44
- assert 'aaa' not in b
45
- assert 'bbb' not in b
46
- assert 'ccc' not in b
47
- assert 'ddd' not in b
48
- assert 'DDD' not in b
49
-
50
- for k, v in a.items():
51
- if k == 'eee':
52
- assert b[k] == v
53
- else:
54
- assert b[k.upper()] == v
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