cgse 0.13.0__tar.gz → 0.14.0__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 (535) hide show
  1. {cgse-0.13.0 → cgse-0.14.0}/.gitignore +1 -0
  2. {cgse-0.13.0 → cgse-0.14.0}/PKG-INFO +1 -1
  3. {cgse-0.13.0 → cgse-0.14.0}/docs/roadmap.md +2 -1
  4. {cgse-0.13.0 → cgse-0.14.0}/justfile +1 -1
  5. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/pyproject.toml +4 -4
  6. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/cgse_common/cgse.py +23 -6
  7. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/calibration.py +2 -2
  8. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/config.py +3 -27
  9. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/counter.py +4 -8
  10. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/decorators.py +11 -12
  11. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/device.py +0 -1
  12. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/dicts.py +15 -14
  13. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/env.py +2 -3
  14. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/heartbeat.py +0 -3
  15. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/hk.py +5 -6
  16. cgse-0.14.0/libs/cgse-common/src/egse/log.py +132 -0
  17. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/metrics.py +1 -4
  18. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/plugin.py +14 -10
  19. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/process.py +21 -23
  20. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/resource.py +6 -9
  21. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/scpi.py +1 -3
  22. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/settings.py +4 -5
  23. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/setup.py +176 -127
  24. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/signal.py +1 -3
  25. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/socketdevice.py +1 -4
  26. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/state.py +5 -30
  27. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/system.py +3 -3
  28. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/zmq_ser.py +5 -2
  29. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/scripts/empty_process.py +3 -3
  30. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/scripts/process_with_children.py +4 -3
  31. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_decorators.py +7 -2
  32. cgse-0.14.0/libs/cgse-common/tests/test_log.py +46 -0
  33. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_plugin.py +14 -3
  34. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_process.py +10 -1
  35. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_setup.py +45 -21
  36. cgse-0.14.0/libs/cgse-common/tests/test_state.py +21 -0
  37. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/pyproject.toml +1 -1
  38. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/pyproject.toml +4 -1
  39. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/cgse_core/_stop.py +30 -0
  40. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/cgse_core/services.py +3 -9
  41. cgse-0.14.0/libs/cgse-core/src/egse/_setup_core.py +154 -0
  42. {cgse-0.13.0/libs/cgse-common → cgse-0.14.0/libs/cgse-core}/src/egse/command.py +1 -6
  43. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/confman/__init__.py +28 -29
  44. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/confman/confman_cs.py +1 -1
  45. {cgse-0.13.0/libs/cgse-common → cgse-0.14.0/libs/cgse-core}/src/egse/control.py +30 -34
  46. {cgse-0.13.0/libs/cgse-common → cgse-0.14.0/libs/cgse-core}/src/egse/dummy.py +79 -79
  47. {cgse-0.13.0/libs/cgse-common → cgse-0.14.0/libs/cgse-core}/src/egse/listener.py +4 -5
  48. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/logger/__init__.py +8 -7
  49. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/logger/log_cs.py +40 -21
  50. {cgse-0.13.0/libs/cgse-common → cgse-0.14.0/libs/cgse-core}/src/egse/mixin.py +11 -14
  51. {cgse-0.13.0/libs/cgse-common → cgse-0.14.0/libs/cgse-core}/src/egse/monitoring.py +14 -16
  52. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/procman/procman_cs.py +1 -1
  53. {cgse-0.13.0/libs/cgse-common → cgse-0.14.0/libs/cgse-core}/src/egse/protocol.py +1 -3
  54. {cgse-0.13.0/libs/cgse-common → cgse-0.14.0/libs/cgse-core}/src/egse/proxy.py +8 -3
  55. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/registry/client.py +4 -3
  56. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/registry/server.py +1 -1
  57. {cgse-0.13.0/libs/cgse-common → cgse-0.14.0/libs/cgse-core}/src/egse/services.py +14 -15
  58. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/storage/storage_cs.py +1 -1
  59. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/fixtures/helpers.py +7 -0
  60. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/fixtures/services.py +23 -5
  61. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/test_async_control.py +2 -0
  62. {cgse-0.13.0/libs/cgse-common → cgse-0.14.0/libs/cgse-core}/tests/test_client_server_interaction.py +41 -3
  63. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/test_cm_cs.py +18 -6
  64. {cgse-0.13.0/libs/cgse-common → cgse-0.14.0/libs/cgse-core}/tests/test_command.py +0 -1
  65. cgse-0.14.0/libs/cgse-core/tests/test_dummy.py +68 -0
  66. cgse-0.14.0/libs/cgse-core/tests/test_extensions.py +10 -0
  67. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/test_logger.py +10 -3
  68. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/test_registry_service.py +128 -54
  69. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/test_server_running.py +5 -8
  70. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/test_server_running_with_fixture.py +5 -9
  71. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/pyproject.toml +1 -1
  72. {cgse-0.13.0 → cgse-0.14.0}/noxfile.py +1 -1
  73. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/cgse-tools/pyproject.toml +1 -1
  74. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/cgse-tools/src/cgse_tools/cgse_commands.py +2 -2
  75. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/cgse-tools/src/cgse_tools/cgse_services.py +2 -1
  76. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/pyproject.toml +1 -1
  77. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_cs.py +1 -1
  78. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/cgse_services.py +1 -3
  79. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/lakeshore-tempcontrol/pyproject.toml +1 -1
  80. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/cgse_services.py +0 -1
  81. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/pyproject.toml +1 -1
  82. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/cgse_services.py +3 -3
  83. {cgse-0.13.0 → cgse-0.14.0}/projects/plato/plato-fits/pyproject.toml +1 -1
  84. {cgse-0.13.0 → cgse-0.14.0}/projects/plato/plato-hdf5/pyproject.toml +1 -1
  85. {cgse-0.13.0 → cgse-0.14.0}/projects/plato/plato-spw/pyproject.toml +1 -1
  86. {cgse-0.13.0 → cgse-0.14.0}/pyproject.toml +5 -5
  87. {cgse-0.13.0 → cgse-0.14.0}/ruff.toml +2 -2
  88. {cgse-0.13.0 → cgse-0.14.0}/service_registry.db +0 -0
  89. cgse-0.13.0/=0.5.1 +0 -0
  90. cgse-0.13.0/TODO.md +0 -3
  91. cgse-0.13.0/libs/cgse-common/duckdb_metrics.db +0 -0
  92. cgse-0.13.0/libs/cgse-common/my-dcuckdb-timeseries.db +0 -0
  93. cgse-0.13.0/libs/cgse-common/tests/.coverage.girtab.80252.XZOQZiYx +0 -0
  94. cgse-0.13.0/libs/cgse-common/tests/.coverage.girtab.80253.XXVQVQVx +0 -0
  95. cgse-0.13.0/libs/cgse-common/tests/.coverage.girtab.80254.XKhSeTLx +0 -0
  96. cgse-0.13.0/libs/cgse-common/tests/.coverage.girtab.80264.XDdhJbzx +0 -0
  97. cgse-0.13.0/libs/cgse-common/tests/.coverage.girtab.80265.XUECESrx +0 -0
  98. cgse-0.13.0/libs/cgse-common/tests/test_state.py +0 -9
  99. cgse-0.13.0/service_registry.db-shm +0 -0
  100. cgse-0.13.0/service_registry.db-wal +0 -0
  101. {cgse-0.13.0 → cgse-0.14.0}/.github/workflows/ruff-format-check.yaml +0 -0
  102. {cgse-0.13.0 → cgse-0.14.0}/README.md +0 -0
  103. {cgse-0.13.0 → cgse-0.14.0}/bump.py +0 -0
  104. {cgse-0.13.0 → cgse-0.14.0}/conftest.py +0 -0
  105. {cgse-0.13.0 → cgse-0.14.0}/docs/api/bits.md +0 -0
  106. {cgse-0.13.0 → cgse-0.14.0}/docs/api/calibration.md +0 -0
  107. {cgse-0.13.0 → cgse-0.14.0}/docs/api/command.md +0 -0
  108. {cgse-0.13.0 → cgse-0.14.0}/docs/api/config.md +0 -0
  109. {cgse-0.13.0 → cgse-0.14.0}/docs/api/control.md +0 -0
  110. {cgse-0.13.0 → cgse-0.14.0}/docs/api/counter.md +0 -0
  111. {cgse-0.13.0 → cgse-0.14.0}/docs/api/decorators.md +0 -0
  112. {cgse-0.13.0 → cgse-0.14.0}/docs/api/device.md +0 -0
  113. {cgse-0.13.0 → cgse-0.14.0}/docs/api/dicts.md +0 -0
  114. {cgse-0.13.0 → cgse-0.14.0}/docs/api/dummy.md +0 -0
  115. {cgse-0.13.0 → cgse-0.14.0}/docs/api/env.md +0 -0
  116. {cgse-0.13.0 → cgse-0.14.0}/docs/api/exceptions.md +0 -0
  117. {cgse-0.13.0 → cgse-0.14.0}/docs/api/heartbeat.md +0 -0
  118. {cgse-0.13.0 → cgse-0.14.0}/docs/api/hk.md +0 -0
  119. {cgse-0.13.0 → cgse-0.14.0}/docs/api/index.md +0 -0
  120. {cgse-0.13.0 → cgse-0.14.0}/docs/api/listener.md +0 -0
  121. {cgse-0.13.0 → cgse-0.14.0}/docs/api/metrics.md +0 -0
  122. {cgse-0.13.0 → cgse-0.14.0}/docs/api/mixin.md +0 -0
  123. {cgse-0.13.0 → cgse-0.14.0}/docs/api/monitoring.md +0 -0
  124. {cgse-0.13.0 → cgse-0.14.0}/docs/api/observer.md +0 -0
  125. {cgse-0.13.0 → cgse-0.14.0}/docs/api/obsid.md +0 -0
  126. {cgse-0.13.0 → cgse-0.14.0}/docs/api/persistence.md +0 -0
  127. {cgse-0.13.0 → cgse-0.14.0}/docs/api/plugin.md +0 -0
  128. {cgse-0.13.0 → cgse-0.14.0}/docs/api/process.md +0 -0
  129. {cgse-0.13.0 → cgse-0.14.0}/docs/api/reload.md +0 -0
  130. {cgse-0.13.0 → cgse-0.14.0}/docs/api/settings.md +0 -0
  131. {cgse-0.13.0 → cgse-0.14.0}/docs/api/setup.md +0 -0
  132. {cgse-0.13.0 → cgse-0.14.0}/docs/api/system.md +0 -0
  133. {cgse-0.13.0 → cgse-0.14.0}/docs/custom_theme/main.html +0 -0
  134. {cgse-0.13.0 → cgse-0.14.0}/docs/dev_guide/coding_style.md +0 -0
  135. {cgse-0.13.0 → cgse-0.14.0}/docs/dev_guide/docs.md +0 -0
  136. {cgse-0.13.0 → cgse-0.14.0}/docs/dev_guide/index.md +0 -0
  137. {cgse-0.13.0 → cgse-0.14.0}/docs/dev_guide/installation.md +0 -0
  138. {cgse-0.13.0 → cgse-0.14.0}/docs/dev_guide/monitoring.md +0 -0
  139. {cgse-0.13.0 → cgse-0.14.0}/docs/dev_guide/monorepo.md +0 -0
  140. {cgse-0.13.0 → cgse-0.14.0}/docs/dev_guide/nox.md +0 -0
  141. {cgse-0.13.0 → cgse-0.14.0}/docs/dev_guide/plugins.md +0 -0
  142. {cgse-0.13.0 → cgse-0.14.0}/docs/dev_guide/project-configuration.md +0 -0
  143. {cgse-0.13.0 → cgse-0.14.0}/docs/dev_guide/unit_testing.md +0 -0
  144. {cgse-0.13.0 → cgse-0.14.0}/docs/dev_guide/uv.md +0 -0
  145. {cgse-0.13.0 → cgse-0.14.0}/docs/dev_guide/versioning.md +0 -0
  146. {cgse-0.13.0 → cgse-0.14.0}/docs/getting_started.md +0 -0
  147. {cgse-0.13.0 → cgse-0.14.0}/docs/help.md +0 -0
  148. {cgse-0.13.0 → cgse-0.14.0}/docs/images/github-fork-clone-dark.png +0 -0
  149. {cgse-0.13.0 → cgse-0.14.0}/docs/images/github-fork-clone.png +0 -0
  150. {cgse-0.13.0 → cgse-0.14.0}/docs/images/grafana-queries.png +0 -0
  151. {cgse-0.13.0 → cgse-0.14.0}/docs/images/icons/cgse-logo-blue.svg +0 -0
  152. {cgse-0.13.0 → cgse-0.14.0}/docs/images/icons/cgse-logo.svg +0 -0
  153. {cgse-0.13.0 → cgse-0.14.0}/docs/index.md +0 -0
  154. {cgse-0.13.0 → cgse-0.14.0}/docs/initialize.md +0 -0
  155. {cgse-0.13.0 → cgse-0.14.0}/docs/libs/cgse-common/images/load_methods.png +0 -0
  156. {cgse-0.13.0 → cgse-0.14.0}/docs/libs/cgse-common/index.md +0 -0
  157. {cgse-0.13.0 → cgse-0.14.0}/docs/libs/cgse-common/settings.md +0 -0
  158. {cgse-0.13.0 → cgse-0.14.0}/docs/libs/cgse-common/setup.md +0 -0
  159. {cgse-0.13.0 → cgse-0.14.0}/docs/libs/cgse-coordinates/index.md +0 -0
  160. {cgse-0.13.0 → cgse-0.14.0}/docs/libs/cgse-core/index.md +0 -0
  161. {cgse-0.13.0 → cgse-0.14.0}/docs/libs/cgse-core/registry.md +0 -0
  162. {cgse-0.13.0 → cgse-0.14.0}/docs/libs/cgse-gui/index.md +0 -0
  163. {cgse-0.13.0 → cgse-0.14.0}/docs/libs/index.md +0 -0
  164. {cgse-0.13.0 → cgse-0.14.0}/docs/package_list.md +0 -0
  165. {cgse-0.13.0 → cgse-0.14.0}/docs/projects/cgse-tools.md +0 -0
  166. {cgse-0.13.0 → cgse-0.14.0}/docs/projects/index.md +0 -0
  167. {cgse-0.13.0 → cgse-0.14.0}/docs/projects/symetrie-hexapod.md +0 -0
  168. {cgse-0.13.0 → cgse-0.14.0}/docs/stylesheets/custom.css +0 -0
  169. {cgse-0.13.0 → cgse-0.14.0}/docs/stylesheets/extra.css +0 -0
  170. {cgse-0.13.0 → cgse-0.14.0}/docs/tutorial.md +0 -0
  171. {cgse-0.13.0 → cgse-0.14.0}/docs/user_guide/index.md +0 -0
  172. {cgse-0.13.0 → cgse-0.14.0}/duckdb_metrics.db +0 -0
  173. {cgse-0.13.0 → cgse-0.14.0}/duckdb_metrics.db.wal +0 -0
  174. {cgse-0.13.0 → cgse-0.14.0}/identifier.sqlite +0 -0
  175. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/README.md +0 -0
  176. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/justfile +0 -0
  177. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/noxfile.py +0 -0
  178. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/service_registry.db +0 -0
  179. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/cgse_common/__init__.py +0 -0
  180. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/cgse_common/settings.yaml +0 -0
  181. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/bits.py +0 -0
  182. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/exceptions.py +0 -0
  183. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/observer.py +0 -0
  184. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/obsid.py +0 -0
  185. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/persistence.py +0 -0
  186. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/plugins/metrics/duckdb.py +0 -0
  187. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/plugins/metrics/influxdb.py +0 -0
  188. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/plugins/metrics/timescaledb.py +0 -0
  189. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/py.typed +0 -0
  190. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/randomwalk.py +0 -0
  191. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/ratelimit.py +0 -0
  192. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/reload.py +0 -0
  193. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/response.py +0 -0
  194. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/settings.yaml +0 -0
  195. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/task.py +0 -0
  196. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/version.py +0 -0
  197. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/conftest.py +0 -0
  198. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/COPYING +0 -0
  199. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00028_201028_155259.yaml +0 -0
  200. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00029_201028_155331.yaml +0 -0
  201. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00030_210311_134043.yaml +0 -0
  202. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00080_210917_105245.yaml +0 -0
  203. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00081_210922_142259.yaml +0 -0
  204. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00082_210923_094458.yaml +0 -0
  205. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/CSL1/README.md +0 -0
  206. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/CSL2/README.md +0 -0
  207. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/IAS/README.md +0 -0
  208. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/INTA/README.md +0 -0
  209. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/LAB23/README.md +0 -0
  210. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00027_211119_140441.yaml +0 -0
  211. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00028_211119_160406.yaml +0 -0
  212. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00029_211119_172918.yaml +0 -0
  213. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00030_211122_103604.yaml +0 -0
  214. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00031_211123_124900.yaml +0 -0
  215. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/common/telemetry/tm-dictionary-default.csv +0 -0
  216. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/conf/SETUP_20250114_1519.yaml +0 -0
  217. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/conf/config-file.toml +0 -0
  218. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/data/cal_coeff_1234.csv +0 -0
  219. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/data/calibration.csv +0 -0
  220. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/data/calibration.yaml +0 -0
  221. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/data/command.yaml +0 -0
  222. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/data/corrupt.yaml +0 -0
  223. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/data/data-file.txt +0 -0
  224. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/data/empty_data_file.txt +0 -0
  225. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/data/empty_yaml_file.yaml +0 -0
  226. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/data/local_settings.yaml +0 -0
  227. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/data/new_local_settings.yaml +0 -0
  228. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/data/test_setup.yaml +0 -0
  229. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/icons/hourglass.svg +0 -0
  230. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/icons/keyboard.png +0 -0
  231. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/icons/soap_sponge.svg +0 -0
  232. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/lib/dev1/shared-lib.so +0 -0
  233. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/lib/dev2/shared-lib.so +0 -0
  234. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/fixtures/default_env.py +0 -0
  235. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/fixtures/helpers.py +0 -0
  236. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/scripts/handle_sigterm.py +0 -0
  237. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/scripts/raise_value_error.py +0 -0
  238. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/scripts/void-0.py +0 -0
  239. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/scripts/void-1.py +0 -0
  240. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_bits.py +0 -0
  241. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_config.py +0 -0
  242. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_device.py +0 -0
  243. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_env.py +0 -0
  244. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_fixtures.py +0 -0
  245. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_hk.py +0 -0
  246. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_influxdb_plugin.py +0 -0
  247. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_metrics.py +0 -0
  248. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_ratelimit.py +0 -0
  249. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_resource.py +0 -0
  250. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_response.py +0 -0
  251. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_settings.py +0 -0
  252. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_signal.py +0 -0
  253. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_system.py +0 -0
  254. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_task.py +0 -0
  255. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_zmq_ser.py +0 -0
  256. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/README.md +0 -0
  257. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/src/cgse_coordinates/__init__.py +0 -0
  258. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/src/cgse_coordinates/settings.yaml +0 -0
  259. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/src/egse/coordinates/__init__.py +0 -0
  260. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/src/egse/coordinates/avoidance.py +0 -0
  261. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/src/egse/coordinates/cslmodel.py +0 -0
  262. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/src/egse/coordinates/laser_tracker_to_dict.py +0 -0
  263. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/src/egse/coordinates/point.py +0 -0
  264. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/src/egse/coordinates/pyplot.py +0 -0
  265. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/src/egse/coordinates/referenceFrame.py +0 -0
  266. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/src/egse/coordinates/refmodel.py +0 -0
  267. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/src/egse/coordinates/rotationMatrix.py +0 -0
  268. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/src/egse/coordinates/transform3d_addon.py +0 -0
  269. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/tests/test_avoidance.py +0 -0
  270. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/tests/test_coordinates_plot.py +0 -0
  271. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/tests/test_coordinates_serialize.py +0 -0
  272. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/tests/test_point.py +0 -0
  273. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/tests/test_ref_model.py +0 -0
  274. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/tests/test_reference_frames.py +0 -0
  275. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/tests/test_refmodel.py +0 -0
  276. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/.envrc.disabled +0 -0
  277. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/README.md +0 -0
  278. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/service_registry.db +0 -0
  279. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/cgse_core/__init__.py +0 -0
  280. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/cgse_core/_start.py +0 -0
  281. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/cgse_core/_status.py +0 -0
  282. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/cgse_core/cgse_explore.py +0 -0
  283. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/cgse_core/settings.yaml +0 -0
  284. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/async_control.py +0 -0
  285. {cgse-0.13.0/libs/cgse-common → cgse-0.14.0/libs/cgse-core}/src/egse/async_control_claude.py +0 -0
  286. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/confman/__main__.py +0 -0
  287. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/confman/confman.yaml +0 -0
  288. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/icons/busy.svg +0 -0
  289. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/icons/operational-mode.svg +0 -0
  290. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/icons/pm_ui.svg +0 -0
  291. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/icons/simulator-mode.svg +0 -0
  292. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/icons/start-process-button.svg +0 -0
  293. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/icons/stop-process-button.svg +0 -0
  294. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/icons/user-interface.svg +0 -0
  295. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/logger/__main__.py +0 -0
  296. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/metricshub/__init__.py +0 -0
  297. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/metricshub/server.py +0 -0
  298. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/notifyhub/__init__.py +0 -0
  299. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/notifyhub/event.py +0 -0
  300. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/notifyhub/server.py +0 -0
  301. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/notifyhub/services.py +0 -0
  302. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/notifyhub/test.py +0 -0
  303. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/procman/__init__.py +0 -0
  304. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/procman/procman.yaml +0 -0
  305. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/procman/procman_protocol.py +0 -0
  306. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/procman/procman_ui.py +0 -0
  307. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/registry/__init__.py +0 -0
  308. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/registry/backend.py +0 -0
  309. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/registry/service.py +0 -0
  310. {cgse-0.13.0/libs/cgse-common → cgse-0.14.0/libs/cgse-core}/src/egse/services.yaml +0 -0
  311. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/storage/__init__.py +0 -0
  312. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/storage/__main__.py +0 -0
  313. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/storage/persistence.py +0 -0
  314. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/storage/storage.yaml +0 -0
  315. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/conftest.py +0 -0
  316. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/data/local_settings.yaml +0 -0
  317. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/fixtures/default_env.py +0 -0
  318. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/script_test_async_registry_client.py +0 -0
  319. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/script_test_registry_client_server.py +0 -0
  320. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/script_test_service_registry_server.py +0 -0
  321. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/script_test_sync_registry_client.py +0 -0
  322. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/services.py +0 -0
  323. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/stress_test_registry_server.py +0 -0
  324. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/test_confman_setups.py +0 -0
  325. {cgse-0.13.0/libs/cgse-common → cgse-0.14.0/libs/cgse-core}/tests/test_control.py +0 -0
  326. {cgse-0.13.0/libs/cgse-common → cgse-0.14.0/libs/cgse-core}/tests/test_listener.py +0 -0
  327. {cgse-0.13.0/libs/cgse-common → cgse-0.14.0/libs/cgse-core}/tests/test_mixin.py +0 -0
  328. {cgse-0.13.0/libs/cgse-common → cgse-0.14.0/libs/cgse-core}/tests/test_protocol.py +0 -0
  329. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/test_registry_backend.py +0 -0
  330. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/test_settings_core.py +0 -0
  331. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/test_zmq_microservice.py +0 -0
  332. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/README.md +0 -0
  333. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/__init__.py +0 -0
  334. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/buttons.py +0 -0
  335. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-start.svg +0 -0
  336. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-stop.svg +0 -0
  337. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/aeu-cs.svg +0 -0
  338. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-started.svg +0 -0
  339. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-stopped.svg +0 -0
  340. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/aeu_cs.svg +0 -0
  341. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/alert.svg +0 -0
  342. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/arrow-double-left.png +0 -0
  343. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/arrow-double-right.png +0 -0
  344. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/arrow-up.svg +0 -0
  345. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/backward.svg +0 -0
  346. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/busy.svg +0 -0
  347. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/cleaning.svg +0 -0
  348. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/color-scheme.svg +0 -0
  349. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/cs-connected-alert.svg +0 -0
  350. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/cs-connected-disabled.svg +0 -0
  351. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/cs-connected.svg +0 -0
  352. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/cs-not-connected.svg +0 -0
  353. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/double-left-arrow.svg +0 -0
  354. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/double-right-arrow.svg +0 -0
  355. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/erase-disabled.svg +0 -0
  356. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/erase.svg +0 -0
  357. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/fitsgen-start.svg +0 -0
  358. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/fitsgen-stop.svg +0 -0
  359. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/fitsgen.svg +0 -0
  360. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/forward.svg +0 -0
  361. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/fov-hk-start.svg +0 -0
  362. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/fov-hk-stop.svg +0 -0
  363. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/fov-hk.svg +0 -0
  364. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/front-desk.svg +0 -0
  365. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/home-actioned.svg +0 -0
  366. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/home-disabled.svg +0 -0
  367. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/home.svg +0 -0
  368. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/info.svg +0 -0
  369. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/invalid.png +0 -0
  370. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/led-green.svg +0 -0
  371. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/led-grey.svg +0 -0
  372. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/led-orange.svg +0 -0
  373. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/led-red.svg +0 -0
  374. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/led-square-green.svg +0 -0
  375. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/led-square-grey.svg +0 -0
  376. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/led-square-orange.svg +0 -0
  377. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/led-square-red.svg +0 -0
  378. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-green.svg +0 -0
  379. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-red.svg +0 -0
  380. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el+.svg +0 -0
  381. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el-.svg +0 -0
  382. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/location-marker.svg +0 -0
  383. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/logo-dpu.svg +0 -0
  384. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/logo-gimbal.svg +0 -0
  385. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/logo-huber.svg +0 -0
  386. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/logo-ogse.svg +0 -0
  387. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/logo-puna.svg +0 -0
  388. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/logo-tcs.svg +0 -0
  389. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/logo-zonda.svg +0 -0
  390. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/maximize.svg +0 -0
  391. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/meter.svg +0 -0
  392. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/more.svg +0 -0
  393. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-start.svg +0 -0
  394. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-stop.svg +0 -0
  395. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk.svg +0 -0
  396. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/observing-off.svg +0 -0
  397. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/observing-on.svg +0 -0
  398. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.png +0 -0
  399. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.svg +0 -0
  400. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/ops-mode.svg +0 -0
  401. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/play-green.svg +0 -0
  402. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/plugged-disabled.svg +0 -0
  403. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/plugged.svg +0 -0
  404. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/pm_ui.svg +0 -0
  405. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/power-button-green.svg +0 -0
  406. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/power-button-red.svg +0 -0
  407. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/power-button.svg +0 -0
  408. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/radar.svg +0 -0
  409. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/radioactive.svg +0 -0
  410. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/reload.svg +0 -0
  411. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/remote-control-off.svg +0 -0
  412. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/remote-control-on.svg +0 -0
  413. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/repeat-blue.svg +0 -0
  414. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/repeat.svg +0 -0
  415. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/settings.svg +0 -0
  416. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/shrink.svg +0 -0
  417. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/shutter.svg +0 -0
  418. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/sign-off.svg +0 -0
  419. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/sign-on.svg +0 -0
  420. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/sim-mode.svg +0 -0
  421. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/small-buttons-go.svg +0 -0
  422. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/small-buttons-minus.svg +0 -0
  423. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/small-buttons-plus.svg +0 -0
  424. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/sponge.svg +0 -0
  425. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/start-button-disabled.svg +0 -0
  426. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/start-button.svg +0 -0
  427. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/stop-button-disabled.svg +0 -0
  428. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/stop-button.svg +0 -0
  429. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/stop-red.svg +0 -0
  430. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/stop.svg +0 -0
  431. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/switch-disabled-square.svg +0 -0
  432. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/switch-disabled.svg +0 -0
  433. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/switch-off-square.svg +0 -0
  434. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/switch-off.svg +0 -0
  435. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/switch-on-square.svg +0 -0
  436. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/switch-on.svg +0 -0
  437. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/temperature-control.svg +0 -0
  438. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/th_ui_logo.svg +0 -0
  439. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/unplugged.svg +0 -0
  440. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/unvalid.png +0 -0
  441. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/user-interface.svg +0 -0
  442. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/vacuum.svg +0 -0
  443. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/valid.png +0 -0
  444. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-dark.svg +0 -0
  445. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-white.svg +0 -0
  446. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/led.py +0 -0
  447. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/limitswitch.py +0 -0
  448. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/states.py +0 -0
  449. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/styles/dark.qss +0 -0
  450. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/styles/default.qss +0 -0
  451. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/styles.qss +0 -0
  452. {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/switch.py +0 -0
  453. {cgse-0.13.0 → cgse-0.14.0}/mkdocs.yml +0 -0
  454. {cgse-0.13.0 → cgse-0.14.0}/overrides/.icons/custom/dbend-dark.svg +0 -0
  455. {cgse-0.13.0 → cgse-0.14.0}/overrides/.icons/custom/dbend-light.svg +0 -0
  456. {cgse-0.13.0 → cgse-0.14.0}/overrides/.icons/custom/gear.svg +0 -0
  457. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/cgse-tools/README.md +0 -0
  458. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/cgse-tools/src/cgse_tools/__init__.py +0 -0
  459. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/cgse-tools/src/cgse_tools/cgse_clock.py +0 -0
  460. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/cgse-tools/src/egse/tools/status.py +0 -0
  461. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/README.md +0 -0
  462. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/justfile +0 -0
  463. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/noxfile.py +0 -0
  464. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/service_registry.db +0 -0
  465. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/__init__.py +0 -0
  466. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510.py +0 -0
  467. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510.yaml +0 -0
  468. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_adev.py +0 -0
  469. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_dev.py +0 -0
  470. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_mon.py +0 -0
  471. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_protocol.py +0 -0
  472. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_sim.py +0 -0
  473. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/__init__.py +0 -0
  474. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/cgse_explore.py +0 -0
  475. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/settings.yaml +0 -0
  476. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/temperature_readings.log +0 -0
  477. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/tests/script_daq6510_mon.py +0 -0
  478. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/tests/test_adev.py +0 -0
  479. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/tests/test_dev.py +0 -0
  480. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/lakeshore-tempcontrol/README.md +0 -0
  481. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336.py +0 -0
  482. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336.yaml +0 -0
  483. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_cs.py +0 -0
  484. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_devif.py +0 -0
  485. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_protocol.py +0 -0
  486. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/__init__.py +0 -0
  487. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/cgse_explore.py +0 -0
  488. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/settings.yaml +0 -0
  489. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/lakeshore-tempcontrol/tests/test_lakeshore336_simulator.py +0 -0
  490. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/README.md +0 -0
  491. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/__init__.py +0 -0
  492. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/__init__.py +0 -0
  493. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/alpha.py +0 -0
  494. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/dynalpha.py +0 -0
  495. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod.py +0 -0
  496. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod_ui.py +0 -0
  497. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.py +0 -0
  498. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.yaml +0 -0
  499. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_cs.py +0 -0
  500. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_protocol.py +0 -0
  501. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_ui.py +0 -0
  502. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac.py +0 -0
  503. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac_regex.py +0 -0
  504. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.py +0 -0
  505. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.yaml +0 -0
  506. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_cs.py +0 -0
  507. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_protocol.py +0 -0
  508. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_sim.py +0 -0
  509. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_ui.py +0 -0
  510. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/punaplus.py +0 -0
  511. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.py +0 -0
  512. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.yaml +0 -0
  513. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_cs.py +0 -0
  514. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_devif.py +0 -0
  515. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_protocol.py +0 -0
  516. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_ui.py +0 -0
  517. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/__init__.py +0 -0
  518. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/cgse_explore.py +0 -0
  519. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/settings.yaml +0 -0
  520. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/tests/test_puna.py +0 -0
  521. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/tests/test_puna_cs.py +0 -0
  522. {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/tests/test_puna_simulator.py +0 -0
  523. {cgse-0.13.0 → cgse-0.14.0}/projects/plato/plato-fits/README.md +0 -0
  524. {cgse-0.13.0 → cgse-0.14.0}/projects/plato/plato-fits/src/egse/plugins/storage/fits.py +0 -0
  525. {cgse-0.13.0 → cgse-0.14.0}/projects/plato/plato-hdf5/README.md +0 -0
  526. {cgse-0.13.0 → cgse-0.14.0}/projects/plato/plato-hdf5/src/egse/plugins/storage/hdf5.py +0 -0
  527. {cgse-0.13.0 → cgse-0.14.0}/projects/plato/plato-spw/README.md +0 -0
  528. {cgse-0.13.0 → cgse-0.14.0}/projects/plato/plato-spw/src/egse/spw.py +0 -0
  529. {cgse-0.13.0 → cgse-0.14.0}/scratch/advanced-process-monitoring.py +0 -0
  530. {cgse-0.13.0 → cgse-0.14.0}/scratch/live-process-monitoring.py +0 -0
  531. {cgse-0.13.0 → cgse-0.14.0}/scratch/match-case.py +0 -0
  532. {cgse-0.13.0 → cgse-0.14.0}/scratch/processes.json +0 -0
  533. {cgse-0.13.0 → cgse-0.14.0}/scratch/simple-process-monitoring.py +0 -0
  534. {cgse-0.13.0 → cgse-0.14.0}/temperature_readings.log +0 -0
  535. {cgse-0.13.0 → cgse-0.14.0}/test_service_registry.db +0 -0
@@ -18,6 +18,7 @@ dist
18
18
 
19
19
  .pytest_cache
20
20
  .coverage
21
+ .coverage.*
21
22
  .nox
22
23
  htmlcov
23
24
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cgse
3
- Version: 0.13.0
3
+ Version: 0.14.0
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>
@@ -67,7 +67,8 @@ Provide a `cgse` command that is extensible with new commands and command groups
67
67
  use of command YAML files, replace `dynamic_interface` with `dynamic_command`.
68
68
  - [ ] Introduce asyncio into the commanding protocol, e.g. `get_status()`
69
69
  and `get_housekeeping()` shall be handled asynchronously.
70
- - [ ] GlobalState Setup needs some redesign, especially `GlobalState.setup` which should not consult
70
+ - [x] GlobalState Setup needs some redesign, especially `GlobalState.setup`
71
+ which should not consult
71
72
  the configuration manager by default.
72
73
 
73
74
  ## Removals
@@ -25,7 +25,7 @@ hello arg="":
25
25
  system-info:
26
26
  @echo "This is an {{arch()}} machine, running {{os()}}".
27
27
 
28
- default_python := "3.9.20"
28
+ default_python := "3.10"
29
29
 
30
30
  # Start an IPython session
31
31
  ipython version=default_python:
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "cgse-common"
3
- version = "0.13.0"
3
+ version = "0.14.0"
4
4
  description = "Software framework to support hardware testing"
5
5
  authors = [
6
6
  {name = "IvS KU Leuven"}
@@ -19,7 +19,7 @@ keywords = [
19
19
  "software framework"
20
20
  ]
21
21
  dependencies = [
22
- "click>=8.1.8",
22
+ "click>=8.2.1",
23
23
  "deepdiff>=8.1.1",
24
24
  "distro>=1.9.0",
25
25
  "gitpython>=3.1.44",
@@ -27,7 +27,7 @@ dependencies = [
27
27
  "psutil>=6.1.1",
28
28
  "pyyaml>=6.0.2",
29
29
  "rich>=13.9.4",
30
- "typer>=0.15.1",
30
+ "typer>=0.16.0",
31
31
  "navdict>=0.5.9",
32
32
  # Python 3.9 specific dependencies
33
33
  "numpy==1.26.4; python_version == '3.9'",
@@ -58,7 +58,7 @@ cgse-common = "cgse_common:settings.yaml"
58
58
  [tool.pytest.ini_options]
59
59
  pythonpath = "src"
60
60
  testpaths = ["tests"]
61
- addopts = "-rA --cov --cov-branch --cov-report html"
61
+ addopts = "-ra --cov --cov-branch --cov-report html"
62
62
  log_cli = true
63
63
  log_cli_level = "INFO"
64
64
  filterwarnings = [
@@ -85,7 +85,7 @@ class SortedCommandGroup(TyperGroup):
85
85
  return sorted(commands, key=get_command_priority)
86
86
 
87
87
 
88
- app = typer.Typer(add_completion=True, cls=SortedCommandGroup, rich_markup_mode="markdown")
88
+ app = typer.Typer(add_completion=True, cls=SortedCommandGroup)
89
89
 
90
90
 
91
91
  @app.command()
@@ -121,22 +121,33 @@ def version(ctx: typer.Context):
121
121
  )
122
122
 
123
123
 
124
+ def subcommand_callback(ctx: typer.Context):
125
+ """Normal callback."""
126
+ if ctx.invoked_subcommand is None:
127
+ typer.echo("No command specified:")
128
+ typer.echo(ctx.get_help())
129
+ raise typer.Exit()
130
+
131
+
124
132
  def build_app():
125
133
  global app
126
134
 
135
+ # rich.print("Available command groups:", entry_points("cgse.command"))
136
+
127
137
  for ep in entry_points("cgse.command"):
128
138
  try:
129
139
  obj = ep.load()
130
140
  if isinstance(obj, typer.Typer):
131
- app.add_typer(ep.load(), name=ep.name)
141
+ obj.callback(invoke_without_command=True)(subcommand_callback)
142
+ app.add_typer(obj, name=ep.name)
132
143
  else:
133
- app.command()(ep.load())
144
+ app.command()(obj)
134
145
  except Exception as exc:
135
146
  app.command()(broken_command(ep.name, ep.module, exc))
136
147
 
137
148
  cgse_eps = HierarchicalEntryPoints("cgse.service")
138
149
 
139
- # rich.print("Available groups:", cgse_eps.get_all_groups())
150
+ # rich.print("Available services groups:", cgse_eps.get_all_groups())
140
151
 
141
152
  for group in cgse_eps.get_all_groups():
142
153
  for ep in entry_points(group):
@@ -145,12 +156,14 @@ def build_app():
145
156
  app.add_typer(ep.load(), name=ep.name)
146
157
  else:
147
158
  command_group = snake_to_title(group.split(".")[-1])
148
- app.add_typer(ep.load(), name=ep.name, rich_help_panel=command_group)
159
+ plugin_app: typer.Typer = ep.load()
160
+ plugin_app.callback(invoke_without_command=True)(subcommand_callback)
161
+ app.add_typer(plugin_app, name=ep.name, rich_help_panel=command_group)
149
162
  except Exception as exc:
150
163
  app.command()(broken_command(ep.name, ep.module, exc))
151
164
 
152
165
 
153
- @app.callback(no_args_is_help=True, invoke_without_command=True)
166
+ @app.callback(invoke_without_command=True)
154
167
  def main(ctx: typer.Context, verbose: bool = False):
155
168
  """
156
169
  The `cgse` command is used to:
@@ -167,6 +180,10 @@ def main(ctx: typer.Context, verbose: bool = False):
167
180
 
168
181
  ctx.obj = AppState(verbose=verbose)
169
182
 
183
+ if ctx.invoked_subcommand is None:
184
+ # print("Try 'cgse --help' for a list of commands.")
185
+ typer.echo(ctx.get_help())
186
+
170
187
 
171
188
  build_app()
172
189
 
@@ -5,8 +5,8 @@ This module provides functions to calibrate sensor values.
5
5
  from __future__ import annotations
6
6
 
7
7
  import numpy as np
8
-
9
- from egse.setup import navdict, Setup, SetupError
8
+ from navdict import navdict
9
+ from egse.setup import Setup, SetupError
10
10
 
11
11
 
12
12
  def apply_gain_offset(counts: float, gain: float, offset: float) -> float:
@@ -3,27 +3,15 @@ This module provides convenience functions to properly configure the CGSE
3
3
  and to find paths and resources.
4
4
  """
5
5
 
6
- from __future__ import annotations
7
-
8
- import errno
9
6
  import fnmatch
10
- import logging
11
7
  import os
12
- from functools import lru_cache
13
- from os.path import exists
14
- from os.path import join
15
8
  from pathlib import Path
16
9
  from pathlib import PurePath
17
- from typing import List
18
- from typing import Optional
10
+ from typing import Generator
19
11
  from typing import Tuple
20
12
  from typing import Union
21
- from typing import Generator
22
13
 
23
- import git
24
- from egse.decorators import deprecate
25
-
26
- _logger = logging.getLogger(__name__)
14
+ from egse.log import logger
27
15
 
28
16
 
29
17
  def find_first_occurrence_of_dir(pattern: str, root: Path | str) -> Path | None:
@@ -252,18 +240,6 @@ def find_root(
252
240
  return Path(default) if default is not None else None
253
241
 
254
242
 
255
- def set_logger_levels(logger_levels: List[Tuple] = None):
256
- """
257
- Set the logging level for the given loggers.
258
-
259
- """
260
- logger_levels = logger_levels or []
261
-
262
- for name, level in logger_levels:
263
- a_logger = logging.getLogger(name)
264
- a_logger.setLevel(level)
265
-
266
-
267
243
  class WorkingDirectory:
268
244
  """
269
245
  WorkingDirectory is a context manager to temporarily change the working directory while
@@ -301,7 +277,7 @@ class WorkingDirectory:
301
277
  try:
302
278
  os.chdir(self._current_dir)
303
279
  except OSError as exc:
304
- _logger.warning(f"Change back to previous directory failed: {exc}")
280
+ logger.warning(f"Change back to previous directory failed: {exc}")
305
281
 
306
282
  @property
307
283
  def path(self):
@@ -2,8 +2,6 @@
2
2
  This module manages files that have a counter in their filename.
3
3
  """
4
4
 
5
- from __future__ import annotations
6
-
7
5
  __all__ = [
8
6
  "counter_exists",
9
7
  "counter_filename",
@@ -11,12 +9,10 @@ __all__ = [
11
9
  "new_counter",
12
10
  ]
13
11
 
14
- import logging
15
12
  from pathlib import Path
16
13
 
17
14
  from egse.config import find_files
18
-
19
- _LOGGER = logging.getLogger(__name__)
15
+ from egse.log import logger
20
16
 
21
17
 
22
18
  def counter_filename(location: Path, filename: Path | str) -> Path:
@@ -133,7 +129,7 @@ def get_next_counter(filename: Path) -> int:
133
129
  return counter
134
130
 
135
131
 
136
- def determine_counter_from_dir_list(location: str, pattern: str, index: int = -1) -> int:
132
+ def determine_counter_from_dir_list(location: Path | str, pattern: str, index: int = -1) -> int:
137
133
  """
138
134
  Determine counter for a new file at the given location and with the given pattern.
139
135
  The next counter is determined from the sorted list of files that match the given pattern.
@@ -170,9 +166,9 @@ def determine_counter_from_dir_list(location: str, pattern: str, index: int = -1
170
166
  # <anything here>_counter>.<extension>
171
167
 
172
168
  counter = int(parts[index].split(".")[0]) + 1
173
- _LOGGER.debug(f"{counter = }")
169
+ logger.debug(f"{counter = }")
174
170
  return counter
175
171
 
176
172
  except ValueError:
177
- _LOGGER.warning("ValueError", exc_info=True)
173
+ logger.warning("ValueError", exc_info=True)
178
174
  return 1
@@ -17,8 +17,7 @@ import rich
17
17
 
18
18
  from egse.settings import Settings
19
19
  from egse.system import get_caller_info
20
-
21
- _LOGGER = logging.getLogger(__name__)
20
+ from egse.log import logger
22
21
 
23
22
 
24
23
  def static_vars(**kwargs):
@@ -161,14 +160,14 @@ def average_time(*, name: str = "average_time", level: int = logging.INFO, preci
161
160
  def _report_average_time():
162
161
  if func._call_count:
163
162
  average_time = func._run_time / func._call_count
164
- _LOGGER.log(
163
+ logger.log(
165
164
  level,
166
165
  f"{name}: "
167
166
  f"average runtime of {func.__name__!r} is {average_time:.{precision}f}s, "
168
167
  f"#calls = {func._call_count}.",
169
168
  )
170
169
  else:
171
- _LOGGER.log(level, f"{name}: function {func.__name__!r} was never called.")
170
+ logger.log(level, f"{name}: function {func.__name__!r} was never called.")
172
171
 
173
172
  return func._run_time, func._call_count
174
173
 
@@ -210,7 +209,7 @@ def timer(*, name: str = "timer", level: int = logging.INFO, precision: int = 4)
210
209
  value = func(*args, **kwargs)
211
210
  end_time = time.perf_counter()
212
211
  run_time = end_time - start_time
213
- _LOGGER.log(level, f"{name}: Finished {func.__name__!r} in {run_time:.{precision}f} secs")
212
+ logger.log(level, f"{name}: Finished {func.__name__!r} in {run_time:.{precision}f} secs")
214
213
  return value
215
214
 
216
215
  return wrapper_timer
@@ -235,7 +234,7 @@ def async_timer(*, name: str = "timer", level: int = logging.INFO, precision: in
235
234
  value = await func(*args, **kwargs)
236
235
  end_time = time.perf_counter()
237
236
  run_time = end_time - start_time
238
- _LOGGER.log(level, f"{name}: Finished {func.__name__!r} in {run_time:.{precision}f} secs")
237
+ logger.log(level, f"{name}: Finished {func.__name__!r} in {run_time:.{precision}f} secs")
239
238
  return value
240
239
 
241
240
  return wrapper_timer
@@ -307,9 +306,9 @@ def debug(func):
307
306
  args_repr = [repr(a) for a in args]
308
307
  kwargs_repr = [f"{k}={v!r}" for k, v in kwargs.items()]
309
308
  signature = ", ".join(args_repr + kwargs_repr)
310
- _LOGGER.debug(f"Calling {func.__name__}({signature})")
309
+ logger.debug(f"Calling {func.__name__}({signature})")
311
310
  value = func(*args, **kwargs)
312
- _LOGGER.debug(f"{func.__name__!r} returned {value!r}")
311
+ logger.debug(f"{func.__name__!r} returned {value!r}")
313
312
  else:
314
313
  value = func(*args, **kwargs)
315
314
  return value
@@ -523,7 +522,7 @@ def to_be_implemented(func):
523
522
 
524
523
  @functools.wraps(func)
525
524
  def wrapper_tbi(*args, **kwargs):
526
- _LOGGER.warning(f"The function/method {func.__name__} is not yet implemented.")
525
+ logger.warning(f"The function/method {func.__name__} is not yet implemented.")
527
526
  return func(*args, **kwargs)
528
527
 
529
528
  return wrapper_tbi
@@ -736,12 +735,12 @@ def retry_with_exponential_backoff(
736
735
  while attempt < max_attempts:
737
736
  try:
738
737
  response = func(*args, **kwargs) # Attempt to call the function
739
- _LOGGER.info(f"{func.__name__} successfully executed.")
738
+ logger.info(f"{func.__name__} successfully executed.")
740
739
  return response
741
740
  except tuple(exceptions) as exc:
742
741
  last_exception = exc
743
742
  attempt += 1
744
- _LOGGER.info(
743
+ logger.info(
745
744
  f"Retry {attempt}: {func.__name__} will be executing again in {wait_time * backoff_factor}s. "
746
745
  f"Received a {last_exception!r}."
747
746
  )
@@ -805,7 +804,7 @@ def retry(times: int = 3, wait: float = 10.0, exceptions: List = None) -> Callab
805
804
  except tuple(exceptions) as exc:
806
805
  previous_exception = exc
807
806
  if n < times:
808
- _LOGGER.info(
807
+ logger.info(
809
808
  f"Retry {n + 1}: {func.__name__} will be executing again in {wait}s. "
810
809
  f"Received a {previous_exception!r}."
811
810
  )
@@ -3,7 +3,6 @@ This module defines the generic interfaces to connect devices.
3
3
  """
4
4
 
5
5
  from enum import IntEnum
6
- from typing import List
7
6
 
8
7
  from egse.decorators import dynamic_interface
9
8
  from egse.exceptions import Error
@@ -9,14 +9,14 @@ __all__ = [
9
9
  ]
10
10
  import logging
11
11
 
12
- from egse.system import capture_rich_output
13
- from egse.system import flatten_dict
14
12
  from rich.table import Table
15
13
 
16
- LOGGER = logging.getLogger(__name__)
14
+ from egse.log import logger
15
+ from egse.system import capture_rich_output
16
+ from egse.system import flatten_dict
17
17
 
18
18
 
19
- def log_differences(dict_1, dict_2):
19
+ def log_differences(dict_1, dict_2, log_level: int = logging.INFO):
20
20
  """
21
21
  Takes two flattened dictionaries and compares them. This function only compares those
22
22
  keys that are common to both dictionaries. The key-value pairs that are unique to one
@@ -49,13 +49,14 @@ def log_differences(dict_1, dict_2):
49
49
  for name in sorted(mismatched):
50
50
  table.add_row(name, str(dict_1[name]), str(dict_2[name]))
51
51
 
52
- LOGGER.info(capture_rich_output(table))
53
- # rich.print(table)
52
+ logger.log(log_level, capture_rich_output(table))
54
53
  else:
55
- LOGGER.info(f"No differences between the two flattened dictionaries, {len(all_keys)} values compared.")
54
+ logger.log(
55
+ log_level, f"No differences between the two flattened dictionaries, {len(all_keys)} values compared."
56
+ )
56
57
 
57
58
 
58
- def log_key_differences(dict_1, dict_2):
59
+ def log_key_differences(dict_1, dict_2, log_level: int = logging.INFO):
59
60
  """
60
61
  Takes two dictionaries and compares the top-level keys. The differences are logged in a Rich Table at level=INFO.
61
62
  Keys that are present on both dictionaries are not logged.
@@ -81,7 +82,7 @@ def log_key_differences(dict_1, dict_2):
81
82
  not_in_s1 = s2 - s1
82
83
 
83
84
  if not not_in_s1 and not not_in_s2:
84
- LOGGER.info("Both dictionaries contains the same keys.")
85
+ logger.log(log_level, "Both dictionaries contains the same keys.")
85
86
 
86
87
  table = Table("Dictionary 1", "Dictionary 2", title="Key differences", title_justify="left")
87
88
 
@@ -91,11 +92,11 @@ def log_key_differences(dict_1, dict_2):
91
92
  for key in not_in_s1:
92
93
  table.add_row("", str(key))
93
94
 
94
- LOGGER.info(capture_rich_output(table))
95
+ logger.log(log_level, capture_rich_output(table))
95
96
 
96
97
 
97
98
  if __name__ == "__main__":
98
- import egse.logger # noqa activates the logger
99
+ logging.basicConfig(level=logging.DEBUG)
99
100
 
100
101
  d1 = {
101
102
  "A": 1,
@@ -115,7 +116,7 @@ if __name__ == "__main__":
115
116
  "C": 3,
116
117
  }
117
118
 
118
- log_differences(d1, d2)
119
- log_key_differences(d1, d2)
119
+ log_differences(d1, d2, logging.DEBUG)
120
+ log_key_differences(d1, d2, logging.DEBUG)
120
121
 
121
- log_differences(d1, d3)
122
+ log_differences(d1, d3, logging.DEBUG)
@@ -63,11 +63,11 @@ __all__ = [
63
63
  ]
64
64
 
65
65
  import contextlib
66
- import logging
67
66
  import os
68
67
  import warnings
69
68
  from pathlib import Path
70
69
 
70
+ from egse.log import logger
71
71
  from egse.system import all_logging_disabled
72
72
  from egse.system import get_caller_info
73
73
  from egse.system import ignore_m_warning
@@ -75,7 +75,6 @@ from egse.system import ignore_m_warning
75
75
  from rich.console import Console
76
76
 
77
77
  console = Console(width=100)
78
- logger = logging.getLogger("egse.env")
79
78
 
80
79
  # Every project shall have a PROJECT and a SITE_ID environment variable set. This variable will be used to
81
80
  # create the other environment variables that are specific to the project.
@@ -484,7 +483,7 @@ def get_local_settings_path() -> str or None:
484
483
 
485
484
  def has_conf_repo_location() -> bool:
486
485
  location = _env.get("CONF_REPO_LOCATION")
487
- return True if location else False
486
+ return True if location in (None, NoValue) else False
488
487
 
489
488
 
490
489
  def get_conf_repo_location_env_name() -> str:
@@ -1,7 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import contextlib
4
- import logging
5
4
  import pickle
6
5
  import queue
7
6
  import random
@@ -13,8 +12,6 @@ import zmq
13
12
  from egse.system import format_datetime
14
13
  from egse.zmq_ser import MessageIdentifier
15
14
 
16
- _LOGGER = logging.getLogger(__name__)
17
-
18
15
 
19
16
  def _g_tick(period: float):
20
17
  """Generator for ticks every period [s]."""
@@ -10,7 +10,6 @@ __all__ = [
10
10
  ]
11
11
  import csv
12
12
  import datetime
13
- import logging
14
13
  from enum import Enum
15
14
  from pathlib import Path
16
15
  from typing import Optional
@@ -19,9 +18,11 @@ from typing import Union
19
18
  import dateutil.parser as date_parser
20
19
  import numpy as np
21
20
  import pandas as pd
21
+
22
22
  from egse.config import find_files
23
23
  from egse.env import get_data_storage_location
24
24
  from egse.env import get_site_id
25
+ from egse.log import logger
25
26
  from egse.obsid import ObservationIdentifier
26
27
  from egse.obsid import obsid_from_storage
27
28
  from egse.setup import Setup
@@ -33,8 +34,6 @@ from egse.system import read_last_lines
33
34
  from egse.system import str_to_datetime
34
35
  from egse.system import time_since_epoch_1958
35
36
 
36
- _LOGGER = logging.getLogger(__name__)
37
-
38
37
 
39
38
  class TmDictionaryColumns(str, Enum):
40
39
  """Enumeration of the relevant columns in the TM dictionary spreadsheet.
@@ -438,7 +437,7 @@ def _get_housekeeping_daily(hk_name: str, data_dir, time_window: int = None, set
438
437
  # (those will have to be read entirely)
439
438
 
440
439
  else:
441
- _LOGGER.warning(f"No HK available for {origin} on {start_time.day}/{start_time.month}/{start_time.year}")
440
+ logger.warning(f"No HK available for {origin} on {start_time.day}/{start_time.month}/{start_time.year}")
442
441
 
443
442
  day = (start_time + datetime.timedelta(days=1)).date() # The day after the first day
444
443
  last_day = datetime.date(now.year, now.month, now.day) # Today
@@ -463,7 +462,7 @@ def _get_housekeeping_daily(hk_name: str, data_dir, time_window: int = None, set
463
462
  hk_array = np.append(hk_array, row[hk_index])
464
463
 
465
464
  else:
466
- _LOGGER.warning(f"No HK available for {origin} on {day.day}/{day.month}/{day.year}")
465
+ logger.warning(f"No HK available for {origin} on {day.day}/{day.month}/{day.year}")
467
466
 
468
467
  day += datetime.timedelta(days=1)
469
468
 
@@ -673,7 +672,7 @@ def read_conversion_dict(storage_mnemonic: str, use_site: bool = False, setup: O
673
672
 
674
673
  else:
675
674
  if len(original_name_col) != len(correct_name_col):
676
- _LOGGER.error(
675
+ logger.error(
677
676
  f"Name columns in TM dictionary have different length: "
678
677
  f"{len(original_name_col)} != {len(correct_name_col)}"
679
678
  )
@@ -0,0 +1,132 @@
1
+ """
2
+ Configure local logging for the CGSE.
3
+
4
+ I use 'local logging' here because the CGSE also has a Logger server which stores
5
+ all CGSE log messages in a rotated file. That server is part of the `cgse-core` package.
6
+
7
+ Environment variables that affect logging:
8
+
9
+ - LOG_FORMAT: full | FULL
10
+ - LOG_LEVEL: an integer [10, 50] or a level name DEBUG, INFO, WARNING, CRITICAL, ERROR
11
+
12
+ """
13
+
14
+ __all__ = [
15
+ "LOG_FORMAT_FULL",
16
+ "logger",
17
+ "root_logger",
18
+ "egse_logger",
19
+ ]
20
+
21
+ import logging
22
+ import os
23
+ import textwrap
24
+
25
+ import rich
26
+
27
+ LOG_FORMAT_STYLE = "{"
28
+ LOG_FORMAT_FULL = (
29
+ "{asctime:19s}.{msecs:03.0f} : {processName:20s} : {levelname:8s} : {name:^25s} : {lineno:6d} : {filename:20s} : {"
30
+ "message}"
31
+ )
32
+ LOG_FORMAT_CLEAN = "{asctime} [{levelname:>8s}] {message} ({filename}:{lineno:d})"
33
+
34
+ LOG_DATE_FORMAT_FULL = "%Y-%m-%d %H:%M:%S"
35
+ LOG_DATE_FORMAT_CLEAN = "%Y-%m-%d %H:%M:%S"
36
+
37
+
38
+ class EGSEFilter(logging.Filter):
39
+ def filter(self, record):
40
+ return record.name.startswith("egse")
41
+
42
+
43
+ egse_filter = EGSEFilter()
44
+
45
+
46
+ class NonEGSEFilter(logging.Filter):
47
+ def filter(self, record):
48
+ return not record.name.startswith("egse")
49
+
50
+
51
+ root_filter = NonEGSEFilter()
52
+
53
+
54
+ def get_log_level_from_env(env_var: str = "LOG_LEVEL", default: int = logging.INFO):
55
+ """Read the log level from an environment variable."""
56
+ log_level_str = os.getenv(env_var, default)
57
+
58
+ # Try to convert to integer first (for numeric levels)
59
+ try:
60
+ log_level = int(log_level_str)
61
+
62
+ if 10 <= log_level <= 50:
63
+ return log_level
64
+ else:
65
+ logging.warning(
66
+ f"Log level {log_level} outside standard range (10-50). Using {logging.getLevelName(default)}."
67
+ )
68
+ return default
69
+
70
+ except ValueError:
71
+ log_level_str = log_level_str.upper()
72
+ try:
73
+ return getattr(logging, log_level_str)
74
+ except AttributeError:
75
+ logging.error(f"Invalid LOG_LEVEL '{log_level_str}'. Using {logging.getLevelName(default)}.")
76
+ return default
77
+
78
+
79
+ egse_logger = logging.getLogger("egse")
80
+ egse_logger.level = get_log_level_from_env() # We might want to choose another env e.g. CGSE_LOG_LEVEL
81
+
82
+ root_logger = logging.getLogger()
83
+ root_logger.level = get_log_level_from_env()
84
+
85
+ egse_handler = logging.StreamHandler()
86
+ if os.getenv("LOG_FORMAT", "").lower() == "full":
87
+ egse_formatter = logging.Formatter(fmt=LOG_FORMAT_FULL, datefmt=LOG_DATE_FORMAT_FULL, style=LOG_FORMAT_STYLE)
88
+ else:
89
+ egse_formatter = logging.Formatter(fmt=LOG_FORMAT_CLEAN, datefmt=LOG_DATE_FORMAT_CLEAN, style=LOG_FORMAT_STYLE)
90
+
91
+ egse_handler.setFormatter(egse_formatter)
92
+ egse_handler.addFilter(egse_filter)
93
+
94
+ root_logger.addHandler(egse_handler)
95
+
96
+ for handler in root_logger.handlers:
97
+ if handler != egse_handler: # Don't filter our new handler
98
+ handler.addFilter(root_filter)
99
+
100
+ logger = egse_logger
101
+
102
+ if __name__ == "__main__":
103
+ logging.basicConfig(
104
+ level=get_log_level_from_env(), format=LOG_FORMAT_CLEAN, datefmt=LOG_DATE_FORMAT_CLEAN, style="{"
105
+ )
106
+
107
+ root_logger = logging.getLogger()
108
+
109
+ rich.print(
110
+ textwrap.dedent(
111
+ """
112
+ Example logging statements
113
+ - logging level set to INFO
114
+ - fields are separated by a colon ':'
115
+ - fields: date & time: process name : level : logger name : lineno : filename : message
116
+ """
117
+ )
118
+ )
119
+
120
+ if os.getenv("LOG_FORMAT_FULL") == "true":
121
+ rich.print(
122
+ f"[b]{'Date & Time':^23s} : {'Process Name':20s} : {'Level':8s} : {'Logger Name':^25s} : {' Line '} : "
123
+ f"{'Filename':20s} : {'Message'}[/]"
124
+ )
125
+ else:
126
+ rich.print(f"[b]{'Date & Time':^19s} [ Level ] Message (filename:lineno)[/]")
127
+
128
+ rich.print("-" * 150)
129
+ for name, level in logging.getLevelNamesMapping().items():
130
+ logger.log(level, f"{name} logging message")
131
+
132
+ root_logger.info("This should come out of the root logger, not the egse logger.")