cgse 0.17.2__tar.gz → 0.17.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {cgse-0.17.2 → cgse-0.17.3}/CHANGELOG.md +5 -0
- {cgse-0.17.2 → cgse-0.17.3}/PKG-INFO +1 -1
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/pyproject.toml +1 -1
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/src/egse/device.py +0 -70
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/src/egse/scpi.py +52 -123
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-coordinates/pyproject.toml +1 -1
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/pyproject.toml +1 -1
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/service_registry.db +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/service_registry.db-shm +0 -0
- cgse-0.17.3/libs/cgse-core/service_registry.db-wal +0 -0
- cgse-0.17.3/libs/cgse-core/src/egse/connect.py +55 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/dummy.py +3 -19
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/logger/__init__.py +2 -2
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/notifyhub/server.py +1 -3
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/registry/client.py +3 -9
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/registry/server.py +3 -11
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/registry/service.py +5 -11
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/tests/fixtures/helpers.py +1 -61
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/tests/fixtures/services.py +16 -65
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/tests/test_client_server_interaction.py +8 -3
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/tests/test_cm_cs.py +43 -3
- cgse-0.17.3/libs/cgse-core/tests/test_connect.py +200 -0
- cgse-0.17.3/libs/cgse-core/tests/test_dummy.py +68 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/tests/test_event_notification.py +2 -6
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/tests/test_logger.py +10 -23
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/tests/test_registry_service.py +8 -8
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/tests/test_server_running.py +8 -14
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/tests/test_server_running_with_fixture.py +7 -12
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/tests/test_zmq_microservice.py +7 -19
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/pyproject.toml +1 -1
- {cgse-0.17.2 → cgse-0.17.3}/make-a-release.md +7 -1
- {cgse-0.17.2 → cgse-0.17.3}/projects/ariel/ariel-tcu/pyproject.toml +1 -1
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/cgse-tools/pyproject.toml +1 -1
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/keithley-tempcontrol/pyproject.toml +1 -1
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510.py +22 -31
- cgse-0.17.3/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_adev.py +97 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_cs.py +44 -89
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_dev.py +20 -78
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_mon.py +22 -58
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_protocol.py +35 -18
- cgse-0.17.2/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_sim.py → cgse-0.17.3/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_sim.py +22 -26
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/cgse_services.py +7 -26
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/keithley-tempcontrol/tests/script_daq6510_mon.py +7 -3
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/keithley-tempcontrol/tests/test_adev.py +13 -150
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/keithley-tempcontrol/tests/test_dev.py +14 -18
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/lakeshore-tempcontrol/pyproject.toml +1 -1
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/symetrie-hexapod/pyproject.toml +1 -1
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_ui.py +2 -3
- {cgse-0.17.2 → cgse-0.17.3}/projects/plato/plato-fits/pyproject.toml +1 -1
- {cgse-0.17.2 → cgse-0.17.3}/projects/plato/plato-hdf5/pyproject.toml +1 -1
- {cgse-0.17.2 → cgse-0.17.3}/projects/plato/plato-spw/pyproject.toml +1 -1
- {cgse-0.17.2 → cgse-0.17.3}/pyproject.toml +1 -1
- cgse-0.17.2/.pylintrc +0 -5
- cgse-0.17.2/libs/cgse-common/src/egse/plugins/metrics/duckdb.py +0 -442
- cgse-0.17.2/libs/cgse-common/src/egse/plugins/metrics/timescaledb.py +0 -596
- cgse-0.17.2/libs/cgse-common/src/egse/ratelimit.py +0 -275
- cgse-0.17.2/libs/cgse-common/src/egse/socketdevice.py +0 -379
- cgse-0.17.2/libs/cgse-common/tests/test_ratelimit.py +0 -365
- cgse-0.17.2/libs/cgse-common/tests/test_socketdevice.py +0 -329
- cgse-0.17.2/libs/cgse-core/service_registry.db-wal +0 -0
- cgse-0.17.2/libs/cgse-core/src/egse/async_control.py +0 -1085
- cgse-0.17.2/libs/cgse-core/src/egse/async_control_claude.py +0 -807
- cgse-0.17.2/libs/cgse-core/src/egse/confman/confman_acs.py +0 -35
- cgse-0.17.2/libs/cgse-core/src/egse/connect.py +0 -528
- cgse-0.17.2/libs/cgse-core/src/egse/metricshub/server.py +0 -271
- cgse-0.17.2/libs/cgse-core/src/egse/notifyhub/test.py +0 -303
- cgse-0.17.2/libs/cgse-core/tests/fixtures/log_cs.start.out +0 -13
- cgse-0.17.2/libs/cgse-core/tests/marimo/intro.py +0 -116
- cgse-0.17.2/libs/cgse-core/tests/simple_server.py +0 -135
- cgse-0.17.2/libs/cgse-core/tests/test_async_control.py +0 -68
- cgse-0.17.2/libs/cgse-core/tests/test_connect.py +0 -691
- cgse-0.17.2/libs/cgse-core/tests/test_dummy.py +0 -153
- cgse-0.17.2/libs/cgse-core/tests/test_proxy.py +0 -16
- cgse-0.17.2/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_acs.py +0 -3
- cgse-0.17.2/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_adev.py +0 -77
- cgse-0.17.2/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_sim.py +0 -305
- cgse-0.17.2/projects/generic/keithley-tempcontrol/tests/script_daq6510_central_heating.py +0 -53
- cgse-0.17.2/projects/generic/keithley-tempcontrol/tests/script_plot_readings.py +0 -60
- cgse-0.17.2/projects/generic/symetrie-hexapod/src/symetrie_hexapod/__init__.py +0 -0
- cgse-0.17.2/projects/generic/symetrie-hexapod/tests/test_puna_cs.py +0 -12
- {cgse-0.17.2 → cgse-0.17.3}/.env.example +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/.github/workflows/ruff-format-check.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/.gitignore +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/README.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/bump.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/conftest.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/api/bits.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/api/calibration.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/api/command.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/api/config.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/api/control.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/api/counter.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/api/decorators.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/api/device.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/api/dicts.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/api/dummy.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/api/env.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/api/exceptions.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/api/heartbeat.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/api/hk.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/api/index.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/api/listener.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/api/metrics.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/api/mixin.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/api/monitoring.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/api/observer.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/api/obsid.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/api/persistence.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/api/plugin.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/api/process.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/api/reload.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/api/settings.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/api/setup.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/api/system.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/custom_theme/main.html +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/dev_guide/coding_style.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/dev_guide/docs.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/dev_guide/dotenv.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/dev_guide/index.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/dev_guide/installation.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/dev_guide/monitoring.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/dev_guide/monorepo.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/dev_guide/nox.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/dev_guide/plugins.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/dev_guide/project-configuration.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/dev_guide/unit_testing.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/dev_guide/uv.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/dev_guide/versioning.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/getting_started.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/help.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/images/cli-cgse.png +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/images/github-fork-clone-dark.png +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/images/github-fork-clone.png +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/images/grafana-queries.png +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/images/icons/cgse-logo-blue.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/images/icons/cgse-logo.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/index.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/initialize.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/libs/cgse-common/images/load_methods.png +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/libs/cgse-common/index.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/libs/cgse-common/settings.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/libs/cgse-common/setup.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/libs/cgse-coordinates/index.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/libs/cgse-core/index.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/libs/cgse-core/notifyhub.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/libs/cgse-core/registry.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/libs/cgse-gui/index.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/libs/index.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/package_list.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/projects/cgse-tools.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/projects/index.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/projects/symetrie-hexapod.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/roadmap.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/stylesheets/custom.css +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/stylesheets/extra.css +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/tutorial.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/user_guide/cli.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/user_guide/env.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/docs/user_guide/index.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/duckdb_metrics.db +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/duckdb_metrics.db.wal +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/identifier.sqlite +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/justfile +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/README.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/justfile +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/noxfile.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/service_registry.db +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/src/cgse_common/__init__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/src/cgse_common/cgse.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/src/cgse_common/settings.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/src/egse/bits.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/src/egse/calibration.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/src/egse/config.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/src/egse/counter.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/src/egse/decorators.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/src/egse/dicts.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/src/egse/env.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/src/egse/exceptions.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/src/egse/heartbeat.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/src/egse/hk.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/src/egse/log.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/src/egse/metrics.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/src/egse/observer.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/src/egse/obsid.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/src/egse/persistence.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/src/egse/plugin.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/src/egse/plugins/metrics/influxdb.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/src/egse/process.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/src/egse/py.typed +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/src/egse/randomwalk.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/src/egse/reload.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/src/egse/resource.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/src/egse/response.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/src/egse/settings.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/src/egse/settings.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/src/egse/setup.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/src/egse/signal.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/src/egse/state.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/src/egse/system.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/src/egse/task.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/src/egse/version.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/src/egse/zmq_ser.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/conftest.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/data/COPYING +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00028_201028_155259.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00029_201028_155331.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00030_210311_134043.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00080_210917_105245.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00081_210922_142259.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00082_210923_094458.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/data/CSL1/README.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/data/CSL2/README.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/data/IAS/README.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/data/INTA/README.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/data/LAB23/README.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00027_211119_140441.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00028_211119_160406.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00029_211119_172918.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00030_211122_103604.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00031_211123_124900.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/data/common/telemetry/tm-dictionary-default.csv +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/data/conf/SETUP_20250114_1519.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/data/conf/config-file.toml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/data/data/cal_coeff_1234.csv +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/data/data/calibration.csv +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/data/data/calibration.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/data/data/command.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/data/data/corrupt.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/data/data/data-file.txt +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/data/data/empty_data_file.txt +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/data/data/empty_yaml_file.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/data/data/local_settings.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/data/data/new_local_settings.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/data/data/test_setup.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/data/icons/hourglass.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/data/icons/keyboard.png +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/data/icons/soap_sponge.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/data/lib/dev1/shared-lib.so +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/data/lib/dev2/shared-lib.so +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/fixtures/default_env.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/fixtures/helpers.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/scripts/empty_process.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/scripts/handle_sigterm.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/scripts/process_with_children.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/scripts/raise_value_error.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/scripts/void-0.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/scripts/void-1.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/test_bits.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/test_config.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/test_decorators.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/test_device.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/test_env.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/test_fixtures.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/test_hk.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/test_influxdb_plugin.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/test_log.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/test_metrics.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/test_plugin.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/test_process.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/test_resource.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/test_response.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/test_settings.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/test_setup.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/test_signal.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/test_state.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/test_system.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/test_task.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/test_version.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-common/tests/test_zmq_ser.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-coordinates/README.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-coordinates/src/cgse_coordinates/__init__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-coordinates/src/cgse_coordinates/settings.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-coordinates/src/egse/coordinates/__init__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-coordinates/src/egse/coordinates/avoidance.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-coordinates/src/egse/coordinates/cslmodel.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-coordinates/src/egse/coordinates/laser_tracker_to_dict.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-coordinates/src/egse/coordinates/point.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-coordinates/src/egse/coordinates/pyplot.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-coordinates/src/egse/coordinates/referenceFrame.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-coordinates/src/egse/coordinates/refmodel.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-coordinates/src/egse/coordinates/rotationMatrix.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-coordinates/src/egse/coordinates/transform3d_addon.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-coordinates/tests/test_avoidance.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-coordinates/tests/test_coordinates_plot.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-coordinates/tests/test_coordinates_serialize.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-coordinates/tests/test_point.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-coordinates/tests/test_ref_model.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-coordinates/tests/test_reference_frames.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-coordinates/tests/test_refmodel.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/README.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/cgse_core/__init__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/cgse_core/_start.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/cgse_core/_status.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/cgse_core/_stop.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/cgse_core/cgse_explore.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/cgse_core/services.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/cgse_core/settings.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/_setup_core.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/command.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/confman/__init__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/confman/__main__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/confman/confman.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/confman/confman_cs.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/control.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/icons/busy.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/icons/operational-mode.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/icons/pm_ui.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/icons/simulator-mode.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/icons/start-process-button.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/icons/stop-process-button.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/icons/user-interface.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/listener.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/logger/__main__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/logger/log_cs.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/mixin.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/monitoring.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/notifyhub/__init__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/notifyhub/client.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/notifyhub/event.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/notifyhub/services.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/procman/__init__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/procman/procman.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/procman/procman_cs.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/procman/procman_protocol.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/procman/procman_ui.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/protocol.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/proxy.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/registry/__init__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/registry/backend.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/services.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/services.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/storage/__init__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/storage/__main__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/storage/persistence.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/storage/storage.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/src/egse/storage/storage_cs.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/tests/conftest.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/tests/data/local_settings.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/tests/fixtures/default_env.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/tests/script_subscribe_to_notifyhub.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/tests/script_test_async_registry_client.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/tests/script_test_registry_client_server.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/tests/script_test_service_registry_server.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/tests/script_test_sync_registry_client.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/tests/services.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/tests/stress_test_registry_server.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/tests/test_command.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/tests/test_confman_setups.py +1 -1
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/tests/test_control.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/tests/test_extensions.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/tests/test_listener.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/tests/test_mixin.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/tests/test_notify_hub.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/tests/test_protocol.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/tests/test_registry_backend.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-core/tests/test_settings_core.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/README.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/__init__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/buttons.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-start.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-stop.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/aeu-cs.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-started.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-stopped.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/aeu_cs.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/alert.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/arrow-double-left.png +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/arrow-double-right.png +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/arrow-up.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/backward.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/busy.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/cleaning.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/color-scheme.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/cs-connected-alert.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/cs-connected-disabled.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/cs-connected.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/cs-not-connected.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/double-left-arrow.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/double-right-arrow.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/erase-disabled.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/erase.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/fitsgen-start.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/fitsgen-stop.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/fitsgen.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/forward.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/fov-hk-start.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/fov-hk-stop.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/fov-hk.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/front-desk.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/home-actioned.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/home-disabled.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/home.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/info.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/invalid.png +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/led-green.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/led-grey.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/led-orange.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/led-red.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/led-square-green.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/led-square-grey.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/led-square-orange.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/led-square-red.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-green.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-red.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el+.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el-.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/location-marker.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/logo-dpu.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/logo-gimbal.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/logo-huber.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/logo-ogse.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/logo-puna.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/logo-tcs.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/logo-zonda.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/maximize.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/meter.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/more.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-start.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-stop.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/observing-off.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/observing-on.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.png +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/ops-mode.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/play-green.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/plugged-disabled.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/plugged.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/pm_ui.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/power-button-green.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/power-button-red.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/power-button.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/radar.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/radioactive.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/reload.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/remote-control-off.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/remote-control-on.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/repeat-blue.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/repeat.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/settings.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/shrink.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/shutter.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/sign-off.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/sign-on.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/sim-mode.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/small-buttons-go.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/small-buttons-minus.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/small-buttons-plus.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/sponge.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/start-button-disabled.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/start-button.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/stop-button-disabled.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/stop-button.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/stop-red.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/stop.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/switch-disabled-square.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/switch-disabled.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/switch-off-square.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/switch-off.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/switch-on-square.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/switch-on.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/temperature-control.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/th_ui_logo.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/unplugged.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/unvalid.png +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/user-interface.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/vacuum.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/valid.png +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-dark.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-white.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/led.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/limitswitch.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/states.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/styles/dark.qss +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/styles/default.qss +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/styles.qss +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/libs/cgse-gui/src/egse/gui/switch.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/mkdocs.yml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/noxfile.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/overrides/.icons/custom/dbend-dark.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/overrides/.icons/custom/dbend-light.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/overrides/.icons/custom/gear.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/ariel/ariel-tcu/README.md +0 -0
- {cgse-0.17.2/libs/cgse-core/src/egse/metricshub → cgse-0.17.3/projects/ariel/ariel-tcu/src/ariel_tcu}/__init__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/ariel/ariel-tcu/src/ariel_tcu/cgse_explore.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/ariel/ariel-tcu/src/ariel_tcu/cgse_services.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/ariel/ariel-tcu/src/ariel_tcu/settings.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/__init__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu_cmd_utils.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu_cs.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu_devif.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu_protocol.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/ariel/ariel-tcu/tests/test_tcu.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/ariel/ariel-tcu/tests/test_tcu_cmd_utils.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/cgse-tools/README.md +0 -0
- {cgse-0.17.2/projects/ariel/ariel-tcu/src/ariel_tcu → cgse-0.17.3/projects/generic/cgse-tools/src/cgse_tools}/__init__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/cgse-tools/src/cgse_tools/cgse_clock.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/cgse-tools/src/cgse_tools/cgse_commands.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/cgse-tools/src/cgse_tools/cgse_services.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/cgse-tools/src/egse/tools/status.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/keithley-tempcontrol/README.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/keithley-tempcontrol/justfile +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/keithley-tempcontrol/noxfile.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/keithley-tempcontrol/service_registry.db +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/__init__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510.yaml +0 -0
- {cgse-0.17.2/projects/generic/cgse-tools/src/cgse_tools → cgse-0.17.3/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol}/__init__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/cgse_explore.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/settings.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/lakeshore-tempcontrol/README.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_cs.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_devif.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_protocol.py +0 -0
- {cgse-0.17.2/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol → cgse-0.17.3/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol}/__init__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/cgse_explore.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/cgse_services.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/settings.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/lakeshore-tempcontrol/tests/test_lakeshore336_simulator.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/symetrie-hexapod/README.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/symetrie-hexapod/src/egse/hexapod/__init__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/__init__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/alpha.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/dynalpha.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod_ui.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_cs.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_protocol.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_ui.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac_regex.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_cs.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_protocol.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/punaplus.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_cs.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_devif.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_protocol.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_ui.py +0 -0
- {cgse-0.17.2/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol → cgse-0.17.3/projects/generic/symetrie-hexapod/src/symetrie_hexapod}/__init__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/cgse_explore.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/cgse_services.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/settings.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/symetrie-hexapod/tests/test_puna.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/generic/symetrie-hexapod/tests/test_puna_simulator.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/plato/plato-fits/README.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/plato/plato-fits/src/egse/plugins/storage/fits.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/plato/plato-hdf5/README.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/plato/plato-hdf5/src/egse/plugins/storage/hdf5.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/plato/plato-spw/README.md +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/projects/plato/plato-spw/src/egse/spw.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/ruff.toml +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/scratch/advanced-process-monitoring.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/scratch/live-process-monitoring.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/scratch/match-case.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/scratch/mock-version.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/scratch/processes.json +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/scratch/simple-process-monitoring.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/scratch/test_version_behavior.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/scratch/understanding-the-mocking-library.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/scratch/understanding_the_with_statement.py +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/service_registry.db +0 -0
- {cgse-0.17.2 → cgse-0.17.3}/test_service_registry.db +0 -0
|
@@ -9,6 +9,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
|
9
9
|
## [Unreleased]
|
|
10
10
|
|
|
11
11
|
|
|
12
|
+
## [0.17.3] - 2025-11-29
|
|
13
|
+
|
|
14
|
+
In the previous release, uncommitted and untracked files were released by mistake. This release fixes this. Nothings has been changed with respect of release 0.17.2, except the removal of the uncommitted and untracked files.
|
|
15
|
+
|
|
16
|
+
|
|
12
17
|
## [0.17.2] - 2025-11-28
|
|
13
18
|
|
|
14
19
|
This release is mainly on maintenance and improvements to the `cgse-common` package.
|
|
@@ -339,76 +339,6 @@ class AsyncDeviceTransport:
|
|
|
339
339
|
return await self.trans(command)
|
|
340
340
|
|
|
341
341
|
|
|
342
|
-
class AsyncDeviceConnectionInterface(DeviceConnectionObservable):
|
|
343
|
-
"""Generic connection interface for all Device classes and Controllers.
|
|
344
|
-
|
|
345
|
-
This interface shall be implemented in the Controllers that directly connect to the
|
|
346
|
-
hardware, but also in the simulators to guarantee an identical interface as the controllers.
|
|
347
|
-
|
|
348
|
-
This interface will be implemented in the Proxy classes through the
|
|
349
|
-
YAML definitions. Therefore, the YAML files shall define at least
|
|
350
|
-
the following commands: `connect`, `disconnect`, `reconnect`, `is_connected`.
|
|
351
|
-
"""
|
|
352
|
-
|
|
353
|
-
def __init__(self):
|
|
354
|
-
super().__init__()
|
|
355
|
-
|
|
356
|
-
def __enter__(self):
|
|
357
|
-
self.connect()
|
|
358
|
-
return self
|
|
359
|
-
|
|
360
|
-
def __exit__(self, exc_type, exc_val, exc_tb):
|
|
361
|
-
self.disconnect()
|
|
362
|
-
|
|
363
|
-
async def connect(self) -> None:
|
|
364
|
-
"""Connect to the device controller.
|
|
365
|
-
|
|
366
|
-
Raises:
|
|
367
|
-
ConnectionError: when the connection can not be opened.
|
|
368
|
-
"""
|
|
369
|
-
|
|
370
|
-
raise NotImplementedError
|
|
371
|
-
|
|
372
|
-
async def disconnect(self) -> None:
|
|
373
|
-
"""Disconnect from the device controller.
|
|
374
|
-
|
|
375
|
-
Raises:
|
|
376
|
-
ConnectionError: when the connection can not be closed.
|
|
377
|
-
"""
|
|
378
|
-
raise NotImplementedError
|
|
379
|
-
|
|
380
|
-
async def reconnect(self):
|
|
381
|
-
"""Reconnect the device controller.
|
|
382
|
-
|
|
383
|
-
Raises:
|
|
384
|
-
ConnectionError: when the device can not be reconnected for some reason.
|
|
385
|
-
"""
|
|
386
|
-
raise NotImplementedError
|
|
387
|
-
|
|
388
|
-
async def is_connected(self) -> bool:
|
|
389
|
-
"""Check if the device is connected.
|
|
390
|
-
|
|
391
|
-
Returns:
|
|
392
|
-
True if the device is connected and responds to a command, False otherwise.
|
|
393
|
-
"""
|
|
394
|
-
raise NotImplementedError
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
class AsyncDeviceInterface(AsyncDeviceConnectionInterface):
|
|
398
|
-
"""A generic interface for all device classes."""
|
|
399
|
-
|
|
400
|
-
def is_simulator(self) -> bool:
|
|
401
|
-
"""Checks whether the device is a simulator rather than a real hardware controller.
|
|
402
|
-
|
|
403
|
-
This can be useful for testing purposes or when doing actual movement simulations.
|
|
404
|
-
|
|
405
|
-
Returns:
|
|
406
|
-
True if the Device is a Simulator; False if the Device is connected to real hardware.
|
|
407
|
-
"""
|
|
408
|
-
|
|
409
|
-
raise NotImplementedError
|
|
410
|
-
|
|
411
|
-
|
|
412
342
|
class DeviceFactoryInterface:
|
|
413
343
|
"""
|
|
414
344
|
Base class for creating a device factory class to access devices.
|
|
@@ -4,23 +4,17 @@ from typing import Any
|
|
|
4
4
|
from typing import Dict
|
|
5
5
|
from typing import Optional
|
|
6
6
|
|
|
7
|
-
from egse.device import AsyncDeviceInterface
|
|
8
7
|
from egse.device import AsyncDeviceTransport
|
|
9
8
|
from egse.device import DeviceConnectionError
|
|
10
9
|
from egse.device import DeviceError
|
|
11
10
|
from egse.device import DeviceTimeoutError
|
|
12
|
-
from egse.env import bool_env
|
|
13
11
|
from egse.log import logger
|
|
14
12
|
|
|
13
|
+
# Constants that can be overridden by specific device implementations
|
|
15
14
|
DEFAULT_READ_TIMEOUT = 1.0 # seconds
|
|
16
15
|
DEFAULT_CONNECT_TIMEOUT = 3.0 # seconds
|
|
17
16
|
IDENTIFICATION_QUERY = "*IDN?"
|
|
18
17
|
|
|
19
|
-
VERBOSE_DEBUG = bool_env("VERBOSE_DEBUG")
|
|
20
|
-
|
|
21
|
-
SEPARATOR = b"\n"
|
|
22
|
-
SEPARATOR_STR = SEPARATOR.decode()
|
|
23
|
-
|
|
24
18
|
|
|
25
19
|
class SCPICommand:
|
|
26
20
|
"""Base class for SCPI commands."""
|
|
@@ -38,7 +32,7 @@ class SCPICommand:
|
|
|
38
32
|
raise NotImplementedError("Subclasses must implement get_cmd_string().")
|
|
39
33
|
|
|
40
34
|
|
|
41
|
-
class AsyncSCPIInterface(
|
|
35
|
+
class AsyncSCPIInterface(AsyncDeviceTransport):
|
|
42
36
|
"""Generic asynchronous interface for devices that use SCPI commands over Ethernet."""
|
|
43
37
|
|
|
44
38
|
def __init__(
|
|
@@ -62,9 +56,7 @@ class AsyncSCPIInterface(AsyncDeviceInterface, AsyncDeviceTransport):
|
|
|
62
56
|
read_timeout: Timeout for read operations in seconds
|
|
63
57
|
id_validation: String that should appear in the device's identification response
|
|
64
58
|
"""
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
self._device_name = device_name
|
|
59
|
+
self.device_name = device_name
|
|
68
60
|
self.hostname = hostname
|
|
69
61
|
self.port = port
|
|
70
62
|
self.settings = settings or {}
|
|
@@ -78,66 +70,8 @@ class AsyncSCPIInterface(AsyncDeviceInterface, AsyncDeviceTransport):
|
|
|
78
70
|
self._connect_lock = asyncio.Lock()
|
|
79
71
|
"""Prevents multiple, simultaneous connect or disconnect attempts."""
|
|
80
72
|
self._io_lock = asyncio.Lock()
|
|
81
|
-
"""Prevents multiple coroutines from attempting to read, write or query from the same stream
|
|
82
|
-
|
|
83
|
-
def is_simulator(self) -> bool:
|
|
84
|
-
return False
|
|
85
|
-
|
|
86
|
-
@property
|
|
87
|
-
def device_name(self) -> str:
|
|
88
|
-
return self._device_name
|
|
89
|
-
|
|
90
|
-
async def initialize(self, commands: list[tuple[str, bool]] = None, reset_device: bool = False) -> list[str | None]:
|
|
91
|
-
"""Initialize the device with optional reset and command sequence.
|
|
92
|
-
|
|
93
|
-
Performs device initialization by optionally resetting the device and then
|
|
94
|
-
executing a sequence of commands. Each command can optionally expect a
|
|
95
|
-
response that will be logged for debugging purposes.
|
|
96
|
-
|
|
97
|
-
Args:
|
|
98
|
-
commands: List of tuples containing (command_string, expects_response).
|
|
99
|
-
Each tuple specifies a command to send and whether to wait for and
|
|
100
|
-
log the response. Defaults to None (no commands executed).
|
|
101
|
-
reset_device: Whether to send a reset command (*RST) before executing
|
|
102
|
-
the command sequence. Defaults to False.
|
|
103
|
-
|
|
104
|
-
Returns:
|
|
105
|
-
Response for each of the commands, or None when no response was expected.
|
|
106
|
-
|
|
107
|
-
Raises:
|
|
108
|
-
Any exceptions raised by the underlying write() or trans() methods,
|
|
109
|
-
typically communication errors or device timeouts.
|
|
110
|
-
|
|
111
|
-
Example:
|
|
112
|
-
await device.initialize(
|
|
113
|
-
[
|
|
114
|
-
("*IDN?", True), # Query device ID, expect response
|
|
115
|
-
("SYST:ERR?", True), # Check for errors, expect response
|
|
116
|
-
("OUTP ON", False), # Enable output, no response expected
|
|
117
|
-
],
|
|
118
|
-
reset_device=True
|
|
119
|
-
)
|
|
120
|
-
"""
|
|
121
|
-
|
|
122
|
-
commands = commands or []
|
|
123
|
-
responses = []
|
|
124
|
-
|
|
125
|
-
if reset_device:
|
|
126
|
-
logger.info(f"Resetting the {self._device_name}...")
|
|
127
|
-
await self.write("*RST") # this also resets the user-defined buffer
|
|
128
|
-
|
|
129
|
-
for cmd, expects_response in commands:
|
|
130
|
-
if expects_response:
|
|
131
|
-
logger.debug(f"Sending {cmd}...")
|
|
132
|
-
response = (await self.trans(cmd)).decode().strip()
|
|
133
|
-
responses.append(response)
|
|
134
|
-
logger.debug(f"{response = }")
|
|
135
|
-
else:
|
|
136
|
-
logger.debug(f"Sending {cmd}...")
|
|
137
|
-
await self.write(cmd)
|
|
138
|
-
responses.append(None)
|
|
139
|
-
|
|
140
|
-
return responses
|
|
73
|
+
"""Prevents multiple coroutines from attempting to read, write or query from the same stream
|
|
74
|
+
at the same time."""
|
|
141
75
|
|
|
142
76
|
async def connect(self) -> None:
|
|
143
77
|
"""Connect to the device asynchronously.
|
|
@@ -150,51 +84,47 @@ class AsyncSCPIInterface(AsyncDeviceInterface, AsyncDeviceTransport):
|
|
|
150
84
|
async with self._connect_lock:
|
|
151
85
|
# Sanity checks
|
|
152
86
|
if self._is_connection_open:
|
|
153
|
-
logger.warning(f"{self.
|
|
87
|
+
logger.warning(f"{self.device_name}: Trying to connect to an already connected device.")
|
|
154
88
|
return
|
|
155
89
|
|
|
156
90
|
if not self.hostname:
|
|
157
|
-
raise ValueError(f"{self.
|
|
91
|
+
raise ValueError(f"{self.device_name}: Hostname is not initialized.")
|
|
158
92
|
|
|
159
93
|
if not self.port:
|
|
160
|
-
raise ValueError(f"{self.
|
|
94
|
+
raise ValueError(f"{self.device_name}: Port number is not initialized.")
|
|
161
95
|
|
|
162
96
|
# Attempt to establish a connection
|
|
163
97
|
try:
|
|
164
|
-
logger.debug(f'Connecting to {self.
|
|
98
|
+
logger.debug(f'Connecting to {self.device_name} at "{self.hostname}" using port {self.port}')
|
|
165
99
|
|
|
166
100
|
connect_task = asyncio.open_connection(self.hostname, self.port)
|
|
167
101
|
self._reader, self._writer = await asyncio.wait_for(connect_task, timeout=self.connect_timeout)
|
|
168
102
|
|
|
169
103
|
self._is_connection_open = True
|
|
170
104
|
|
|
171
|
-
|
|
172
|
-
if VERBOSE_DEBUG:
|
|
173
|
-
logger.debug(f"Response after connection: {response}")
|
|
174
|
-
|
|
175
|
-
logger.debug(f"Successfully connected to {self._device_name}.")
|
|
105
|
+
logger.debug(f"Successfully connected to {self.device_name}.")
|
|
176
106
|
|
|
177
107
|
except asyncio.TimeoutError as exc:
|
|
178
108
|
raise DeviceTimeoutError(
|
|
179
|
-
self.
|
|
109
|
+
self.device_name, f"Connection to {self.hostname}:{self.port} timed out"
|
|
180
110
|
) from exc
|
|
181
111
|
except ConnectionRefusedError as exc:
|
|
182
112
|
raise DeviceConnectionError(
|
|
183
|
-
self.
|
|
113
|
+
self.device_name, f"Connection refused to {self.hostname}:{self.port}"
|
|
184
114
|
) from exc
|
|
185
115
|
except socket.gaierror as exc:
|
|
186
|
-
raise DeviceConnectionError(self.
|
|
116
|
+
raise DeviceConnectionError(self.device_name, f"Address resolution error for {self.hostname}") from exc
|
|
187
117
|
except socket.herror as exc:
|
|
188
|
-
raise DeviceConnectionError(self.
|
|
118
|
+
raise DeviceConnectionError(self.device_name, f"Host address error for {self.hostname}") from exc
|
|
189
119
|
except OSError as exc:
|
|
190
|
-
raise DeviceConnectionError(self.
|
|
120
|
+
raise DeviceConnectionError(self.device_name, f"OS error: {exc}") from exc
|
|
191
121
|
|
|
192
122
|
# Validate device identity if requested
|
|
193
123
|
if self.id_validation:
|
|
194
124
|
logger.debug("Validating connection..")
|
|
195
125
|
if not await self.is_connected():
|
|
196
126
|
await self.disconnect()
|
|
197
|
-
raise DeviceConnectionError(self.
|
|
127
|
+
raise DeviceConnectionError(self.device_name, "Device connected but failed identity verification")
|
|
198
128
|
|
|
199
129
|
async def disconnect(self) -> None:
|
|
200
130
|
"""Disconnect from the device asynchronously.
|
|
@@ -205,20 +135,22 @@ class AsyncSCPIInterface(AsyncDeviceInterface, AsyncDeviceTransport):
|
|
|
205
135
|
async with self._connect_lock:
|
|
206
136
|
try:
|
|
207
137
|
if self._is_connection_open and self._writer is not None:
|
|
208
|
-
logger.debug(f"Disconnecting from {self.
|
|
138
|
+
logger.debug(f"Disconnecting from {self.device_name} at {self.hostname}")
|
|
209
139
|
self._writer.close()
|
|
210
140
|
await self._writer.wait_closed()
|
|
211
141
|
self._writer = None
|
|
212
142
|
self._reader = None
|
|
213
143
|
self._is_connection_open = False
|
|
214
144
|
except Exception as exc:
|
|
215
|
-
raise DeviceConnectionError(self.
|
|
145
|
+
raise DeviceConnectionError(self.device_name, f"Could not close connection: {exc}") from exc
|
|
216
146
|
|
|
217
147
|
async def reconnect(self) -> None:
|
|
218
148
|
"""Reconnect to the device asynchronously."""
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
149
|
+
async with self._connect_lock:
|
|
150
|
+
if self._is_connection_open:
|
|
151
|
+
await self.disconnect()
|
|
152
|
+
await asyncio.sleep(0.1)
|
|
153
|
+
await self.connect()
|
|
222
154
|
|
|
223
155
|
async def is_connected(self) -> bool:
|
|
224
156
|
"""Check if the device is connected and responds correctly to identification.
|
|
@@ -236,7 +168,7 @@ class AsyncSCPIInterface(AsyncDeviceInterface, AsyncDeviceTransport):
|
|
|
236
168
|
# Validate the response if validation string is provided
|
|
237
169
|
if self.id_validation and self.id_validation not in id_response:
|
|
238
170
|
logger.error(
|
|
239
|
-
f"{self.
|
|
171
|
+
f"{self.device_name}: Device did not respond correctly to identification query. "
|
|
240
172
|
f'Expected "{self.id_validation}" in response, got: {id_response}'
|
|
241
173
|
)
|
|
242
174
|
await self.disconnect()
|
|
@@ -245,7 +177,8 @@ class AsyncSCPIInterface(AsyncDeviceInterface, AsyncDeviceTransport):
|
|
|
245
177
|
return True
|
|
246
178
|
|
|
247
179
|
except DeviceError as exc:
|
|
248
|
-
logger.
|
|
180
|
+
logger.exception(exc)
|
|
181
|
+
logger.error(f"{self.device_name}: Connection test failed")
|
|
249
182
|
await self.disconnect()
|
|
250
183
|
return False
|
|
251
184
|
|
|
@@ -262,20 +195,19 @@ class AsyncSCPIInterface(AsyncDeviceInterface, AsyncDeviceTransport):
|
|
|
262
195
|
async with self._io_lock:
|
|
263
196
|
try:
|
|
264
197
|
if not self._is_connection_open or self._writer is None:
|
|
265
|
-
raise DeviceConnectionError(self.
|
|
198
|
+
raise DeviceConnectionError(self.device_name, "Device not connected, use connect() first")
|
|
266
199
|
|
|
267
|
-
# Ensure command ends with
|
|
268
|
-
if not command.endswith(
|
|
269
|
-
command +=
|
|
200
|
+
# Ensure command ends with newline
|
|
201
|
+
if not command.endswith("\n"):
|
|
202
|
+
command += "\n"
|
|
270
203
|
|
|
271
|
-
logger.info(f"-----> {command}")
|
|
272
204
|
self._writer.write(command.encode())
|
|
273
205
|
await self._writer.drain()
|
|
274
206
|
|
|
275
207
|
except asyncio.TimeoutError as exc:
|
|
276
|
-
raise DeviceTimeoutError(self.
|
|
208
|
+
raise DeviceTimeoutError(self.device_name, "Write operation timed out") from exc
|
|
277
209
|
except (ConnectionError, OSError) as exc:
|
|
278
|
-
raise DeviceConnectionError(self.
|
|
210
|
+
raise DeviceConnectionError(self.device_name, f"Communication error: {exc}") from exc
|
|
279
211
|
|
|
280
212
|
async def read(self) -> bytes:
|
|
281
213
|
"""
|
|
@@ -290,7 +222,7 @@ class AsyncSCPIInterface(AsyncDeviceInterface, AsyncDeviceTransport):
|
|
|
290
222
|
"""
|
|
291
223
|
async with self._io_lock:
|
|
292
224
|
if not self._is_connection_open or self._reader is None:
|
|
293
|
-
raise DeviceConnectionError(self.
|
|
225
|
+
raise DeviceConnectionError(self.device_name, "Device not connected, use connect() first")
|
|
294
226
|
|
|
295
227
|
try:
|
|
296
228
|
# First, small delay to allow device to prepare response
|
|
@@ -299,19 +231,18 @@ class AsyncSCPIInterface(AsyncDeviceInterface, AsyncDeviceTransport):
|
|
|
299
231
|
# Try to read until newline (common SCPI terminator)
|
|
300
232
|
try:
|
|
301
233
|
response = await asyncio.wait_for(
|
|
302
|
-
self._reader.readuntil(separator=
|
|
234
|
+
self._reader.readuntil(separator=b"\n"), timeout=self.read_timeout
|
|
303
235
|
)
|
|
304
|
-
logger.info(f"<----- {response}")
|
|
305
236
|
return response
|
|
306
237
|
|
|
307
238
|
except asyncio.IncompleteReadError as exc:
|
|
308
239
|
# Connection closed before receiving full response
|
|
309
|
-
logger.warning(f"{self.
|
|
310
|
-
return exc.partial if exc.partial else
|
|
240
|
+
logger.warning(f"{self.device_name}: Incomplete read, got {len(exc.partial)} bytes")
|
|
241
|
+
return exc.partial if exc.partial else b"\r\n"
|
|
311
242
|
|
|
312
243
|
except asyncio.LimitOverrunError:
|
|
313
244
|
# Response too large for buffer
|
|
314
|
-
logger.warning(f"{self.
|
|
245
|
+
logger.warning(f"{self.device_name}: Response exceeded buffer limits")
|
|
315
246
|
# Fall back to reading a large chunk
|
|
316
247
|
return await asyncio.wait_for(
|
|
317
248
|
self._reader.read(8192), # Larger buffer for exceptional cases
|
|
@@ -319,9 +250,9 @@ class AsyncSCPIInterface(AsyncDeviceInterface, AsyncDeviceTransport):
|
|
|
319
250
|
)
|
|
320
251
|
|
|
321
252
|
except asyncio.TimeoutError as exc:
|
|
322
|
-
raise DeviceTimeoutError(self.
|
|
253
|
+
raise DeviceTimeoutError(self.device_name, "Read operation timed out") from exc
|
|
323
254
|
except Exception as exc:
|
|
324
|
-
raise DeviceConnectionError(self.
|
|
255
|
+
raise DeviceConnectionError(self.device_name, f"Read error: {exc}") from exc
|
|
325
256
|
|
|
326
257
|
async def trans(self, command: str) -> bytes:
|
|
327
258
|
"""
|
|
@@ -342,35 +273,33 @@ class AsyncSCPIInterface(AsyncDeviceInterface, AsyncDeviceTransport):
|
|
|
342
273
|
async with self._io_lock:
|
|
343
274
|
try:
|
|
344
275
|
if not self._is_connection_open or self._writer is None:
|
|
345
|
-
raise DeviceConnectionError(self.
|
|
276
|
+
raise DeviceConnectionError(self.device_name, "Device not connected, use connect() first")
|
|
346
277
|
|
|
347
|
-
# Ensure command ends with
|
|
348
|
-
if not command.endswith(
|
|
349
|
-
command +=
|
|
278
|
+
# Ensure command ends with newline
|
|
279
|
+
if not command.endswith("\n"):
|
|
280
|
+
command += "\n"
|
|
350
281
|
|
|
351
|
-
logger.info(f"-----> {command=}")
|
|
352
282
|
self._writer.write(command.encode())
|
|
353
283
|
await self._writer.drain()
|
|
354
284
|
|
|
355
|
-
# First, small delay to allow
|
|
285
|
+
# First, small delay to allow device to prepare response
|
|
356
286
|
await asyncio.sleep(0.01)
|
|
357
287
|
|
|
358
|
-
# Try to read until
|
|
288
|
+
# Try to read until newline (common SCPI terminator)
|
|
359
289
|
try:
|
|
360
290
|
response = await asyncio.wait_for(
|
|
361
|
-
self._reader.readuntil(separator=
|
|
291
|
+
self._reader.readuntil(separator=b"\n"), timeout=self.read_timeout
|
|
362
292
|
)
|
|
363
|
-
logger.info(f"<----- {response=}")
|
|
364
293
|
return response
|
|
365
294
|
|
|
366
295
|
except asyncio.IncompleteReadError as exc:
|
|
367
296
|
# Connection closed before receiving full response
|
|
368
|
-
logger.warning(f"{self.
|
|
369
|
-
return exc.partial if exc.partial else
|
|
297
|
+
logger.warning(f"{self.device_name}: Incomplete read, got {len(exc.partial)} bytes")
|
|
298
|
+
return exc.partial if exc.partial else b"\r\n"
|
|
370
299
|
|
|
371
300
|
except asyncio.LimitOverrunError:
|
|
372
301
|
# Response too large for buffer
|
|
373
|
-
logger.warning(f"{self.
|
|
302
|
+
logger.warning(f"{self.device_name}: Response exceeded buffer limits")
|
|
374
303
|
# Fall back to reading a large chunk
|
|
375
304
|
return await asyncio.wait_for(
|
|
376
305
|
self._reader.read(8192), # Larger buffer for exceptional cases
|
|
@@ -378,11 +307,11 @@ class AsyncSCPIInterface(AsyncDeviceInterface, AsyncDeviceTransport):
|
|
|
378
307
|
)
|
|
379
308
|
|
|
380
309
|
except asyncio.TimeoutError as exc:
|
|
381
|
-
raise DeviceTimeoutError(self.
|
|
310
|
+
raise DeviceTimeoutError(self.device_name, "Communication timed out") from exc
|
|
382
311
|
except (ConnectionError, OSError) as exc:
|
|
383
|
-
raise DeviceConnectionError(self.
|
|
312
|
+
raise DeviceConnectionError(self.device_name, f"Communication error: {exc}") from exc
|
|
384
313
|
except Exception as exc:
|
|
385
|
-
raise DeviceConnectionError(self.
|
|
314
|
+
raise DeviceConnectionError(self.device_name, f"Transaction error: {exc}") from exc
|
|
386
315
|
|
|
387
316
|
async def __aenter__(self):
|
|
388
317
|
"""Async context manager entry."""
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
from egse.env import bool_env
|
|
2
|
+
from egse.log import logging
|
|
3
|
+
from egse.zmq_ser import connect_address
|
|
4
|
+
|
|
5
|
+
logger = logging.getLogger("egse.connect")
|
|
6
|
+
|
|
7
|
+
# random.seed(time.monotonic()) # uncomment for testing only, main application should set a seed.
|
|
8
|
+
|
|
9
|
+
VERBOSE_DEBUG = bool_env("VERBOSE_DEBUG")
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def get_endpoint(
|
|
13
|
+
service_type: str,
|
|
14
|
+
protocol: str = "tcp",
|
|
15
|
+
hostname: str = "localhost",
|
|
16
|
+
port: int = 0,
|
|
17
|
+
):
|
|
18
|
+
"""
|
|
19
|
+
Returns the endpoint for a service, either from the registry or by constructing
|
|
20
|
+
it from protocol, hostname and port.
|
|
21
|
+
|
|
22
|
+
If port is 0 (the default), attempt to retrieve the endpoint from the service registry.
|
|
23
|
+
|
|
24
|
+
Args:
|
|
25
|
+
service_type: The service type to look up in the registry.
|
|
26
|
+
protocol: Protocol to use if constructing the endpoint, defaults to tcp.
|
|
27
|
+
hostname: Hostname to use if constructing the endpoint, defaults to localhost.
|
|
28
|
+
port: Port to use if constructing the endpoint, defaults to 0.
|
|
29
|
+
|
|
30
|
+
Returns:
|
|
31
|
+
The endpoint string.
|
|
32
|
+
|
|
33
|
+
Raises:
|
|
34
|
+
RuntimeError: If no endpoint can be determined.
|
|
35
|
+
"""
|
|
36
|
+
endpoint = None
|
|
37
|
+
from egse.registry.client import RegistryClient
|
|
38
|
+
|
|
39
|
+
if port == 0:
|
|
40
|
+
with RegistryClient() as reg:
|
|
41
|
+
endpoint = reg.get_endpoint(service_type)
|
|
42
|
+
if endpoint:
|
|
43
|
+
if VERBOSE_DEBUG:
|
|
44
|
+
logger.debug(f"Endpoint for {service_type} found in registry: {endpoint}")
|
|
45
|
+
else:
|
|
46
|
+
logger.warning(f"No endpoint for {service_type} found in registry.")
|
|
47
|
+
|
|
48
|
+
if not endpoint:
|
|
49
|
+
if port == 0:
|
|
50
|
+
raise RuntimeError(f"No service registered as {service_type} and no port provided.")
|
|
51
|
+
endpoint = connect_address(protocol, hostname, port)
|
|
52
|
+
if VERBOSE_DEBUG:
|
|
53
|
+
logger.debug(f"Endpoint constructed from protocol/hostname/port: {endpoint}")
|
|
54
|
+
|
|
55
|
+
return endpoint
|
|
@@ -35,7 +35,6 @@ and stopped with:
|
|
|
35
35
|
|
|
36
36
|
from __future__ import annotations
|
|
37
37
|
|
|
38
|
-
import contextlib
|
|
39
38
|
import multiprocessing
|
|
40
39
|
import random
|
|
41
40
|
import select
|
|
@@ -53,14 +52,12 @@ from egse.device import DeviceConnectionError
|
|
|
53
52
|
from egse.device import DeviceConnectionInterface
|
|
54
53
|
from egse.device import DeviceTimeoutError
|
|
55
54
|
from egse.device import DeviceTransport
|
|
56
|
-
from egse.env import bool_env
|
|
57
55
|
from egse.log import logger
|
|
58
56
|
from egse.protocol import CommandProtocol
|
|
59
57
|
from egse.proxy import Proxy
|
|
60
58
|
from egse.system import SignalCatcher
|
|
61
59
|
from egse.system import attrdict
|
|
62
60
|
from egse.system import format_datetime
|
|
63
|
-
from egse.system import type_name
|
|
64
61
|
from egse.zmq_ser import bind_address
|
|
65
62
|
from egse.zmq_ser import connect_address
|
|
66
63
|
|
|
@@ -80,9 +77,6 @@ WRITE_TIMEOUT = 1.0
|
|
|
80
77
|
CONNECT_TIMEOUT = 3.0
|
|
81
78
|
"""The maximum time in seconds to wait for establishing a socket connect."""
|
|
82
79
|
|
|
83
|
-
|
|
84
|
-
VERBOSE_DEBUG = bool_env("VERBOSE_DEBUG", default=False)
|
|
85
|
-
|
|
86
80
|
# Especially DummyCommand and DummyController need to be defined in a known module
|
|
87
81
|
# because those objects are pickled and when de-pickled at the clients side the class
|
|
88
82
|
# definition must be known.
|
|
@@ -122,17 +116,14 @@ def is_dummy_cs_active() -> bool:
|
|
|
122
116
|
|
|
123
117
|
|
|
124
118
|
def is_dummy_dev_active() -> bool:
|
|
125
|
-
if VERBOSE_DEBUG:
|
|
126
|
-
logger.debug("Checking if dummy device is active...")
|
|
127
119
|
try:
|
|
128
120
|
dev = DummyDeviceEthernetInterface(DEV_HOST, DEV_PORT)
|
|
129
121
|
dev.connect()
|
|
130
122
|
rc = dev.trans("ping\n")
|
|
131
123
|
dev.disconnect()
|
|
132
124
|
return rc.decode().strip() == "pong"
|
|
133
|
-
except
|
|
134
|
-
|
|
135
|
-
logger.debug(f"Caught {type_name(exc)}: {exc} - returning False")
|
|
125
|
+
except DeviceConnectionError as exc:
|
|
126
|
+
# logger.error(f"Caught {type_name(exc)}: {exc}")
|
|
136
127
|
return False
|
|
137
128
|
|
|
138
129
|
|
|
@@ -589,18 +580,11 @@ def start_dev():
|
|
|
589
580
|
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
|
|
590
581
|
s.bind((DEV_HOST, DEV_PORT))
|
|
591
582
|
s.listen()
|
|
592
|
-
s.settimeout(CONNECT_TIMEOUT)
|
|
593
583
|
logger.info(f"Ready to accept connection on {DEV_HOST}:{DEV_PORT}...")
|
|
594
|
-
|
|
595
|
-
with contextlib.suppress(socket.timeout):
|
|
596
|
-
conn, addr = s.accept()
|
|
597
|
-
break
|
|
598
|
-
if killer.term_signal_received:
|
|
599
|
-
return
|
|
584
|
+
conn, addr = s.accept()
|
|
600
585
|
with conn:
|
|
601
586
|
logger.info(f"Accepted connection from {addr}")
|
|
602
587
|
conn.sendall(f"Dummy Device {__version__}".encode())
|
|
603
|
-
conn.settimeout(READ_TIMEOUT)
|
|
604
588
|
try:
|
|
605
589
|
while True:
|
|
606
590
|
error_msg = ""
|
|
@@ -57,7 +57,7 @@ COMMANDER_PORT = settings.get("COMMANDER_PORT", 0) # dynamically assigned by th
|
|
|
57
57
|
_initialised = False # will be set to True in the setup_logging() function
|
|
58
58
|
|
|
59
59
|
|
|
60
|
-
def get_log_file_name()
|
|
60
|
+
def get_log_file_name():
|
|
61
61
|
"""
|
|
62
62
|
Returns the filename of the log file as defined in the Settings or return the default name 'general.log'.
|
|
63
63
|
"""
|
|
@@ -315,7 +315,7 @@ def send_request(command_request: str):
|
|
|
315
315
|
"""Sends a request to the Logger Control Server and waits for a response."""
|
|
316
316
|
|
|
317
317
|
if COMMANDER_PORT == 0:
|
|
318
|
-
endpoint = get_endpoint_from_registry(
|
|
318
|
+
endpoint = get_endpoint_from_registry()
|
|
319
319
|
else:
|
|
320
320
|
endpoint = f"{PROTOCOL}://{HOSTNAME}:{COMMANDER_PORT}"
|
|
321
321
|
|
|
@@ -23,12 +23,10 @@ from egse.notifyhub import SERVICE_TYPE
|
|
|
23
23
|
from egse.notifyhub import STATS_INTERVAL
|
|
24
24
|
from egse.notifyhub.client import AsyncNotificationHubClient
|
|
25
25
|
from egse.registry import MessageType
|
|
26
|
-
from egse.registry.client import REQUEST_TIMEOUT
|
|
27
|
-
from egse.registry.client import AsyncRegistryClient
|
|
26
|
+
from egse.registry.client import AsyncRegistryClient, REQUEST_TIMEOUT
|
|
28
27
|
from egse.system import TyperAsyncCommand
|
|
29
28
|
from egse.system import get_host_ip
|
|
30
29
|
from egse.zmq_ser import get_port_number
|
|
31
|
-
|
|
32
30
|
from .event import NotificationEvent
|
|
33
31
|
|
|
34
32
|
REQUEST_POLL_TIMEOUT = 1.0
|