cgse 0.16.12__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.12 → cgse-0.16.14}/PKG-INFO +1 -1
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/pyproject.toml +1 -1
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/pyproject.toml +1 -1
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/pyproject.toml +1 -1
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/async_control.py +0 -1
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/mixin.py +90 -43
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_mixin.py +72 -2
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/pyproject.toml +1 -1
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/cgse-tools/pyproject.toml +1 -1
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/pyproject.toml +1 -1
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/lakeshore-tempcontrol/pyproject.toml +1 -1
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/pyproject.toml +1 -1
- {cgse-0.16.12 → cgse-0.16.14}/projects/plato/plato-fits/pyproject.toml +1 -1
- {cgse-0.16.12 → cgse-0.16.14}/projects/plato/plato-hdf5/pyproject.toml +1 -1
- {cgse-0.16.12 → cgse-0.16.14}/projects/plato/plato-spw/pyproject.toml +1 -1
- {cgse-0.16.12 → cgse-0.16.14}/pyproject.toml +1 -1
- {cgse-0.16.12 → cgse-0.16.14}/service_registry.db +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/service_registry.db-shm +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/service_registry.db-wal +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/.github/workflows/ruff-format-check.yaml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/.gitignore +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/README.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/buffer_vat.log +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/buffer_vat.png +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/bump.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/conftest.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/api/bits.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/api/calibration.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/api/command.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/api/config.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/api/control.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/api/counter.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/api/decorators.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/api/device.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/api/dicts.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/api/dummy.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/api/env.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/api/exceptions.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/api/heartbeat.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/api/hk.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/api/index.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/api/listener.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/api/metrics.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/api/mixin.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/api/monitoring.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/api/observer.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/api/obsid.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/api/persistence.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/api/plugin.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/api/process.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/api/reload.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/api/settings.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/api/setup.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/api/system.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/custom_theme/main.html +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/dev_guide/coding_style.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/dev_guide/docs.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/dev_guide/index.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/dev_guide/installation.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/dev_guide/monitoring.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/dev_guide/monorepo.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/dev_guide/nox.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/dev_guide/plugins.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/dev_guide/project-configuration.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/dev_guide/unit_testing.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/dev_guide/uv.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/dev_guide/versioning.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/getting_started.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/help.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/images/cli-cgse.png +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/images/github-fork-clone-dark.png +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/images/github-fork-clone.png +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/images/grafana-queries.png +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/images/icons/cgse-logo-blue.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/images/icons/cgse-logo.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/index.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/initialize.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/libs/cgse-common/images/load_methods.png +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/libs/cgse-common/index.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/libs/cgse-common/settings.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/libs/cgse-common/setup.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/libs/cgse-coordinates/index.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/libs/cgse-core/index.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/libs/cgse-core/notifyhub.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/libs/cgse-core/registry.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/libs/cgse-gui/index.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/libs/index.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/package_list.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/projects/cgse-tools.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/projects/index.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/projects/symetrie-hexapod.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/roadmap.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/stylesheets/custom.css +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/stylesheets/extra.css +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/tutorial.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/user_guide/cli.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/docs/user_guide/index.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/duckdb_metrics.db +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/duckdb_metrics.db.wal +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/identifier.sqlite +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/justfile +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/README.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/justfile +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/noxfile.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/service_registry.db +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/cgse_common/__init__.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/cgse_common/cgse.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/cgse_common/settings.yaml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/bits.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/calibration.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/config.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/counter.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/decorators.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/device.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/dicts.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/env.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/exceptions.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/heartbeat.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/hk.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/log.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/metrics.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/observer.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/obsid.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/persistence.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/plugin.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/plugins/metrics/duckdb.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/plugins/metrics/influxdb.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/plugins/metrics/timescaledb.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/process.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/py.typed +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/randomwalk.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/ratelimit.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/reload.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/resource.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/response.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/scpi.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/settings.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/settings.yaml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/setup.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/signal.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/socketdevice.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/state.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/system.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/task.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/version.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/src/egse/zmq_ser.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/conftest.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/COPYING +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00028_201028_155259.yaml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00029_201028_155331.yaml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00030_210311_134043.yaml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00080_210917_105245.yaml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00081_210922_142259.yaml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00082_210923_094458.yaml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/CSL1/README.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/CSL2/README.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/IAS/README.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/INTA/README.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/LAB23/README.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00027_211119_140441.yaml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00028_211119_160406.yaml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00029_211119_172918.yaml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00030_211122_103604.yaml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00031_211123_124900.yaml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/common/telemetry/tm-dictionary-default.csv +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/conf/SETUP_20250114_1519.yaml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/conf/config-file.toml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/data/cal_coeff_1234.csv +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/data/calibration.csv +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/data/calibration.yaml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/data/command.yaml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/data/corrupt.yaml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/data/data-file.txt +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/data/empty_data_file.txt +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/data/empty_yaml_file.yaml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/data/local_settings.yaml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/data/new_local_settings.yaml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/data/test_setup.yaml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/icons/hourglass.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/icons/keyboard.png +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/icons/soap_sponge.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/lib/dev1/shared-lib.so +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/data/lib/dev2/shared-lib.so +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/fixtures/default_env.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/fixtures/helpers.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/scripts/empty_process.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/scripts/handle_sigterm.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/scripts/process_with_children.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/scripts/raise_value_error.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/scripts/void-0.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/scripts/void-1.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_bits.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_config.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_decorators.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_device.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_env.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_fixtures.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_hk.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_influxdb_plugin.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_log.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_metrics.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_plugin.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_process.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_ratelimit.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_resource.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_response.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_settings.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_setup.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_signal.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_state.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_system.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_task.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-common/tests/test_zmq_ser.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/README.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/src/cgse_coordinates/__init__.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/src/cgse_coordinates/settings.yaml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/src/egse/coordinates/__init__.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/src/egse/coordinates/avoidance.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/src/egse/coordinates/cslmodel.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/src/egse/coordinates/laser_tracker_to_dict.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/src/egse/coordinates/point.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/src/egse/coordinates/pyplot.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/src/egse/coordinates/referenceFrame.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/src/egse/coordinates/refmodel.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/src/egse/coordinates/rotationMatrix.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/src/egse/coordinates/transform3d_addon.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/tests/test_avoidance.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/tests/test_coordinates_plot.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/tests/test_coordinates_serialize.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/tests/test_point.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/tests/test_ref_model.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/tests/test_reference_frames.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-coordinates/tests/test_refmodel.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/.envrc.disabled +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/README.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/service_registry.db +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/cgse_core/__init__.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/cgse_core/_start.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/cgse_core/_status.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/cgse_core/_stop.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/cgse_core/cgse_explore.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/cgse_core/services.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/cgse_core/settings.yaml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/_setup_core.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/async_control_claude.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/command.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/confman/__init__.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/confman/__main__.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/confman/confman.yaml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/confman/confman_acs.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/confman/confman_cs.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/connect-todo.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/connect.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/control.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/dummy.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/icons/busy.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/icons/operational-mode.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/icons/pm_ui.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/icons/simulator-mode.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/icons/start-process-button.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/icons/stop-process-button.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/icons/user-interface.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/listener.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/logger/__init__.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/logger/__main__.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/logger/log_cs.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/metricshub/__init__.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/metricshub/server.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/monitoring.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/notifyhub/__init__.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/notifyhub/client.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/notifyhub/event.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/notifyhub/server.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/notifyhub/services.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/notifyhub/test.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/procman/__init__.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/procman/procman.yaml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/procman/procman_cs.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/procman/procman_protocol.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/procman/procman_ui.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/protocol.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/proxy.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/registry/__init__.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/registry/backend.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/registry/client.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/registry/server.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/registry/service.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/services.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/services.yaml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/storage/__init__.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/storage/__main__.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/storage/persistence.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/storage/storage.yaml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/src/egse/storage/storage_cs.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/conftest.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/data/local_settings.yaml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/fixtures/default_env.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/fixtures/helpers.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/fixtures/services.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/marimo/intro.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/script_subscribe_to_notifyhub.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/script_test_async_registry_client.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/script_test_registry_client_server.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/script_test_service_registry_server.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/script_test_sync_registry_client.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/services.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/stress_test_registry_server.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_async_control.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_client_server_interaction.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_cm_cs.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_command.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_confman_setups.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_connect.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_control.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_dummy.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_event_notification.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_extensions.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_listener.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_logger.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_notify_hub.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_protocol.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_registry_backend.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_registry_service.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_server_running.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_server_running_with_fixture.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_settings_core.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-core/tests/test_zmq_microservice.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/README.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/__init__.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/buttons.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-start.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-stop.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/aeu-cs.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-started.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-stopped.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/aeu_cs.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/alert.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/arrow-double-left.png +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/arrow-double-right.png +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/arrow-up.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/backward.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/busy.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/cleaning.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/color-scheme.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/cs-connected-alert.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/cs-connected-disabled.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/cs-connected.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/cs-not-connected.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/double-left-arrow.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/double-right-arrow.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/erase-disabled.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/erase.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/fitsgen-start.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/fitsgen-stop.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/fitsgen.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/forward.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/fov-hk-start.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/fov-hk-stop.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/fov-hk.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/front-desk.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/home-actioned.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/home-disabled.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/home.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/info.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/invalid.png +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/led-green.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/led-grey.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/led-orange.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/led-red.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/led-square-green.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/led-square-grey.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/led-square-orange.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/led-square-red.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-green.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-red.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el+.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el-.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/location-marker.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/logo-dpu.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/logo-gimbal.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/logo-huber.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/logo-ogse.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/logo-puna.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/logo-tcs.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/logo-zonda.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/maximize.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/meter.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/more.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-start.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-stop.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/observing-off.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/observing-on.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.png +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/ops-mode.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/play-green.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/plugged-disabled.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/plugged.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/pm_ui.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/power-button-green.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/power-button-red.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/power-button.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/radar.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/radioactive.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/reload.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/remote-control-off.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/remote-control-on.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/repeat-blue.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/repeat.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/settings.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/shrink.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/shutter.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/sign-off.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/sign-on.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/sim-mode.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/small-buttons-go.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/small-buttons-minus.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/small-buttons-plus.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/sponge.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/start-button-disabled.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/start-button.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/stop-button-disabled.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/stop-button.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/stop-red.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/stop.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/switch-disabled-square.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/switch-disabled.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/switch-off-square.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/switch-off.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/switch-on-square.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/switch-on.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/temperature-control.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/th_ui_logo.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/unplugged.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/unvalid.png +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/user-interface.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/vacuum.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/valid.png +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-dark.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-white.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/led.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/limitswitch.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/states.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/styles/dark.qss +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/styles/default.qss +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/styles.qss +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/libs/cgse-gui/src/egse/gui/switch.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/mkdocs.yml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/noxfile.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/overrides/.icons/custom/dbend-dark.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/overrides/.icons/custom/dbend-light.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/overrides/.icons/custom/gear.svg +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/cgse-tools/README.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/cgse-tools/src/cgse_tools/__init__.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/cgse-tools/src/cgse_tools/cgse_clock.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/cgse-tools/src/cgse_tools/cgse_commands.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/cgse-tools/src/cgse_tools/cgse_services.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/cgse-tools/src/egse/tools/status.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/README.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/justfile +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/noxfile.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/service_registry.db +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/__init__.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510.yaml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_acs.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_adev.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_cs.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_dev.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_mon.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_protocol.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_sim.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/__init__.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/cgse_explore.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/cgse_services.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/settings.yaml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/temperature_readings.log +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/tests/script_daq6510_central_heating.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/tests/script_daq6510_mon.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/tests/script_plot_readings.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/tests/test_adev.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/keithley-tempcontrol/tests/test_dev.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/lakeshore-tempcontrol/README.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336.yaml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_cs.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_devif.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_protocol.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/__init__.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/cgse_explore.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/cgse_services.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/settings.yaml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/lakeshore-tempcontrol/tests/test_lakeshore336_simulator.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/README.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/__init__.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/__init__.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/alpha.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/dynalpha.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod_ui.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.yaml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_cs.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_protocol.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_ui.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac_regex.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.yaml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_cs.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_protocol.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_sim.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_ui.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/punaplus.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.yaml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_cs.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_devif.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_protocol.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_ui.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/__init__.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/cgse_explore.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/cgse_services.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/settings.yaml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/tests/test_puna.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/tests/test_puna_cs.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/generic/symetrie-hexapod/tests/test_puna_simulator.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/plato/plato-fits/README.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/plato/plato-fits/src/egse/plugins/storage/fits.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/plato/plato-hdf5/README.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/plato/plato-hdf5/src/egse/plugins/storage/hdf5.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/plato/plato-spw/README.md +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/projects/plato/plato-spw/src/egse/spw.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/ruff.toml +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/scratch/advanced-process-monitoring.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/scratch/live-process-monitoring.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/scratch/match-case.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/scratch/processes.json +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/scratch/simple-process-monitoring.py +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/temperature_readings.log +0 -0
- {cgse-0.16.12 → cgse-0.16.14}/test_service_registry.db +0 -0
|
@@ -18,7 +18,6 @@ from rich.traceback import Traceback
|
|
|
18
18
|
from egse.env import bool_env
|
|
19
19
|
from egse.exceptions import InitialisationError
|
|
20
20
|
from egse.log import logging
|
|
21
|
-
from egse.process import ProcessStatus
|
|
22
21
|
from egse.registry.client import AsyncRegistryClient
|
|
23
22
|
from egse.system import Periodic
|
|
24
23
|
from egse.system import get_current_location
|
|
@@ -104,7 +104,7 @@ def add_cr_lf(cmd_string: str) -> str:
|
|
|
104
104
|
return cmd_string
|
|
105
105
|
|
|
106
106
|
|
|
107
|
-
def expand_kwargs(kwargs: Dict):
|
|
107
|
+
def expand_kwargs(kwargs: Dict) -> str:
|
|
108
108
|
"""Expand keyword arguments and their values as 'key=value' separated by spaces."""
|
|
109
109
|
return " ".join(f"{k}={v}" for k, v in kwargs.items())
|
|
110
110
|
|
|
@@ -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
|
|
@@ -201,11 +201,32 @@ def pre_command(transport: DeviceTransport = None, **kwargs):
|
|
|
201
201
|
LOGGER.info(f"Inside pre_command({transport.__class__.__name__}, {kwargs})")
|
|
202
202
|
|
|
203
203
|
|
|
204
|
-
def post_command(transport: DeviceTransport = None, response: bytes = None):
|
|
204
|
+
def post_command(transport: DeviceTransport = None, response: bytes = None) -> bytes:
|
|
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:
|
|
210
|
+
"""Rewrite some of the keyword arguments according to device specs."""
|
|
211
|
+
|
|
212
|
+
def calc_crc(data) -> int:
|
|
213
|
+
return len(data)
|
|
214
|
+
|
|
215
|
+
# assume we need to build our own fancy device command string...
|
|
216
|
+
address = kwargs.get("address")
|
|
217
|
+
identifier = kwargs.get("identifier")
|
|
218
|
+
cargo1 = kwargs.get("cargo1", 1)
|
|
219
|
+
cargo2 = kwargs.get("cargo2", 2)
|
|
220
|
+
|
|
221
|
+
cmd = f"{address:06X} 0x{identifier:06x} DEV_07463 CARGO1={cargo1:04d} CARGO2={cargo2}"
|
|
222
|
+
|
|
223
|
+
return f"{cmd} {calc_crc(cmd)}"
|
|
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
|
+
|
|
209
230
|
class NewStyleCommandInterface:
|
|
210
231
|
"""Interface definition for new style dynamic commands."""
|
|
211
232
|
|
|
@@ -251,10 +272,26 @@ class NewStyleCommandInterface:
|
|
|
251
272
|
def test_cmd_enum_with_format(self, enumeration: MyEnum):
|
|
252
273
|
"""Returns the command string"""
|
|
253
274
|
|
|
275
|
+
@dynamic_command(cmd_type="transaction", cmd_string="ARG_EXPANSION::{mode}::{crc:06x}", use_format=True)
|
|
276
|
+
def test_cmd_with_arg_expansion(self, *, mode, crc):
|
|
277
|
+
"""Return the command string, after processing the arguments in the overriding function."""
|
|
278
|
+
|
|
254
279
|
@dynamic_command(cmd_type="transaction", cmd_string="msg = ${msg}", pre_cmd=pre_command, post_cmd=post_command)
|
|
255
|
-
def test_cmd_pre_post(self, msg: str):
|
|
280
|
+
def test_cmd_pre_post(self, msg: str) -> bytes:
|
|
256
281
|
"""Return the command string, executes pre- and post-commands."""
|
|
257
282
|
|
|
283
|
+
@dynamic_command(cmd_type="transaction", cmd_string="TRANS ${a} ${kwargs}")
|
|
284
|
+
def test_cmd_process_kwargs(self, *, a, **kwargs):
|
|
285
|
+
"""Returns the command string."""
|
|
286
|
+
|
|
287
|
+
@dynamic_command(cmd_type="transaction", cmd_string="TRANS ${kwargs}", process_kwargs=rewrite_kwargs)
|
|
288
|
+
def test_cmd_rewrite_kwargs(self, **kwargs):
|
|
289
|
+
"""Returns the command string with rewritten kwargs."""
|
|
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
|
+
|
|
258
295
|
|
|
259
296
|
class NewStyleCommand(DynamicCommandMixin, NewStyleCommandInterface):
|
|
260
297
|
"""Simple new style commanding interface."""
|
|
@@ -263,6 +300,26 @@ class NewStyleCommand(DynamicCommandMixin, NewStyleCommandInterface):
|
|
|
263
300
|
self.transport = NewStyleTransport()
|
|
264
301
|
super().__init__()
|
|
265
302
|
|
|
303
|
+
def test_cmd_with_arg_expansion(self, *, mode, **kwargs):
|
|
304
|
+
# This function overrides the function from the NewStyleCommandInterface. The reason for doing that is
|
|
305
|
+
# because we need to reformat and/or process the arguments before passing them to the decorated function.
|
|
306
|
+
|
|
307
|
+
# rewrite 'mode'
|
|
308
|
+
mode = f"{mode:04x}"
|
|
309
|
+
|
|
310
|
+
if "crc" in kwargs:
|
|
311
|
+
crc = kwargs["crc"]
|
|
312
|
+
else:
|
|
313
|
+
# 'calculate' the checksum
|
|
314
|
+
crc = 0x1234
|
|
315
|
+
|
|
316
|
+
# pass the method as defined in the NewStyleCommandInterface, to the handle_dynamic_command method of
|
|
317
|
+
# the mixin class. Provide the expected parameters as if the decorated function would have been called.
|
|
318
|
+
return DynamicCommandMixin.handle_dynamic_command(self, super().test_cmd_with_arg_expansion)(mode=mode, crc=crc)
|
|
319
|
+
|
|
320
|
+
# Note that the following doesn't work, I didn't really figure out why yet...
|
|
321
|
+
# return super().test_cmd_with_mode_expansion(mode, crc)
|
|
322
|
+
|
|
266
323
|
|
|
267
324
|
def test_new_style(caplog):
|
|
268
325
|
caplog.set_level(logging.INFO)
|
|
@@ -319,6 +376,19 @@ def test_new_style(caplog):
|
|
|
319
376
|
in caplog.text
|
|
320
377
|
)
|
|
321
378
|
|
|
379
|
+
assert ns.test_cmd_with_arg_expansion(mode=23) == b"ARG_EXPANSION::0017::001234"
|
|
380
|
+
assert ns.test_cmd_with_arg_expansion(mode=0x10, crc=5678) == b"ARG_EXPANSION::0010::00162e"
|
|
381
|
+
|
|
382
|
+
# This tests the expansion of kwargs in the function's signature, by the default `expand_kwargs`
|
|
383
|
+
assert ns.test_cmd_process_kwargs(a=5, b=2, c=3) == b"TRANS 5 b=2 c=3"
|
|
384
|
+
|
|
385
|
+
tcu_mode = 42 # == 0x2A
|
|
386
|
+
assert ns.test_cmd_rewrite_kwargs(address=5, identifier=2, cargo2=f"{hex(int(tcu_mode))[2:].zfill(4)}") == (
|
|
387
|
+
b"TRANS 000005 0x000002 DEV_07463 CARGO1=0001 CARGO2=002a 49"
|
|
388
|
+
)
|
|
389
|
+
|
|
390
|
+
assert ns.test_cmd_string_func("Hello!", 5, c=3.14, d="World!").decode() == "FANCY Hello!, World! – 0005 c=3.140"
|
|
391
|
+
|
|
322
392
|
|
|
323
393
|
def test_interface_definition():
|
|
324
394
|
with pytest.raises(TypeError):
|
|
index 7a86c87..cf0d803 100644
|
|
|
Binary file
|
|
index f188d32..8ba4405 100644
|
|
|
Binary file
|
|
index 8bddc71..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
|