cgse 0.17.0__tar.gz → 0.17.1__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-0.17.0 → cgse-0.17.1}/CHANGELOG.md +27 -11
- {cgse-0.17.0 → cgse-0.17.1}/PKG-INFO +1 -1
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/pyproject.toml +4 -1
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/egse/config.py +3 -2
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/egse/env.py +2 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/egse/scpi.py +48 -40
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/egse/settings.py +7 -2
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/egse/socketdevice.py +3 -1
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/test_settings.py +10 -4
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/test_setup.py +3 -3
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/test_socketdevice.py +1 -1
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/test_system.py +31 -2
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-coordinates/pyproject.toml +1 -1
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/pyproject.toml +1 -1
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/pyproject.toml +1 -1
- {cgse-0.17.0 → cgse-0.17.1}/make-a-release.md +6 -1
- {cgse-0.17.0 → cgse-0.17.1}/projects/ariel/ariel-tcu/pyproject.toml +1 -1
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/cgse-tools/pyproject.toml +1 -1
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/cgse-tools/src/cgse_tools/cgse_commands.py +1 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/keithley-tempcontrol/pyproject.toml +1 -1
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_cs.py +3 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_dev.py +10 -8
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_sim.py +17 -16
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/lakeshore-tempcontrol/pyproject.toml +1 -1
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/symetrie-hexapod/pyproject.toml +1 -1
- {cgse-0.17.0 → cgse-0.17.1}/projects/plato/plato-fits/pyproject.toml +1 -1
- {cgse-0.17.0 → cgse-0.17.1}/projects/plato/plato-hdf5/pyproject.toml +1 -1
- {cgse-0.17.0 → cgse-0.17.1}/projects/plato/plato-spw/pyproject.toml +1 -1
- {cgse-0.17.0 → cgse-0.17.1}/pyproject.toml +1 -1
- {cgse-0.17.0 → cgse-0.17.1}/service_registry.db +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/service_registry.db-shm +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/service_registry.db-wal +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/.env.example +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/.github/workflows/ruff-format-check.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/.gitignore +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/README.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/bump.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/conftest.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/api/bits.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/api/calibration.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/api/command.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/api/config.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/api/control.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/api/counter.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/api/decorators.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/api/device.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/api/dicts.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/api/dummy.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/api/env.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/api/exceptions.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/api/heartbeat.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/api/hk.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/api/index.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/api/listener.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/api/metrics.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/api/mixin.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/api/monitoring.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/api/observer.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/api/obsid.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/api/persistence.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/api/plugin.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/api/process.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/api/reload.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/api/settings.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/api/setup.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/api/system.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/custom_theme/main.html +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/dev_guide/coding_style.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/dev_guide/docs.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/dev_guide/dotenv.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/dev_guide/index.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/dev_guide/installation.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/dev_guide/monitoring.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/dev_guide/monorepo.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/dev_guide/nox.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/dev_guide/plugins.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/dev_guide/project-configuration.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/dev_guide/unit_testing.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/dev_guide/uv.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/dev_guide/versioning.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/getting_started.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/help.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/images/cli-cgse.png +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/images/github-fork-clone-dark.png +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/images/github-fork-clone.png +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/images/grafana-queries.png +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/images/icons/cgse-logo-blue.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/images/icons/cgse-logo.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/index.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/initialize.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/libs/cgse-common/images/load_methods.png +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/libs/cgse-common/index.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/libs/cgse-common/settings.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/libs/cgse-common/setup.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/libs/cgse-coordinates/index.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/libs/cgse-core/index.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/libs/cgse-core/notifyhub.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/libs/cgse-core/registry.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/libs/cgse-gui/index.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/libs/index.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/package_list.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/projects/cgse-tools.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/projects/index.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/projects/symetrie-hexapod.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/roadmap.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/stylesheets/custom.css +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/stylesheets/extra.css +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/tutorial.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/user_guide/cli.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/user_guide/env.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/docs/user_guide/index.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/duckdb_metrics.db +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/duckdb_metrics.db.wal +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/identifier.sqlite +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/justfile +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/README.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/justfile +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/noxfile.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/service_registry.db +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/cgse_common/__init__.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/cgse_common/cgse.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/cgse_common/settings.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/egse/bits.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/egse/calibration.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/egse/counter.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/egse/decorators.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/egse/device.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/egse/dicts.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/egse/exceptions.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/egse/heartbeat.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/egse/hk.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/egse/log.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/egse/metrics.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/egse/observer.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/egse/obsid.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/egse/persistence.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/egse/plugin.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/egse/plugins/metrics/duckdb.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/egse/plugins/metrics/influxdb.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/egse/plugins/metrics/timescaledb.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/egse/process.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/egse/py.typed +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/egse/randomwalk.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/egse/ratelimit.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/egse/reload.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/egse/resource.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/egse/response.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/egse/settings.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/egse/setup.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/egse/signal.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/egse/state.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/egse/system.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/egse/task.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/egse/version.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/src/egse/zmq_ser.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/conftest.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/data/COPYING +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00028_201028_155259.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00029_201028_155331.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00030_210311_134043.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00080_210917_105245.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00081_210922_142259.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00082_210923_094458.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/data/CSL1/README.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/data/CSL2/README.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/data/IAS/README.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/data/INTA/README.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/data/LAB23/README.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00027_211119_140441.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00028_211119_160406.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00029_211119_172918.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00030_211122_103604.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00031_211123_124900.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/data/common/telemetry/tm-dictionary-default.csv +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/data/conf/SETUP_20250114_1519.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/data/conf/config-file.toml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/data/data/cal_coeff_1234.csv +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/data/data/calibration.csv +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/data/data/calibration.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/data/data/command.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/data/data/corrupt.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/data/data/data-file.txt +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/data/data/empty_data_file.txt +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/data/data/empty_yaml_file.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/data/data/local_settings.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/data/data/new_local_settings.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/data/data/test_setup.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/data/icons/hourglass.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/data/icons/keyboard.png +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/data/icons/soap_sponge.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/data/lib/dev1/shared-lib.so +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/data/lib/dev2/shared-lib.so +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/fixtures/default_env.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/fixtures/helpers.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/scripts/empty_process.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/scripts/handle_sigterm.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/scripts/process_with_children.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/scripts/raise_value_error.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/scripts/void-0.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/scripts/void-1.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/test_bits.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/test_config.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/test_decorators.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/test_device.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/test_env.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/test_fixtures.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/test_hk.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/test_influxdb_plugin.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/test_log.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/test_metrics.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/test_plugin.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/test_process.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/test_ratelimit.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/test_resource.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/test_response.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/test_signal.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/test_state.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/test_task.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-common/tests/test_zmq_ser.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-coordinates/README.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-coordinates/src/cgse_coordinates/__init__.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-coordinates/src/cgse_coordinates/settings.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-coordinates/src/egse/coordinates/__init__.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-coordinates/src/egse/coordinates/avoidance.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-coordinates/src/egse/coordinates/cslmodel.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-coordinates/src/egse/coordinates/laser_tracker_to_dict.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-coordinates/src/egse/coordinates/point.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-coordinates/src/egse/coordinates/pyplot.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-coordinates/src/egse/coordinates/referenceFrame.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-coordinates/src/egse/coordinates/refmodel.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-coordinates/src/egse/coordinates/rotationMatrix.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-coordinates/src/egse/coordinates/transform3d_addon.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-coordinates/tests/test_avoidance.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-coordinates/tests/test_coordinates_plot.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-coordinates/tests/test_coordinates_serialize.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-coordinates/tests/test_point.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-coordinates/tests/test_ref_model.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-coordinates/tests/test_reference_frames.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-coordinates/tests/test_refmodel.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/README.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/service_registry.db +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/cgse_core/__init__.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/cgse_core/_start.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/cgse_core/_status.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/cgse_core/_stop.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/cgse_core/cgse_explore.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/cgse_core/services.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/cgse_core/settings.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/_setup_core.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/async_control.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/async_control_claude.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/command.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/confman/__init__.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/confman/__main__.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/confman/confman.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/confman/confman_acs.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/confman/confman_cs.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/connect.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/control.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/dummy.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/icons/busy.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/icons/operational-mode.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/icons/pm_ui.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/icons/simulator-mode.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/icons/start-process-button.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/icons/stop-process-button.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/icons/user-interface.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/listener.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/logger/__init__.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/logger/__main__.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/logger/log_cs.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/metricshub/__init__.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/metricshub/server.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/mixin.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/monitoring.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/notifyhub/__init__.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/notifyhub/client.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/notifyhub/event.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/notifyhub/server.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/notifyhub/services.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/notifyhub/test.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/procman/__init__.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/procman/procman.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/procman/procman_cs.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/procman/procman_protocol.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/procman/procman_ui.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/protocol.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/proxy.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/registry/__init__.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/registry/backend.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/registry/client.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/registry/server.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/registry/service.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/services.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/services.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/storage/__init__.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/storage/__main__.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/storage/persistence.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/storage/storage.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/src/egse/storage/storage_cs.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/tests/conftest.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/tests/data/local_settings.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/tests/fixtures/default_env.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/tests/fixtures/helpers.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/tests/fixtures/services.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/tests/marimo/intro.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/tests/script_subscribe_to_notifyhub.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/tests/script_test_async_registry_client.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/tests/script_test_registry_client_server.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/tests/script_test_service_registry_server.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/tests/script_test_sync_registry_client.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/tests/services.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/tests/simple_server.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/tests/stress_test_registry_server.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/tests/test_async_control.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/tests/test_client_server_interaction.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/tests/test_cm_cs.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/tests/test_command.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/tests/test_confman_setups.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/tests/test_connect.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/tests/test_control.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/tests/test_dummy.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/tests/test_event_notification.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/tests/test_extensions.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/tests/test_listener.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/tests/test_logger.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/tests/test_mixin.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/tests/test_notify_hub.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/tests/test_protocol.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/tests/test_proxy.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/tests/test_registry_backend.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/tests/test_registry_service.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/tests/test_server_running.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/tests/test_server_running_with_fixture.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/tests/test_settings_core.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-core/tests/test_zmq_microservice.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/README.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/__init__.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/buttons.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-start.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-stop.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/aeu-cs.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-started.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-stopped.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/aeu_cs.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/alert.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/arrow-double-left.png +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/arrow-double-right.png +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/arrow-up.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/backward.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/busy.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/cleaning.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/color-scheme.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/cs-connected-alert.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/cs-connected-disabled.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/cs-connected.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/cs-not-connected.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/double-left-arrow.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/double-right-arrow.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/erase-disabled.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/erase.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/fitsgen-start.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/fitsgen-stop.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/fitsgen.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/forward.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/fov-hk-start.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/fov-hk-stop.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/fov-hk.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/front-desk.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/home-actioned.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/home-disabled.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/home.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/info.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/invalid.png +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/led-green.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/led-grey.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/led-orange.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/led-red.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/led-square-green.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/led-square-grey.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/led-square-orange.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/led-square-red.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-green.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-red.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el+.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el-.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/location-marker.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/logo-dpu.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/logo-gimbal.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/logo-huber.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/logo-ogse.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/logo-puna.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/logo-tcs.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/logo-zonda.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/maximize.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/meter.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/more.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-start.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-stop.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/observing-off.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/observing-on.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.png +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/ops-mode.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/play-green.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/plugged-disabled.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/plugged.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/pm_ui.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/power-button-green.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/power-button-red.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/power-button.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/radar.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/radioactive.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/reload.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/remote-control-off.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/remote-control-on.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/repeat-blue.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/repeat.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/settings.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/shrink.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/shutter.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/sign-off.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/sign-on.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/sim-mode.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/small-buttons-go.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/small-buttons-minus.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/small-buttons-plus.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/sponge.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/start-button-disabled.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/start-button.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/stop-button-disabled.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/stop-button.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/stop-red.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/stop.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/switch-disabled-square.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/switch-disabled.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/switch-off-square.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/switch-off.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/switch-on-square.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/switch-on.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/temperature-control.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/th_ui_logo.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/unplugged.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/unvalid.png +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/user-interface.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/vacuum.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/valid.png +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-dark.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-white.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/led.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/limitswitch.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/states.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/styles/dark.qss +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/styles/default.qss +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/styles.qss +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/libs/cgse-gui/src/egse/gui/switch.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/mkdocs.yml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/noxfile.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/overrides/.icons/custom/dbend-dark.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/overrides/.icons/custom/dbend-light.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/overrides/.icons/custom/gear.svg +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/ariel/ariel-tcu/README.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/ariel/ariel-tcu/src/ariel_tcu/__init__.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/ariel/ariel-tcu/src/ariel_tcu/cgse_explore.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/ariel/ariel-tcu/src/ariel_tcu/cgse_services.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/ariel/ariel-tcu/src/ariel_tcu/settings.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/__init__.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu_cmd_utils.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu_cs.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu_devif.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu_protocol.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/ariel/ariel-tcu/tests/test_tcu.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/ariel/ariel-tcu/tests/test_tcu_cmd_utils.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/cgse-tools/README.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/cgse-tools/src/cgse_tools/__init__.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/cgse-tools/src/cgse_tools/cgse_clock.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/cgse-tools/src/cgse_tools/cgse_services.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/cgse-tools/src/egse/tools/status.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/keithley-tempcontrol/README.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/keithley-tempcontrol/justfile +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/keithley-tempcontrol/noxfile.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/keithley-tempcontrol/service_registry.db +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/__init__.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_acs.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_adev.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_mon.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_protocol.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/__init__.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/cgse_explore.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/cgse_services.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/settings.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/keithley-tempcontrol/tests/script_daq6510_central_heating.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/keithley-tempcontrol/tests/script_daq6510_mon.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/keithley-tempcontrol/tests/script_plot_readings.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/keithley-tempcontrol/tests/test_adev.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/keithley-tempcontrol/tests/test_dev.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/lakeshore-tempcontrol/README.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_cs.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_devif.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_protocol.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/__init__.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/cgse_explore.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/cgse_services.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/settings.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/lakeshore-tempcontrol/tests/test_lakeshore336_simulator.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/symetrie-hexapod/README.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/__init__.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/__init__.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/alpha.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/dynalpha.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod_ui.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_cs.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_protocol.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_ui.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac_regex.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_cs.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_protocol.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_sim.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_ui.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/punaplus.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_cs.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_devif.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_protocol.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_ui.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/__init__.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/cgse_explore.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/cgse_services.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/settings.yaml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/symetrie-hexapod/tests/test_puna.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/symetrie-hexapod/tests/test_puna_cs.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/generic/symetrie-hexapod/tests/test_puna_simulator.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/plato/plato-fits/README.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/plato/plato-fits/src/egse/plugins/storage/fits.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/plato/plato-hdf5/README.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/plato/plato-hdf5/src/egse/plugins/storage/hdf5.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/plato/plato-spw/README.md +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/projects/plato/plato-spw/src/egse/spw.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/ruff.toml +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/scratch/advanced-process-monitoring.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/scratch/live-process-monitoring.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/scratch/match-case.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/scratch/processes.json +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/scratch/simple-process-monitoring.py +0 -0
- {cgse-0.17.0 → cgse-0.17.1}/test_service_registry.db +0 -0
|
@@ -6,25 +6,41 @@ All notable changes to this project will be documented in this file.
|
|
|
6
6
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
## [Unreleased](https://github.com/IvS-KULeuven/cgse/compare/v0.17.
|
|
9
|
+
## [Unreleased](https://github.com/IvS-KULeuven/cgse/compare/v0.17.1...HEAD)
|
|
10
10
|
|
|
11
|
+
### Fixed
|
|
12
|
+
- ...
|
|
11
13
|
### Added
|
|
12
14
|
- ...
|
|
13
15
|
|
|
14
|
-
## [v0.17.
|
|
16
|
+
## [v0.17.1](https://github.com/IvS-KULeuven/cgse/compare/v0.17.0...v0.17.1) – 20/11/2025
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
- Fixed a missing expanduser(). Apparently a `pathresolve()` doesn't handle the '`~`' character.
|
|
20
|
+
- Fixed `env_var()` which is a context manager for temporarily setting an environment variable. It uses `setup_env()`
|
|
21
|
+
to update the environment before and after the `yield`, but `setup_env()` only initializes once.
|
|
22
|
+
- Fixed unit tests for settings, setup, and env.
|
|
23
|
+
|
|
24
|
+
### Changed
|
|
25
|
+
- Some of the debug messages in settings are now filtered behind the VERBOSE_DEBUG flag.
|
|
26
|
+
|
|
27
|
+
## [v0.17.0](https://github.com/IvS-KULeuven/cgse/compare/v0.16.14...v0.17.0) – 20/11/2025
|
|
15
28
|
|
|
16
29
|
### Added
|
|
17
|
-
- Added this CHANGELOG file.
|
|
18
|
-
- Added an initial implementation of the ARIEL Telescope Control Unit (TCU). This is a separate package in this
|
|
19
|
-
|
|
30
|
+
- Added this CHANGELOG file. [#209](https://github.com/IvS-KULeuven/cgse/pull/209)
|
|
31
|
+
- Added an initial implementation of the ARIEL Telescope Control Unit (TCU). This is a separate package in this
|
|
32
|
+
monorepo that is located at `projects/ariel/ariel-tcu`. The package will be added to PyPI as `ariel-tcu`. [#178](https://github.com/IvS-KULeuven/cgse/pull/178)
|
|
33
|
+
- Added a `read_string()` method to the `DeviceTransport` and `AsyncDeviceTransport` classes. [#209](https://github.com/IvS-KULeuven/cgse/pull/209)
|
|
20
34
|
### Fixed
|
|
21
|
-
- Fixed the `sm_cs` for the missing `--full` cli argument.
|
|
22
|
-
- Fixed the configuration of the InfluxDB client. The client can now be fully configured with environment variables
|
|
35
|
+
- Fixed the `sm_cs` for the missing `--full` cli argument. [#204](https://github.com/IvS-KULeuven/cgse/pull/204)
|
|
36
|
+
- Fixed the configuration of the InfluxDB client. The client can now be fully configured with environment variables
|
|
37
|
+
if needed. [#206](https://github.com/IvS-KULeuven/cgse/pull/206)
|
|
23
38
|
### Changed
|
|
24
|
-
- Improved initialization of the process environment with `setup_env()`.
|
|
25
|
-
- The configuration manager now also re-registers the obsid table to the storage.
|
|
26
|
-
- The `cgse` subcommand to start the notification hub is changed from `not` to `nh`. Use `cgse nh [start|stop|status]`.
|
|
27
|
-
- The environment variables that contain a path can start with a tilde '`~`' which will be expanded to the user's
|
|
39
|
+
- Improved initialization of the process environment with `setup_env()`. [#208](https://github.com/IvS-KULeuven/cgse/pull/208)
|
|
40
|
+
- The configuration manager now also re-registers the obsid table to the storage. [#207](https://github.com/IvS-KULeuven/cgse/pull/207)
|
|
41
|
+
- The `cgse` subcommand to start the notification hub is changed from `not` to `nh`. Use `cgse nh [start|stop|status]`. [#209](https://github.com/IvS-KULeuven/cgse/pull/209)
|
|
42
|
+
- The environment variables that contain a path can start with a tilde '`~`' which will be expanded to the user's
|
|
43
|
+
home directory when used. [#204](https://github.com/IvS-KULeuven/cgse/pull/204)
|
|
28
44
|
### Docs
|
|
29
45
|
- Documentation updates for the Python version, the CLI `cgse` subcommands, environment and the introduction of `dotenv`, ...
|
|
30
46
|
- Updated information on the use of `dotenv` in the developer guid.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "cgse-common"
|
|
3
|
-
version = "0.17.
|
|
3
|
+
version = "0.17.1"
|
|
4
4
|
description = "Software framework to support hardware testing"
|
|
5
5
|
authors = [
|
|
6
6
|
{name = "IvS KU Leuven"}
|
|
@@ -64,6 +64,9 @@ log_cli_level = "DEBUG"
|
|
|
64
64
|
filterwarnings = [
|
|
65
65
|
"ignore::DeprecationWarning"
|
|
66
66
|
]
|
|
67
|
+
markers = [
|
|
68
|
+
"slow: marks tests as slow (deselect with '-m \"not slow\"')"
|
|
69
|
+
]
|
|
67
70
|
|
|
68
71
|
[tool.coverage.run]
|
|
69
72
|
omit = [
|
|
@@ -154,13 +154,14 @@ def find_files(pattern: str, root: Path | str, in_dir: str = None) -> Generator[
|
|
|
154
154
|
Returns:
|
|
155
155
|
Paths of files matching pattern, from root.
|
|
156
156
|
"""
|
|
157
|
-
root = Path(root).resolve()
|
|
157
|
+
root = Path(root).expanduser().resolve()
|
|
158
158
|
if not root.is_dir():
|
|
159
159
|
root = root.parent
|
|
160
160
|
if not root.exists():
|
|
161
161
|
raise ValueError(f"The root argument didn't resolve into a valid directory: {root}.")
|
|
162
162
|
|
|
163
|
-
|
|
163
|
+
# FIXME: at some point we might want to make this configurable, through env?
|
|
164
|
+
exclude_dirs = ("venv", "venv38", ".venv", ".nox", ".git", ".idea", ".DS_Store", "__pycache__")
|
|
164
165
|
|
|
165
166
|
for path, folders, files in os.walk(root):
|
|
166
167
|
folders[:] = list(filter(lambda x: x not in exclude_dirs, folders))
|
|
@@ -678,6 +678,7 @@ def env_var(**kwargs: str | int | float | bool | None):
|
|
|
678
678
|
else:
|
|
679
679
|
os.environ[k] = v
|
|
680
680
|
|
|
681
|
+
setup_env.is_initialized = False
|
|
681
682
|
setup_env()
|
|
682
683
|
|
|
683
684
|
yield
|
|
@@ -689,6 +690,7 @@ def env_var(**kwargs: str | int | float | bool | None):
|
|
|
689
690
|
else:
|
|
690
691
|
os.environ[k] = v
|
|
691
692
|
|
|
693
|
+
setup_env.is_initialized = False
|
|
692
694
|
setup_env()
|
|
693
695
|
|
|
694
696
|
|
|
@@ -15,6 +15,9 @@ DEFAULT_READ_TIMEOUT = 1.0 # seconds
|
|
|
15
15
|
DEFAULT_CONNECT_TIMEOUT = 3.0 # seconds
|
|
16
16
|
IDENTIFICATION_QUERY = "*IDN?"
|
|
17
17
|
|
|
18
|
+
SEPARATOR = b"\n"
|
|
19
|
+
SEPARATOR_STR = SEPARATOR.decode()
|
|
20
|
+
|
|
18
21
|
|
|
19
22
|
class SCPICommand:
|
|
20
23
|
"""Base class for SCPI commands."""
|
|
@@ -57,7 +60,8 @@ class AsyncSCPIInterface(AsyncDeviceInterface, AsyncDeviceTransport):
|
|
|
57
60
|
id_validation: String that should appear in the device's identification response
|
|
58
61
|
"""
|
|
59
62
|
super().__init__()
|
|
60
|
-
|
|
63
|
+
|
|
64
|
+
self._device_name = device_name
|
|
61
65
|
self.hostname = hostname
|
|
62
66
|
self.port = port
|
|
63
67
|
self.settings = settings or {}
|
|
@@ -77,6 +81,10 @@ class AsyncSCPIInterface(AsyncDeviceInterface, AsyncDeviceTransport):
|
|
|
77
81
|
def is_simulator(self) -> bool:
|
|
78
82
|
return False
|
|
79
83
|
|
|
84
|
+
@property
|
|
85
|
+
def device_name(self) -> str:
|
|
86
|
+
return self._device_name
|
|
87
|
+
|
|
80
88
|
async def initialize(self, commands: list[tuple[str, bool]] = None, reset_device: bool = False) -> list[str | None]:
|
|
81
89
|
"""Initialize the device with optional reset and command sequence.
|
|
82
90
|
|
|
@@ -113,7 +121,7 @@ class AsyncSCPIInterface(AsyncDeviceInterface, AsyncDeviceTransport):
|
|
|
113
121
|
responses = []
|
|
114
122
|
|
|
115
123
|
if reset_device:
|
|
116
|
-
logger.info(f"Resetting the {self.
|
|
124
|
+
logger.info(f"Resetting the {self._device_name}...")
|
|
117
125
|
await self.write("*RST") # this also resets the user-defined buffer
|
|
118
126
|
|
|
119
127
|
for cmd, expects_response in commands:
|
|
@@ -140,47 +148,47 @@ class AsyncSCPIInterface(AsyncDeviceInterface, AsyncDeviceTransport):
|
|
|
140
148
|
async with self._connect_lock:
|
|
141
149
|
# Sanity checks
|
|
142
150
|
if self._is_connection_open:
|
|
143
|
-
logger.warning(f"{self.
|
|
151
|
+
logger.warning(f"{self._device_name}: Trying to connect to an already connected device.")
|
|
144
152
|
return
|
|
145
153
|
|
|
146
154
|
if not self.hostname:
|
|
147
|
-
raise ValueError(f"{self.
|
|
155
|
+
raise ValueError(f"{self._device_name}: Hostname is not initialized.")
|
|
148
156
|
|
|
149
157
|
if not self.port:
|
|
150
|
-
raise ValueError(f"{self.
|
|
158
|
+
raise ValueError(f"{self._device_name}: Port number is not initialized.")
|
|
151
159
|
|
|
152
160
|
# Attempt to establish a connection
|
|
153
161
|
try:
|
|
154
|
-
logger.debug(f'Connecting to {self.
|
|
162
|
+
logger.debug(f'Connecting to {self._device_name} at "{self.hostname}" using port {self.port}')
|
|
155
163
|
|
|
156
164
|
connect_task = asyncio.open_connection(self.hostname, self.port)
|
|
157
165
|
self._reader, self._writer = await asyncio.wait_for(connect_task, timeout=self.connect_timeout)
|
|
158
166
|
|
|
159
167
|
self._is_connection_open = True
|
|
160
168
|
|
|
161
|
-
logger.debug(f"Successfully connected to {self.
|
|
169
|
+
logger.debug(f"Successfully connected to {self._device_name}.")
|
|
162
170
|
|
|
163
171
|
except asyncio.TimeoutError as exc:
|
|
164
172
|
raise DeviceTimeoutError(
|
|
165
|
-
self.
|
|
173
|
+
self._device_name, f"Connection to {self.hostname}:{self.port} timed out"
|
|
166
174
|
) from exc
|
|
167
175
|
except ConnectionRefusedError as exc:
|
|
168
176
|
raise DeviceConnectionError(
|
|
169
|
-
self.
|
|
177
|
+
self._device_name, f"Connection refused to {self.hostname}:{self.port}"
|
|
170
178
|
) from exc
|
|
171
179
|
except socket.gaierror as exc:
|
|
172
|
-
raise DeviceConnectionError(self.
|
|
180
|
+
raise DeviceConnectionError(self._device_name, f"Address resolution error for {self.hostname}") from exc
|
|
173
181
|
except socket.herror as exc:
|
|
174
|
-
raise DeviceConnectionError(self.
|
|
182
|
+
raise DeviceConnectionError(self._device_name, f"Host address error for {self.hostname}") from exc
|
|
175
183
|
except OSError as exc:
|
|
176
|
-
raise DeviceConnectionError(self.
|
|
184
|
+
raise DeviceConnectionError(self._device_name, f"OS error: {exc}") from exc
|
|
177
185
|
|
|
178
186
|
# Validate device identity if requested
|
|
179
187
|
if self.id_validation:
|
|
180
188
|
logger.debug("Validating connection..")
|
|
181
189
|
if not await self.is_connected():
|
|
182
190
|
await self.disconnect()
|
|
183
|
-
raise DeviceConnectionError(self.
|
|
191
|
+
raise DeviceConnectionError(self._device_name, "Device connected but failed identity verification")
|
|
184
192
|
|
|
185
193
|
async def disconnect(self) -> None:
|
|
186
194
|
"""Disconnect from the device asynchronously.
|
|
@@ -191,14 +199,14 @@ class AsyncSCPIInterface(AsyncDeviceInterface, AsyncDeviceTransport):
|
|
|
191
199
|
async with self._connect_lock:
|
|
192
200
|
try:
|
|
193
201
|
if self._is_connection_open and self._writer is not None:
|
|
194
|
-
logger.debug(f"Disconnecting from {self.
|
|
202
|
+
logger.debug(f"Disconnecting from {self._device_name} at {self.hostname}")
|
|
195
203
|
self._writer.close()
|
|
196
204
|
await self._writer.wait_closed()
|
|
197
205
|
self._writer = None
|
|
198
206
|
self._reader = None
|
|
199
207
|
self._is_connection_open = False
|
|
200
208
|
except Exception as exc:
|
|
201
|
-
raise DeviceConnectionError(self.
|
|
209
|
+
raise DeviceConnectionError(self._device_name, f"Could not close connection: {exc}") from exc
|
|
202
210
|
|
|
203
211
|
async def reconnect(self) -> None:
|
|
204
212
|
"""Reconnect to the device asynchronously."""
|
|
@@ -222,7 +230,7 @@ class AsyncSCPIInterface(AsyncDeviceInterface, AsyncDeviceTransport):
|
|
|
222
230
|
# Validate the response if validation string is provided
|
|
223
231
|
if self.id_validation and self.id_validation not in id_response:
|
|
224
232
|
logger.error(
|
|
225
|
-
f"{self.
|
|
233
|
+
f"{self._device_name}: Device did not respond correctly to identification query. "
|
|
226
234
|
f'Expected "{self.id_validation}" in response, got: {id_response}'
|
|
227
235
|
)
|
|
228
236
|
await self.disconnect()
|
|
@@ -231,7 +239,7 @@ class AsyncSCPIInterface(AsyncDeviceInterface, AsyncDeviceTransport):
|
|
|
231
239
|
return True
|
|
232
240
|
|
|
233
241
|
except DeviceError as exc:
|
|
234
|
-
logger.error(f"{self.
|
|
242
|
+
logger.error(f"{self._device_name}: Connection test failed: {exc}", exc_info=True)
|
|
235
243
|
await self.disconnect()
|
|
236
244
|
return False
|
|
237
245
|
|
|
@@ -248,20 +256,20 @@ class AsyncSCPIInterface(AsyncDeviceInterface, AsyncDeviceTransport):
|
|
|
248
256
|
async with self._io_lock:
|
|
249
257
|
try:
|
|
250
258
|
if not self._is_connection_open or self._writer is None:
|
|
251
|
-
raise DeviceConnectionError(self.
|
|
259
|
+
raise DeviceConnectionError(self._device_name, "Device not connected, use connect() first")
|
|
252
260
|
|
|
253
|
-
# Ensure command ends with
|
|
254
|
-
if not command.endswith(
|
|
255
|
-
command +=
|
|
261
|
+
# Ensure command ends with the proper separator or terminator
|
|
262
|
+
if not command.endswith(SEPARATOR_STR):
|
|
263
|
+
command += SEPARATOR_STR
|
|
256
264
|
|
|
257
265
|
logger.info(f"-----> {command}")
|
|
258
266
|
self._writer.write(command.encode())
|
|
259
267
|
await self._writer.drain()
|
|
260
268
|
|
|
261
269
|
except asyncio.TimeoutError as exc:
|
|
262
|
-
raise DeviceTimeoutError(self.
|
|
270
|
+
raise DeviceTimeoutError(self._device_name, "Write operation timed out") from exc
|
|
263
271
|
except (ConnectionError, OSError) as exc:
|
|
264
|
-
raise DeviceConnectionError(self.
|
|
272
|
+
raise DeviceConnectionError(self._device_name, f"Communication error: {exc}") from exc
|
|
265
273
|
|
|
266
274
|
async def read(self) -> bytes:
|
|
267
275
|
"""
|
|
@@ -276,7 +284,7 @@ class AsyncSCPIInterface(AsyncDeviceInterface, AsyncDeviceTransport):
|
|
|
276
284
|
"""
|
|
277
285
|
async with self._io_lock:
|
|
278
286
|
if not self._is_connection_open or self._reader is None:
|
|
279
|
-
raise DeviceConnectionError(self.
|
|
287
|
+
raise DeviceConnectionError(self._device_name, "Device not connected, use connect() first")
|
|
280
288
|
|
|
281
289
|
try:
|
|
282
290
|
# First, small delay to allow device to prepare response
|
|
@@ -285,19 +293,19 @@ class AsyncSCPIInterface(AsyncDeviceInterface, AsyncDeviceTransport):
|
|
|
285
293
|
# Try to read until newline (common SCPI terminator)
|
|
286
294
|
try:
|
|
287
295
|
response = await asyncio.wait_for(
|
|
288
|
-
self._reader.readuntil(separator=
|
|
296
|
+
self._reader.readuntil(separator=SEPARATOR), timeout=self.read_timeout
|
|
289
297
|
)
|
|
290
298
|
logger.info(f"<----- {response}")
|
|
291
299
|
return response
|
|
292
300
|
|
|
293
301
|
except asyncio.IncompleteReadError as exc:
|
|
294
302
|
# Connection closed before receiving full response
|
|
295
|
-
logger.warning(f"{self.
|
|
296
|
-
return exc.partial if exc.partial else
|
|
303
|
+
logger.warning(f"{self._device_name}: Incomplete read, got {len(exc.partial)} bytes")
|
|
304
|
+
return exc.partial if exc.partial else SEPARATOR
|
|
297
305
|
|
|
298
306
|
except asyncio.LimitOverrunError:
|
|
299
307
|
# Response too large for buffer
|
|
300
|
-
logger.warning(f"{self.
|
|
308
|
+
logger.warning(f"{self._device_name}: Response exceeded buffer limits")
|
|
301
309
|
# Fall back to reading a large chunk
|
|
302
310
|
return await asyncio.wait_for(
|
|
303
311
|
self._reader.read(8192), # Larger buffer for exceptional cases
|
|
@@ -305,9 +313,9 @@ class AsyncSCPIInterface(AsyncDeviceInterface, AsyncDeviceTransport):
|
|
|
305
313
|
)
|
|
306
314
|
|
|
307
315
|
except asyncio.TimeoutError as exc:
|
|
308
|
-
raise DeviceTimeoutError(self.
|
|
316
|
+
raise DeviceTimeoutError(self._device_name, "Read operation timed out") from exc
|
|
309
317
|
except Exception as exc:
|
|
310
|
-
raise DeviceConnectionError(self.
|
|
318
|
+
raise DeviceConnectionError(self._device_name, f"Read error: {exc}") from exc
|
|
311
319
|
|
|
312
320
|
async def trans(self, command: str) -> bytes:
|
|
313
321
|
"""
|
|
@@ -328,11 +336,11 @@ class AsyncSCPIInterface(AsyncDeviceInterface, AsyncDeviceTransport):
|
|
|
328
336
|
async with self._io_lock:
|
|
329
337
|
try:
|
|
330
338
|
if not self._is_connection_open or self._writer is None:
|
|
331
|
-
raise DeviceConnectionError(self.
|
|
339
|
+
raise DeviceConnectionError(self._device_name, "Device not connected, use connect() first")
|
|
332
340
|
|
|
333
341
|
# Ensure command ends with newline
|
|
334
|
-
if not command.endswith(
|
|
335
|
-
command +=
|
|
342
|
+
if not command.endswith(SEPARATOR_STR):
|
|
343
|
+
command += SEPARATOR_STR
|
|
336
344
|
|
|
337
345
|
logger.info(f"-----> {command}")
|
|
338
346
|
self._writer.write(command.encode())
|
|
@@ -344,19 +352,19 @@ class AsyncSCPIInterface(AsyncDeviceInterface, AsyncDeviceTransport):
|
|
|
344
352
|
# Try to read until newline (common SCPI terminator)
|
|
345
353
|
try:
|
|
346
354
|
response = await asyncio.wait_for(
|
|
347
|
-
self._reader.readuntil(separator=
|
|
355
|
+
self._reader.readuntil(separator=SEPARATOR), timeout=self.read_timeout
|
|
348
356
|
)
|
|
349
357
|
logger.info(f"<----- {response}")
|
|
350
358
|
return response
|
|
351
359
|
|
|
352
360
|
except asyncio.IncompleteReadError as exc:
|
|
353
361
|
# Connection closed before receiving full response
|
|
354
|
-
logger.warning(f"{self.
|
|
355
|
-
return exc.partial if exc.partial else
|
|
362
|
+
logger.warning(f"{self._device_name}: Incomplete read, got {len(exc.partial)} bytes")
|
|
363
|
+
return exc.partial if exc.partial else SEPARATOR
|
|
356
364
|
|
|
357
365
|
except asyncio.LimitOverrunError:
|
|
358
366
|
# Response too large for buffer
|
|
359
|
-
logger.warning(f"{self.
|
|
367
|
+
logger.warning(f"{self._device_name}: Response exceeded buffer limits")
|
|
360
368
|
# Fall back to reading a large chunk
|
|
361
369
|
return await asyncio.wait_for(
|
|
362
370
|
self._reader.read(8192), # Larger buffer for exceptional cases
|
|
@@ -364,11 +372,11 @@ class AsyncSCPIInterface(AsyncDeviceInterface, AsyncDeviceTransport):
|
|
|
364
372
|
)
|
|
365
373
|
|
|
366
374
|
except asyncio.TimeoutError as exc:
|
|
367
|
-
raise DeviceTimeoutError(self.
|
|
375
|
+
raise DeviceTimeoutError(self._device_name, "Communication timed out") from exc
|
|
368
376
|
except (ConnectionError, OSError) as exc:
|
|
369
|
-
raise DeviceConnectionError(self.
|
|
377
|
+
raise DeviceConnectionError(self._device_name, f"Communication error: {exc}") from exc
|
|
370
378
|
except Exception as exc:
|
|
371
|
-
raise DeviceConnectionError(self.
|
|
379
|
+
raise DeviceConnectionError(self._device_name, f"Transaction error: {exc}") from exc
|
|
372
380
|
|
|
373
381
|
async def __aenter__(self):
|
|
374
382
|
"""Async context manager entry."""
|
|
@@ -72,13 +72,14 @@ from typing import Any
|
|
|
72
72
|
|
|
73
73
|
import yaml # This module is provided by the pip package PyYaml - pip install pyyaml
|
|
74
74
|
|
|
75
|
+
from egse.env import bool_env
|
|
75
76
|
from egse.env import get_local_settings_env_name
|
|
76
77
|
from egse.env import get_local_settings_path
|
|
77
78
|
from egse.log import logger
|
|
78
79
|
from egse.system import attrdict
|
|
79
80
|
from egse.system import recursive_dict_update
|
|
80
81
|
|
|
81
|
-
|
|
82
|
+
VERBOSE_DEBUG = bool_env("VERBOSE_DEBUG")
|
|
82
83
|
|
|
83
84
|
|
|
84
85
|
class SettingsError(Exception):
|
|
@@ -192,6 +193,9 @@ def load_local_settings(force: bool = False) -> attrdict:
|
|
|
192
193
|
local_settings = attrdict()
|
|
193
194
|
|
|
194
195
|
local_settings_path = get_local_settings_path()
|
|
196
|
+
if VERBOSE_DEBUG:
|
|
197
|
+
logger.debug(f"{get_local_settings_env_name()=}")
|
|
198
|
+
logger.debug(f"{local_settings_path=}")
|
|
195
199
|
|
|
196
200
|
if local_settings_path:
|
|
197
201
|
path = Path(local_settings_path).expanduser()
|
|
@@ -218,7 +222,8 @@ def read_configuration_file(filename: Path, *, force=False) -> dict:
|
|
|
218
222
|
filename = str(filename)
|
|
219
223
|
|
|
220
224
|
if force or not Settings.is_memoized(filename):
|
|
221
|
-
|
|
225
|
+
if VERBOSE_DEBUG:
|
|
226
|
+
logger.debug(f"Parsing YAML configuration file {filename}.")
|
|
222
227
|
|
|
223
228
|
with open(filename, "r") as stream:
|
|
224
229
|
try:
|
|
@@ -8,6 +8,8 @@ import socket
|
|
|
8
8
|
import time
|
|
9
9
|
from typing import Optional
|
|
10
10
|
|
|
11
|
+
from egse.device import AsyncDeviceInterface
|
|
12
|
+
from egse.device import AsyncDeviceTransport
|
|
11
13
|
from egse.device import DeviceConnectionError
|
|
12
14
|
from egse.device import DeviceConnectionInterface
|
|
13
15
|
from egse.device import DeviceTimeoutError
|
|
@@ -252,7 +254,7 @@ class SocketDevice(DeviceConnectionInterface, DeviceTransport):
|
|
|
252
254
|
raise DeviceConnectionError(self.device_name, "Socket communication error.") from exc
|
|
253
255
|
|
|
254
256
|
|
|
255
|
-
class AsyncSocketDevice(
|
|
257
|
+
class AsyncSocketDevice(AsyncDeviceInterface, AsyncDeviceTransport):
|
|
256
258
|
"""
|
|
257
259
|
Async socket-backed device using asyncio streams.
|
|
258
260
|
|
|
@@ -78,15 +78,17 @@ def test_load_local_settings():
|
|
|
78
78
|
|
|
79
79
|
|
|
80
80
|
def test_load_new_local_settings():
|
|
81
|
-
|
|
81
|
+
print()
|
|
82
|
+
|
|
83
|
+
with env_var(PROJECT="CGSE"), env_var(CGSE_LOCAL_SETTINGS=str(HERE / "data" / "data" / "new_local_settings.yaml")):
|
|
82
84
|
settings = Settings.load(add_local_settings=False)
|
|
83
|
-
rich.print(settings)
|
|
85
|
+
# rich.print(settings)
|
|
84
86
|
|
|
85
87
|
with pytest.raises(AttributeError):
|
|
86
88
|
assert settings.NEW_GROUP["ID"] == "the ID of the new group"
|
|
87
89
|
|
|
88
|
-
settings = Settings.load(add_local_settings=True)
|
|
89
|
-
rich.print(settings)
|
|
90
|
+
settings = Settings.load(add_local_settings=True, force=True)
|
|
91
|
+
# rich.print(settings)
|
|
90
92
|
|
|
91
93
|
# This should have been added, we can add new main groups
|
|
92
94
|
|
|
@@ -136,3 +138,7 @@ def test_profiling(capsys):
|
|
|
136
138
|
assert "PACKAGES" in x
|
|
137
139
|
|
|
138
140
|
Settings.set_profiling(False)
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
if __name__ == "__main__":
|
|
144
|
+
test_load_new_local_settings()
|
|
@@ -18,7 +18,7 @@ from egse.env import get_conf_data_location
|
|
|
18
18
|
from egse.env import get_conf_data_location_env_name
|
|
19
19
|
from egse.env import get_conf_repo_location_env_name
|
|
20
20
|
from egse.env import print_env
|
|
21
|
-
from egse.env import
|
|
21
|
+
from egse.env import setup_env
|
|
22
22
|
from egse.env import set_conf_repo_location
|
|
23
23
|
from egse.setup import Setup
|
|
24
24
|
from egse.setup import get_last_setup_id_file_path
|
|
@@ -578,7 +578,7 @@ def test_lazy_load_value_from_yaml(default_test_setup):
|
|
|
578
578
|
file identifier.
|
|
579
579
|
"""
|
|
580
580
|
|
|
581
|
-
|
|
581
|
+
setup_env()
|
|
582
582
|
print_env()
|
|
583
583
|
|
|
584
584
|
Setup.from_yaml_file.cache_clear() # needed because the same file is used elsewhere
|
|
@@ -591,7 +591,7 @@ def test_lazy_load_value_from_yaml(default_test_setup):
|
|
|
591
591
|
|
|
592
592
|
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
|
|
593
593
|
|
|
594
|
-
new_csv_file_name = Path(get_conf_data_location()) / "data/test_arr.csv"
|
|
594
|
+
new_csv_file_name = Path(get_conf_data_location()).expanduser() / "data/test_arr.csv"
|
|
595
595
|
np.savetxt(new_csv_file_name, arr, delimiter=",", header="Test data used in test_setup.py")
|
|
596
596
|
|
|
597
597
|
# Test the values from the original array
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
# Unit Tests were created by GitHub Copilot and adapted/improved afterward.
|
|
2
2
|
|
|
3
3
|
import asyncio
|
|
4
|
-
import socket
|
|
5
4
|
import socketserver
|
|
6
5
|
import threading
|
|
7
6
|
import time
|
|
@@ -19,6 +18,7 @@ from egse.system import type_name
|
|
|
19
18
|
logger = logging.getLogger("egse.test.socketdevice")
|
|
20
19
|
|
|
21
20
|
SEPARATOR = b"\x03"
|
|
21
|
+
SEPARATOR_STR = SEPARATOR.decode()
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
# Synchronous server used by SocketDevice tests
|
|
@@ -12,6 +12,7 @@ import time
|
|
|
12
12
|
from pathlib import Path
|
|
13
13
|
|
|
14
14
|
import pytest
|
|
15
|
+
import rich
|
|
15
16
|
from pytest import approx
|
|
16
17
|
|
|
17
18
|
from egse.decorators import execution_count
|
|
@@ -47,6 +48,7 @@ from egse.system import is_not_in
|
|
|
47
48
|
from egse.system import ping
|
|
48
49
|
from egse.system import read_last_line
|
|
49
50
|
from egse.system import read_last_lines
|
|
51
|
+
from egse.system import recursive_dict_update
|
|
50
52
|
from egse.system import replace_environment_variable
|
|
51
53
|
from egse.system import save_average_execution_time
|
|
52
54
|
from egse.system import touch
|
|
@@ -906,7 +908,6 @@ def test_touch():
|
|
|
906
908
|
|
|
907
909
|
|
|
908
910
|
def test_is_module():
|
|
909
|
-
import egse
|
|
910
911
|
import egse.version
|
|
911
912
|
from egse.system import get_os_name
|
|
912
913
|
|
|
@@ -921,7 +922,6 @@ def test_is_module():
|
|
|
921
922
|
|
|
922
923
|
|
|
923
924
|
def test_is_namespace():
|
|
924
|
-
import egse
|
|
925
925
|
import egse.version
|
|
926
926
|
from egse.system import get_os_name
|
|
927
927
|
|
|
@@ -1107,3 +1107,32 @@ def test_camel_to_snake():
|
|
|
1107
1107
|
assert camel_to_snake("My123BestProject") == "my123_best_project"
|
|
1108
1108
|
|
|
1109
1109
|
assert camel_to_snake("is_already_snake") == "is_already_snake"
|
|
1110
|
+
|
|
1111
|
+
|
|
1112
|
+
def test_recursive_dict_update():
|
|
1113
|
+
print()
|
|
1114
|
+
|
|
1115
|
+
top = {"GROUP": {"G1": "initial top-level group"}}
|
|
1116
|
+
x = {"NEW_GROUP": {"G2": "additional top-level group"}}
|
|
1117
|
+
|
|
1118
|
+
recursive_dict_update(top, x)
|
|
1119
|
+
|
|
1120
|
+
assert "NEW_GROUP" in top
|
|
1121
|
+
assert "initial" in top["GROUP"]["G1"]
|
|
1122
|
+
assert "additional" in top["NEW_GROUP"]["G2"]
|
|
1123
|
+
|
|
1124
|
+
x = {"NEW_SUBGROUP": "a new subgroup added to NEW_GROUP"}
|
|
1125
|
+
|
|
1126
|
+
recursive_dict_update(top["NEW_GROUP"], x)
|
|
1127
|
+
|
|
1128
|
+
rich.print(top)
|
|
1129
|
+
|
|
1130
|
+
assert "NEW_SUBGROUP" in top["NEW_GROUP"]
|
|
1131
|
+
|
|
1132
|
+
x = {"GROUP": {"G3": "a new group added to top-level GROUP"}}
|
|
1133
|
+
|
|
1134
|
+
recursive_dict_update(top, x)
|
|
1135
|
+
|
|
1136
|
+
rich.print(top)
|
|
1137
|
+
|
|
1138
|
+
assert "G3" in top["GROUP"]
|
|
@@ -3,9 +3,14 @@
|
|
|
3
3
|
|
|
4
4
|
## Making a release
|
|
5
5
|
|
|
6
|
+
- run `uvx ruff format`
|
|
7
|
+
- commit all changes with a proper message
|
|
6
8
|
- add all notable changes to the CHANGELOG file
|
|
9
|
+
- fix the links in the headers if needed
|
|
10
|
+
- add links to the different pull requests
|
|
11
|
+
- commit the CHANGELOG file
|
|
7
12
|
- bump the version number: `uv run bump.py [patch|minor|major]`
|
|
8
|
-
- commit all
|
|
13
|
+
- commit all `pyproject.toml` files after the version bump
|
|
9
14
|
- push the changes to the dedicated branch (I use PyCharm for this)
|
|
10
15
|
- remove the old distributions: `rm -r dist`
|
|
11
16
|
- build the packages: `uv build --all-packages`
|
|
@@ -217,6 +217,7 @@ def show_setup(
|
|
|
217
217
|
list_all: Annotated[bool, typer.Option(help="Print a list of all available setups")] = False,
|
|
218
218
|
setup_id: Annotated[int, typer.Option(help="Show the setup with this id")] = -1,
|
|
219
219
|
):
|
|
220
|
+
"""Show the Setup that was selected from the options."""
|
|
220
221
|
if use_cm:
|
|
221
222
|
try:
|
|
222
223
|
from egse.confman import ConfigurationManagerProxy
|