cgse 0.17.3__tar.gz → 0.17.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {cgse-0.17.3 → cgse-0.17.4}/CHANGELOG.md +15 -3
- {cgse-0.17.3 → cgse-0.17.4}/PKG-INFO +1 -1
- {cgse-0.17.3 → cgse-0.17.4/docs/admin_guide}/make-a-release.md +42 -9
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/pyproject.toml +1 -1
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/device.py +70 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/hk.py +2 -2
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/log.py +8 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/scpi.py +123 -52
- cgse-0.17.4/libs/cgse-common/src/egse/socketdevice.py +380 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/system.py +5 -0
- cgse-0.17.4/libs/cgse-common/tests/test_socketdevice.py +329 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-coordinates/pyproject.toml +3 -3
- cgse-0.17.4/libs/cgse-coordinates/src/egse/coordinates/__init__.py +229 -0
- cgse-0.17.4/libs/cgse-coordinates/src/egse/coordinates/avoidance.py +91 -0
- cgse-0.17.4/libs/cgse-coordinates/src/egse/coordinates/cslmodel.py +118 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-coordinates/src/egse/coordinates/laser_tracker_to_dict.py +16 -25
- cgse-0.17.4/libs/cgse-coordinates/src/egse/coordinates/point.py +833 -0
- cgse-0.17.4/libs/cgse-coordinates/src/egse/coordinates/pyplot.py +203 -0
- cgse-0.17.4/libs/cgse-coordinates/src/egse/coordinates/reference_frame.py +1417 -0
- cgse-0.17.4/libs/cgse-coordinates/src/egse/coordinates/refmodel.py +828 -0
- cgse-0.17.4/libs/cgse-coordinates/src/egse/coordinates/rotation_matrix.py +95 -0
- cgse-0.17.4/libs/cgse-coordinates/src/egse/coordinates/transform3d_addon.py +501 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-coordinates/tests/test_avoidance.py +2 -2
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-coordinates/tests/test_coordinates_plot.py +5 -5
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-coordinates/tests/test_coordinates_serialize.py +13 -9
- cgse-0.17.4/libs/cgse-coordinates/tests/test_point.py +90 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-coordinates/tests/test_reference_frames.py +134 -128
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-coordinates/tests/test_refmodel.py +39 -27
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/pyproject.toml +1 -1
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/cgse_core/_stop.py +1 -2
- cgse-0.17.4/libs/cgse-core/src/egse/connect.py +528 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/control.py +2 -1
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/dummy.py +36 -11
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/logger/__init__.py +2 -2
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/notifyhub/server.py +3 -1
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/procman/procman_cs.py +1 -1
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/procman/procman_ui.py +5 -2
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/registry/client.py +16 -6
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/registry/server.py +10 -2
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/registry/service.py +11 -5
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/fixtures/helpers.py +61 -1
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/fixtures/services.py +71 -16
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/test_client_server_interaction.py +3 -8
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/test_cm_cs.py +3 -43
- cgse-0.17.4/libs/cgse-core/tests/test_connect.py +692 -0
- cgse-0.17.4/libs/cgse-core/tests/test_dummy.py +153 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/test_event_notification.py +6 -2
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/test_logger.py +28 -10
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/test_registry_service.py +8 -8
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/test_server_running.py +14 -8
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/test_server_running_with_fixture.py +12 -7
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/test_zmq_microservice.py +19 -7
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/pyproject.toml +1 -1
- {cgse-0.17.3 → cgse-0.17.4}/mkdocs.yml +2 -0
- {cgse-0.17.3 → cgse-0.17.4}/overrides/.icons/custom/gear.svg +92 -92
- cgse-0.17.4/projects/ariel/ariel-facility/README.MD +89 -0
- cgse-0.17.4/projects/ariel/ariel-facility/pyproject.toml +63 -0
- cgse-0.17.4/projects/ariel/ariel-facility/src/ariel_facility/cgse_explore.py +19 -0
- cgse-0.17.4/projects/ariel/ariel-facility/src/ariel_facility/cgse_services.py +46 -0
- cgse-0.17.4/projects/ariel/ariel-facility/src/ariel_facility/settings.yaml +20 -0
- cgse-0.17.4/projects/ariel/ariel-facility/src/egse/ariel/facility/database.py +214 -0
- cgse-0.17.4/projects/ariel/ariel-facility/src/egse/ariel/facility/hk.py +341 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/ariel/ariel-tcu/README.md +1 -1
- {cgse-0.17.3 → cgse-0.17.4}/projects/ariel/ariel-tcu/pyproject.toml +3 -3
- {cgse-0.17.3 → cgse-0.17.4}/projects/ariel/ariel-tcu/src/ariel_tcu/settings.yaml +4 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/__init__.py +12 -7
- {cgse-0.17.3 → cgse-0.17.4}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu.py +108 -16
- {cgse-0.17.3 → cgse-0.17.4}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu_cmd_utils.py +65 -8
- {cgse-0.17.3 → cgse-0.17.4}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu_cs.py +56 -32
- {cgse-0.17.3 → cgse-0.17.4}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu_devif.py +27 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu_protocol.py +2 -2
- cgse-0.17.4/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu_ui.py +693 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/cgse-tools/pyproject.toml +1 -1
- cgse-0.17.4/projects/generic/digilent/README.md +6 -0
- cgse-0.17.4/projects/generic/digilent/pyproject.toml +81 -0
- cgse-0.17.4/projects/generic/digilent/src/digilent/cgse_explore.py +19 -0
- cgse-0.17.4/projects/generic/digilent/src/digilent/cgse_services.py +59 -0
- cgse-0.17.4/projects/generic/digilent/src/digilent/settings.yaml +23 -0
- cgse-0.17.4/projects/generic/digilent/src/egse/digilent/digilent.py +2809 -0
- cgse-0.17.4/projects/generic/digilent/src/egse/digilent/measurpoint/digilent_devif.py +278 -0
- cgse-0.17.4/projects/generic/digilent/src/egse/digilent/measurpoint/dt8874/__init__.py +21 -0
- cgse-0.17.4/projects/generic/digilent/src/egse/digilent/measurpoint/dt8874/dt8874.py +71 -0
- cgse-0.17.4/projects/generic/digilent/src/egse/digilent/measurpoint/dt8874/dt8874.yaml +43 -0
- cgse-0.17.4/projects/generic/digilent/src/egse/digilent/measurpoint/dt8874/dt8874_cs.py +335 -0
- cgse-0.17.4/projects/generic/digilent/src/egse/digilent/measurpoint/dt8874/dt8874_devif.py +14 -0
- cgse-0.17.4/projects/generic/digilent/src/egse/digilent/measurpoint/dt8874/dt8874_protocol.py +148 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/pyproject.toml +1 -1
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510.py +31 -22
- cgse-0.17.4/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_adev.py +77 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_cs.py +89 -44
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_dev.py +78 -20
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_mon.py +58 -22
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_protocol.py +18 -35
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_sim.py +117 -60
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/cgse_services.py +26 -7
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/tests/script_daq6510_mon.py +3 -7
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/tests/test_adev.py +150 -13
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/tests/test_dev.py +18 -14
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/lakeshore-tempcontrol/pyproject.toml +1 -1
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/pyproject.toml +1 -1
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/dynalpha.py +1 -1
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod.py +47 -45
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.py +2 -2
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_cs.py +1 -1
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_protocol.py +1 -1
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_cs.py +1 -1
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_ui.py +3 -2
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_cs.py +1 -1
- cgse-0.17.4/projects/generic/symetrie-hexapod/src/symetrie_hexapod/__init__.py +0 -0
- cgse-0.17.4/projects/generic/symetrie-hexapod/src/symetrie_hexapod/settings.yaml +60 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/plato/plato-fits/pyproject.toml +1 -1
- cgse-0.17.4/projects/plato/plato-hdf5/README.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/plato/plato-hdf5/pyproject.toml +1 -1
- cgse-0.17.4/projects/plato/plato-spw/README.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/plato/plato-spw/pyproject.toml +1 -1
- {cgse-0.17.3 → cgse-0.17.4}/pyproject.toml +1 -1
- cgse-0.17.3/duckdb_metrics.db +0 -0
- cgse-0.17.3/duckdb_metrics.db.wal +0 -0
- cgse-0.17.3/justfile +0 -69
- cgse-0.17.3/libs/cgse-common/justfile +0 -20
- cgse-0.17.3/libs/cgse-common/service_registry.db +0 -0
- cgse-0.17.3/libs/cgse-coordinates/src/cgse_coordinates/settings.yaml +0 -16
- cgse-0.17.3/libs/cgse-coordinates/src/egse/coordinates/__init__.py +0 -536
- cgse-0.17.3/libs/cgse-coordinates/src/egse/coordinates/avoidance.py +0 -99
- cgse-0.17.3/libs/cgse-coordinates/src/egse/coordinates/cslmodel.py +0 -127
- cgse-0.17.3/libs/cgse-coordinates/src/egse/coordinates/point.py +0 -707
- cgse-0.17.3/libs/cgse-coordinates/src/egse/coordinates/pyplot.py +0 -191
- cgse-0.17.3/libs/cgse-coordinates/src/egse/coordinates/referenceFrame.py +0 -1251
- cgse-0.17.3/libs/cgse-coordinates/src/egse/coordinates/refmodel.py +0 -720
- cgse-0.17.3/libs/cgse-coordinates/src/egse/coordinates/rotationMatrix.py +0 -82
- cgse-0.17.3/libs/cgse-coordinates/src/egse/coordinates/transform3d_addon.py +0 -437
- cgse-0.17.3/libs/cgse-coordinates/tests/test_point.py +0 -90
- cgse-0.17.3/libs/cgse-core/service_registry.db +0 -0
- 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 +0 -55
- cgse-0.17.3/libs/cgse-core/tests/test_connect.py +0 -200
- cgse-0.17.3/libs/cgse-core/tests/test_dummy.py +0 -68
- cgse-0.17.3/projects/generic/keithley-tempcontrol/justfile +0 -25
- cgse-0.17.3/projects/generic/keithley-tempcontrol/service_registry.db +0 -0
- cgse-0.17.3/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_adev.py +0 -97
- cgse-0.17.3/projects/generic/symetrie-hexapod/src/symetrie_hexapod/settings.yaml +0 -15
- cgse-0.17.3/scratch/advanced-process-monitoring.py +0 -111
- cgse-0.17.3/scratch/live-process-monitoring.py +0 -67
- cgse-0.17.3/scratch/match-case.py +0 -41
- cgse-0.17.3/scratch/mock-version.py +0 -3
- cgse-0.17.3/scratch/processes.json +0 -7680
- cgse-0.17.3/scratch/simple-process-monitoring.py +0 -72
- cgse-0.17.3/scratch/test_version_behavior.py +0 -35
- cgse-0.17.3/scratch/understanding-the-mocking-library.py +0 -82
- cgse-0.17.3/scratch/understanding_the_with_statement.py +0 -37
- cgse-0.17.3/service_registry.db +0 -0
- cgse-0.17.3/test_service_registry.db +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/.env.example +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/.github/workflows/ruff-format-check.yaml +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/.gitignore +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/README.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/bump.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/conftest.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/api/bits.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/api/calibration.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/api/command.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/api/config.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/api/control.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/api/counter.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/api/decorators.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/api/device.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/api/dicts.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/api/dummy.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/api/env.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/api/exceptions.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/api/heartbeat.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/api/hk.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/api/index.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/api/listener.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/api/metrics.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/api/mixin.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/api/monitoring.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/api/observer.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/api/obsid.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/api/persistence.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/api/plugin.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/api/process.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/api/reload.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/api/settings.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/api/setup.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/api/system.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/custom_theme/main.html +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/dev_guide/coding_style.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/dev_guide/docs.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/dev_guide/dotenv.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/dev_guide/index.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/dev_guide/installation.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/dev_guide/monitoring.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/dev_guide/monorepo.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/dev_guide/nox.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/dev_guide/plugins.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/dev_guide/project-configuration.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/dev_guide/unit_testing.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/dev_guide/uv.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/dev_guide/versioning.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/getting_started.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/help.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/images/cli-cgse.png +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/images/github-fork-clone-dark.png +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/images/github-fork-clone.png +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/images/grafana-queries.png +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/images/icons/cgse-logo-blue.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/images/icons/cgse-logo.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/index.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/initialize.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/libs/cgse-common/images/load_methods.png +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/libs/cgse-common/index.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/libs/cgse-common/settings.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/libs/cgse-common/setup.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/libs/cgse-coordinates/index.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/libs/cgse-core/index.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/libs/cgse-core/notifyhub.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/libs/cgse-core/registry.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/libs/cgse-gui/index.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/libs/index.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/package_list.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/projects/cgse-tools.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/projects/index.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/projects/symetrie-hexapod.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/roadmap.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/stylesheets/custom.css +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/stylesheets/extra.css +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/tutorial.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/user_guide/cli.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/user_guide/env.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/docs/user_guide/index.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/README.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/noxfile.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/cgse_common/__init__.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/cgse_common/cgse.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/cgse_common/settings.yaml +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/bits.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/calibration.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/config.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/counter.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/decorators.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/dicts.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/env.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/exceptions.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/heartbeat.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/metrics.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/observer.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/obsid.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/persistence.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/plugin.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/plugins/metrics/influxdb.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/process.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/py.typed +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/randomwalk.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/reload.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/resource.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/response.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/settings.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/settings.yaml +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/setup.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/signal.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/state.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/task.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/version.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/src/egse/zmq_ser.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/conftest.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/COPYING +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00028_201028_155259.yaml +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00029_201028_155331.yaml +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00030_210311_134043.yaml +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00080_210917_105245.yaml +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00081_210922_142259.yaml +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00082_210923_094458.yaml +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/CSL1/README.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/CSL2/README.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/IAS/README.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/INTA/README.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/LAB23/README.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00027_211119_140441.yaml +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00028_211119_160406.yaml +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00029_211119_172918.yaml +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00030_211122_103604.yaml +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00031_211123_124900.yaml +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/common/telemetry/tm-dictionary-default.csv +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/conf/SETUP_20250114_1519.yaml +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/conf/config-file.toml +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/data/cal_coeff_1234.csv +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/data/calibration.csv +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/data/calibration.yaml +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/data/command.yaml +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/data/corrupt.yaml +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/data/data-file.txt +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/data/empty_data_file.txt +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/data/empty_yaml_file.yaml +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/data/local_settings.yaml +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/data/new_local_settings.yaml +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/data/test_setup.yaml +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/icons/hourglass.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/icons/keyboard.png +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/icons/soap_sponge.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/lib/dev1/shared-lib.so +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/data/lib/dev2/shared-lib.so +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/fixtures/default_env.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/fixtures/helpers.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/scripts/empty_process.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/scripts/handle_sigterm.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/scripts/process_with_children.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/scripts/raise_value_error.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/scripts/void-0.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/scripts/void-1.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_bits.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_config.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_decorators.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_device.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_env.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_fixtures.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_hk.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_influxdb_plugin.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_log.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_metrics.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_plugin.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_process.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_resource.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_response.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_settings.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_setup.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_signal.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_state.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_system.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_task.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_version.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-common/tests/test_zmq_ser.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-coordinates/README.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-coordinates/src/cgse_coordinates/__init__.py +0 -0
- cgse-0.17.3/identifier.sqlite → cgse-0.17.4/libs/cgse-coordinates/src/cgse_coordinates/settings.yaml +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-coordinates/tests/test_ref_model.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/README.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/cgse_core/__init__.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/cgse_core/_start.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/cgse_core/_status.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/cgse_core/cgse_explore.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/cgse_core/services.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/cgse_core/settings.yaml +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/_setup_core.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/command.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/confman/__init__.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/confman/__main__.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/confman/confman.yaml +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/confman/confman_cs.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/icons/busy.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/icons/operational-mode.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/icons/pm_ui.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/icons/simulator-mode.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/icons/start-process-button.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/icons/stop-process-button.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/icons/user-interface.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/listener.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/logger/__main__.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/logger/log_cs.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/mixin.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/monitoring.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/notifyhub/__init__.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/notifyhub/client.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/notifyhub/event.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/notifyhub/services.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/procman/__init__.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/procman/procman.yaml +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/procman/procman_protocol.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/protocol.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/proxy.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/registry/__init__.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/registry/backend.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/services.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/services.yaml +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/storage/__init__.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/storage/__main__.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/storage/persistence.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/storage/storage.yaml +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/src/egse/storage/storage_cs.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/conftest.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/data/local_settings.yaml +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/fixtures/default_env.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/script_subscribe_to_notifyhub.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/script_test_async_registry_client.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/script_test_registry_client_server.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/script_test_service_registry_server.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/script_test_sync_registry_client.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/services.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/stress_test_registry_server.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/test_command.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/test_confman_setups.py +1 -1
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/test_control.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/test_extensions.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/test_listener.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/test_mixin.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/test_notify_hub.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/test_protocol.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/test_registry_backend.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-core/tests/test_settings_core.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/README.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/__init__.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/buttons.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-start.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-stop.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/aeu-cs.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-started.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-stopped.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/aeu_cs.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/alert.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/arrow-double-left.png +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/arrow-double-right.png +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/arrow-up.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/backward.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/busy.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/cleaning.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/color-scheme.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/cs-connected-alert.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/cs-connected-disabled.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/cs-connected.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/cs-not-connected.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/double-left-arrow.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/double-right-arrow.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/erase-disabled.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/erase.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/fitsgen-start.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/fitsgen-stop.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/fitsgen.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/forward.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/fov-hk-start.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/fov-hk-stop.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/fov-hk.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/front-desk.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/home-actioned.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/home-disabled.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/home.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/info.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/invalid.png +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/led-green.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/led-grey.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/led-orange.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/led-red.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/led-square-green.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/led-square-grey.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/led-square-orange.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/led-square-red.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-green.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-red.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el+.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el-.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/location-marker.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/logo-dpu.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/logo-gimbal.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/logo-huber.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/logo-ogse.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/logo-puna.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/logo-tcs.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/logo-zonda.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/maximize.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/meter.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/more.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-start.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-stop.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/observing-off.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/observing-on.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.png +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/ops-mode.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/play-green.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/plugged-disabled.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/plugged.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/pm_ui.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/power-button-green.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/power-button-red.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/power-button.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/radar.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/radioactive.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/reload.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/remote-control-off.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/remote-control-on.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/repeat-blue.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/repeat.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/settings.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/shrink.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/shutter.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/sign-off.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/sign-on.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/sim-mode.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/small-buttons-go.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/small-buttons-minus.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/small-buttons-plus.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/sponge.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/start-button-disabled.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/start-button.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/stop-button-disabled.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/stop-button.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/stop-red.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/stop.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/switch-disabled-square.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/switch-disabled.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/switch-off-square.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/switch-off.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/switch-on-square.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/switch-on.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/temperature-control.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/th_ui_logo.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/unplugged.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/unvalid.png +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/user-interface.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/vacuum.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/valid.png +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-dark.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-white.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/led.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/limitswitch.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/states.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/styles/dark.qss +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/styles/default.qss +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/styles.qss +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/switch.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/noxfile.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/overrides/.icons/custom/dbend-dark.svg +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/overrides/.icons/custom/dbend-light.svg +0 -0
- {cgse-0.17.3/projects/ariel/ariel-tcu/src/ariel_tcu → cgse-0.17.4/projects/ariel/ariel-facility/src/ariel_facility}/__init__.py +0 -0
- {cgse-0.17.3/projects/generic/cgse-tools/src/cgse_tools → cgse-0.17.4/projects/ariel/ariel-facility/src/egse/ariel/facility}/__init__.py +0 -0
- {cgse-0.17.3/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol → cgse-0.17.4/projects/ariel/ariel-tcu/src/ariel_tcu}/__init__.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/ariel/ariel-tcu/src/ariel_tcu/cgse_explore.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/ariel/ariel-tcu/src/ariel_tcu/cgse_services.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu.yaml +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/ariel/ariel-tcu/tests/test_tcu.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/ariel/ariel-tcu/tests/test_tcu_cmd_utils.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/cgse-tools/README.md +0 -0
- {cgse-0.17.3/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol → cgse-0.17.4/projects/generic/cgse-tools/src/cgse_tools}/__init__.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/cgse-tools/src/cgse_tools/cgse_clock.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/cgse-tools/src/cgse_tools/cgse_commands.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/cgse-tools/src/cgse_tools/cgse_services.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/cgse-tools/src/egse/tools/status.py +0 -0
- {cgse-0.17.3/projects/generic/symetrie-hexapod/src/symetrie_hexapod → cgse-0.17.4/projects/generic/digilent/src/digilent}/__init__.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/README.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/noxfile.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/__init__.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510.yaml +0 -0
- /cgse-0.17.3/projects/plato/plato-hdf5/README.md → /cgse-0.17.4/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/__init__.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/cgse_explore.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/settings.yaml +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/lakeshore-tempcontrol/README.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336.yaml +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_cs.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_devif.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_protocol.py +0 -0
- /cgse-0.17.3/projects/plato/plato-spw/README.md → /cgse-0.17.4/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/__init__.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/cgse_explore.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/cgse_services.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/settings.yaml +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/lakeshore-tempcontrol/tests/test_lakeshore336_simulator.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/README.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/__init__.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/__init__.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/alpha.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod_ui.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.yaml +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_ui.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac_regex.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.yaml +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_protocol.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/punaplus.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.yaml +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_devif.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_protocol.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_ui.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/cgse_explore.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/cgse_services.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/tests/test_puna.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/generic/symetrie-hexapod/tests/test_puna_simulator.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/plato/plato-fits/README.md +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/plato/plato-fits/src/egse/plugins/storage/fits.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/plato/plato-hdf5/src/egse/plugins/storage/hdf5.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/projects/plato/plato-spw/src/egse/spw.py +0 -0
- {cgse-0.17.3 → cgse-0.17.4}/ruff.toml +0 -0
|
@@ -8,6 +8,14 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
|
8
8
|
|
|
9
9
|
## [Unreleased]
|
|
10
10
|
|
|
11
|
+
## [0.17.4] - 2026-01-27
|
|
12
|
+
|
|
13
|
+
- Extracting HK from Ariel facility database
|
|
14
|
+
- Re-shuffled hexapod settings
|
|
15
|
+
- Cleaned up cgse-coordinates
|
|
16
|
+
- Maintenance on cgse-core
|
|
17
|
+
- Implementation of Digilent MEASURpoint DT8874
|
|
18
|
+
|
|
11
19
|
|
|
12
20
|
## [0.17.3] - 2025-11-29
|
|
13
21
|
|
|
@@ -33,9 +41,9 @@ This release is mainly on maintenance and improvements to the `cgse-common` pack
|
|
|
33
41
|
- Changed the return value of the different `get_version_*()` functions to return "0.0.0" when the version cannot
|
|
34
42
|
be determined. Previously, these functions returned None. [#215]
|
|
35
43
|
- Improvements to `redirect_output_to_log()`: the file can be an absolute path, added a guard to overwrite [#217]
|
|
36
|
-
- A warning message is now logged when you try to read the last few lines from a non-existing file
|
|
44
|
+
- A warning message is now logged when you try to read the last few lines from a non-existing file [#218]
|
|
37
45
|
- InitializationError = InitialisationError, to be conform to the styling guide promoting the use of standard
|
|
38
|
-
American English for code, comments and docs
|
|
46
|
+
American English for code, comments and docs [#218]
|
|
39
47
|
|
|
40
48
|
### Added
|
|
41
49
|
- Added a `from_string()` class method to Settings. This is mainly for testing and when you need to load
|
|
@@ -202,7 +210,9 @@ This release is mainly on maintenance and improvements to the `cgse-common` pack
|
|
|
202
210
|
- Renamed `cgse` subcommands `registry` → `reg`, `notify` → `not`.
|
|
203
211
|
|
|
204
212
|
|
|
205
|
-
[Unreleased]: https://github.com/IvS-KULeuven/cgse/compare/v0.17.
|
|
213
|
+
[Unreleased]: https://github.com/IvS-KULeuven/cgse/compare/v0.17.3...HEAD
|
|
214
|
+
[0.17.3]: https://github.com/IvS-KULeuven/cgse/compare/v0.17.2...v0.17.3
|
|
215
|
+
[0.17.2]: https://github.com/IvS-KULeuven/cgse/compare/v0.17.1...v0.17.2
|
|
206
216
|
[0.17.1]: https://github.com/IvS-KULeuven/cgse/compare/v0.17.0...v0.17.1
|
|
207
217
|
[0.17.0]: https://github.com/IvS-KULeuven/cgse/compare/v0.16.14...v0.17.0
|
|
208
218
|
[0.16.14]: https://github.com/IvS-KULeuven/cgse/compare/v0.16.13...v0.16.14
|
|
@@ -221,6 +231,8 @@ This release is mainly on maintenance and improvements to the `cgse-common` pack
|
|
|
221
231
|
[0.16.1]: https://github.com/IvS-KULeuven/cgse/compare/v0.16.0...v0.16.1
|
|
222
232
|
[0.16.0]: https://github.com/IvS-KULeuven/cgse/compare/v0.15.1...v0.16.0
|
|
223
233
|
|
|
234
|
+
[#219]: https://github.com/IvS-KULeuven/cgse/pull/219
|
|
235
|
+
[#218]: https://github.com/IvS-KULeuven/cgse/pull/218
|
|
224
236
|
[#217]: https://github.com/IvS-KULeuven/cgse/pull/217
|
|
225
237
|
[#216]: https://github.com/IvS-KULeuven/cgse/pull/216
|
|
226
238
|
[#215]: https://github.com/IvS-KULeuven/cgse/pull/215
|
|
@@ -1,32 +1,65 @@
|
|
|
1
|
+
## Making a release
|
|
1
2
|
|
|
2
|
-
|
|
3
|
+
The first thing to do is to properly format your code changes, run:
|
|
3
4
|
|
|
4
|
-
|
|
5
|
+
```bash
|
|
6
|
+
uvx ruff format
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
You should be on the branch with the developments that you want to push and merge the pull request on GitHub before making the release.
|
|
5
10
|
|
|
6
|
-
- run `uvx ruff format`
|
|
7
11
|
- commit all changes with a proper message
|
|
12
|
+
- push changes to `origin`
|
|
13
|
+
- create a pull request (possibly needs a review)
|
|
14
|
+
- merge the pull request
|
|
15
|
+
|
|
16
|
+
When all pull requests that should go into the release are merged, checkout main again and pull all the latest changes:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
git checkout main
|
|
20
|
+
git pull upstream main
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Now, create the release branch: e.g. `release/v0.17.3`
|
|
24
|
+
|
|
25
|
+
- `git checkout -b release/v0.17.3`
|
|
8
26
|
- add all notable changes to the CHANGELOG file
|
|
9
27
|
- fix the links in the headers if needed
|
|
10
28
|
- add links to the different pull requests
|
|
11
29
|
- commit the CHANGELOG file
|
|
12
30
|
- bump the version number: `uv run bump.py [patch|minor|major]`
|
|
13
31
|
- commit all `pyproject.toml` files after the version bump
|
|
14
|
-
- push the changes to
|
|
32
|
+
- push the changes to `origin`
|
|
15
33
|
- create (and merge) a pull request, use the CHANGELOG as description
|
|
16
|
-
- remove the old distributions: `rm -r dist`
|
|
17
34
|
|
|
18
|
-
In order to prevent publishing all changes and untracked files
|
|
19
|
-
|
|
35
|
+
In order to prevent publishing all remaining uncommitted changes and untracked files too, stash all changes and untracked files:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
git stash push -u -m "All development work"
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Publish the new release
|
|
42
|
+
|
|
43
|
+
(also check the docs: [Building and publishing packages](https://ivs-kuleuven.github.io/cgse/dev_guide/uv/#building-and-publishing-all-packages))
|
|
44
|
+
|
|
45
|
+
Now, build and publish the packages:
|
|
20
46
|
|
|
47
|
+
- remove the old distributions: `rm -r dist`
|
|
21
48
|
- build the packages: `uv build --all-packages`
|
|
22
49
|
- publish the packages to PyPI: `uv publish --token $UV_PUBLISH_TOKEN`
|
|
23
50
|
|
|
24
|
-
|
|
25
|
-
|
|
51
|
+
Put back the changes and untracked files:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
git checkout main
|
|
55
|
+
git pull upstream main
|
|
56
|
+
git stash pop
|
|
57
|
+
```
|
|
26
58
|
|
|
27
59
|
## Tag the new release
|
|
28
60
|
|
|
29
61
|
- create a tag for the commit of the bump: `git tag <version number> <commit hash>`, e.g. `git tag v0.16.0 559bbfc`
|
|
62
|
+
- you can find the commit hash with: `git log --oneline`
|
|
30
63
|
- push the tag to upstream: `git push upstream <tag name>`, e.g. `git push upstream v0.16.0`
|
|
31
64
|
|
|
32
65
|
|
|
@@ -339,6 +339,76 @@ 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
|
+
|
|
342
412
|
class DeviceFactoryInterface:
|
|
343
413
|
"""
|
|
344
414
|
Base class for creating a device factory class to access devices.
|
|
@@ -51,8 +51,8 @@ class TmDictionaryColumns(str, Enum):
|
|
|
51
51
|
""" # noqa
|
|
52
52
|
|
|
53
53
|
STORAGE_MNEMONIC = "Storage mnemonic"
|
|
54
|
-
CORRECT_HK_NAMES = "
|
|
55
|
-
ORIGINAL_EGSE_HK_NAMES = "Original name in
|
|
54
|
+
CORRECT_HK_NAMES = "CGSE mnemonic"
|
|
55
|
+
ORIGINAL_EGSE_HK_NAMES = "Original name in CGSE"
|
|
56
56
|
SYNOPTICS_ORIGIN = f"Origin of synoptics at {get_site_id()}"
|
|
57
57
|
TIMESTAMP_NAMES = "Name of corresponding timestamp"
|
|
58
58
|
DESCRIPTION = "Description"
|
|
@@ -131,6 +131,14 @@ for handler in root_logger.handlers:
|
|
|
131
131
|
handler.addFilter(NonEGSEFilter())
|
|
132
132
|
handler.addFilter(PackageFilter())
|
|
133
133
|
|
|
134
|
+
try:
|
|
135
|
+
from textual.logging import TextualHandler
|
|
136
|
+
|
|
137
|
+
root_logger.addHandler(TextualHandler())
|
|
138
|
+
except ImportError:
|
|
139
|
+
pass
|
|
140
|
+
|
|
141
|
+
|
|
134
142
|
logger = egse_logger
|
|
135
143
|
|
|
136
144
|
if __name__ == "__main__":
|
|
@@ -4,17 +4,23 @@ from typing import Any
|
|
|
4
4
|
from typing import Dict
|
|
5
5
|
from typing import Optional
|
|
6
6
|
|
|
7
|
+
from egse.device import AsyncDeviceInterface
|
|
7
8
|
from egse.device import AsyncDeviceTransport
|
|
8
9
|
from egse.device import DeviceConnectionError
|
|
9
10
|
from egse.device import DeviceError
|
|
10
11
|
from egse.device import DeviceTimeoutError
|
|
12
|
+
from egse.env import bool_env
|
|
11
13
|
from egse.log import logger
|
|
12
14
|
|
|
13
|
-
# Constants that can be overridden by specific device implementations
|
|
14
15
|
DEFAULT_READ_TIMEOUT = 1.0 # seconds
|
|
15
16
|
DEFAULT_CONNECT_TIMEOUT = 3.0 # seconds
|
|
16
17
|
IDENTIFICATION_QUERY = "*IDN?"
|
|
17
18
|
|
|
19
|
+
VERBOSE_DEBUG = bool_env("VERBOSE_DEBUG")
|
|
20
|
+
|
|
21
|
+
SEPARATOR = b"\n"
|
|
22
|
+
SEPARATOR_STR = SEPARATOR.decode()
|
|
23
|
+
|
|
18
24
|
|
|
19
25
|
class SCPICommand:
|
|
20
26
|
"""Base class for SCPI commands."""
|
|
@@ -32,7 +38,7 @@ class SCPICommand:
|
|
|
32
38
|
raise NotImplementedError("Subclasses must implement get_cmd_string().")
|
|
33
39
|
|
|
34
40
|
|
|
35
|
-
class AsyncSCPIInterface(AsyncDeviceTransport):
|
|
41
|
+
class AsyncSCPIInterface(AsyncDeviceInterface, AsyncDeviceTransport):
|
|
36
42
|
"""Generic asynchronous interface for devices that use SCPI commands over Ethernet."""
|
|
37
43
|
|
|
38
44
|
def __init__(
|
|
@@ -56,7 +62,9 @@ class AsyncSCPIInterface(AsyncDeviceTransport):
|
|
|
56
62
|
read_timeout: Timeout for read operations in seconds
|
|
57
63
|
id_validation: String that should appear in the device's identification response
|
|
58
64
|
"""
|
|
59
|
-
|
|
65
|
+
super().__init__()
|
|
66
|
+
|
|
67
|
+
self._device_name = device_name
|
|
60
68
|
self.hostname = hostname
|
|
61
69
|
self.port = port
|
|
62
70
|
self.settings = settings or {}
|
|
@@ -70,8 +78,66 @@ class AsyncSCPIInterface(AsyncDeviceTransport):
|
|
|
70
78
|
self._connect_lock = asyncio.Lock()
|
|
71
79
|
"""Prevents multiple, simultaneous connect or disconnect attempts."""
|
|
72
80
|
self._io_lock = asyncio.Lock()
|
|
73
|
-
"""Prevents multiple coroutines from attempting to read, write or query from the same stream
|
|
74
|
-
|
|
81
|
+
"""Prevents multiple coroutines from attempting to read, write or query from the same stream at the same time."""
|
|
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
|
|
75
141
|
|
|
76
142
|
async def connect(self) -> None:
|
|
77
143
|
"""Connect to the device asynchronously.
|
|
@@ -84,47 +150,51 @@ class AsyncSCPIInterface(AsyncDeviceTransport):
|
|
|
84
150
|
async with self._connect_lock:
|
|
85
151
|
# Sanity checks
|
|
86
152
|
if self._is_connection_open:
|
|
87
|
-
logger.warning(f"{self.
|
|
153
|
+
logger.warning(f"{self._device_name}: Trying to connect to an already connected device.")
|
|
88
154
|
return
|
|
89
155
|
|
|
90
156
|
if not self.hostname:
|
|
91
|
-
raise ValueError(f"{self.
|
|
157
|
+
raise ValueError(f"{self._device_name}: Hostname is not initialized.")
|
|
92
158
|
|
|
93
159
|
if not self.port:
|
|
94
|
-
raise ValueError(f"{self.
|
|
160
|
+
raise ValueError(f"{self._device_name}: Port number is not initialized.")
|
|
95
161
|
|
|
96
162
|
# Attempt to establish a connection
|
|
97
163
|
try:
|
|
98
|
-
logger.debug(f'Connecting to {self.
|
|
164
|
+
logger.debug(f'Connecting to {self._device_name} at "{self.hostname}" using port {self.port}')
|
|
99
165
|
|
|
100
166
|
connect_task = asyncio.open_connection(self.hostname, self.port)
|
|
101
167
|
self._reader, self._writer = await asyncio.wait_for(connect_task, timeout=self.connect_timeout)
|
|
102
168
|
|
|
103
169
|
self._is_connection_open = True
|
|
104
170
|
|
|
105
|
-
|
|
171
|
+
response = await self.read_string()
|
|
172
|
+
if VERBOSE_DEBUG:
|
|
173
|
+
logger.debug(f"Response after connection: {response}")
|
|
174
|
+
|
|
175
|
+
logger.debug(f"Successfully connected to {self._device_name}.")
|
|
106
176
|
|
|
107
177
|
except asyncio.TimeoutError as exc:
|
|
108
178
|
raise DeviceTimeoutError(
|
|
109
|
-
self.
|
|
179
|
+
self._device_name, f"Connection to {self.hostname}:{self.port} timed out"
|
|
110
180
|
) from exc
|
|
111
181
|
except ConnectionRefusedError as exc:
|
|
112
182
|
raise DeviceConnectionError(
|
|
113
|
-
self.
|
|
183
|
+
self._device_name, f"Connection refused to {self.hostname}:{self.port}"
|
|
114
184
|
) from exc
|
|
115
185
|
except socket.gaierror as exc:
|
|
116
|
-
raise DeviceConnectionError(self.
|
|
186
|
+
raise DeviceConnectionError(self._device_name, f"Address resolution error for {self.hostname}") from exc
|
|
117
187
|
except socket.herror as exc:
|
|
118
|
-
raise DeviceConnectionError(self.
|
|
188
|
+
raise DeviceConnectionError(self._device_name, f"Host address error for {self.hostname}") from exc
|
|
119
189
|
except OSError as exc:
|
|
120
|
-
raise DeviceConnectionError(self.
|
|
190
|
+
raise DeviceConnectionError(self._device_name, f"OS error: {exc}") from exc
|
|
121
191
|
|
|
122
192
|
# Validate device identity if requested
|
|
123
193
|
if self.id_validation:
|
|
124
194
|
logger.debug("Validating connection..")
|
|
125
195
|
if not await self.is_connected():
|
|
126
196
|
await self.disconnect()
|
|
127
|
-
raise DeviceConnectionError(self.
|
|
197
|
+
raise DeviceConnectionError(self._device_name, "Device connected but failed identity verification")
|
|
128
198
|
|
|
129
199
|
async def disconnect(self) -> None:
|
|
130
200
|
"""Disconnect from the device asynchronously.
|
|
@@ -135,22 +205,20 @@ class AsyncSCPIInterface(AsyncDeviceTransport):
|
|
|
135
205
|
async with self._connect_lock:
|
|
136
206
|
try:
|
|
137
207
|
if self._is_connection_open and self._writer is not None:
|
|
138
|
-
logger.debug(f"Disconnecting from {self.
|
|
208
|
+
logger.debug(f"Disconnecting from {self._device_name} at {self.hostname}")
|
|
139
209
|
self._writer.close()
|
|
140
210
|
await self._writer.wait_closed()
|
|
141
211
|
self._writer = None
|
|
142
212
|
self._reader = None
|
|
143
213
|
self._is_connection_open = False
|
|
144
214
|
except Exception as exc:
|
|
145
|
-
raise DeviceConnectionError(self.
|
|
215
|
+
raise DeviceConnectionError(self._device_name, f"Could not close connection: {exc}") from exc
|
|
146
216
|
|
|
147
217
|
async def reconnect(self) -> None:
|
|
148
218
|
"""Reconnect to the device asynchronously."""
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
await asyncio.sleep(0.1)
|
|
153
|
-
await self.connect()
|
|
219
|
+
await self.disconnect()
|
|
220
|
+
await asyncio.sleep(0.1)
|
|
221
|
+
await self.connect()
|
|
154
222
|
|
|
155
223
|
async def is_connected(self) -> bool:
|
|
156
224
|
"""Check if the device is connected and responds correctly to identification.
|
|
@@ -168,7 +236,7 @@ class AsyncSCPIInterface(AsyncDeviceTransport):
|
|
|
168
236
|
# Validate the response if validation string is provided
|
|
169
237
|
if self.id_validation and self.id_validation not in id_response:
|
|
170
238
|
logger.error(
|
|
171
|
-
f"{self.
|
|
239
|
+
f"{self._device_name}: Device did not respond correctly to identification query. "
|
|
172
240
|
f'Expected "{self.id_validation}" in response, got: {id_response}'
|
|
173
241
|
)
|
|
174
242
|
await self.disconnect()
|
|
@@ -177,8 +245,7 @@ class AsyncSCPIInterface(AsyncDeviceTransport):
|
|
|
177
245
|
return True
|
|
178
246
|
|
|
179
247
|
except DeviceError as exc:
|
|
180
|
-
logger.
|
|
181
|
-
logger.error(f"{self.device_name}: Connection test failed")
|
|
248
|
+
logger.error(f"{self._device_name}: Connection test failed: {exc}", exc_info=True)
|
|
182
249
|
await self.disconnect()
|
|
183
250
|
return False
|
|
184
251
|
|
|
@@ -195,19 +262,20 @@ class AsyncSCPIInterface(AsyncDeviceTransport):
|
|
|
195
262
|
async with self._io_lock:
|
|
196
263
|
try:
|
|
197
264
|
if not self._is_connection_open or self._writer is None:
|
|
198
|
-
raise DeviceConnectionError(self.
|
|
265
|
+
raise DeviceConnectionError(self._device_name, "Device not connected, use connect() first")
|
|
199
266
|
|
|
200
|
-
# Ensure command ends with
|
|
201
|
-
if not command.endswith(
|
|
202
|
-
command +=
|
|
267
|
+
# Ensure command ends with the proper separator or terminator
|
|
268
|
+
if not command.endswith(SEPARATOR_STR):
|
|
269
|
+
command += SEPARATOR_STR
|
|
203
270
|
|
|
271
|
+
logger.info(f"-----> {command}")
|
|
204
272
|
self._writer.write(command.encode())
|
|
205
273
|
await self._writer.drain()
|
|
206
274
|
|
|
207
275
|
except asyncio.TimeoutError as exc:
|
|
208
|
-
raise DeviceTimeoutError(self.
|
|
276
|
+
raise DeviceTimeoutError(self._device_name, "Write operation timed out") from exc
|
|
209
277
|
except (ConnectionError, OSError) as exc:
|
|
210
|
-
raise DeviceConnectionError(self.
|
|
278
|
+
raise DeviceConnectionError(self._device_name, f"Communication error: {exc}") from exc
|
|
211
279
|
|
|
212
280
|
async def read(self) -> bytes:
|
|
213
281
|
"""
|
|
@@ -222,7 +290,7 @@ class AsyncSCPIInterface(AsyncDeviceTransport):
|
|
|
222
290
|
"""
|
|
223
291
|
async with self._io_lock:
|
|
224
292
|
if not self._is_connection_open or self._reader is None:
|
|
225
|
-
raise DeviceConnectionError(self.
|
|
293
|
+
raise DeviceConnectionError(self._device_name, "Device not connected, use connect() first")
|
|
226
294
|
|
|
227
295
|
try:
|
|
228
296
|
# First, small delay to allow device to prepare response
|
|
@@ -231,18 +299,19 @@ class AsyncSCPIInterface(AsyncDeviceTransport):
|
|
|
231
299
|
# Try to read until newline (common SCPI terminator)
|
|
232
300
|
try:
|
|
233
301
|
response = await asyncio.wait_for(
|
|
234
|
-
self._reader.readuntil(separator=
|
|
302
|
+
self._reader.readuntil(separator=SEPARATOR), timeout=self.read_timeout
|
|
235
303
|
)
|
|
304
|
+
logger.info(f"<----- {response}")
|
|
236
305
|
return response
|
|
237
306
|
|
|
238
307
|
except asyncio.IncompleteReadError as exc:
|
|
239
308
|
# Connection closed before receiving full response
|
|
240
|
-
logger.warning(f"{self.
|
|
241
|
-
return exc.partial if exc.partial else
|
|
309
|
+
logger.warning(f"{self._device_name}: Incomplete read, got {len(exc.partial)} bytes")
|
|
310
|
+
return exc.partial if exc.partial else SEPARATOR
|
|
242
311
|
|
|
243
312
|
except asyncio.LimitOverrunError:
|
|
244
313
|
# Response too large for buffer
|
|
245
|
-
logger.warning(f"{self.
|
|
314
|
+
logger.warning(f"{self._device_name}: Response exceeded buffer limits")
|
|
246
315
|
# Fall back to reading a large chunk
|
|
247
316
|
return await asyncio.wait_for(
|
|
248
317
|
self._reader.read(8192), # Larger buffer for exceptional cases
|
|
@@ -250,9 +319,9 @@ class AsyncSCPIInterface(AsyncDeviceTransport):
|
|
|
250
319
|
)
|
|
251
320
|
|
|
252
321
|
except asyncio.TimeoutError as exc:
|
|
253
|
-
raise DeviceTimeoutError(self.
|
|
322
|
+
raise DeviceTimeoutError(self._device_name, "Read operation timed out") from exc
|
|
254
323
|
except Exception as exc:
|
|
255
|
-
raise DeviceConnectionError(self.
|
|
324
|
+
raise DeviceConnectionError(self._device_name, f"Read error: {exc}") from exc
|
|
256
325
|
|
|
257
326
|
async def trans(self, command: str) -> bytes:
|
|
258
327
|
"""
|
|
@@ -273,33 +342,35 @@ class AsyncSCPIInterface(AsyncDeviceTransport):
|
|
|
273
342
|
async with self._io_lock:
|
|
274
343
|
try:
|
|
275
344
|
if not self._is_connection_open or self._writer is None:
|
|
276
|
-
raise DeviceConnectionError(self.
|
|
345
|
+
raise DeviceConnectionError(self._device_name, "Device not connected, use connect() first")
|
|
277
346
|
|
|
278
|
-
# Ensure command ends with
|
|
279
|
-
if not command.endswith(
|
|
280
|
-
command +=
|
|
347
|
+
# Ensure command ends with the required terminator
|
|
348
|
+
if not command.endswith(SEPARATOR_STR):
|
|
349
|
+
command += SEPARATOR_STR
|
|
281
350
|
|
|
351
|
+
logger.info(f"-----> {command=}")
|
|
282
352
|
self._writer.write(command.encode())
|
|
283
353
|
await self._writer.drain()
|
|
284
354
|
|
|
285
|
-
# First, small delay to allow device to prepare response
|
|
355
|
+
# First, small delay to allow the device to prepare a response
|
|
286
356
|
await asyncio.sleep(0.01)
|
|
287
357
|
|
|
288
|
-
# Try to read until
|
|
358
|
+
# Try to read until the required separator (common SCPI terminator)
|
|
289
359
|
try:
|
|
290
360
|
response = await asyncio.wait_for(
|
|
291
|
-
self._reader.readuntil(separator=
|
|
361
|
+
self._reader.readuntil(separator=SEPARATOR), timeout=self.read_timeout
|
|
292
362
|
)
|
|
363
|
+
logger.info(f"<----- {response=}")
|
|
293
364
|
return response
|
|
294
365
|
|
|
295
366
|
except asyncio.IncompleteReadError as exc:
|
|
296
367
|
# Connection closed before receiving full response
|
|
297
|
-
logger.warning(f"{self.
|
|
298
|
-
return exc.partial if exc.partial else
|
|
368
|
+
logger.warning(f"{self._device_name}: Incomplete read, got {len(exc.partial)} bytes")
|
|
369
|
+
return exc.partial if exc.partial else SEPARATOR
|
|
299
370
|
|
|
300
371
|
except asyncio.LimitOverrunError:
|
|
301
372
|
# Response too large for buffer
|
|
302
|
-
logger.warning(f"{self.
|
|
373
|
+
logger.warning(f"{self._device_name}: Response exceeded buffer limits")
|
|
303
374
|
# Fall back to reading a large chunk
|
|
304
375
|
return await asyncio.wait_for(
|
|
305
376
|
self._reader.read(8192), # Larger buffer for exceptional cases
|
|
@@ -307,11 +378,11 @@ class AsyncSCPIInterface(AsyncDeviceTransport):
|
|
|
307
378
|
)
|
|
308
379
|
|
|
309
380
|
except asyncio.TimeoutError as exc:
|
|
310
|
-
raise DeviceTimeoutError(self.
|
|
381
|
+
raise DeviceTimeoutError(self._device_name, "Communication timed out") from exc
|
|
311
382
|
except (ConnectionError, OSError) as exc:
|
|
312
|
-
raise DeviceConnectionError(self.
|
|
383
|
+
raise DeviceConnectionError(self._device_name, f"Communication error: {exc}") from exc
|
|
313
384
|
except Exception as exc:
|
|
314
|
-
raise DeviceConnectionError(self.
|
|
385
|
+
raise DeviceConnectionError(self._device_name, f"Transaction error: {exc}") from exc
|
|
315
386
|
|
|
316
387
|
async def __aenter__(self):
|
|
317
388
|
"""Async context manager entry."""
|