cgse 2025.0.3__tar.gz → 2025.0.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {cgse-2025.0.3 → cgse-2025.0.4}/PKG-INFO +1 -1
- cgse-2025.0.4/docs/custom_theme/main.html +32 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/docs/stylesheets/custom.css +9 -33
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/pyproject.toml +1 -1
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/command.py +1 -1
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/env.py +10 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/hk.py +11 -13
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/setup.py +1 -1
- cgse-2025.0.4/libs/cgse-common/tests/conftest.py +19 -0
- cgse-2025.0.4/libs/cgse-common/tests/data/LAB23/README.md +4 -0
- cgse-2025.0.4/libs/cgse-common/tests/data/common/telemetry/tm-dictionary-default.csv +3 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/test_env.py +17 -0
- cgse-2025.0.4/libs/cgse-common/tests/test_hk.py +113 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-coordinates/pyproject.toml +1 -1
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/pyproject.toml +1 -1
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/pyproject.toml +1 -1
- {cgse-2025.0.3 → cgse-2025.0.4}/mkdocs.yml +1 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/cgse-tools/pyproject.toml +1 -1
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/pyproject.toml +1 -1
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/plato/plato-fits/pyproject.toml +1 -1
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/plato/plato-hdf5/pyproject.toml +1 -1
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/plato/plato-spw/pyproject.toml +1 -1
- {cgse-2025.0.3 → cgse-2025.0.4}/pyproject.toml +1 -1
- cgse-2025.0.3/docs/custom_theme/main.html +0 -54
- cgse-2025.0.3/libs/cgse-common/tests/test_hk.py +0 -54
- {cgse-2025.0.3 → cgse-2025.0.4}/.gitignore +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/NOTES.md +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/README.md +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/TODO.md +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/bump.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/docs/dev_guide/coding_style.md +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/docs/dev_guide/docs.md +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/docs/dev_guide/index.md +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/docs/dev_guide/installation.md +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/docs/dev_guide/uv.md +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/docs/getting_started.md +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/docs/help.md +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/docs/images/icons/cgse-logo-blue.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/docs/images/icons/cgse-logo.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/docs/index.md +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/docs/tutorial.md +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/docs/user_guide/index.md +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/docs.zip +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/README.md +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/bits.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/calibration.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/config.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/control.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/decorators.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/device.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/exceptions.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/metrics.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/mixin.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/monitoring.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/observer.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/obsid.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/persistence.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/plugin.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/process.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/protocol.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/proxy.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/reload.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/resource.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/response.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/services.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/services.yaml +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/settings.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/settings.yaml +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/state.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/system.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/version.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/src/egse/zmq_ser.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00028_201028_155259.yaml +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00029_201028_155331.yaml +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00030_210311_134043.yaml +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00080_210917_105245.yaml +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00081_210922_142259.yaml +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00082_210923_094458.yaml +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/CSL1/README.md +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/CSL2/README.md +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/IAS/README.md +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/INTA/README.md +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00027_211119_140441.yaml +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00028_211119_160406.yaml +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00029_211119_172918.yaml +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00030_211122_103604.yaml +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00031_211123_124900.yaml +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/conf/SETUP_20250114_1519.yaml +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/conf/config-file.toml +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/data/cal_coeff_1234.csv +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/data/calibration.csv +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/data/calibration.yaml +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/data/corrupt.yaml +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/data/data-file.txt +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/data/empty_data_file.txt +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/data/test_setup.yaml +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/icons/keyboard.png +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/lib/dev1/shared-lib.so +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/data/lib/dev2/shared-lib.so +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/dummy.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/helpers.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/test_bits.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/test_command.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/test_config.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/test_control.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/test_decorators.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/test_device.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/test_resource.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/test_response.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/test_setup.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-common/tests/test_system.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-coordinates/README.md +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-coordinates/src/egse/coordinates/__init__.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-coordinates/src/egse/coordinates/avoidance.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-coordinates/src/egse/coordinates/cslmodel.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-coordinates/src/egse/coordinates/laser_tracker_to_dict.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-coordinates/src/egse/coordinates/point.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-coordinates/src/egse/coordinates/pyplot.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-coordinates/src/egse/coordinates/referenceFrame.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-coordinates/src/egse/coordinates/refmodel.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-coordinates/src/egse/coordinates/rotationMatrix.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-coordinates/src/egse/coordinates/transform3d_addon.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/.envrc.disabled +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/README.md +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/src/egse/confman/__init__.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/src/egse/confman/__main__.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/src/egse/confman/confman.yaml +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/src/egse/confman/confman_cs.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/src/egse/logger/__init__.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/src/egse/logger/__main__.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/src/egse/logger/log_cs.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/src/egse/procman/__init__.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/src/egse/procman/procman.yaml +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/src/egse/procman/procman_cs.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/src/egse/storage/__init__.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/src/egse/storage/__main__.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/src/egse/storage/persistence.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/src/egse/storage/storage.yaml +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/src/egse/storage/storage_cs.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/src/scripts/cgse.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/tests/conftest.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/tests/test_confman_setups.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-core/tests/test_logger.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/README.md +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/__init__.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/buttons.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-start.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-stop.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/aeu-cs.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-started.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-stopped.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/aeu_cs.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/alert.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/arrow-double-left.png +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/arrow-double-right.png +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/arrow-up.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/backward.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/busy.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/cleaning.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/color-scheme.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/cs-connected-alert.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/cs-connected-disabled.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/cs-connected.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/cs-not-connected.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/double-left-arrow.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/double-right-arrow.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/erase-disabled.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/erase.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/fitsgen-start.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/fitsgen-stop.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/fitsgen.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/forward.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/fov-hk-start.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/fov-hk-stop.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/fov-hk.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/front-desk.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/home-actioned.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/home-disabled.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/home.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/info.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/invalid.png +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/led-green.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/led-grey.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/led-orange.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/led-red.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/led-square-green.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/led-square-grey.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/led-square-orange.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/led-square-red.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-green.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-red.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el+.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el-.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/location-marker.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/logo-dpu.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/logo-gimbal.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/logo-huber.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/logo-ogse.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/logo-puna.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/logo-tcs.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/logo-zonda.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/maximize.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/meter.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/more.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-start.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-stop.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/observing-off.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/observing-on.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.png +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/ops-mode.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/play-green.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/plugged-disabled.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/plugged.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/pm_ui.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/power-button-green.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/power-button-red.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/power-button.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/radar.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/radioactive.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/reload.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/remote-control-off.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/remote-control-on.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/repeat-blue.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/repeat.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/settings.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/shrink.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/shutter.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/sign-off.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/sign-on.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/sim-mode.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/small-buttons-go.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/small-buttons-minus.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/small-buttons-plus.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/sponge.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/start-button-disabled.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/start-button.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/stop-button-disabled.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/stop-button.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/stop-red.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/stop.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/switch-disabled-square.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/switch-disabled.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/switch-off-square.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/switch-off.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/switch-on-square.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/switch-on.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/temperature-control.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/th_ui_logo.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/unplugged.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/unvalid.png +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/user-interface.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/vacuum.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/valid.png +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-dark.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-white.svg +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/led.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/limitswitch.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/states.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/styles/dark.qss +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/styles/default.qss +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/styles.qss +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/libs/cgse-gui/src/egse/gui/switch.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/cgse-tools/README.md +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/cgse-tools/src/egse/tools/status.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/cgse-tools/src/scripts/cgse_plugins.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/cgse-tools/src/scripts/cgse_service_plugins.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/README.md +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/__init__.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/__init__.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/alpha.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/dynalpha.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod_ui.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.yaml +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_cs.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_protocol.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_ui.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac_regex.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.yaml +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_cs.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_protocol.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_ui.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/punaplus.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.yaml +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_cs.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_devif.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_protocol.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_ui.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/generic/symetrie-hexapod/src/scripts/cgse_service_plugins.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/plato/plato-fits/README.md +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/plato/plato-fits/src/egse/plugins/storage/fits.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/plato/plato-hdf5/README.md +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/plato/plato-hdf5/src/egse/plugins/storage/hdf5.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/plato/plato-spw/README.md +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/projects/plato/plato-spw/src/egse/spw.py +0 -0
- {cgse-2025.0.3 → cgse-2025.0.4}/ruff.toml +0 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{% extends "base.html" %}
|
|
2
|
+
|
|
3
|
+
{% block extrahead %}
|
|
4
|
+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/fira_code.min.css" integrity="sha512-MbysAYimH1hH2xYzkkMHB6MqxBqfP0megxsCLknbYqHVwXTCg9IqHbk+ZP/vnhO8UEW6PaXAkKe2vQ+SWACxxA==" crossorigin="anonymous" referrerpolicy="no-referrer" />
|
|
5
|
+
<!-- Fathom - beautiful, simple website analytics -->
|
|
6
|
+
<script src="https://cdn.usefathom.com/script.js" data-site="TAUKXRLQ" defer></script>
|
|
7
|
+
<!-- / Fathom -->
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
<meta property="og:title" content="CGSE - {{ page.title }}">
|
|
11
|
+
<meta property="og:type" content="article">
|
|
12
|
+
<meta property="og:url" content="{{ page.canonical_url | url }}">
|
|
13
|
+
<meta property="og:site_name" content="CGSE Documentation">
|
|
14
|
+
<meta property="og:description" content="CGSE is an instrument test framework for Python.">
|
|
15
|
+
<meta property="og:image" content="https://raw.githubusercontent.com/IvS-KULeuven/cgse/refs/heads/main/docs/images/icons/cgse-logo.svg">
|
|
16
|
+
|
|
17
|
+
<style>
|
|
18
|
+
|
|
19
|
+
@font-face {
|
|
20
|
+
font-family: "Virgil";
|
|
21
|
+
src: url("https://unpkg.com/@excalidraw/excalidraw@0.12.0/dist/excalidraw-assets/Virgil.woff2");
|
|
22
|
+
}
|
|
23
|
+
@font-face {
|
|
24
|
+
font-family: "Cascadia";
|
|
25
|
+
src: url("https://unpkg.com/@excalidraw/excalidraw@0.12.0/dist/excalidraw-assets/Cascadia.woff2");
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
</style>
|
|
31
|
+
|
|
32
|
+
{% endblock %}
|
|
@@ -78,44 +78,20 @@ td code {
|
|
|
78
78
|
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
-
.textual-web-demo iframe {
|
|
82
|
-
border: none;
|
|
83
|
-
width: 100%;
|
|
84
|
-
aspect-ratio: 16 / 9;
|
|
85
|
-
padding: 0;
|
|
86
|
-
margin: 0;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
.textual-web-demo {
|
|
91
|
-
display: flex;
|
|
92
|
-
width: 100%;
|
|
93
|
-
aspect-ratio: 16 / 9;
|
|
94
|
-
padding: 0;
|
|
95
|
-
margin: 0;
|
|
96
|
-
opacity: 0;
|
|
97
|
-
transition: 0.3s opacity;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
.textual-web-demo.-loaded {
|
|
101
|
-
opacity: 1.0;
|
|
102
|
-
transition: 0.3s opacity;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
81
|
:root {
|
|
106
|
-
--md-admonition-icon--
|
|
82
|
+
--md-admonition-icon--cgse: url('/images/icons/cgse-logo.svg')
|
|
107
83
|
}
|
|
108
|
-
.md-typeset .admonition.
|
|
109
|
-
.md-typeset details.
|
|
84
|
+
.md-typeset .admonition.cgse,
|
|
85
|
+
.md-typeset details.cgse {
|
|
110
86
|
border-color: rgb(43, 155, 70);
|
|
111
87
|
}
|
|
112
|
-
.md-typeset .
|
|
113
|
-
.md-typeset .
|
|
88
|
+
.md-typeset .cgse > .admonition-title,
|
|
89
|
+
.md-typeset .cgse > summary {
|
|
114
90
|
background-color: rgba(43, 155, 70, 0.1);
|
|
115
91
|
}
|
|
116
|
-
.md-typeset .
|
|
117
|
-
.md-typeset .
|
|
92
|
+
.md-typeset .cgse > .admonition-title::before,
|
|
93
|
+
.md-typeset .cgse > summary::before {
|
|
118
94
|
background-color: rgb(43, 155, 70);
|
|
119
|
-
-webkit-mask-image: var(--md-admonition-icon--
|
|
120
|
-
mask-image: var(--md-admonition-icon--
|
|
95
|
+
-webkit-mask-image: var(--md-admonition-icon--cgse);
|
|
96
|
+
mask-image: var(--md-admonition-icon--cgse);
|
|
121
97
|
}
|
|
@@ -40,6 +40,8 @@ WARNING:
|
|
|
40
40
|
from __future__ import annotations
|
|
41
41
|
|
|
42
42
|
__all__ = [
|
|
43
|
+
"get_project_name",
|
|
44
|
+
"get_site_id",
|
|
43
45
|
"get_data_storage_location",
|
|
44
46
|
"set_data_storage_location",
|
|
45
47
|
"get_data_storage_location_env_name",
|
|
@@ -164,6 +166,14 @@ def _check_no_value(var_name, value):
|
|
|
164
166
|
)
|
|
165
167
|
|
|
166
168
|
|
|
169
|
+
def get_project_name():
|
|
170
|
+
return _env.get("PROJECT") or None
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
def get_site_id():
|
|
174
|
+
return _env.get("SITE_ID") or None
|
|
175
|
+
|
|
176
|
+
|
|
167
177
|
def get_data_storage_location_env_name() -> str:
|
|
168
178
|
"""Returns the name of the environment variable for the project."""
|
|
169
179
|
project = _env.get("PROJECT")
|
|
@@ -16,9 +16,9 @@ import dateutil.parser as date_parser
|
|
|
16
16
|
import numpy as np
|
|
17
17
|
from egse.config import find_files
|
|
18
18
|
from egse.env import get_data_storage_location
|
|
19
|
+
from egse.env import get_site_id
|
|
19
20
|
from egse.obsid import ObservationIdentifier
|
|
20
21
|
from egse.obsid import obsid_from_storage
|
|
21
|
-
from egse.settings import Settings
|
|
22
22
|
from egse.setup import Setup
|
|
23
23
|
from egse.setup import SetupError
|
|
24
24
|
from egse.setup import load_setup
|
|
@@ -30,8 +30,6 @@ from egse.system import time_since_epoch_1958
|
|
|
30
30
|
|
|
31
31
|
_LOGGER = logging.getLogger(__name__)
|
|
32
32
|
|
|
33
|
-
SITE_ID = Settings.load("SITE").ID
|
|
34
|
-
|
|
35
33
|
|
|
36
34
|
class TmDictionaryColumns(str, Enum):
|
|
37
35
|
""" Enumeration of the relevant columns in the TM dictionary spreadsheet.
|
|
@@ -50,7 +48,7 @@ class TmDictionaryColumns(str, Enum):
|
|
|
50
48
|
STORAGE_MNEMONIC = "Storage mnemonic"
|
|
51
49
|
CORRECT_HK_NAMES = "CAM EGSE mnemonic"
|
|
52
50
|
ORIGINAL_EGSE_HK_NAMES = "Original name in EGSE"
|
|
53
|
-
SYNOPTICS_ORIGIN = f"Origin of synoptics at {
|
|
51
|
+
SYNOPTICS_ORIGIN = f"Origin of synoptics at {get_site_id()}"
|
|
54
52
|
TIMESTAMP_NAMES = "Name of corresponding timestamp"
|
|
55
53
|
DESCRIPTION = "Description"
|
|
56
54
|
DASHBOARD = "MON screen"
|
|
@@ -120,7 +118,7 @@ def get_housekeeping(hk_name: str, obsid: Union[ObservationIdentifier, str, int]
|
|
|
120
118
|
try:
|
|
121
119
|
return _get_housekeeping_obsid(hk_name, data_dir, obsid=obsid, time_window=time_window, setup=setup)
|
|
122
120
|
except (ValueError, StopIteration, FileNotFoundError) as exc:
|
|
123
|
-
raise HKError(f"No HK found for {hk_name} for obsid {obsid} at {
|
|
121
|
+
raise HKError(f"No HK found for {hk_name} for obsid {obsid} at {get_site_id()}") from exc
|
|
124
122
|
|
|
125
123
|
# Specified OD
|
|
126
124
|
|
|
@@ -129,14 +127,14 @@ def get_housekeeping(hk_name: str, obsid: Union[ObservationIdentifier, str, int]
|
|
|
129
127
|
try:
|
|
130
128
|
return _get_housekeeping_od(hk_name, data_dir, od=od, time_window=time_window, setup=setup)
|
|
131
129
|
except (ValueError, StopIteration, FileNotFoundError) as exc:
|
|
132
|
-
raise HKError(f"No HK found for {hk_name} for OD {od} at {
|
|
130
|
+
raise HKError(f"No HK found for {hk_name} for OD {od} at {get_site_id()}") from exc
|
|
133
131
|
|
|
134
132
|
# Didn't specify neither the obsid nor the OD
|
|
135
133
|
|
|
136
134
|
try:
|
|
137
135
|
return _get_housekeeping_daily(hk_name, data_dir, time_window=time_window, setup=setup)
|
|
138
136
|
except (ValueError, StopIteration, FileNotFoundError) as exc:
|
|
139
|
-
raise HKError(f"No HK found for {hk_name} for today at {
|
|
137
|
+
raise HKError(f"No HK found for {hk_name} for today at {get_site_id()}") from exc
|
|
140
138
|
|
|
141
139
|
|
|
142
140
|
def _get_housekeeping(hk_name: str, timestamp_name: str, hk_dir: str, files, time_window: int = None):
|
|
@@ -272,7 +270,7 @@ def _get_housekeeping_od(hk_name: str, data_dir, od: str, time_window: int = Non
|
|
|
272
270
|
raise HKError(f"Cannot determine which EGSE component generated HK parameter {hk_name}")
|
|
273
271
|
|
|
274
272
|
hk_dir += f"{od}/"
|
|
275
|
-
hk_files = [f"{od}_{
|
|
273
|
+
hk_files = [f"{od}_{get_site_id()}_{origin}.csv"]
|
|
276
274
|
|
|
277
275
|
return _get_housekeeping(hk_name, timestamp_name, hk_dir, hk_files, time_window=time_window)
|
|
278
276
|
|
|
@@ -326,7 +324,7 @@ def _get_housekeeping_obsid(hk_name: str, data_dir, obsid: Union[ObservationIden
|
|
|
326
324
|
|
|
327
325
|
if len(hk_files) == 0:
|
|
328
326
|
|
|
329
|
-
raise HKError(f"No HK found for the {origin} at {
|
|
327
|
+
raise HKError(f"No HK found for the {origin} at {get_site_id()} for obsid {obsid}")
|
|
330
328
|
|
|
331
329
|
hk_files = [hk_files[-1].name]
|
|
332
330
|
|
|
@@ -387,7 +385,7 @@ def _get_housekeeping_daily(hk_name: str, data_dir, time_window: int = None, set
|
|
|
387
385
|
|
|
388
386
|
timestamp = datetime.datetime.now(tz=datetime.timezone.utc).strftime("%Y%m%d")
|
|
389
387
|
hk_dir += f"{timestamp}/"
|
|
390
|
-
filename = f"{timestamp}_{
|
|
388
|
+
filename = f"{timestamp}_{get_site_id()}_{origin}.csv"
|
|
391
389
|
|
|
392
390
|
timestamp_index, hk_index = get_indices(hk_dir + filename, hk_name, timestamp_name)
|
|
393
391
|
return get_last_non_empty(hk_dir + filename, timestamp_index, hk_index)
|
|
@@ -412,7 +410,7 @@ def _get_housekeeping_daily(hk_name: str, data_dir, time_window: int = None, set
|
|
|
412
410
|
|
|
413
411
|
# Determine which columns will be needed from which file
|
|
414
412
|
|
|
415
|
-
filename = f"{start_od}/{start_od}_{
|
|
413
|
+
filename = f"{start_od}/{start_od}_{get_site_id()}_{origin}.csv"
|
|
416
414
|
|
|
417
415
|
if Path(hk_dir + filename).exists():
|
|
418
416
|
|
|
@@ -456,7 +454,7 @@ def _get_housekeeping_daily(hk_name: str, data_dir, time_window: int = None, set
|
|
|
456
454
|
while day <= last_day:
|
|
457
455
|
|
|
458
456
|
od = f"{day.year}{day.month:02d}{day.day:02d}"
|
|
459
|
-
filename = f"{od}/{od}_{
|
|
457
|
+
filename = f"{od}/{od}_{get_site_id()}_{origin}.csv"
|
|
460
458
|
|
|
461
459
|
if Path(hk_dir + filename).exists():
|
|
462
460
|
|
|
@@ -684,7 +682,7 @@ def read_conversion_dict(storage_mnemonic: str, use_site: bool = False, setup: O
|
|
|
684
682
|
|
|
685
683
|
if use_site:
|
|
686
684
|
|
|
687
|
-
th_prefix = f"G{
|
|
685
|
+
th_prefix = f"G{get_site_id()}_"
|
|
688
686
|
|
|
689
687
|
th_conversion_dict = {}
|
|
690
688
|
|
|
@@ -237,7 +237,7 @@ def _load_pandas(resource_name: str, separator: str):
|
|
|
237
237
|
|
|
238
238
|
parts = resource_name[8:].rsplit("/", 1)
|
|
239
239
|
[in_dir, fn] = parts if len(parts) > 1 else [None, parts[0]]
|
|
240
|
-
conf_location =
|
|
240
|
+
conf_location = get_conf_data_location()
|
|
241
241
|
|
|
242
242
|
try:
|
|
243
243
|
pandas_file_location = Path(conf_location) / in_dir / fn
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
|
|
4
|
+
import pytest
|
|
5
|
+
|
|
6
|
+
import egse.env
|
|
7
|
+
|
|
8
|
+
HERE = Path(__file__).parent
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@pytest.fixture(scope="module")
|
|
12
|
+
def default_env():
|
|
13
|
+
|
|
14
|
+
os.environ['PROJECT'] = "CGSE"
|
|
15
|
+
os.environ["SITE_ID"] = "LAB23"
|
|
16
|
+
|
|
17
|
+
os.environ["CGSE_DATA_STORAGE_LOCATION"] = str(HERE / "data")
|
|
18
|
+
|
|
19
|
+
egse.env.initialize()
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
TM source;Storage mnemonic;CAM EGSE mnemonic;Original name in EGSE;Name of corresponding timestamp;Origin of synoptics at CSL;Origin of synoptics at CSL1;Origin of synoptics at CSL2;Origin of synoptics at SRON;Origin of synoptics at IAS;Origin of synoptics at INTA;Description;MON screen;unit cal1;offset b cal1;slope a cal1;calibration function;MAX nonops;MIN nonops;MAX ops;MIN ops;Comment
|
|
2
|
+
|
|
3
|
+
Unit Test Manager;DAQ-TM;TEMP_ABC_001;ABC_001;timestamp;;;;;;;Temperature of ABC;;;;;;;;;;
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import pytest
|
|
2
2
|
|
|
3
|
+
import egse.env
|
|
3
4
|
from egse.env import get_conf_repo_location
|
|
5
|
+
from egse.env import get_project_name
|
|
6
|
+
from egse.env import get_site_id
|
|
4
7
|
from egse.env import initialize as env_initialize
|
|
5
8
|
from egse.env import get_conf_data_location
|
|
6
9
|
from egse.env import get_data_storage_location
|
|
@@ -15,6 +18,20 @@ from egse.env import set_log_file_location
|
|
|
15
18
|
from egse.system import env_var
|
|
16
19
|
|
|
17
20
|
|
|
21
|
+
def test_get_project_name():
|
|
22
|
+
|
|
23
|
+
with env_var(PROJECT="CGSE"):
|
|
24
|
+
egse.env.initialize()
|
|
25
|
+
assert get_project_name() == "CGSE"
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def test_get_site_id():
|
|
29
|
+
|
|
30
|
+
with env_var(SITE_ID="HOME"):
|
|
31
|
+
egse.env.initialize()
|
|
32
|
+
assert get_site_id() == "HOME"
|
|
33
|
+
|
|
34
|
+
|
|
18
35
|
def test_get_data_storage_location():
|
|
19
36
|
|
|
20
37
|
print()
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import datetime
|
|
2
|
+
import textwrap
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
|
|
5
|
+
import rich
|
|
6
|
+
|
|
7
|
+
from egse.env import get_site_id
|
|
8
|
+
from egse.setup import Setup
|
|
9
|
+
from egse.system import EPOCH_1958_1970
|
|
10
|
+
from egse.system import format_datetime
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
HERE = Path(__file__).parent
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def test_get_housekeeping(default_env):
|
|
17
|
+
from egse.hk import get_housekeeping
|
|
18
|
+
|
|
19
|
+
# The get_housekeeping() function will by default search for HK telemetry in the daily CSV file that contains the
|
|
20
|
+
# HK parameter that is passed into the function. Since we have no operational system running during the tess,
|
|
21
|
+
# we will need to create sample data for that parameter in the correct file. The file will be located in the
|
|
22
|
+
# data storage location folder (defined by the default_env fixture) at
|
|
23
|
+
# `HERE/data/LAB23/daily/YYYYMMDD/YYYYMMDD_LAB23_DAQ-TM.csv`, where 'LAB23' is the SITE_ID and 'DAQ-TM' is the
|
|
24
|
+
# storage mnemonic of the device (this is read from the TM dictionary file).
|
|
25
|
+
|
|
26
|
+
today = format_datetime("today")
|
|
27
|
+
today_with_dash = format_datetime("today", fmt="%Y-%m-%d")
|
|
28
|
+
|
|
29
|
+
hk_path = HERE / f"data/{get_site_id()}/daily/{today}/"
|
|
30
|
+
hk_filename = f"{today}_{get_site_id()}_DAQ-TM.csv"
|
|
31
|
+
|
|
32
|
+
hk_path.mkdir(mode=0o777, parents=True, exist_ok=True)
|
|
33
|
+
|
|
34
|
+
with (hk_path / hk_filename).open(mode='w') as fd:
|
|
35
|
+
fd.writelines(textwrap.dedent(
|
|
36
|
+
f"""\
|
|
37
|
+
timestamp,TEMPT_ABC_000,TEMP_ABC_001,TEMP_ABC_002
|
|
38
|
+
{today_with_dash}T00:00:23.324+0000,21.333,23.3421,26.234
|
|
39
|
+
{today_with_dash}T00:00:42.123+0000,22.145,23.4567,27.333
|
|
40
|
+
"""
|
|
41
|
+
))
|
|
42
|
+
|
|
43
|
+
setup = Setup.from_yaml_string(
|
|
44
|
+
textwrap.dedent(
|
|
45
|
+
"""
|
|
46
|
+
telemetry:
|
|
47
|
+
dictionary: pandas//../../common/telemetry/tm-dictionary-default.csv
|
|
48
|
+
separator: ;
|
|
49
|
+
"""
|
|
50
|
+
)
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
rich.print("telemetry", setup.telemetry.dictionary)
|
|
54
|
+
|
|
55
|
+
try:
|
|
56
|
+
timestamp, data = get_housekeeping("TEMP_ABC_001", setup=setup)
|
|
57
|
+
timestamp -= EPOCH_1958_1970
|
|
58
|
+
dt = datetime.datetime.utcfromtimestamp(timestamp)
|
|
59
|
+
|
|
60
|
+
rich.print(f"{timestamp}, {dt}, {data}")
|
|
61
|
+
|
|
62
|
+
assert data.strip() == '23.4567'
|
|
63
|
+
assert format_datetime(dt, fmt="%Y-%m-%d").startswith(today_with_dash)
|
|
64
|
+
|
|
65
|
+
finally:
|
|
66
|
+
# Get rid of the CSV file
|
|
67
|
+
(hk_path / hk_filename).unlink()
|
|
68
|
+
|
|
69
|
+
# Get rid of today's folder
|
|
70
|
+
hk_path.rmdir()
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def test_convert_hk_names():
|
|
74
|
+
|
|
75
|
+
a = {
|
|
76
|
+
'aaa': 1,
|
|
77
|
+
'bbb': 2,
|
|
78
|
+
'ccc': 3,
|
|
79
|
+
'eee': 4,
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
c = {
|
|
83
|
+
'aaa': 'AAA',
|
|
84
|
+
'bbb': 'BBB',
|
|
85
|
+
'ccc': 'CCC',
|
|
86
|
+
'ddd': 'DDD',
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
from egse.hk import convert_hk_names
|
|
90
|
+
|
|
91
|
+
b = convert_hk_names(a, c)
|
|
92
|
+
|
|
93
|
+
# Result:
|
|
94
|
+
# * all keys in 'a' that have a conversion in 'c' shall be in 'b' with the converted key
|
|
95
|
+
# * all keys in 'a' that do not have a conversion in 'c', shall be in 'b' with their original key
|
|
96
|
+
# * all conversion keys that are in 'c' but not in 'a' shall just be ignored
|
|
97
|
+
|
|
98
|
+
assert 'AAA' in b
|
|
99
|
+
assert 'BBB' in b
|
|
100
|
+
assert 'CCC' in b
|
|
101
|
+
assert 'eee' in b
|
|
102
|
+
|
|
103
|
+
assert 'aaa' not in b
|
|
104
|
+
assert 'bbb' not in b
|
|
105
|
+
assert 'ccc' not in b
|
|
106
|
+
assert 'ddd' not in b
|
|
107
|
+
assert 'DDD' not in b
|
|
108
|
+
|
|
109
|
+
for k, v in a.items():
|
|
110
|
+
if k == 'eee':
|
|
111
|
+
assert b[k] == v
|
|
112
|
+
else:
|
|
113
|
+
assert b[k.upper()] == v
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
{% extends "base.html" %}
|
|
2
|
-
|
|
3
|
-
{% block extrahead %}
|
|
4
|
-
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/fira_code.min.css" integrity="sha512-MbysAYimH1hH2xYzkkMHB6MqxBqfP0megxsCLknbYqHVwXTCg9IqHbk+ZP/vnhO8UEW6PaXAkKe2vQ+SWACxxA==" crossorigin="anonymous" referrerpolicy="no-referrer" />
|
|
5
|
-
<!-- Fathom - beautiful, simple website analytics -->
|
|
6
|
-
<script src="https://cdn.usefathom.com/script.js" data-site="TAUKXRLQ" defer></script>
|
|
7
|
-
<!-- / Fathom -->
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
<meta name="twitter:card" content="summary">
|
|
11
|
-
<meta name="twitter:site" content="@textualizeio">
|
|
12
|
-
<meta name="twitter:creator" content="@willmcgugan">
|
|
13
|
-
<meta property="og:title" content="Textual - {{ page.title }}">
|
|
14
|
-
<meta property="og:type" content="article">
|
|
15
|
-
<meta property="og:url" content="{{ page.canonical_url | url }}">
|
|
16
|
-
<meta property="og:site_name" content="Textual Documentation">
|
|
17
|
-
<meta property="og:description" content="Textual is a TUI framework for Python, inspired by modern web development.">
|
|
18
|
-
<meta property="og:image" content="https://raw.githubusercontent.com/Textualize/textual/main/imgs/textual.png">
|
|
19
|
-
|
|
20
|
-
<style>
|
|
21
|
-
|
|
22
|
-
@font-face {
|
|
23
|
-
font-family: "Virgil";
|
|
24
|
-
src: url("https://unpkg.com/@excalidraw/excalidraw@0.12.0/dist/excalidraw-assets/Virgil.woff2");
|
|
25
|
-
}
|
|
26
|
-
@font-face {
|
|
27
|
-
font-family: "Cascadia";
|
|
28
|
-
src: url("https://unpkg.com/@excalidraw/excalidraw@0.12.0/dist/excalidraw-assets/Cascadia.woff2");
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
</style>
|
|
34
|
-
|
|
35
|
-
<script lang="js">
|
|
36
|
-
window.onload = async (event) => {
|
|
37
|
-
const demos = document.querySelectorAll(".textual-web-demo");
|
|
38
|
-
|
|
39
|
-
if (demos.length){
|
|
40
|
-
await fetch("https://textual-web-demos.fly.dev/health-check/", {
|
|
41
|
-
method: 'GET',
|
|
42
|
-
mode: 'no-cors'
|
|
43
|
-
});
|
|
44
|
-
demos.forEach((element)=>{
|
|
45
|
-
const app = element.dataset.app;
|
|
46
|
-
const iframe_html = `<div class="textual-web-demo"><iframe width="100%" onload="this.parentElement.classList.add('-loaded');" src="https://textual-web.io/textualize/${app}?delay=y&fontsize=12&ping=https://textual-web-demos.fly.dev/health-check/"></iframe></div>`;
|
|
47
|
-
element.outerHTML = iframe_html;
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
</script>
|
|
53
|
-
|
|
54
|
-
{% endblock %}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import rich
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
def test_get_housekeeping():
|
|
5
|
-
from egse.hk import get_housekeeping
|
|
6
|
-
|
|
7
|
-
data = get_housekeeping("TEMP_ABC_001")
|
|
8
|
-
|
|
9
|
-
rich.print(data)
|
|
10
|
-
|
|
11
|
-
assert data
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
def test_convert_hk_names():
|
|
15
|
-
|
|
16
|
-
a = {
|
|
17
|
-
'aaa': 1,
|
|
18
|
-
'bbb': 2,
|
|
19
|
-
'ccc': 3,
|
|
20
|
-
'eee': 4,
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
c = {
|
|
24
|
-
'aaa': 'AAA',
|
|
25
|
-
'bbb': 'BBB',
|
|
26
|
-
'ccc': 'CCC',
|
|
27
|
-
'ddd': 'DDD',
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
from egse.hk import convert_hk_names
|
|
31
|
-
|
|
32
|
-
b = convert_hk_names(a, c)
|
|
33
|
-
|
|
34
|
-
# Result:
|
|
35
|
-
# * all keys in 'a' that have a conversion in 'c' shall be in 'b' with the converted key
|
|
36
|
-
# * all keys in 'a' that do not have a conversion in 'c', shall be in 'b' with their original key
|
|
37
|
-
# * all conversion keys that are in 'c' but not in 'a' shall just be ignored
|
|
38
|
-
|
|
39
|
-
assert 'AAA' in b
|
|
40
|
-
assert 'BBB' in b
|
|
41
|
-
assert 'CCC' in b
|
|
42
|
-
assert 'eee' in b
|
|
43
|
-
|
|
44
|
-
assert 'aaa' not in b
|
|
45
|
-
assert 'bbb' not in b
|
|
46
|
-
assert 'ccc' not in b
|
|
47
|
-
assert 'ddd' not in b
|
|
48
|
-
assert 'DDD' not in b
|
|
49
|
-
|
|
50
|
-
for k, v in a.items():
|
|
51
|
-
if k == 'eee':
|
|
52
|
-
assert b[k] == v
|
|
53
|
-
else:
|
|
54
|
-
assert b[k.upper()] == v
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|