cgse 0.17.3__tar.gz → 0.17.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 (584) hide show
  1. {cgse-0.17.3 → cgse-0.17.4}/CHANGELOG.md +15 -3
  2. {cgse-0.17.3 → cgse-0.17.4}/PKG-INFO +1 -1
  3. {cgse-0.17.3 → cgse-0.17.4/docs/admin_guide}/make-a-release.md +42 -9
  4. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/pyproject.toml +1 -1
  5. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/device.py +70 -0
  6. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/hk.py +2 -2
  7. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/log.py +8 -0
  8. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/scpi.py +123 -52
  9. cgse-0.17.4/libs/cgse-common/src/egse/socketdevice.py +380 -0
  10. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/system.py +5 -0
  11. cgse-0.17.4/libs/cgse-common/tests/test_socketdevice.py +329 -0
  12. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-coordinates/pyproject.toml +3 -3
  13. cgse-0.17.4/libs/cgse-coordinates/src/egse/coordinates/__init__.py +229 -0
  14. cgse-0.17.4/libs/cgse-coordinates/src/egse/coordinates/avoidance.py +91 -0
  15. cgse-0.17.4/libs/cgse-coordinates/src/egse/coordinates/cslmodel.py +118 -0
  16. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-coordinates/src/egse/coordinates/laser_tracker_to_dict.py +16 -25
  17. cgse-0.17.4/libs/cgse-coordinates/src/egse/coordinates/point.py +833 -0
  18. cgse-0.17.4/libs/cgse-coordinates/src/egse/coordinates/pyplot.py +203 -0
  19. cgse-0.17.4/libs/cgse-coordinates/src/egse/coordinates/reference_frame.py +1417 -0
  20. cgse-0.17.4/libs/cgse-coordinates/src/egse/coordinates/refmodel.py +828 -0
  21. cgse-0.17.4/libs/cgse-coordinates/src/egse/coordinates/rotation_matrix.py +95 -0
  22. cgse-0.17.4/libs/cgse-coordinates/src/egse/coordinates/transform3d_addon.py +501 -0
  23. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-coordinates/tests/test_avoidance.py +2 -2
  24. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-coordinates/tests/test_coordinates_plot.py +5 -5
  25. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-coordinates/tests/test_coordinates_serialize.py +13 -9
  26. cgse-0.17.4/libs/cgse-coordinates/tests/test_point.py +90 -0
  27. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-coordinates/tests/test_reference_frames.py +134 -128
  28. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-coordinates/tests/test_refmodel.py +39 -27
  29. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/pyproject.toml +1 -1
  30. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/cgse_core/_stop.py +1 -2
  31. cgse-0.17.4/libs/cgse-core/src/egse/connect.py +528 -0
  32. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/control.py +2 -1
  33. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/dummy.py +36 -11
  34. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/logger/__init__.py +2 -2
  35. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/notifyhub/server.py +3 -1
  36. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/procman/procman_cs.py +1 -1
  37. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/procman/procman_ui.py +5 -2
  38. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/registry/client.py +16 -6
  39. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/registry/server.py +10 -2
  40. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/registry/service.py +11 -5
  41. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/fixtures/helpers.py +61 -1
  42. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/fixtures/services.py +71 -16
  43. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/test_client_server_interaction.py +3 -8
  44. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/test_cm_cs.py +3 -43
  45. cgse-0.17.4/libs/cgse-core/tests/test_connect.py +692 -0
  46. cgse-0.17.4/libs/cgse-core/tests/test_dummy.py +153 -0
  47. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/test_event_notification.py +6 -2
  48. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/test_logger.py +28 -10
  49. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/test_registry_service.py +8 -8
  50. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/test_server_running.py +14 -8
  51. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/test_server_running_with_fixture.py +12 -7
  52. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/test_zmq_microservice.py +19 -7
  53. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/pyproject.toml +1 -1
  54. {cgse-0.17.3 → cgse-0.17.4}/mkdocs.yml +2 -0
  55. {cgse-0.17.3 → cgse-0.17.4}/overrides/.icons/custom/gear.svg +92 -92
  56. cgse-0.17.4/projects/ariel/ariel-facility/README.MD +89 -0
  57. cgse-0.17.4/projects/ariel/ariel-facility/pyproject.toml +63 -0
  58. cgse-0.17.4/projects/ariel/ariel-facility/src/ariel_facility/cgse_explore.py +19 -0
  59. cgse-0.17.4/projects/ariel/ariel-facility/src/ariel_facility/cgse_services.py +46 -0
  60. cgse-0.17.4/projects/ariel/ariel-facility/src/ariel_facility/settings.yaml +20 -0
  61. cgse-0.17.4/projects/ariel/ariel-facility/src/egse/ariel/facility/database.py +214 -0
  62. cgse-0.17.4/projects/ariel/ariel-facility/src/egse/ariel/facility/hk.py +341 -0
  63. {cgse-0.17.3 → cgse-0.17.4}/projects/ariel/ariel-tcu/README.md +1 -1
  64. {cgse-0.17.3 → cgse-0.17.4}/projects/ariel/ariel-tcu/pyproject.toml +3 -3
  65. {cgse-0.17.3 → cgse-0.17.4}/projects/ariel/ariel-tcu/src/ariel_tcu/settings.yaml +4 -0
  66. {cgse-0.17.3 → cgse-0.17.4}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/__init__.py +12 -7
  67. {cgse-0.17.3 → cgse-0.17.4}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu.py +108 -16
  68. {cgse-0.17.3 → cgse-0.17.4}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu_cmd_utils.py +65 -8
  69. {cgse-0.17.3 → cgse-0.17.4}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu_cs.py +56 -32
  70. {cgse-0.17.3 → cgse-0.17.4}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu_devif.py +27 -0
  71. {cgse-0.17.3 → cgse-0.17.4}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu_protocol.py +2 -2
  72. cgse-0.17.4/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu_ui.py +693 -0
  73. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/cgse-tools/pyproject.toml +1 -1
  74. cgse-0.17.4/projects/generic/digilent/README.md +6 -0
  75. cgse-0.17.4/projects/generic/digilent/pyproject.toml +81 -0
  76. cgse-0.17.4/projects/generic/digilent/src/digilent/cgse_explore.py +19 -0
  77. cgse-0.17.4/projects/generic/digilent/src/digilent/cgse_services.py +59 -0
  78. cgse-0.17.4/projects/generic/digilent/src/digilent/settings.yaml +23 -0
  79. cgse-0.17.4/projects/generic/digilent/src/egse/digilent/digilent.py +2809 -0
  80. cgse-0.17.4/projects/generic/digilent/src/egse/digilent/measurpoint/digilent_devif.py +278 -0
  81. cgse-0.17.4/projects/generic/digilent/src/egse/digilent/measurpoint/dt8874/__init__.py +21 -0
  82. cgse-0.17.4/projects/generic/digilent/src/egse/digilent/measurpoint/dt8874/dt8874.py +71 -0
  83. cgse-0.17.4/projects/generic/digilent/src/egse/digilent/measurpoint/dt8874/dt8874.yaml +43 -0
  84. cgse-0.17.4/projects/generic/digilent/src/egse/digilent/measurpoint/dt8874/dt8874_cs.py +335 -0
  85. cgse-0.17.4/projects/generic/digilent/src/egse/digilent/measurpoint/dt8874/dt8874_devif.py +14 -0
  86. cgse-0.17.4/projects/generic/digilent/src/egse/digilent/measurpoint/dt8874/dt8874_protocol.py +148 -0
  87. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/pyproject.toml +1 -1
  88. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510.py +31 -22
  89. cgse-0.17.4/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_adev.py +77 -0
  90. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_cs.py +89 -44
  91. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_dev.py +78 -20
  92. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_mon.py +58 -22
  93. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_protocol.py +18 -35
  94. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_sim.py +117 -60
  95. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/cgse_services.py +26 -7
  96. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/tests/script_daq6510_mon.py +3 -7
  97. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/tests/test_adev.py +150 -13
  98. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/tests/test_dev.py +18 -14
  99. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/lakeshore-tempcontrol/pyproject.toml +1 -1
  100. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/pyproject.toml +1 -1
  101. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/dynalpha.py +1 -1
  102. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod.py +47 -45
  103. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.py +2 -2
  104. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_cs.py +1 -1
  105. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_protocol.py +1 -1
  106. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_cs.py +1 -1
  107. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_ui.py +3 -2
  108. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_cs.py +1 -1
  109. cgse-0.17.4/projects/generic/symetrie-hexapod/src/symetrie_hexapod/__init__.py +0 -0
  110. cgse-0.17.4/projects/generic/symetrie-hexapod/src/symetrie_hexapod/settings.yaml +60 -0
  111. {cgse-0.17.3 → cgse-0.17.4}/projects/plato/plato-fits/pyproject.toml +1 -1
  112. cgse-0.17.4/projects/plato/plato-hdf5/README.md +0 -0
  113. {cgse-0.17.3 → cgse-0.17.4}/projects/plato/plato-hdf5/pyproject.toml +1 -1
  114. cgse-0.17.4/projects/plato/plato-spw/README.md +0 -0
  115. {cgse-0.17.3 → cgse-0.17.4}/projects/plato/plato-spw/pyproject.toml +1 -1
  116. {cgse-0.17.3 → cgse-0.17.4}/pyproject.toml +1 -1
  117. cgse-0.17.3/duckdb_metrics.db +0 -0
  118. cgse-0.17.3/duckdb_metrics.db.wal +0 -0
  119. cgse-0.17.3/justfile +0 -69
  120. cgse-0.17.3/libs/cgse-common/justfile +0 -20
  121. cgse-0.17.3/libs/cgse-common/service_registry.db +0 -0
  122. cgse-0.17.3/libs/cgse-coordinates/src/cgse_coordinates/settings.yaml +0 -16
  123. cgse-0.17.3/libs/cgse-coordinates/src/egse/coordinates/__init__.py +0 -536
  124. cgse-0.17.3/libs/cgse-coordinates/src/egse/coordinates/avoidance.py +0 -99
  125. cgse-0.17.3/libs/cgse-coordinates/src/egse/coordinates/cslmodel.py +0 -127
  126. cgse-0.17.3/libs/cgse-coordinates/src/egse/coordinates/point.py +0 -707
  127. cgse-0.17.3/libs/cgse-coordinates/src/egse/coordinates/pyplot.py +0 -191
  128. cgse-0.17.3/libs/cgse-coordinates/src/egse/coordinates/referenceFrame.py +0 -1251
  129. cgse-0.17.3/libs/cgse-coordinates/src/egse/coordinates/refmodel.py +0 -720
  130. cgse-0.17.3/libs/cgse-coordinates/src/egse/coordinates/rotationMatrix.py +0 -82
  131. cgse-0.17.3/libs/cgse-coordinates/src/egse/coordinates/transform3d_addon.py +0 -437
  132. cgse-0.17.3/libs/cgse-coordinates/tests/test_point.py +0 -90
  133. cgse-0.17.3/libs/cgse-core/service_registry.db +0 -0
  134. cgse-0.17.3/libs/cgse-core/service_registry.db-shm +0 -0
  135. cgse-0.17.3/libs/cgse-core/service_registry.db-wal +0 -0
  136. cgse-0.17.3/libs/cgse-core/src/egse/connect.py +0 -55
  137. cgse-0.17.3/libs/cgse-core/tests/test_connect.py +0 -200
  138. cgse-0.17.3/libs/cgse-core/tests/test_dummy.py +0 -68
  139. cgse-0.17.3/projects/generic/keithley-tempcontrol/justfile +0 -25
  140. cgse-0.17.3/projects/generic/keithley-tempcontrol/service_registry.db +0 -0
  141. cgse-0.17.3/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_adev.py +0 -97
  142. cgse-0.17.3/projects/generic/symetrie-hexapod/src/symetrie_hexapod/settings.yaml +0 -15
  143. cgse-0.17.3/scratch/advanced-process-monitoring.py +0 -111
  144. cgse-0.17.3/scratch/live-process-monitoring.py +0 -67
  145. cgse-0.17.3/scratch/match-case.py +0 -41
  146. cgse-0.17.3/scratch/mock-version.py +0 -3
  147. cgse-0.17.3/scratch/processes.json +0 -7680
  148. cgse-0.17.3/scratch/simple-process-monitoring.py +0 -72
  149. cgse-0.17.3/scratch/test_version_behavior.py +0 -35
  150. cgse-0.17.3/scratch/understanding-the-mocking-library.py +0 -82
  151. cgse-0.17.3/scratch/understanding_the_with_statement.py +0 -37
  152. cgse-0.17.3/service_registry.db +0 -0
  153. cgse-0.17.3/test_service_registry.db +0 -0
  154. {cgse-0.17.3 → cgse-0.17.4}/.env.example +0 -0
  155. {cgse-0.17.3 → cgse-0.17.4}/.github/workflows/ruff-format-check.yaml +0 -0
  156. {cgse-0.17.3 → cgse-0.17.4}/.gitignore +0 -0
  157. {cgse-0.17.3 → cgse-0.17.4}/README.md +0 -0
  158. {cgse-0.17.3 → cgse-0.17.4}/bump.py +0 -0
  159. {cgse-0.17.3 → cgse-0.17.4}/conftest.py +0 -0
  160. {cgse-0.17.3 → cgse-0.17.4}/docs/api/bits.md +0 -0
  161. {cgse-0.17.3 → cgse-0.17.4}/docs/api/calibration.md +0 -0
  162. {cgse-0.17.3 → cgse-0.17.4}/docs/api/command.md +0 -0
  163. {cgse-0.17.3 → cgse-0.17.4}/docs/api/config.md +0 -0
  164. {cgse-0.17.3 → cgse-0.17.4}/docs/api/control.md +0 -0
  165. {cgse-0.17.3 → cgse-0.17.4}/docs/api/counter.md +0 -0
  166. {cgse-0.17.3 → cgse-0.17.4}/docs/api/decorators.md +0 -0
  167. {cgse-0.17.3 → cgse-0.17.4}/docs/api/device.md +0 -0
  168. {cgse-0.17.3 → cgse-0.17.4}/docs/api/dicts.md +0 -0
  169. {cgse-0.17.3 → cgse-0.17.4}/docs/api/dummy.md +0 -0
  170. {cgse-0.17.3 → cgse-0.17.4}/docs/api/env.md +0 -0
  171. {cgse-0.17.3 → cgse-0.17.4}/docs/api/exceptions.md +0 -0
  172. {cgse-0.17.3 → cgse-0.17.4}/docs/api/heartbeat.md +0 -0
  173. {cgse-0.17.3 → cgse-0.17.4}/docs/api/hk.md +0 -0
  174. {cgse-0.17.3 → cgse-0.17.4}/docs/api/index.md +0 -0
  175. {cgse-0.17.3 → cgse-0.17.4}/docs/api/listener.md +0 -0
  176. {cgse-0.17.3 → cgse-0.17.4}/docs/api/metrics.md +0 -0
  177. {cgse-0.17.3 → cgse-0.17.4}/docs/api/mixin.md +0 -0
  178. {cgse-0.17.3 → cgse-0.17.4}/docs/api/monitoring.md +0 -0
  179. {cgse-0.17.3 → cgse-0.17.4}/docs/api/observer.md +0 -0
  180. {cgse-0.17.3 → cgse-0.17.4}/docs/api/obsid.md +0 -0
  181. {cgse-0.17.3 → cgse-0.17.4}/docs/api/persistence.md +0 -0
  182. {cgse-0.17.3 → cgse-0.17.4}/docs/api/plugin.md +0 -0
  183. {cgse-0.17.3 → cgse-0.17.4}/docs/api/process.md +0 -0
  184. {cgse-0.17.3 → cgse-0.17.4}/docs/api/reload.md +0 -0
  185. {cgse-0.17.3 → cgse-0.17.4}/docs/api/settings.md +0 -0
  186. {cgse-0.17.3 → cgse-0.17.4}/docs/api/setup.md +0 -0
  187. {cgse-0.17.3 → cgse-0.17.4}/docs/api/system.md +0 -0
  188. {cgse-0.17.3 → cgse-0.17.4}/docs/custom_theme/main.html +0 -0
  189. {cgse-0.17.3 → cgse-0.17.4}/docs/dev_guide/coding_style.md +0 -0
  190. {cgse-0.17.3 → cgse-0.17.4}/docs/dev_guide/docs.md +0 -0
  191. {cgse-0.17.3 → cgse-0.17.4}/docs/dev_guide/dotenv.md +0 -0
  192. {cgse-0.17.3 → cgse-0.17.4}/docs/dev_guide/index.md +0 -0
  193. {cgse-0.17.3 → cgse-0.17.4}/docs/dev_guide/installation.md +0 -0
  194. {cgse-0.17.3 → cgse-0.17.4}/docs/dev_guide/monitoring.md +0 -0
  195. {cgse-0.17.3 → cgse-0.17.4}/docs/dev_guide/monorepo.md +0 -0
  196. {cgse-0.17.3 → cgse-0.17.4}/docs/dev_guide/nox.md +0 -0
  197. {cgse-0.17.3 → cgse-0.17.4}/docs/dev_guide/plugins.md +0 -0
  198. {cgse-0.17.3 → cgse-0.17.4}/docs/dev_guide/project-configuration.md +0 -0
  199. {cgse-0.17.3 → cgse-0.17.4}/docs/dev_guide/unit_testing.md +0 -0
  200. {cgse-0.17.3 → cgse-0.17.4}/docs/dev_guide/uv.md +0 -0
  201. {cgse-0.17.3 → cgse-0.17.4}/docs/dev_guide/versioning.md +0 -0
  202. {cgse-0.17.3 → cgse-0.17.4}/docs/getting_started.md +0 -0
  203. {cgse-0.17.3 → cgse-0.17.4}/docs/help.md +0 -0
  204. {cgse-0.17.3 → cgse-0.17.4}/docs/images/cli-cgse.png +0 -0
  205. {cgse-0.17.3 → cgse-0.17.4}/docs/images/github-fork-clone-dark.png +0 -0
  206. {cgse-0.17.3 → cgse-0.17.4}/docs/images/github-fork-clone.png +0 -0
  207. {cgse-0.17.3 → cgse-0.17.4}/docs/images/grafana-queries.png +0 -0
  208. {cgse-0.17.3 → cgse-0.17.4}/docs/images/icons/cgse-logo-blue.svg +0 -0
  209. {cgse-0.17.3 → cgse-0.17.4}/docs/images/icons/cgse-logo.svg +0 -0
  210. {cgse-0.17.3 → cgse-0.17.4}/docs/index.md +0 -0
  211. {cgse-0.17.3 → cgse-0.17.4}/docs/initialize.md +0 -0
  212. {cgse-0.17.3 → cgse-0.17.4}/docs/libs/cgse-common/images/load_methods.png +0 -0
  213. {cgse-0.17.3 → cgse-0.17.4}/docs/libs/cgse-common/index.md +0 -0
  214. {cgse-0.17.3 → cgse-0.17.4}/docs/libs/cgse-common/settings.md +0 -0
  215. {cgse-0.17.3 → cgse-0.17.4}/docs/libs/cgse-common/setup.md +0 -0
  216. {cgse-0.17.3 → cgse-0.17.4}/docs/libs/cgse-coordinates/index.md +0 -0
  217. {cgse-0.17.3 → cgse-0.17.4}/docs/libs/cgse-core/index.md +0 -0
  218. {cgse-0.17.3 → cgse-0.17.4}/docs/libs/cgse-core/notifyhub.md +0 -0
  219. {cgse-0.17.3 → cgse-0.17.4}/docs/libs/cgse-core/registry.md +0 -0
  220. {cgse-0.17.3 → cgse-0.17.4}/docs/libs/cgse-gui/index.md +0 -0
  221. {cgse-0.17.3 → cgse-0.17.4}/docs/libs/index.md +0 -0
  222. {cgse-0.17.3 → cgse-0.17.4}/docs/package_list.md +0 -0
  223. {cgse-0.17.3 → cgse-0.17.4}/docs/projects/cgse-tools.md +0 -0
  224. {cgse-0.17.3 → cgse-0.17.4}/docs/projects/index.md +0 -0
  225. {cgse-0.17.3 → cgse-0.17.4}/docs/projects/symetrie-hexapod.md +0 -0
  226. {cgse-0.17.3 → cgse-0.17.4}/docs/roadmap.md +0 -0
  227. {cgse-0.17.3 → cgse-0.17.4}/docs/stylesheets/custom.css +0 -0
  228. {cgse-0.17.3 → cgse-0.17.4}/docs/stylesheets/extra.css +0 -0
  229. {cgse-0.17.3 → cgse-0.17.4}/docs/tutorial.md +0 -0
  230. {cgse-0.17.3 → cgse-0.17.4}/docs/user_guide/cli.md +0 -0
  231. {cgse-0.17.3 → cgse-0.17.4}/docs/user_guide/env.md +0 -0
  232. {cgse-0.17.3 → cgse-0.17.4}/docs/user_guide/index.md +0 -0
  233. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/README.md +0 -0
  234. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/noxfile.py +0 -0
  235. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/cgse_common/__init__.py +0 -0
  236. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/cgse_common/cgse.py +0 -0
  237. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/cgse_common/settings.yaml +0 -0
  238. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/bits.py +0 -0
  239. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/calibration.py +0 -0
  240. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/config.py +0 -0
  241. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/counter.py +0 -0
  242. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/decorators.py +0 -0
  243. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/dicts.py +0 -0
  244. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/env.py +0 -0
  245. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/exceptions.py +0 -0
  246. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/heartbeat.py +0 -0
  247. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/metrics.py +0 -0
  248. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/observer.py +0 -0
  249. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/obsid.py +0 -0
  250. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/persistence.py +0 -0
  251. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/plugin.py +0 -0
  252. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/plugins/metrics/influxdb.py +0 -0
  253. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/process.py +0 -0
  254. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/py.typed +0 -0
  255. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/randomwalk.py +0 -0
  256. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/reload.py +0 -0
  257. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/resource.py +0 -0
  258. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/response.py +0 -0
  259. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/settings.py +0 -0
  260. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/settings.yaml +0 -0
  261. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/setup.py +0 -0
  262. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/signal.py +0 -0
  263. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/state.py +0 -0
  264. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/task.py +0 -0
  265. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/version.py +0 -0
  266. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/zmq_ser.py +0 -0
  267. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/conftest.py +0 -0
  268. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/COPYING +0 -0
  269. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00028_201028_155259.yaml +0 -0
  270. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00029_201028_155331.yaml +0 -0
  271. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00030_210311_134043.yaml +0 -0
  272. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00080_210917_105245.yaml +0 -0
  273. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00081_210922_142259.yaml +0 -0
  274. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00082_210923_094458.yaml +0 -0
  275. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/CSL1/README.md +0 -0
  276. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/CSL2/README.md +0 -0
  277. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/IAS/README.md +0 -0
  278. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/INTA/README.md +0 -0
  279. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/LAB23/README.md +0 -0
  280. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00027_211119_140441.yaml +0 -0
  281. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00028_211119_160406.yaml +0 -0
  282. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00029_211119_172918.yaml +0 -0
  283. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00030_211122_103604.yaml +0 -0
  284. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00031_211123_124900.yaml +0 -0
  285. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/common/telemetry/tm-dictionary-default.csv +0 -0
  286. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/conf/SETUP_20250114_1519.yaml +0 -0
  287. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/conf/config-file.toml +0 -0
  288. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/data/cal_coeff_1234.csv +0 -0
  289. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/data/calibration.csv +0 -0
  290. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/data/calibration.yaml +0 -0
  291. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/data/command.yaml +0 -0
  292. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/data/corrupt.yaml +0 -0
  293. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/data/data-file.txt +0 -0
  294. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/data/empty_data_file.txt +0 -0
  295. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/data/empty_yaml_file.yaml +0 -0
  296. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/data/local_settings.yaml +0 -0
  297. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/data/new_local_settings.yaml +0 -0
  298. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/data/test_setup.yaml +0 -0
  299. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/icons/hourglass.svg +0 -0
  300. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/icons/keyboard.png +0 -0
  301. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/icons/soap_sponge.svg +0 -0
  302. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/lib/dev1/shared-lib.so +0 -0
  303. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/lib/dev2/shared-lib.so +0 -0
  304. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/fixtures/default_env.py +0 -0
  305. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/fixtures/helpers.py +0 -0
  306. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/scripts/empty_process.py +0 -0
  307. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/scripts/handle_sigterm.py +0 -0
  308. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/scripts/process_with_children.py +0 -0
  309. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/scripts/raise_value_error.py +0 -0
  310. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/scripts/void-0.py +0 -0
  311. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/scripts/void-1.py +0 -0
  312. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_bits.py +0 -0
  313. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_config.py +0 -0
  314. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_decorators.py +0 -0
  315. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_device.py +0 -0
  316. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_env.py +0 -0
  317. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_fixtures.py +0 -0
  318. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_hk.py +0 -0
  319. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_influxdb_plugin.py +0 -0
  320. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_log.py +0 -0
  321. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_metrics.py +0 -0
  322. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_plugin.py +0 -0
  323. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_process.py +0 -0
  324. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_resource.py +0 -0
  325. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_response.py +0 -0
  326. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_settings.py +0 -0
  327. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_setup.py +0 -0
  328. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_signal.py +0 -0
  329. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_state.py +0 -0
  330. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_system.py +0 -0
  331. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_task.py +0 -0
  332. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_version.py +0 -0
  333. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_zmq_ser.py +0 -0
  334. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-coordinates/README.md +0 -0
  335. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-coordinates/src/cgse_coordinates/__init__.py +0 -0
  336. cgse-0.17.3/identifier.sqlite → cgse-0.17.4/libs/cgse-coordinates/src/cgse_coordinates/settings.yaml +0 -0
  337. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-coordinates/tests/test_ref_model.py +0 -0
  338. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/README.md +0 -0
  339. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/cgse_core/__init__.py +0 -0
  340. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/cgse_core/_start.py +0 -0
  341. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/cgse_core/_status.py +0 -0
  342. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/cgse_core/cgse_explore.py +0 -0
  343. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/cgse_core/services.py +0 -0
  344. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/cgse_core/settings.yaml +0 -0
  345. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/_setup_core.py +0 -0
  346. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/command.py +0 -0
  347. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/confman/__init__.py +0 -0
  348. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/confman/__main__.py +0 -0
  349. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/confman/confman.yaml +0 -0
  350. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/confman/confman_cs.py +0 -0
  351. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/icons/busy.svg +0 -0
  352. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/icons/operational-mode.svg +0 -0
  353. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/icons/pm_ui.svg +0 -0
  354. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/icons/simulator-mode.svg +0 -0
  355. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/icons/start-process-button.svg +0 -0
  356. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/icons/stop-process-button.svg +0 -0
  357. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/icons/user-interface.svg +0 -0
  358. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/listener.py +0 -0
  359. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/logger/__main__.py +0 -0
  360. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/logger/log_cs.py +0 -0
  361. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/mixin.py +0 -0
  362. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/monitoring.py +0 -0
  363. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/notifyhub/__init__.py +0 -0
  364. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/notifyhub/client.py +0 -0
  365. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/notifyhub/event.py +0 -0
  366. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/notifyhub/services.py +0 -0
  367. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/procman/__init__.py +0 -0
  368. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/procman/procman.yaml +0 -0
  369. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/procman/procman_protocol.py +0 -0
  370. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/protocol.py +0 -0
  371. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/proxy.py +0 -0
  372. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/registry/__init__.py +0 -0
  373. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/registry/backend.py +0 -0
  374. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/services.py +0 -0
  375. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/services.yaml +0 -0
  376. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/storage/__init__.py +0 -0
  377. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/storage/__main__.py +0 -0
  378. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/storage/persistence.py +0 -0
  379. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/storage/storage.yaml +0 -0
  380. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/storage/storage_cs.py +0 -0
  381. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/conftest.py +0 -0
  382. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/data/local_settings.yaml +0 -0
  383. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/fixtures/default_env.py +0 -0
  384. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/script_subscribe_to_notifyhub.py +0 -0
  385. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/script_test_async_registry_client.py +0 -0
  386. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/script_test_registry_client_server.py +0 -0
  387. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/script_test_service_registry_server.py +0 -0
  388. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/script_test_sync_registry_client.py +0 -0
  389. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/services.py +0 -0
  390. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/stress_test_registry_server.py +0 -0
  391. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/test_command.py +0 -0
  392. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/test_confman_setups.py +1 -1
  393. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/test_control.py +0 -0
  394. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/test_extensions.py +0 -0
  395. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/test_listener.py +0 -0
  396. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/test_mixin.py +0 -0
  397. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/test_notify_hub.py +0 -0
  398. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/test_protocol.py +0 -0
  399. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/test_registry_backend.py +0 -0
  400. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/test_settings_core.py +0 -0
  401. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/README.md +0 -0
  402. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/__init__.py +0 -0
  403. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/buttons.py +0 -0
  404. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-start.svg +0 -0
  405. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-stop.svg +0 -0
  406. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/aeu-cs.svg +0 -0
  407. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-started.svg +0 -0
  408. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-stopped.svg +0 -0
  409. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/aeu_cs.svg +0 -0
  410. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/alert.svg +0 -0
  411. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/arrow-double-left.png +0 -0
  412. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/arrow-double-right.png +0 -0
  413. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/arrow-up.svg +0 -0
  414. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/backward.svg +0 -0
  415. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/busy.svg +0 -0
  416. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/cleaning.svg +0 -0
  417. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/color-scheme.svg +0 -0
  418. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/cs-connected-alert.svg +0 -0
  419. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/cs-connected-disabled.svg +0 -0
  420. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/cs-connected.svg +0 -0
  421. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/cs-not-connected.svg +0 -0
  422. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/double-left-arrow.svg +0 -0
  423. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/double-right-arrow.svg +0 -0
  424. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/erase-disabled.svg +0 -0
  425. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/erase.svg +0 -0
  426. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/fitsgen-start.svg +0 -0
  427. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/fitsgen-stop.svg +0 -0
  428. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/fitsgen.svg +0 -0
  429. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/forward.svg +0 -0
  430. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/fov-hk-start.svg +0 -0
  431. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/fov-hk-stop.svg +0 -0
  432. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/fov-hk.svg +0 -0
  433. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/front-desk.svg +0 -0
  434. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/home-actioned.svg +0 -0
  435. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/home-disabled.svg +0 -0
  436. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/home.svg +0 -0
  437. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/info.svg +0 -0
  438. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/invalid.png +0 -0
  439. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/led-green.svg +0 -0
  440. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/led-grey.svg +0 -0
  441. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/led-orange.svg +0 -0
  442. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/led-red.svg +0 -0
  443. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/led-square-green.svg +0 -0
  444. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/led-square-grey.svg +0 -0
  445. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/led-square-orange.svg +0 -0
  446. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/led-square-red.svg +0 -0
  447. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-green.svg +0 -0
  448. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-red.svg +0 -0
  449. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el+.svg +0 -0
  450. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el-.svg +0 -0
  451. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/location-marker.svg +0 -0
  452. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/logo-dpu.svg +0 -0
  453. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/logo-gimbal.svg +0 -0
  454. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/logo-huber.svg +0 -0
  455. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/logo-ogse.svg +0 -0
  456. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/logo-puna.svg +0 -0
  457. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/logo-tcs.svg +0 -0
  458. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/logo-zonda.svg +0 -0
  459. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/maximize.svg +0 -0
  460. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/meter.svg +0 -0
  461. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/more.svg +0 -0
  462. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-start.svg +0 -0
  463. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-stop.svg +0 -0
  464. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk.svg +0 -0
  465. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/observing-off.svg +0 -0
  466. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/observing-on.svg +0 -0
  467. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.png +0 -0
  468. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.svg +0 -0
  469. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/ops-mode.svg +0 -0
  470. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/play-green.svg +0 -0
  471. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/plugged-disabled.svg +0 -0
  472. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/plugged.svg +0 -0
  473. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/pm_ui.svg +0 -0
  474. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/power-button-green.svg +0 -0
  475. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/power-button-red.svg +0 -0
  476. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/power-button.svg +0 -0
  477. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/radar.svg +0 -0
  478. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/radioactive.svg +0 -0
  479. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/reload.svg +0 -0
  480. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/remote-control-off.svg +0 -0
  481. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/remote-control-on.svg +0 -0
  482. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/repeat-blue.svg +0 -0
  483. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/repeat.svg +0 -0
  484. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/settings.svg +0 -0
  485. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/shrink.svg +0 -0
  486. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/shutter.svg +0 -0
  487. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/sign-off.svg +0 -0
  488. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/sign-on.svg +0 -0
  489. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/sim-mode.svg +0 -0
  490. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/small-buttons-go.svg +0 -0
  491. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/small-buttons-minus.svg +0 -0
  492. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/small-buttons-plus.svg +0 -0
  493. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/sponge.svg +0 -0
  494. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/start-button-disabled.svg +0 -0
  495. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/start-button.svg +0 -0
  496. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/stop-button-disabled.svg +0 -0
  497. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/stop-button.svg +0 -0
  498. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/stop-red.svg +0 -0
  499. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/stop.svg +0 -0
  500. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/switch-disabled-square.svg +0 -0
  501. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/switch-disabled.svg +0 -0
  502. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/switch-off-square.svg +0 -0
  503. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/switch-off.svg +0 -0
  504. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/switch-on-square.svg +0 -0
  505. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/switch-on.svg +0 -0
  506. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/temperature-control.svg +0 -0
  507. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/th_ui_logo.svg +0 -0
  508. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/unplugged.svg +0 -0
  509. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/unvalid.png +0 -0
  510. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/user-interface.svg +0 -0
  511. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/vacuum.svg +0 -0
  512. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/valid.png +0 -0
  513. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-dark.svg +0 -0
  514. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-white.svg +0 -0
  515. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/led.py +0 -0
  516. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/limitswitch.py +0 -0
  517. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/states.py +0 -0
  518. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/styles/dark.qss +0 -0
  519. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/styles/default.qss +0 -0
  520. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/styles.qss +0 -0
  521. {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/switch.py +0 -0
  522. {cgse-0.17.3 → cgse-0.17.4}/noxfile.py +0 -0
  523. {cgse-0.17.3 → cgse-0.17.4}/overrides/.icons/custom/dbend-dark.svg +0 -0
  524. {cgse-0.17.3 → cgse-0.17.4}/overrides/.icons/custom/dbend-light.svg +0 -0
  525. {cgse-0.17.3/projects/ariel/ariel-tcu/src/ariel_tcu → cgse-0.17.4/projects/ariel/ariel-facility/src/ariel_facility}/__init__.py +0 -0
  526. {cgse-0.17.3/projects/generic/cgse-tools/src/cgse_tools → cgse-0.17.4/projects/ariel/ariel-facility/src/egse/ariel/facility}/__init__.py +0 -0
  527. {cgse-0.17.3/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol → cgse-0.17.4/projects/ariel/ariel-tcu/src/ariel_tcu}/__init__.py +0 -0
  528. {cgse-0.17.3 → cgse-0.17.4}/projects/ariel/ariel-tcu/src/ariel_tcu/cgse_explore.py +0 -0
  529. {cgse-0.17.3 → cgse-0.17.4}/projects/ariel/ariel-tcu/src/ariel_tcu/cgse_services.py +0 -0
  530. {cgse-0.17.3 → cgse-0.17.4}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu.yaml +0 -0
  531. {cgse-0.17.3 → cgse-0.17.4}/projects/ariel/ariel-tcu/tests/test_tcu.py +0 -0
  532. {cgse-0.17.3 → cgse-0.17.4}/projects/ariel/ariel-tcu/tests/test_tcu_cmd_utils.py +0 -0
  533. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/cgse-tools/README.md +0 -0
  534. {cgse-0.17.3/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol → cgse-0.17.4/projects/generic/cgse-tools/src/cgse_tools}/__init__.py +0 -0
  535. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/cgse-tools/src/cgse_tools/cgse_clock.py +0 -0
  536. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/cgse-tools/src/cgse_tools/cgse_commands.py +0 -0
  537. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/cgse-tools/src/cgse_tools/cgse_services.py +0 -0
  538. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/cgse-tools/src/egse/tools/status.py +0 -0
  539. {cgse-0.17.3/projects/generic/symetrie-hexapod/src/symetrie_hexapod → cgse-0.17.4/projects/generic/digilent/src/digilent}/__init__.py +0 -0
  540. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/README.md +0 -0
  541. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/noxfile.py +0 -0
  542. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/__init__.py +0 -0
  543. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510.yaml +0 -0
  544. /cgse-0.17.3/projects/plato/plato-hdf5/README.md → /cgse-0.17.4/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/__init__.py +0 -0
  545. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/cgse_explore.py +0 -0
  546. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/settings.yaml +0 -0
  547. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/lakeshore-tempcontrol/README.md +0 -0
  548. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336.py +0 -0
  549. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336.yaml +0 -0
  550. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_cs.py +0 -0
  551. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_devif.py +0 -0
  552. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_protocol.py +0 -0
  553. /cgse-0.17.3/projects/plato/plato-spw/README.md → /cgse-0.17.4/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/__init__.py +0 -0
  554. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/cgse_explore.py +0 -0
  555. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/cgse_services.py +0 -0
  556. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/settings.yaml +0 -0
  557. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/lakeshore-tempcontrol/tests/test_lakeshore336_simulator.py +0 -0
  558. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/README.md +0 -0
  559. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/__init__.py +0 -0
  560. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/__init__.py +0 -0
  561. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/alpha.py +0 -0
  562. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod_ui.py +0 -0
  563. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.yaml +0 -0
  564. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_ui.py +0 -0
  565. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac.py +0 -0
  566. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac_regex.py +0 -0
  567. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.py +0 -0
  568. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.yaml +0 -0
  569. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_protocol.py +0 -0
  570. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/punaplus.py +0 -0
  571. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.py +0 -0
  572. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.yaml +0 -0
  573. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_devif.py +0 -0
  574. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_protocol.py +0 -0
  575. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_ui.py +0 -0
  576. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/cgse_explore.py +0 -0
  577. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/cgse_services.py +0 -0
  578. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/tests/test_puna.py +0 -0
  579. {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/tests/test_puna_simulator.py +0 -0
  580. {cgse-0.17.3 → cgse-0.17.4}/projects/plato/plato-fits/README.md +0 -0
  581. {cgse-0.17.3 → cgse-0.17.4}/projects/plato/plato-fits/src/egse/plugins/storage/fits.py +0 -0
  582. {cgse-0.17.3 → cgse-0.17.4}/projects/plato/plato-hdf5/src/egse/plugins/storage/hdf5.py +0 -0
  583. {cgse-0.17.3 → cgse-0.17.4}/projects/plato/plato-spw/src/egse/spw.py +0 -0
  584. {cgse-0.17.3 → cgse-0.17.4}/ruff.toml +0 -0
@@ -8,6 +8,14 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
8
8
 
9
9
  ## [Unreleased]
10
10
 
11
+ ## [0.17.4] - 2026-01-27
12
+
13
+ - Extracting HK from Ariel facility database
14
+ - Re-shuffled hexapod settings
15
+ - Cleaned up cgse-coordinates
16
+ - Maintenance on cgse-core
17
+ - Implementation of Digilent MEASURpoint DT8874
18
+
11
19
 
12
20
  ## [0.17.3] - 2025-11-29
13
21
 
@@ -33,9 +41,9 @@ This release is mainly on maintenance and improvements to the `cgse-common` pack
33
41
  - Changed the return value of the different `get_version_*()` functions to return "0.0.0" when the version cannot
34
42
  be determined. Previously, these functions returned None. [#215]
35
43
  - Improvements to `redirect_output_to_log()`: the file can be an absolute path, added a guard to overwrite [#217]
36
- - A warning message is now logged when you try to read the last few lines from a non-existing file
44
+ - A warning message is now logged when you try to read the last few lines from a non-existing file [#218]
37
45
  - InitializationError = InitialisationError, to be conform to the styling guide promoting the use of standard
38
- American English for code, comments and docs
46
+ American English for code, comments and docs [#218]
39
47
 
40
48
  ### Added
41
49
  - Added a `from_string()` class method to Settings. This is mainly for testing and when you need to load
@@ -202,7 +210,9 @@ This release is mainly on maintenance and improvements to the `cgse-common` pack
202
210
  - Renamed `cgse` subcommands `registry` → `reg`, `notify` → `not`.
203
211
 
204
212
 
205
- [Unreleased]: https://github.com/IvS-KULeuven/cgse/compare/v0.17.1...HEAD
213
+ [Unreleased]: https://github.com/IvS-KULeuven/cgse/compare/v0.17.3...HEAD
214
+ [0.17.3]: https://github.com/IvS-KULeuven/cgse/compare/v0.17.2...v0.17.3
215
+ [0.17.2]: https://github.com/IvS-KULeuven/cgse/compare/v0.17.1...v0.17.2
206
216
  [0.17.1]: https://github.com/IvS-KULeuven/cgse/compare/v0.17.0...v0.17.1
207
217
  [0.17.0]: https://github.com/IvS-KULeuven/cgse/compare/v0.16.14...v0.17.0
208
218
  [0.16.14]: https://github.com/IvS-KULeuven/cgse/compare/v0.16.13...v0.16.14
@@ -221,6 +231,8 @@ This release is mainly on maintenance and improvements to the `cgse-common` pack
221
231
  [0.16.1]: https://github.com/IvS-KULeuven/cgse/compare/v0.16.0...v0.16.1
222
232
  [0.16.0]: https://github.com/IvS-KULeuven/cgse/compare/v0.15.1...v0.16.0
223
233
 
234
+ [#219]: https://github.com/IvS-KULeuven/cgse/pull/219
235
+ [#218]: https://github.com/IvS-KULeuven/cgse/pull/218
224
236
  [#217]: https://github.com/IvS-KULeuven/cgse/pull/217
225
237
  [#216]: https://github.com/IvS-KULeuven/cgse/pull/216
226
238
  [#215]: https://github.com/IvS-KULeuven/cgse/pull/215
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cgse
3
- Version: 0.17.3
3
+ Version: 0.17.4
4
4
  Summary: Generic Common-EGSE: Commanding and monitoring lab equipment
5
5
  Author: IvS KU Leuven
6
6
  Maintainer-email: Rik Huygen <rik.huygen@kuleuven.be>, Sara Regibo <sara.regibo@kuleuven.be>
@@ -1,32 +1,65 @@
1
+ ## Making a release
1
2
 
2
- (also check the docs: [Building and publishing packages](https://ivs-kuleuven.github.io/cgse/dev_guide/uv/#building-and-publishing-all-packages))
3
+ The first thing to do is to properly format your code changes, run:
3
4
 
4
- ## Making a release
5
+ ```bash
6
+ uvx ruff format
7
+ ```
8
+
9
+ You should be on the branch with the developments that you want to push and merge the pull request on GitHub before making the release.
5
10
 
6
- - run `uvx ruff format`
7
11
  - commit all changes with a proper message
12
+ - push changes to `origin`
13
+ - create a pull request (possibly needs a review)
14
+ - merge the pull request
15
+
16
+ When all pull requests that should go into the release are merged, checkout main again and pull all the latest changes:
17
+
18
+ ```bash
19
+ git checkout main
20
+ git pull upstream main
21
+ ```
22
+
23
+ Now, create the release branch: e.g. `release/v0.17.3`
24
+
25
+ - `git checkout -b release/v0.17.3`
8
26
  - add all notable changes to the CHANGELOG file
9
27
  - fix the links in the headers if needed
10
28
  - add links to the different pull requests
11
29
  - commit the CHANGELOG file
12
30
  - bump the version number: `uv run bump.py [patch|minor|major]`
13
31
  - commit all `pyproject.toml` files after the version bump
14
- - push the changes to upstream
32
+ - push the changes to `origin`
15
33
  - create (and merge) a pull request, use the CHANGELOG as description
16
- - remove the old distributions: `rm -r dist`
17
34
 
18
- In order to prevent publishing all changes and untracked files to, stash the changes:
19
- - `git stash push -u -m "All development work"` all changes and untracked files
35
+ In order to prevent publishing all remaining uncommitted changes and untracked files too, stash all changes and untracked files:
36
+
37
+ ```bash
38
+ git stash push -u -m "All development work"
39
+ ```
40
+
41
+ ## Publish the new release
42
+
43
+ (also check the docs: [Building and publishing packages](https://ivs-kuleuven.github.io/cgse/dev_guide/uv/#building-and-publishing-all-packages))
44
+
45
+ Now, build and publish the packages:
20
46
 
47
+ - remove the old distributions: `rm -r dist`
21
48
  - build the packages: `uv build --all-packages`
22
49
  - publish the packages to PyPI: `uv publish --token $UV_PUBLISH_TOKEN`
23
50
 
24
- Now, put back the changes and untracked files:
25
- - `git stash pop`
51
+ Put back the changes and untracked files:
52
+
53
+ ```bash
54
+ git checkout main
55
+ git pull upstream main
56
+ git stash pop
57
+ ```
26
58
 
27
59
  ## Tag the new release
28
60
 
29
61
  - create a tag for the commit of the bump: `git tag <version number> <commit hash>`, e.g. `git tag v0.16.0 559bbfc`
62
+ - you can find the commit hash with: `git log --oneline`
30
63
  - push the tag to upstream: `git push upstream <tag name>`, e.g. `git push upstream v0.16.0`
31
64
 
32
65
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "cgse-common"
3
- version = "0.17.3"
3
+ version = "0.17.4"
4
4
  description = "Software framework to support hardware testing"
5
5
  authors = [
6
6
  {name = "IvS KU Leuven"}
@@ -339,6 +339,76 @@ class AsyncDeviceTransport:
339
339
  return await self.trans(command)
340
340
 
341
341
 
342
+ class AsyncDeviceConnectionInterface(DeviceConnectionObservable):
343
+ """Generic connection interface for all Device classes and Controllers.
344
+
345
+ This interface shall be implemented in the Controllers that directly connect to the
346
+ hardware, but also in the simulators to guarantee an identical interface as the controllers.
347
+
348
+ This interface will be implemented in the Proxy classes through the
349
+ YAML definitions. Therefore, the YAML files shall define at least
350
+ the following commands: `connect`, `disconnect`, `reconnect`, `is_connected`.
351
+ """
352
+
353
+ def __init__(self):
354
+ super().__init__()
355
+
356
+ def __enter__(self):
357
+ self.connect()
358
+ return self
359
+
360
+ def __exit__(self, exc_type, exc_val, exc_tb):
361
+ self.disconnect()
362
+
363
+ async def connect(self) -> None:
364
+ """Connect to the device controller.
365
+
366
+ Raises:
367
+ ConnectionError: when the connection can not be opened.
368
+ """
369
+
370
+ raise NotImplementedError
371
+
372
+ async def disconnect(self) -> None:
373
+ """Disconnect from the device controller.
374
+
375
+ Raises:
376
+ ConnectionError: when the connection can not be closed.
377
+ """
378
+ raise NotImplementedError
379
+
380
+ async def reconnect(self):
381
+ """Reconnect the device controller.
382
+
383
+ Raises:
384
+ ConnectionError: when the device can not be reconnected for some reason.
385
+ """
386
+ raise NotImplementedError
387
+
388
+ async def is_connected(self) -> bool:
389
+ """Check if the device is connected.
390
+
391
+ Returns:
392
+ True if the device is connected and responds to a command, False otherwise.
393
+ """
394
+ raise NotImplementedError
395
+
396
+
397
+ class AsyncDeviceInterface(AsyncDeviceConnectionInterface):
398
+ """A generic interface for all device classes."""
399
+
400
+ def is_simulator(self) -> bool:
401
+ """Checks whether the device is a simulator rather than a real hardware controller.
402
+
403
+ This can be useful for testing purposes or when doing actual movement simulations.
404
+
405
+ Returns:
406
+ True if the Device is a Simulator; False if the Device is connected to real hardware.
407
+ """
408
+
409
+ raise NotImplementedError
410
+
411
+
342
412
  class DeviceFactoryInterface:
343
413
  """
344
414
  Base class for creating a device factory class to access devices.
@@ -51,8 +51,8 @@ class TmDictionaryColumns(str, Enum):
51
51
  """ # noqa
52
52
 
53
53
  STORAGE_MNEMONIC = "Storage mnemonic"
54
- CORRECT_HK_NAMES = "CAM EGSE mnemonic"
55
- ORIGINAL_EGSE_HK_NAMES = "Original name in EGSE"
54
+ CORRECT_HK_NAMES = "CGSE mnemonic"
55
+ ORIGINAL_EGSE_HK_NAMES = "Original name in CGSE"
56
56
  SYNOPTICS_ORIGIN = f"Origin of synoptics at {get_site_id()}"
57
57
  TIMESTAMP_NAMES = "Name of corresponding timestamp"
58
58
  DESCRIPTION = "Description"
@@ -131,6 +131,14 @@ for handler in root_logger.handlers:
131
131
  handler.addFilter(NonEGSEFilter())
132
132
  handler.addFilter(PackageFilter())
133
133
 
134
+ try:
135
+ from textual.logging import TextualHandler
136
+
137
+ root_logger.addHandler(TextualHandler())
138
+ except ImportError:
139
+ pass
140
+
141
+
134
142
  logger = egse_logger
135
143
 
136
144
  if __name__ == "__main__":
@@ -4,17 +4,23 @@ from typing import Any
4
4
  from typing import Dict
5
5
  from typing import Optional
6
6
 
7
+ from egse.device import AsyncDeviceInterface
7
8
  from egse.device import AsyncDeviceTransport
8
9
  from egse.device import DeviceConnectionError
9
10
  from egse.device import DeviceError
10
11
  from egse.device import DeviceTimeoutError
12
+ from egse.env import bool_env
11
13
  from egse.log import logger
12
14
 
13
- # Constants that can be overridden by specific device implementations
14
15
  DEFAULT_READ_TIMEOUT = 1.0 # seconds
15
16
  DEFAULT_CONNECT_TIMEOUT = 3.0 # seconds
16
17
  IDENTIFICATION_QUERY = "*IDN?"
17
18
 
19
+ VERBOSE_DEBUG = bool_env("VERBOSE_DEBUG")
20
+
21
+ SEPARATOR = b"\n"
22
+ SEPARATOR_STR = SEPARATOR.decode()
23
+
18
24
 
19
25
  class SCPICommand:
20
26
  """Base class for SCPI commands."""
@@ -32,7 +38,7 @@ class SCPICommand:
32
38
  raise NotImplementedError("Subclasses must implement get_cmd_string().")
33
39
 
34
40
 
35
- class AsyncSCPIInterface(AsyncDeviceTransport):
41
+ class AsyncSCPIInterface(AsyncDeviceInterface, AsyncDeviceTransport):
36
42
  """Generic asynchronous interface for devices that use SCPI commands over Ethernet."""
37
43
 
38
44
  def __init__(
@@ -56,7 +62,9 @@ class AsyncSCPIInterface(AsyncDeviceTransport):
56
62
  read_timeout: Timeout for read operations in seconds
57
63
  id_validation: String that should appear in the device's identification response
58
64
  """
59
- self.device_name = device_name
65
+ super().__init__()
66
+
67
+ self._device_name = device_name
60
68
  self.hostname = hostname
61
69
  self.port = port
62
70
  self.settings = settings or {}
@@ -70,8 +78,66 @@ class AsyncSCPIInterface(AsyncDeviceTransport):
70
78
  self._connect_lock = asyncio.Lock()
71
79
  """Prevents multiple, simultaneous connect or disconnect attempts."""
72
80
  self._io_lock = asyncio.Lock()
73
- """Prevents multiple coroutines from attempting to read, write or query from the same stream
74
- at the same time."""
81
+ """Prevents multiple coroutines from attempting to read, write or query from the same stream at the same time."""
82
+
83
+ def is_simulator(self) -> bool:
84
+ return False
85
+
86
+ @property
87
+ def device_name(self) -> str:
88
+ return self._device_name
89
+
90
+ async def initialize(self, commands: list[tuple[str, bool]] = None, reset_device: bool = False) -> list[str | None]:
91
+ """Initialize the device with optional reset and command sequence.
92
+
93
+ Performs device initialization by optionally resetting the device and then
94
+ executing a sequence of commands. Each command can optionally expect a
95
+ response that will be logged for debugging purposes.
96
+
97
+ Args:
98
+ commands: List of tuples containing (command_string, expects_response).
99
+ Each tuple specifies a command to send and whether to wait for and
100
+ log the response. Defaults to None (no commands executed).
101
+ reset_device: Whether to send a reset command (*RST) before executing
102
+ the command sequence. Defaults to False.
103
+
104
+ Returns:
105
+ Response for each of the commands, or None when no response was expected.
106
+
107
+ Raises:
108
+ Any exceptions raised by the underlying write() or trans() methods,
109
+ typically communication errors or device timeouts.
110
+
111
+ Example:
112
+ await device.initialize(
113
+ [
114
+ ("*IDN?", True), # Query device ID, expect response
115
+ ("SYST:ERR?", True), # Check for errors, expect response
116
+ ("OUTP ON", False), # Enable output, no response expected
117
+ ],
118
+ reset_device=True
119
+ )
120
+ """
121
+
122
+ commands = commands or []
123
+ responses = []
124
+
125
+ if reset_device:
126
+ logger.info(f"Resetting the {self._device_name}...")
127
+ await self.write("*RST") # this also resets the user-defined buffer
128
+
129
+ for cmd, expects_response in commands:
130
+ if expects_response:
131
+ logger.debug(f"Sending {cmd}...")
132
+ response = (await self.trans(cmd)).decode().strip()
133
+ responses.append(response)
134
+ logger.debug(f"{response = }")
135
+ else:
136
+ logger.debug(f"Sending {cmd}...")
137
+ await self.write(cmd)
138
+ responses.append(None)
139
+
140
+ return responses
75
141
 
76
142
  async def connect(self) -> None:
77
143
  """Connect to the device asynchronously.
@@ -84,47 +150,51 @@ class AsyncSCPIInterface(AsyncDeviceTransport):
84
150
  async with self._connect_lock:
85
151
  # Sanity checks
86
152
  if self._is_connection_open:
87
- logger.warning(f"{self.device_name}: Trying to connect to an already connected device.")
153
+ logger.warning(f"{self._device_name}: Trying to connect to an already connected device.")
88
154
  return
89
155
 
90
156
  if not self.hostname:
91
- raise ValueError(f"{self.device_name}: Hostname is not initialized.")
157
+ raise ValueError(f"{self._device_name}: Hostname is not initialized.")
92
158
 
93
159
  if not self.port:
94
- raise ValueError(f"{self.device_name}: Port number is not initialized.")
160
+ raise ValueError(f"{self._device_name}: Port number is not initialized.")
95
161
 
96
162
  # Attempt to establish a connection
97
163
  try:
98
- logger.debug(f'Connecting to {self.device_name} at "{self.hostname}" using port {self.port}')
164
+ logger.debug(f'Connecting to {self._device_name} at "{self.hostname}" using port {self.port}')
99
165
 
100
166
  connect_task = asyncio.open_connection(self.hostname, self.port)
101
167
  self._reader, self._writer = await asyncio.wait_for(connect_task, timeout=self.connect_timeout)
102
168
 
103
169
  self._is_connection_open = True
104
170
 
105
- logger.debug(f"Successfully connected to {self.device_name}.")
171
+ response = await self.read_string()
172
+ if VERBOSE_DEBUG:
173
+ logger.debug(f"Response after connection: {response}")
174
+
175
+ logger.debug(f"Successfully connected to {self._device_name}.")
106
176
 
107
177
  except asyncio.TimeoutError as exc:
108
178
  raise DeviceTimeoutError(
109
- self.device_name, f"Connection to {self.hostname}:{self.port} timed out"
179
+ self._device_name, f"Connection to {self.hostname}:{self.port} timed out"
110
180
  ) from exc
111
181
  except ConnectionRefusedError as exc:
112
182
  raise DeviceConnectionError(
113
- self.device_name, f"Connection refused to {self.hostname}:{self.port}"
183
+ self._device_name, f"Connection refused to {self.hostname}:{self.port}"
114
184
  ) from exc
115
185
  except socket.gaierror as exc:
116
- raise DeviceConnectionError(self.device_name, f"Address resolution error for {self.hostname}") from exc
186
+ raise DeviceConnectionError(self._device_name, f"Address resolution error for {self.hostname}") from exc
117
187
  except socket.herror as exc:
118
- raise DeviceConnectionError(self.device_name, f"Host address error for {self.hostname}") from exc
188
+ raise DeviceConnectionError(self._device_name, f"Host address error for {self.hostname}") from exc
119
189
  except OSError as exc:
120
- raise DeviceConnectionError(self.device_name, f"OS error: {exc}") from exc
190
+ raise DeviceConnectionError(self._device_name, f"OS error: {exc}") from exc
121
191
 
122
192
  # Validate device identity if requested
123
193
  if self.id_validation:
124
194
  logger.debug("Validating connection..")
125
195
  if not await self.is_connected():
126
196
  await self.disconnect()
127
- raise DeviceConnectionError(self.device_name, "Device connected but failed identity verification")
197
+ raise DeviceConnectionError(self._device_name, "Device connected but failed identity verification")
128
198
 
129
199
  async def disconnect(self) -> None:
130
200
  """Disconnect from the device asynchronously.
@@ -135,22 +205,20 @@ class AsyncSCPIInterface(AsyncDeviceTransport):
135
205
  async with self._connect_lock:
136
206
  try:
137
207
  if self._is_connection_open and self._writer is not None:
138
- logger.debug(f"Disconnecting from {self.device_name} at {self.hostname}")
208
+ logger.debug(f"Disconnecting from {self._device_name} at {self.hostname}")
139
209
  self._writer.close()
140
210
  await self._writer.wait_closed()
141
211
  self._writer = None
142
212
  self._reader = None
143
213
  self._is_connection_open = False
144
214
  except Exception as exc:
145
- raise DeviceConnectionError(self.device_name, f"Could not close connection: {exc}") from exc
215
+ raise DeviceConnectionError(self._device_name, f"Could not close connection: {exc}") from exc
146
216
 
147
217
  async def reconnect(self) -> None:
148
218
  """Reconnect to the device asynchronously."""
149
- async with self._connect_lock:
150
- if self._is_connection_open:
151
- await self.disconnect()
152
- await asyncio.sleep(0.1)
153
- await self.connect()
219
+ await self.disconnect()
220
+ await asyncio.sleep(0.1)
221
+ await self.connect()
154
222
 
155
223
  async def is_connected(self) -> bool:
156
224
  """Check if the device is connected and responds correctly to identification.
@@ -168,7 +236,7 @@ class AsyncSCPIInterface(AsyncDeviceTransport):
168
236
  # Validate the response if validation string is provided
169
237
  if self.id_validation and self.id_validation not in id_response:
170
238
  logger.error(
171
- f"{self.device_name}: Device did not respond correctly to identification query. "
239
+ f"{self._device_name}: Device did not respond correctly to identification query. "
172
240
  f'Expected "{self.id_validation}" in response, got: {id_response}'
173
241
  )
174
242
  await self.disconnect()
@@ -177,8 +245,7 @@ class AsyncSCPIInterface(AsyncDeviceTransport):
177
245
  return True
178
246
 
179
247
  except DeviceError as exc:
180
- logger.exception(exc)
181
- logger.error(f"{self.device_name}: Connection test failed")
248
+ logger.error(f"{self._device_name}: Connection test failed: {exc}", exc_info=True)
182
249
  await self.disconnect()
183
250
  return False
184
251
 
@@ -195,19 +262,20 @@ class AsyncSCPIInterface(AsyncDeviceTransport):
195
262
  async with self._io_lock:
196
263
  try:
197
264
  if not self._is_connection_open or self._writer is None:
198
- raise DeviceConnectionError(self.device_name, "Device not connected, use connect() first")
265
+ raise DeviceConnectionError(self._device_name, "Device not connected, use connect() first")
199
266
 
200
- # Ensure command ends with newline
201
- if not command.endswith("\n"):
202
- command += "\n"
267
+ # Ensure command ends with the proper separator or terminator
268
+ if not command.endswith(SEPARATOR_STR):
269
+ command += SEPARATOR_STR
203
270
 
271
+ logger.info(f"-----> {command}")
204
272
  self._writer.write(command.encode())
205
273
  await self._writer.drain()
206
274
 
207
275
  except asyncio.TimeoutError as exc:
208
- raise DeviceTimeoutError(self.device_name, "Write operation timed out") from exc
276
+ raise DeviceTimeoutError(self._device_name, "Write operation timed out") from exc
209
277
  except (ConnectionError, OSError) as exc:
210
- raise DeviceConnectionError(self.device_name, f"Communication error: {exc}") from exc
278
+ raise DeviceConnectionError(self._device_name, f"Communication error: {exc}") from exc
211
279
 
212
280
  async def read(self) -> bytes:
213
281
  """
@@ -222,7 +290,7 @@ class AsyncSCPIInterface(AsyncDeviceTransport):
222
290
  """
223
291
  async with self._io_lock:
224
292
  if not self._is_connection_open or self._reader is None:
225
- raise DeviceConnectionError(self.device_name, "Device not connected, use connect() first")
293
+ raise DeviceConnectionError(self._device_name, "Device not connected, use connect() first")
226
294
 
227
295
  try:
228
296
  # First, small delay to allow device to prepare response
@@ -231,18 +299,19 @@ class AsyncSCPIInterface(AsyncDeviceTransport):
231
299
  # Try to read until newline (common SCPI terminator)
232
300
  try:
233
301
  response = await asyncio.wait_for(
234
- self._reader.readuntil(separator=b"\n"), timeout=self.read_timeout
302
+ self._reader.readuntil(separator=SEPARATOR), timeout=self.read_timeout
235
303
  )
304
+ logger.info(f"<----- {response}")
236
305
  return response
237
306
 
238
307
  except asyncio.IncompleteReadError as exc:
239
308
  # Connection closed before receiving full response
240
- logger.warning(f"{self.device_name}: Incomplete read, got {len(exc.partial)} bytes")
241
- return exc.partial if exc.partial else b"\r\n"
309
+ logger.warning(f"{self._device_name}: Incomplete read, got {len(exc.partial)} bytes")
310
+ return exc.partial if exc.partial else SEPARATOR
242
311
 
243
312
  except asyncio.LimitOverrunError:
244
313
  # Response too large for buffer
245
- logger.warning(f"{self.device_name}: Response exceeded buffer limits")
314
+ logger.warning(f"{self._device_name}: Response exceeded buffer limits")
246
315
  # Fall back to reading a large chunk
247
316
  return await asyncio.wait_for(
248
317
  self._reader.read(8192), # Larger buffer for exceptional cases
@@ -250,9 +319,9 @@ class AsyncSCPIInterface(AsyncDeviceTransport):
250
319
  )
251
320
 
252
321
  except asyncio.TimeoutError as exc:
253
- raise DeviceTimeoutError(self.device_name, "Read operation timed out") from exc
322
+ raise DeviceTimeoutError(self._device_name, "Read operation timed out") from exc
254
323
  except Exception as exc:
255
- raise DeviceConnectionError(self.device_name, f"Read error: {exc}") from exc
324
+ raise DeviceConnectionError(self._device_name, f"Read error: {exc}") from exc
256
325
 
257
326
  async def trans(self, command: str) -> bytes:
258
327
  """
@@ -273,33 +342,35 @@ class AsyncSCPIInterface(AsyncDeviceTransport):
273
342
  async with self._io_lock:
274
343
  try:
275
344
  if not self._is_connection_open or self._writer is None:
276
- raise DeviceConnectionError(self.device_name, "Device not connected, use connect() first")
345
+ raise DeviceConnectionError(self._device_name, "Device not connected, use connect() first")
277
346
 
278
- # Ensure command ends with newline
279
- if not command.endswith("\n"):
280
- command += "\n"
347
+ # Ensure command ends with the required terminator
348
+ if not command.endswith(SEPARATOR_STR):
349
+ command += SEPARATOR_STR
281
350
 
351
+ logger.info(f"-----> {command=}")
282
352
  self._writer.write(command.encode())
283
353
  await self._writer.drain()
284
354
 
285
- # First, small delay to allow device to prepare response
355
+ # First, small delay to allow the device to prepare a response
286
356
  await asyncio.sleep(0.01)
287
357
 
288
- # Try to read until newline (common SCPI terminator)
358
+ # Try to read until the required separator (common SCPI terminator)
289
359
  try:
290
360
  response = await asyncio.wait_for(
291
- self._reader.readuntil(separator=b"\n"), timeout=self.read_timeout
361
+ self._reader.readuntil(separator=SEPARATOR), timeout=self.read_timeout
292
362
  )
363
+ logger.info(f"<----- {response=}")
293
364
  return response
294
365
 
295
366
  except asyncio.IncompleteReadError as exc:
296
367
  # Connection closed before receiving full response
297
- logger.warning(f"{self.device_name}: Incomplete read, got {len(exc.partial)} bytes")
298
- return exc.partial if exc.partial else b"\r\n"
368
+ logger.warning(f"{self._device_name}: Incomplete read, got {len(exc.partial)} bytes")
369
+ return exc.partial if exc.partial else SEPARATOR
299
370
 
300
371
  except asyncio.LimitOverrunError:
301
372
  # Response too large for buffer
302
- logger.warning(f"{self.device_name}: Response exceeded buffer limits")
373
+ logger.warning(f"{self._device_name}: Response exceeded buffer limits")
303
374
  # Fall back to reading a large chunk
304
375
  return await asyncio.wait_for(
305
376
  self._reader.read(8192), # Larger buffer for exceptional cases
@@ -307,11 +378,11 @@ class AsyncSCPIInterface(AsyncDeviceTransport):
307
378
  )
308
379
 
309
380
  except asyncio.TimeoutError as exc:
310
- raise DeviceTimeoutError(self.device_name, "Communication timed out") from exc
381
+ raise DeviceTimeoutError(self._device_name, "Communication timed out") from exc
311
382
  except (ConnectionError, OSError) as exc:
312
- raise DeviceConnectionError(self.device_name, f"Communication error: {exc}") from exc
383
+ raise DeviceConnectionError(self._device_name, f"Communication error: {exc}") from exc
313
384
  except Exception as exc:
314
- raise DeviceConnectionError(self.device_name, f"Transaction error: {exc}") from exc
385
+ raise DeviceConnectionError(self._device_name, f"Transaction error: {exc}") from exc
315
386
 
316
387
  async def __aenter__(self):
317
388
  """Async context manager entry."""