cgse 0.16.13__tar.gz → 0.16.14__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.16.13 → cgse-0.16.14}/PKG-INFO +1 -1
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/pyproject.toml +1 -1
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-coordinates/pyproject.toml +1 -1
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/pyproject.toml +1 -1
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/mixin.py +89 -42
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/tests/test_mixin.py +18 -13
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/pyproject.toml +1 -1
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/cgse-tools/pyproject.toml +1 -1
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/pyproject.toml +1 -1
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/lakeshore-tempcontrol/pyproject.toml +1 -1
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/symetrie-hexapod/pyproject.toml +1 -1
- {cgse-0.16.13 → cgse-0.16.14}/projects/plato/plato-fits/pyproject.toml +1 -1
- {cgse-0.16.13 → cgse-0.16.14}/projects/plato/plato-hdf5/pyproject.toml +1 -1
- {cgse-0.16.13 → cgse-0.16.14}/projects/plato/plato-spw/pyproject.toml +1 -1
- {cgse-0.16.13 → cgse-0.16.14}/pyproject.toml +1 -1
- {cgse-0.16.13 → cgse-0.16.14}/service_registry.db +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/service_registry.db-shm +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/service_registry.db-wal +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/.github/workflows/ruff-format-check.yaml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/.gitignore +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/README.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/buffer_vat.log +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/buffer_vat.png +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/bump.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/conftest.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/api/bits.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/api/calibration.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/api/command.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/api/config.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/api/control.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/api/counter.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/api/decorators.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/api/device.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/api/dicts.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/api/dummy.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/api/env.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/api/exceptions.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/api/heartbeat.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/api/hk.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/api/index.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/api/listener.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/api/metrics.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/api/mixin.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/api/monitoring.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/api/observer.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/api/obsid.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/api/persistence.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/api/plugin.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/api/process.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/api/reload.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/api/settings.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/api/setup.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/api/system.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/custom_theme/main.html +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/dev_guide/coding_style.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/dev_guide/docs.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/dev_guide/index.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/dev_guide/installation.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/dev_guide/monitoring.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/dev_guide/monorepo.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/dev_guide/nox.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/dev_guide/plugins.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/dev_guide/project-configuration.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/dev_guide/unit_testing.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/dev_guide/uv.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/dev_guide/versioning.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/getting_started.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/help.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/images/cli-cgse.png +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/images/github-fork-clone-dark.png +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/images/github-fork-clone.png +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/images/grafana-queries.png +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/images/icons/cgse-logo-blue.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/images/icons/cgse-logo.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/index.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/initialize.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/libs/cgse-common/images/load_methods.png +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/libs/cgse-common/index.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/libs/cgse-common/settings.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/libs/cgse-common/setup.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/libs/cgse-coordinates/index.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/libs/cgse-core/index.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/libs/cgse-core/notifyhub.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/libs/cgse-core/registry.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/libs/cgse-gui/index.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/libs/index.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/package_list.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/projects/cgse-tools.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/projects/index.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/projects/symetrie-hexapod.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/roadmap.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/stylesheets/custom.css +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/stylesheets/extra.css +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/tutorial.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/user_guide/cli.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/docs/user_guide/index.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/duckdb_metrics.db +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/duckdb_metrics.db.wal +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/identifier.sqlite +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/justfile +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/README.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/justfile +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/noxfile.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/service_registry.db +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/cgse_common/__init__.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/cgse_common/cgse.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/cgse_common/settings.yaml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/egse/bits.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/egse/calibration.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/egse/config.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/egse/counter.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/egse/decorators.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/egse/device.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/egse/dicts.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/egse/env.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/egse/exceptions.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/egse/heartbeat.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/egse/hk.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/egse/log.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/egse/metrics.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/egse/observer.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/egse/obsid.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/egse/persistence.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/egse/plugin.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/egse/plugins/metrics/duckdb.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/egse/plugins/metrics/influxdb.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/egse/plugins/metrics/timescaledb.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/egse/process.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/egse/py.typed +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/egse/randomwalk.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/egse/ratelimit.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/egse/reload.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/egse/resource.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/egse/response.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/egse/scpi.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/egse/settings.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/egse/settings.yaml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/egse/setup.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/egse/signal.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/egse/socketdevice.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/egse/state.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/egse/system.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/egse/task.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/egse/version.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/src/egse/zmq_ser.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/conftest.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/data/COPYING +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00028_201028_155259.yaml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00029_201028_155331.yaml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00030_210311_134043.yaml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00080_210917_105245.yaml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00081_210922_142259.yaml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00082_210923_094458.yaml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/data/CSL1/README.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/data/CSL2/README.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/data/IAS/README.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/data/INTA/README.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/data/LAB23/README.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00027_211119_140441.yaml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00028_211119_160406.yaml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00029_211119_172918.yaml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00030_211122_103604.yaml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00031_211123_124900.yaml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/data/common/telemetry/tm-dictionary-default.csv +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/data/conf/SETUP_20250114_1519.yaml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/data/conf/config-file.toml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/data/data/cal_coeff_1234.csv +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/data/data/calibration.csv +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/data/data/calibration.yaml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/data/data/command.yaml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/data/data/corrupt.yaml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/data/data/data-file.txt +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/data/data/empty_data_file.txt +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/data/data/empty_yaml_file.yaml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/data/data/local_settings.yaml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/data/data/new_local_settings.yaml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/data/data/test_setup.yaml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/data/icons/hourglass.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/data/icons/keyboard.png +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/data/icons/soap_sponge.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/data/lib/dev1/shared-lib.so +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/data/lib/dev2/shared-lib.so +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/fixtures/default_env.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/fixtures/helpers.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/scripts/empty_process.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/scripts/handle_sigterm.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/scripts/process_with_children.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/scripts/raise_value_error.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/scripts/void-0.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/scripts/void-1.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/test_bits.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/test_config.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/test_decorators.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/test_device.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/test_env.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/test_fixtures.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/test_hk.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/test_influxdb_plugin.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/test_log.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/test_metrics.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/test_plugin.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/test_process.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/test_ratelimit.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/test_resource.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/test_response.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/test_settings.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/test_setup.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/test_signal.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/test_state.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/test_system.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/test_task.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-common/tests/test_zmq_ser.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-coordinates/README.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-coordinates/src/cgse_coordinates/__init__.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-coordinates/src/cgse_coordinates/settings.yaml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-coordinates/src/egse/coordinates/__init__.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-coordinates/src/egse/coordinates/avoidance.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-coordinates/src/egse/coordinates/cslmodel.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-coordinates/src/egse/coordinates/laser_tracker_to_dict.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-coordinates/src/egse/coordinates/point.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-coordinates/src/egse/coordinates/pyplot.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-coordinates/src/egse/coordinates/referenceFrame.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-coordinates/src/egse/coordinates/refmodel.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-coordinates/src/egse/coordinates/rotationMatrix.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-coordinates/src/egse/coordinates/transform3d_addon.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-coordinates/tests/test_avoidance.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-coordinates/tests/test_coordinates_plot.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-coordinates/tests/test_coordinates_serialize.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-coordinates/tests/test_point.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-coordinates/tests/test_ref_model.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-coordinates/tests/test_reference_frames.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-coordinates/tests/test_refmodel.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/.envrc.disabled +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/README.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/service_registry.db +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/cgse_core/__init__.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/cgse_core/_start.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/cgse_core/_status.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/cgse_core/_stop.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/cgse_core/cgse_explore.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/cgse_core/services.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/cgse_core/settings.yaml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/_setup_core.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/async_control.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/async_control_claude.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/command.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/confman/__init__.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/confman/__main__.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/confman/confman.yaml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/confman/confman_acs.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/confman/confman_cs.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/connect-todo.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/connect.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/control.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/dummy.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/icons/busy.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/icons/operational-mode.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/icons/pm_ui.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/icons/simulator-mode.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/icons/start-process-button.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/icons/stop-process-button.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/icons/user-interface.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/listener.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/logger/__init__.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/logger/__main__.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/logger/log_cs.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/metricshub/__init__.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/metricshub/server.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/monitoring.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/notifyhub/__init__.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/notifyhub/client.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/notifyhub/event.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/notifyhub/server.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/notifyhub/services.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/notifyhub/test.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/procman/__init__.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/procman/procman.yaml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/procman/procman_cs.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/procman/procman_protocol.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/procman/procman_ui.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/protocol.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/proxy.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/registry/__init__.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/registry/backend.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/registry/client.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/registry/server.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/registry/service.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/services.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/services.yaml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/storage/__init__.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/storage/__main__.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/storage/persistence.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/storage/storage.yaml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/src/egse/storage/storage_cs.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/tests/conftest.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/tests/data/local_settings.yaml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/tests/fixtures/default_env.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/tests/fixtures/helpers.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/tests/fixtures/services.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/tests/marimo/intro.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/tests/script_subscribe_to_notifyhub.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/tests/script_test_async_registry_client.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/tests/script_test_registry_client_server.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/tests/script_test_service_registry_server.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/tests/script_test_sync_registry_client.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/tests/services.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/tests/stress_test_registry_server.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/tests/test_async_control.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/tests/test_client_server_interaction.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/tests/test_cm_cs.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/tests/test_command.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/tests/test_confman_setups.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/tests/test_connect.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/tests/test_control.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/tests/test_dummy.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/tests/test_event_notification.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/tests/test_extensions.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/tests/test_listener.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/tests/test_logger.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/tests/test_notify_hub.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/tests/test_protocol.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/tests/test_registry_backend.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/tests/test_registry_service.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/tests/test_server_running.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/tests/test_server_running_with_fixture.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/tests/test_settings_core.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-core/tests/test_zmq_microservice.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/README.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/__init__.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/buttons.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-start.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-stop.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/aeu-cs.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-started.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-stopped.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/aeu_cs.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/alert.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/arrow-double-left.png +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/arrow-double-right.png +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/arrow-up.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/backward.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/busy.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/cleaning.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/color-scheme.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/cs-connected-alert.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/cs-connected-disabled.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/cs-connected.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/cs-not-connected.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/double-left-arrow.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/double-right-arrow.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/erase-disabled.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/erase.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/fitsgen-start.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/fitsgen-stop.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/fitsgen.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/forward.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/fov-hk-start.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/fov-hk-stop.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/fov-hk.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/front-desk.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/home-actioned.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/home-disabled.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/home.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/info.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/invalid.png +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/led-green.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/led-grey.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/led-orange.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/led-red.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/led-square-green.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/led-square-grey.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/led-square-orange.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/led-square-red.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-green.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-red.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el+.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el-.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/location-marker.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/logo-dpu.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/logo-gimbal.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/logo-huber.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/logo-ogse.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/logo-puna.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/logo-tcs.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/logo-zonda.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/maximize.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/meter.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/more.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-start.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-stop.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/observing-off.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/observing-on.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.png +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/ops-mode.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/play-green.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/plugged-disabled.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/plugged.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/pm_ui.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/power-button-green.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/power-button-red.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/power-button.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/radar.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/radioactive.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/reload.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/remote-control-off.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/remote-control-on.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/repeat-blue.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/repeat.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/settings.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/shrink.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/shutter.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/sign-off.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/sign-on.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/sim-mode.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/small-buttons-go.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/small-buttons-minus.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/small-buttons-plus.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/sponge.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/start-button-disabled.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/start-button.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/stop-button-disabled.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/stop-button.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/stop-red.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/stop.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/switch-disabled-square.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/switch-disabled.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/switch-off-square.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/switch-off.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/switch-on-square.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/switch-on.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/temperature-control.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/th_ui_logo.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/unplugged.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/unvalid.png +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/user-interface.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/vacuum.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/valid.png +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-dark.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-white.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/led.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/limitswitch.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/states.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/styles/dark.qss +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/styles/default.qss +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/styles.qss +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/switch.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/mkdocs.yml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/noxfile.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/overrides/.icons/custom/dbend-dark.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/overrides/.icons/custom/dbend-light.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/overrides/.icons/custom/gear.svg +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/cgse-tools/README.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/cgse-tools/src/cgse_tools/__init__.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/cgse-tools/src/cgse_tools/cgse_clock.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/cgse-tools/src/cgse_tools/cgse_commands.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/cgse-tools/src/cgse_tools/cgse_services.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/cgse-tools/src/egse/tools/status.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/README.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/justfile +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/noxfile.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/service_registry.db +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/__init__.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510.yaml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_acs.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_adev.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_cs.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_dev.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_mon.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_protocol.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_sim.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/__init__.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/cgse_explore.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/cgse_services.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/settings.yaml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/temperature_readings.log +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/tests/script_daq6510_central_heating.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/tests/script_daq6510_mon.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/tests/script_plot_readings.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/tests/test_adev.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/tests/test_dev.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/lakeshore-tempcontrol/README.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336.yaml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_cs.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_devif.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_protocol.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/__init__.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/cgse_explore.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/cgse_services.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/settings.yaml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/lakeshore-tempcontrol/tests/test_lakeshore336_simulator.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/symetrie-hexapod/README.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/__init__.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/__init__.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/alpha.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/dynalpha.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod_ui.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.yaml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_cs.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_protocol.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_ui.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac_regex.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.yaml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_cs.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_protocol.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_sim.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_ui.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/punaplus.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.yaml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_cs.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_devif.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_protocol.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_ui.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/__init__.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/cgse_explore.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/cgse_services.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/settings.yaml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/symetrie-hexapod/tests/test_puna.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/symetrie-hexapod/tests/test_puna_cs.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/generic/symetrie-hexapod/tests/test_puna_simulator.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/plato/plato-fits/README.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/plato/plato-fits/src/egse/plugins/storage/fits.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/plato/plato-hdf5/README.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/plato/plato-hdf5/src/egse/plugins/storage/hdf5.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/plato/plato-spw/README.md +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/projects/plato/plato-spw/src/egse/spw.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/ruff.toml +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/scratch/advanced-process-monitoring.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/scratch/live-process-monitoring.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/scratch/match-case.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/scratch/processes.json +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/scratch/simple-process-monitoring.py +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/temperature_readings.log +0 -0
- {cgse-0.16.13 → cgse-0.16.14}/test_service_registry.db +0 -0
|
@@ -121,6 +121,7 @@ def dynamic_command(
|
|
|
121
121
|
*,
|
|
122
122
|
cmd_type: str, # required keyword-only argument
|
|
123
123
|
cmd_string: str = None,
|
|
124
|
+
cmd_string_func: Callable = None,
|
|
124
125
|
process_response: Callable = None,
|
|
125
126
|
process_cmd_string: Callable = None,
|
|
126
127
|
process_kwargs: Callable = None,
|
|
@@ -179,6 +180,7 @@ def dynamic_command(
|
|
|
179
180
|
Args:
|
|
180
181
|
cmd_type (str): one of 'read', 'write', 'query', or 'transaction' [required keyword]
|
|
181
182
|
cmd_string (str): format string for the generation of the instrument command
|
|
183
|
+
cmd_string_func (Callable): DIY function that will create a command string
|
|
182
184
|
process_response (Callable): function to process the response
|
|
183
185
|
process_cmd_string (Callable): function to process the command string after substitution
|
|
184
186
|
process_kwargs (Callable): function to expand the kwargs after substitution
|
|
@@ -192,8 +194,8 @@ def dynamic_command(
|
|
|
192
194
|
if cmd_type not in COMMAND_TYPES:
|
|
193
195
|
raise ValueError(f"Unknown type passed into dynamic command decorator: {type=}")
|
|
194
196
|
|
|
195
|
-
if cmd_type in ("write", "query", "transaction") and cmd_string is None:
|
|
196
|
-
raise ValueError(f"No cmd_string was provided for {cmd_type=}.")
|
|
197
|
+
if cmd_type in ("write", "query", "transaction") and cmd_string is None and cmd_string_func is None:
|
|
198
|
+
raise ValueError(f"No cmd_string nor a cmd_string_func was provided for {cmd_type=}.")
|
|
197
199
|
|
|
198
200
|
def func_wrapper(func: Callable):
|
|
199
201
|
"""Adds the different static attributes."""
|
|
@@ -205,6 +207,9 @@ def dynamic_command(
|
|
|
205
207
|
if cmd_string is not None:
|
|
206
208
|
setattr(func, "__cmd_string", cmd_string)
|
|
207
209
|
|
|
210
|
+
if cmd_string_func is not None:
|
|
211
|
+
setattr(func, "__cmd_string_func", cmd_string_func)
|
|
212
|
+
|
|
208
213
|
if process_response is not None:
|
|
209
214
|
setattr(func, "__process_response", process_response)
|
|
210
215
|
|
|
@@ -250,11 +255,31 @@ class DynamicCommandMixin:
|
|
|
250
255
|
raise AttributeError("Transport was not defined in sub-class of DynamicInterfaceMixin")
|
|
251
256
|
|
|
252
257
|
@staticmethod
|
|
253
|
-
def create_command_string(func: Callable,
|
|
258
|
+
def create_command_string(func: Callable, provider: str | Callable[..., str], *args, **kwargs) -> str:
|
|
254
259
|
"""
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
260
|
+
Create the instrument command string from a template or from a provider callable.
|
|
261
|
+
|
|
262
|
+
The resulting string can be an SCPI command or a specific proprietary command string.
|
|
263
|
+
|
|
264
|
+
The `provider` argument controls how the raw command string is produced:
|
|
265
|
+
|
|
266
|
+
- If `provider` is a **callable**, it is invoked as `provider(*args, **kwargs)` and must
|
|
267
|
+
return the fully formed command string. This allows arbitrary construction logic
|
|
268
|
+
(e.g. conditional pieces, lookups, or complex formatting) outside the template
|
|
269
|
+
mechanics used below.
|
|
270
|
+
|
|
271
|
+
- If `provider` is a **string**, it is treated as a template and variables are
|
|
272
|
+
substituted from the bound arguments of `func`. Two string styles are supported:
|
|
273
|
+
|
|
274
|
+
- Template style using `string.Template` with `$name` placeholders (safe substitution).
|
|
275
|
+
- Format style using `str.format` with `{name}` placeholders, activated when
|
|
276
|
+
the wrapped `func` has the `__use_format` attribute set.
|
|
277
|
+
|
|
278
|
+
The code binds `args` and `kwargs` to `func`'s signature to produce a mapping of
|
|
279
|
+
parameter names to values. For parameters declared as `**kwargs` the mixin will
|
|
280
|
+
expand them with a `__process_kwargs` callable if present on `func`, otherwise
|
|
281
|
+
it uses the default `expand_kwargs`. When template substitution is used, enum
|
|
282
|
+
values are converted to their `.value`.
|
|
258
283
|
|
|
259
284
|
As an example, we have a function with two positional arguments 'a', and 'b' and one keyword
|
|
260
285
|
argument flag:
|
|
@@ -265,49 +290,67 @@ class DynamicCommandMixin:
|
|
|
265
290
|
We have the following template string: `CREATE:FUN:${a} ${b} [${flag}]`.
|
|
266
291
|
|
|
267
292
|
When we call the function as follows: `func("TEMP", 23)`, we would then expect
|
|
268
|
-
the returned string to be "CREATE:FUN:TEMP 23 [True]"
|
|
293
|
+
the returned string to be "CREATE:FUN:TEMP 23 [True]".This function will be called as:
|
|
269
294
|
|
|
270
|
-
DynamicCommandMixin.create_command_string(func,
|
|
295
|
+
DynamicCommandMixin.create_command_string(func, provider, "TEMP", 23)
|
|
296
|
+
|
|
297
|
+
Note:
|
|
298
|
+
The processing attributes `__process_kwargs` and `__use_format` are only used when
|
|
299
|
+
`provider` is a string. The attribute `__process_cmd_string` is used when `provider`
|
|
300
|
+
is a template/format string or when it's a callable. The `__process_cmd_string` is
|
|
301
|
+
the last action taken before the result is returned.
|
|
271
302
|
|
|
272
303
|
Args:
|
|
273
|
-
func (Callable): a function or method that provides the signature
|
|
274
|
-
|
|
304
|
+
func (Callable): a function or method that provides the signature which defines
|
|
305
|
+
the names available for substitution. The function may also carry processing
|
|
306
|
+
attributes (`__use_format`, `__process_kwargs`, `__process_cmd_string`).
|
|
307
|
+
provider (str | Callable): a template/format string or a function that returns a string
|
|
275
308
|
args (tuple): positional arguments that will be used in the command string
|
|
276
309
|
kwargs (dict): keywords arguments that will be used in the command string
|
|
277
|
-
"""
|
|
278
|
-
try:
|
|
279
|
-
process_kwargs = getattr(func, "__process_kwargs")
|
|
280
|
-
except AttributeError:
|
|
281
|
-
process_kwargs = expand_kwargs
|
|
282
310
|
|
|
283
|
-
|
|
311
|
+
Returns:
|
|
312
|
+
the final command string ready to be sent to the transport.
|
|
284
313
|
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
except TypeError as exc:
|
|
289
|
-
raise CommandError(
|
|
290
|
-
f"Arguments {args}, {kwargs} do not match function signature for {func.__name__}{sig}"
|
|
291
|
-
) from exc
|
|
292
|
-
|
|
293
|
-
variables = {}
|
|
294
|
-
for idx, par in enumerate(sig.parameters.values()):
|
|
295
|
-
# if the argument is of signature '**kwargs' then expand the kwargs
|
|
296
|
-
if par.kind == inspect.Parameter.VAR_KEYWORD:
|
|
297
|
-
variables[par.name] = process_kwargs(bound.arguments[par.name])
|
|
298
|
-
continue
|
|
299
|
-
|
|
300
|
-
# otherwise, use the argument value or the default
|
|
301
|
-
try:
|
|
302
|
-
variables[par.name] = bound.arguments[par.name]
|
|
303
|
-
except KeyError:
|
|
304
|
-
variables[par.name] = par.default
|
|
314
|
+
Raises:
|
|
315
|
+
CommandError: if `args`/`kwargs` cannot be bound to `func`'s signature.
|
|
316
|
+
"""
|
|
305
317
|
|
|
306
|
-
if
|
|
307
|
-
cmd_string =
|
|
318
|
+
if callable(provider):
|
|
319
|
+
cmd_string = provider(*args, **kwargs)
|
|
308
320
|
else:
|
|
309
|
-
|
|
310
|
-
|
|
321
|
+
try:
|
|
322
|
+
process_kwargs = getattr(func, "__process_kwargs")
|
|
323
|
+
except AttributeError:
|
|
324
|
+
process_kwargs = expand_kwargs
|
|
325
|
+
|
|
326
|
+
template = string.Template(template_str := provider)
|
|
327
|
+
|
|
328
|
+
sig = inspect.signature(func)
|
|
329
|
+
try:
|
|
330
|
+
bound = sig.bind(*args, **kwargs)
|
|
331
|
+
except TypeError as exc:
|
|
332
|
+
raise CommandError(
|
|
333
|
+
f"Arguments {args}, {kwargs} do not match function signature for {func.__name__}{sig}"
|
|
334
|
+
) from exc
|
|
335
|
+
|
|
336
|
+
variables = {}
|
|
337
|
+
for idx, par in enumerate(sig.parameters.values()):
|
|
338
|
+
# if the argument is of signature '**kwargs' then expand the kwargs
|
|
339
|
+
if par.kind == inspect.Parameter.VAR_KEYWORD:
|
|
340
|
+
variables[par.name] = process_kwargs(bound.arguments[par.name])
|
|
341
|
+
continue
|
|
342
|
+
|
|
343
|
+
# otherwise, use the argument value or the default
|
|
344
|
+
try:
|
|
345
|
+
variables[par.name] = bound.arguments[par.name]
|
|
346
|
+
except KeyError:
|
|
347
|
+
variables[par.name] = par.default
|
|
348
|
+
|
|
349
|
+
if hasattr(func, "__use_format"):
|
|
350
|
+
cmd_string = template_str.format(**variables)
|
|
351
|
+
else:
|
|
352
|
+
variables = {k: v.value if isinstance(v, enum.Enum) else v for k, v in variables.items()}
|
|
353
|
+
cmd_string = template.safe_substitute(variables)
|
|
311
354
|
|
|
312
355
|
try:
|
|
313
356
|
process_cmd_string = getattr(func, "__process_cmd_string")
|
|
@@ -337,10 +380,14 @@ class DynamicCommandMixin:
|
|
|
337
380
|
@functools.wraps(attr)
|
|
338
381
|
def command_wrapper(*args, **kwargs):
|
|
339
382
|
"""Generates command strings and executes the transport functions."""
|
|
340
|
-
|
|
383
|
+
|
|
384
|
+
if hasattr(attr, "__cmd_string"):
|
|
341
385
|
cmd_str = getattr(attr, "__cmd_string")
|
|
342
386
|
cmd_str = self.create_command_string(attr, cmd_str, *args, **kwargs)
|
|
343
|
-
|
|
387
|
+
elif hasattr(attr, "__cmd_string_func"):
|
|
388
|
+
func = getattr(attr, "__cmd_string_func")
|
|
389
|
+
cmd_str = self.create_command_string(attr, func, *args, **kwargs)
|
|
390
|
+
else:
|
|
344
391
|
cmd_str = None
|
|
345
392
|
|
|
346
393
|
response = None
|
|
@@ -205,6 +205,7 @@ def post_command(transport: DeviceTransport = None, response: bytes = None) -> b
|
|
|
205
205
|
LOGGER.info(f"Inside post_command(transport={transport.__class__.__name__}, {response=})")
|
|
206
206
|
return response
|
|
207
207
|
|
|
208
|
+
|
|
208
209
|
def rewrite_kwargs(kwargs: dict) -> str:
|
|
209
210
|
"""Rewrite some of the keyword arguments according to device specs."""
|
|
210
211
|
|
|
@@ -222,6 +223,10 @@ def rewrite_kwargs(kwargs: dict) -> str:
|
|
|
222
223
|
return f"{cmd} {calc_crc(cmd)}"
|
|
223
224
|
|
|
224
225
|
|
|
226
|
+
def create_fancy_cmd_string(a: str, b: int, *, c: float, d: str) -> str:
|
|
227
|
+
return f"FANCY {a}, {d} – {b:04d} {c=:.3f}"
|
|
228
|
+
|
|
229
|
+
|
|
225
230
|
class NewStyleCommandInterface:
|
|
226
231
|
"""Interface definition for new style dynamic commands."""
|
|
227
232
|
|
|
@@ -267,11 +272,7 @@ class NewStyleCommandInterface:
|
|
|
267
272
|
def test_cmd_enum_with_format(self, enumeration: MyEnum):
|
|
268
273
|
"""Returns the command string"""
|
|
269
274
|
|
|
270
|
-
@dynamic_command(
|
|
271
|
-
cmd_type="transaction",
|
|
272
|
-
cmd_string="ARG_EXPANSION::{mode}::{crc:06x}",
|
|
273
|
-
use_format=True
|
|
274
|
-
)
|
|
275
|
+
@dynamic_command(cmd_type="transaction", cmd_string="ARG_EXPANSION::{mode}::{crc:06x}", use_format=True)
|
|
275
276
|
def test_cmd_with_arg_expansion(self, *, mode, crc):
|
|
276
277
|
"""Return the command string, after processing the arguments in the overriding function."""
|
|
277
278
|
|
|
@@ -287,6 +288,11 @@ class NewStyleCommandInterface:
|
|
|
287
288
|
def test_cmd_rewrite_kwargs(self, **kwargs):
|
|
288
289
|
"""Returns the command string with rewritten kwargs."""
|
|
289
290
|
|
|
291
|
+
@dynamic_command(cmd_type="transaction", cmd_string_func=create_fancy_cmd_string)
|
|
292
|
+
def test_cmd_string_func(self, a: str, b: int, *, c: float, d: str) -> bytes:
|
|
293
|
+
"""Returns a command string based on the arguments."""
|
|
294
|
+
|
|
295
|
+
|
|
290
296
|
class NewStyleCommand(DynamicCommandMixin, NewStyleCommandInterface):
|
|
291
297
|
"""Simple new style commanding interface."""
|
|
292
298
|
|
|
@@ -302,23 +308,19 @@ class NewStyleCommand(DynamicCommandMixin, NewStyleCommandInterface):
|
|
|
302
308
|
mode = f"{mode:04x}"
|
|
303
309
|
|
|
304
310
|
if "crc" in kwargs:
|
|
305
|
-
crc = kwargs[
|
|
311
|
+
crc = kwargs["crc"]
|
|
306
312
|
else:
|
|
307
313
|
# 'calculate' the checksum
|
|
308
314
|
crc = 0x1234
|
|
309
315
|
|
|
310
316
|
# pass the method as defined in the NewStyleCommandInterface, to the handle_dynamic_command method of
|
|
311
317
|
# the mixin class. Provide the expected parameters as if the decorated function would have been called.
|
|
312
|
-
return DynamicCommandMixin.handle_dynamic_command(
|
|
313
|
-
self,
|
|
314
|
-
super().test_cmd_with_arg_expansion
|
|
315
|
-
)(
|
|
316
|
-
mode=mode, crc=crc
|
|
317
|
-
)
|
|
318
|
+
return DynamicCommandMixin.handle_dynamic_command(self, super().test_cmd_with_arg_expansion)(mode=mode, crc=crc)
|
|
318
319
|
|
|
319
320
|
# Note that the following doesn't work, I didn't really figure out why yet...
|
|
320
321
|
# return super().test_cmd_with_mode_expansion(mode, crc)
|
|
321
322
|
|
|
323
|
+
|
|
322
324
|
def test_new_style(caplog):
|
|
323
325
|
caplog.set_level(logging.INFO)
|
|
324
326
|
|
|
@@ -380,11 +382,14 @@ def test_new_style(caplog):
|
|
|
380
382
|
# This tests the expansion of kwargs in the function's signature, by the default `expand_kwargs`
|
|
381
383
|
assert ns.test_cmd_process_kwargs(a=5, b=2, c=3) == b"TRANS 5 b=2 c=3"
|
|
382
384
|
|
|
383
|
-
tcu_mode=42 # == 0x2A
|
|
385
|
+
tcu_mode = 42 # == 0x2A
|
|
384
386
|
assert ns.test_cmd_rewrite_kwargs(address=5, identifier=2, cargo2=f"{hex(int(tcu_mode))[2:].zfill(4)}") == (
|
|
385
387
|
b"TRANS 000005 0x000002 DEV_07463 CARGO1=0001 CARGO2=002a 49"
|
|
386
388
|
)
|
|
387
389
|
|
|
390
|
+
assert ns.test_cmd_string_func("Hello!", 5, c=3.14, d="World!").decode() == "FANCY Hello!, World! – 0005 c=3.140"
|
|
391
|
+
|
|
392
|
+
|
|
388
393
|
def test_interface_definition():
|
|
389
394
|
with pytest.raises(TypeError):
|
|
390
395
|
|
|
index 563ad6b..cf0d803 100644
|
|
|
Binary file
|
|
index 0f4029d..8ba4405 100644
|
|
|
Binary file
|
|
index 4b17179..46bd6a9 100644
|
|
|
Binary file
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|