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

|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# The Setup
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Core Services
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# GUI Components
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
|
|
2
|
+
# Libraries
|
|
3
|
+
|
|
4
|
+
The libraries are those packages that make up the CGSE framework.
|
|
5
|
+
|
|
6
|
+
The libraries are located under the `libs` folder, and we currently find the following packages there:
|
|
7
|
+
|
|
8
|
+
- `cgse-common`
|
|
9
|
+
- `cgse-core`
|
|
10
|
+
- `cgse-coordinates`
|
|
11
|
+
- `cgse-gui`
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Packages in the CGSE
|
|
2
|
+
|
|
3
|
+
The CGSE is a monorepo and consists of numerous packages. Each of these packages are individually installable from
|
|
4
|
+
PyPI. We maintain a list here with all the packages in the monorepo.
|
|
5
|
+
|
|
6
|
+
| Package | Description |
|
|
7
|
+
|--------------------|--------------------------------------------------|
|
|
8
|
+
| `cgse-common` | The common code used by all other packages |
|
|
9
|
+
| `cgse-core` | The core services |
|
|
10
|
+
| `cgse-coordinates` | Coordinate reference Frames |
|
|
11
|
+
| `cgse-gui` | GUI components and styles (PyQt5) |
|
|
12
|
+
| `cgse-tools` | Plugin that adds functions to the `cgse` command |
|
|
13
|
+
| `symetrie-hexapod` | Device drivers for the Symétrie Hexapods |
|
|
14
|
+
| ` plato-fits` | FITS driver with PLATO specific format |
|
|
15
|
+
| `plato-hdf5` | HDF5 driver with PLATO specific format |
|
|
16
|
+
| `plato-spw` | SpaceWire driver with PATO specific packets |
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Projects
|
|
2
|
+
|
|
3
|
+
The projects are those packages that add functionality to the CGSE framework.
|
|
4
|
+
|
|
5
|
+
The projects live under the folder `projects`, and they are organised in _generic_ and _specific_ projects. Generic
|
|
6
|
+
projects do not have an implementation that is specific for one particular project, while, obviously, specific
|
|
7
|
+
projects have. We currently have the following generic packages:
|
|
8
|
+
|
|
9
|
+
- `cgse-tools`
|
|
10
|
+
- `symetrie-hexapod`
|
|
11
|
+
|
|
12
|
+
and then there are the project specific packages:
|
|
13
|
+
|
|
14
|
+
- `plato-fits`
|
|
15
|
+
- `plato-hdf5`
|
|
16
|
+
- `plato-spw`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "cgse-common"
|
|
3
|
-
version = "2025.0.
|
|
3
|
+
version = "2025.0.7"
|
|
4
4
|
description = "Software framework to support hardware testing"
|
|
5
5
|
authors = [
|
|
6
6
|
{name = "IVS KU Leuven"}
|
|
@@ -36,10 +36,13 @@ dependencies = [
|
|
|
36
36
|
[project.entry-points."cgse.version"]
|
|
37
37
|
cgse-common = 'egse'
|
|
38
38
|
|
|
39
|
+
[project.entry-points."cgse.settings"]
|
|
40
|
+
cgse-common = "cgse_common:settings.yaml"
|
|
41
|
+
|
|
39
42
|
[tool.pytest.ini_options]
|
|
40
43
|
pythonpath = "src"
|
|
41
44
|
testpaths = ["tests"]
|
|
42
|
-
addopts = "-ra --cov --cov-report html"
|
|
45
|
+
addopts = "-ra --cov --cov-branch --cov-report html"
|
|
43
46
|
filterwarnings = [
|
|
44
47
|
"ignore::DeprecationWarning"
|
|
45
48
|
]
|
|
@@ -47,6 +50,7 @@ filterwarnings = [
|
|
|
47
50
|
[tool.coverage.run]
|
|
48
51
|
omit = [
|
|
49
52
|
"tests/*",
|
|
53
|
+
"conftest.py",
|
|
50
54
|
]
|
|
51
55
|
|
|
52
56
|
[tool.hatch.build.targets.sdist]
|
|
@@ -59,7 +63,7 @@ exclude = [
|
|
|
59
63
|
]
|
|
60
64
|
|
|
61
65
|
[tool.hatch.build.targets.wheel]
|
|
62
|
-
packages = ["src/egse"]
|
|
66
|
+
packages = ["src/egse", "src/cgse_common"]
|
|
63
67
|
|
|
64
68
|
[tool.ruff]
|
|
65
69
|
line-length = 120
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
PACKAGES:
|
|
2
|
+
CGSE_COMMON: Common classes, functions, decorators, etc. for the CGSE
|
|
3
|
+
|
|
1
4
|
SITE:
|
|
2
|
-
ID:
|
|
5
|
+
ID: XXXX # The SITE ID shall be filled in by the local settings file
|
|
3
6
|
SSH_SERVER: localhost # The IP address of the SSH server on your site
|
|
4
7
|
SSH_PORT: 22 # The TCP/IP port on which the SSH server is listening
|
|
5
8
|
|