cgse 0.12.1__tar.gz → 0.13.0__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.12.1 → cgse-0.13.0}/PKG-INFO +1 -1
- {cgse-0.12.1 → cgse-0.13.0}/docs/libs/cgse-core/registry.md +3 -2
- {cgse-0.12.1 → cgse-0.13.0}/docs/roadmap.md +8 -5
- cgse-0.13.0/duckdb_metrics.db +0 -0
- cgse-0.13.0/duckdb_metrics.db.wal +0 -0
- cgse-0.13.0/libs/cgse-common/duckdb_metrics.db +0 -0
- cgse-0.13.0/libs/cgse-common/my-dcuckdb-timeseries.db +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/pyproject.toml +5 -4
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/service_registry.db +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/command.py +0 -41
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/control.py +21 -17
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/dummy.py +16 -1
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/metrics.py +122 -4
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/plugin.py +93 -6
- cgse-0.13.0/libs/cgse-common/src/egse/plugins/metrics/duckdb.py +442 -0
- cgse-0.13.0/libs/cgse-common/src/egse/plugins/metrics/influxdb.py +189 -0
- cgse-0.13.0/libs/cgse-common/src/egse/plugins/metrics/timescaledb.py +596 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/setup.py +69 -434
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/signal.py +5 -1
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/state.py +24 -66
- cgse-0.13.0/libs/cgse-common/tests/.coverage.girtab.80252.XZOQZiYx +0 -0
- cgse-0.13.0/libs/cgse-common/tests/.coverage.girtab.80253.XXVQVQVx +0 -0
- cgse-0.13.0/libs/cgse-common/tests/.coverage.girtab.80254.XKhSeTLx +0 -0
- cgse-0.13.0/libs/cgse-common/tests/.coverage.girtab.80264.XDdhJbzx +0 -0
- cgse-0.13.0/libs/cgse-common/tests/.coverage.girtab.80265.XUECESrx +0 -0
- cgse-0.13.0/libs/cgse-common/tests/test_client_server_interaction.py +107 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_command.py +0 -27
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_hk.py +18 -20
- cgse-0.13.0/libs/cgse-common/tests/test_influxdb_plugin.py +142 -0
- cgse-0.13.0/libs/cgse-common/tests/test_metrics.py +25 -0
- cgse-0.13.0/libs/cgse-common/tests/test_plugin.py +29 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_process.py +1 -1
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_setup.py +31 -26
- cgse-0.13.0/libs/cgse-common/tests/test_state.py +9 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/pyproject.toml +1 -1
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/src/egse/coordinates/__init__.py +27 -26
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/src/egse/coordinates/avoidance.py +1 -2
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/pyproject.toml +1 -1
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/cgse_core/settings.yaml +12 -4
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/confman/__init__.py +4 -2
- cgse-0.13.0/libs/cgse-core/src/egse/metricshub/server.py +271 -0
- cgse-0.13.0/libs/cgse-core/src/egse/notifyhub/__init__.py +8 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/notifyhub/server.py +38 -18
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/notifyhub/services.py +7 -4
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/notifyhub/test.py +2 -2
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/procman/procman_protocol.py +5 -1
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/storage/__init__.py +2 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/storage/persistence.py +2 -2
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/pyproject.toml +1 -1
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/cgse-tools/pyproject.toml +1 -1
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/pyproject.toml +1 -1
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_cs.py +40 -12
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_mon.py +1 -1
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_protocol.py +18 -35
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/cgse_services.py +21 -1
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/lakeshore-tempcontrol/pyproject.toml +1 -1
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/pyproject.toml +1 -1
- {cgse-0.12.1 → cgse-0.13.0}/projects/plato/plato-fits/pyproject.toml +1 -1
- {cgse-0.12.1 → cgse-0.13.0}/projects/plato/plato-hdf5/pyproject.toml +1 -1
- cgse-0.13.0/projects/plato/plato-spw/README.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/plato/plato-spw/pyproject.toml +1 -1
- {cgse-0.12.1 → cgse-0.13.0}/projects/plato/plato-spw/src/egse/spw.py +22 -7
- {cgse-0.12.1 → cgse-0.13.0}/pyproject.toml +1 -1
- cgse-0.13.0/scratch/match-case.py +41 -0
- {cgse-0.12.1 → cgse-0.13.0}/service_registry.db +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/service_registry.db-shm +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/service_registry.db-wal +0 -0
- cgse-0.13.0/temperature_readings.log +43 -0
- cgse-0.12.1/check_import.py +0 -5
- cgse-0.12.1/libs/cgse-common/tests/test_client_server_interaction.py +0 -90
- cgse-0.12.1/requirements.txt +0 -1728
- cgse-0.12.1/scratch.py +0 -27
- {cgse-0.12.1 → cgse-0.13.0}/.github/workflows/ruff-format-check.yaml +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/.gitignore +0 -0
- /cgse-0.12.1/identifier.sqlite → /cgse-0.13.0/=0.5.1 +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/README.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/TODO.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/bump.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/conftest.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/api/bits.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/api/calibration.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/api/command.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/api/config.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/api/control.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/api/counter.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/api/decorators.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/api/device.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/api/dicts.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/api/dummy.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/api/env.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/api/exceptions.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/api/heartbeat.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/api/hk.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/api/index.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/api/listener.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/api/metrics.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/api/mixin.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/api/monitoring.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/api/observer.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/api/obsid.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/api/persistence.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/api/plugin.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/api/process.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/api/reload.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/api/settings.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/api/setup.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/api/system.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/custom_theme/main.html +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/dev_guide/coding_style.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/dev_guide/docs.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/dev_guide/index.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/dev_guide/installation.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/dev_guide/monitoring.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/dev_guide/monorepo.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/dev_guide/nox.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/dev_guide/plugins.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/dev_guide/project-configuration.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/dev_guide/unit_testing.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/dev_guide/uv.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/dev_guide/versioning.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/getting_started.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/help.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/images/github-fork-clone-dark.png +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/images/github-fork-clone.png +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/images/grafana-queries.png +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/images/icons/cgse-logo-blue.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/images/icons/cgse-logo.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/index.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/initialize.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/libs/cgse-common/images/load_methods.png +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/libs/cgse-common/index.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/libs/cgse-common/settings.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/libs/cgse-common/setup.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/libs/cgse-coordinates/index.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/libs/cgse-core/index.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/libs/cgse-gui/index.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/libs/index.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/package_list.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/projects/cgse-tools.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/projects/index.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/projects/symetrie-hexapod.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/stylesheets/custom.css +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/stylesheets/extra.css +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/tutorial.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/docs/user_guide/index.md +0 -0
- /cgse-0.12.1/libs/cgse-common/src/egse/py.typed → /cgse-0.13.0/identifier.sqlite +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/justfile +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/README.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/justfile +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/noxfile.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/cgse_common/__init__.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/cgse_common/cgse.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/cgse_common/settings.yaml +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/async_control_claude.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/bits.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/calibration.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/config.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/counter.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/decorators.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/device.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/dicts.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/env.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/exceptions.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/heartbeat.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/hk.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/listener.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/mixin.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/monitoring.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/observer.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/obsid.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/persistence.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/process.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/protocol.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/proxy.py +0 -0
- /cgse-0.12.1/libs/cgse-common/tests/data/conf/config-file.toml → /cgse-0.13.0/libs/cgse-common/src/egse/py.typed +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/randomwalk.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/ratelimit.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/reload.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/resource.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/response.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/scpi.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/services.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/services.yaml +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/settings.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/settings.yaml +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/socketdevice.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/system.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/task.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/version.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/src/egse/zmq_ser.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/conftest.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/COPYING +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00028_201028_155259.yaml +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00029_201028_155331.yaml +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00030_210311_134043.yaml +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00080_210917_105245.yaml +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00081_210922_142259.yaml +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00082_210923_094458.yaml +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/CSL1/README.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/CSL2/README.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/IAS/README.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/INTA/README.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/LAB23/README.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00027_211119_140441.yaml +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00028_211119_160406.yaml +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00029_211119_172918.yaml +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00030_211122_103604.yaml +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00031_211123_124900.yaml +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/common/telemetry/tm-dictionary-default.csv +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/conf/SETUP_20250114_1519.yaml +0 -0
- /cgse-0.12.1/libs/cgse-common/tests/data/data/empty_data_file.txt → /cgse-0.13.0/libs/cgse-common/tests/data/conf/config-file.toml +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/data/cal_coeff_1234.csv +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/data/calibration.csv +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/data/calibration.yaml +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/data/command.yaml +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/data/corrupt.yaml +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/data/data-file.txt +0 -0
- /cgse-0.12.1/libs/cgse-common/tests/data/data/empty_yaml_file.yaml → /cgse-0.13.0/libs/cgse-common/tests/data/data/empty_data_file.txt +0 -0
- /cgse-0.12.1/libs/cgse-common/tests/data/lib/dev1/shared-lib.so → /cgse-0.13.0/libs/cgse-common/tests/data/data/empty_yaml_file.yaml +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/data/local_settings.yaml +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/data/new_local_settings.yaml +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/data/test_setup.yaml +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/icons/hourglass.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/icons/keyboard.png +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/data/icons/soap_sponge.svg +0 -0
- {cgse-0.12.1/libs/cgse-common/tests/data/lib/dev2 → cgse-0.13.0/libs/cgse-common/tests/data/lib/dev1}/shared-lib.so +0 -0
- /cgse-0.12.1/libs/cgse-common/tests/test_control.py → /cgse-0.13.0/libs/cgse-common/tests/data/lib/dev2/shared-lib.so +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/fixtures/default_env.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/fixtures/helpers.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/scripts/empty_process.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/scripts/handle_sigterm.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/scripts/process_with_children.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/scripts/raise_value_error.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/scripts/void-0.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/scripts/void-1.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_bits.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_config.py +0 -0
- /cgse-0.12.1/libs/cgse-coordinates/src/cgse_coordinates/__init__.py → /cgse-0.13.0/libs/cgse-common/tests/test_control.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_decorators.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_device.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_env.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_fixtures.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_listener.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_mixin.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_protocol.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_ratelimit.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_resource.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_response.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_settings.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_signal.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_system.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_task.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-common/tests/test_zmq_ser.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/README.md +0 -0
- {cgse-0.12.1/libs/cgse-core/src/cgse_core → cgse-0.13.0/libs/cgse-coordinates/src/cgse_coordinates}/__init__.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/src/cgse_coordinates/settings.yaml +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/src/egse/coordinates/cslmodel.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/src/egse/coordinates/laser_tracker_to_dict.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/src/egse/coordinates/point.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/src/egse/coordinates/pyplot.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/src/egse/coordinates/referenceFrame.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/src/egse/coordinates/refmodel.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/src/egse/coordinates/rotationMatrix.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/src/egse/coordinates/transform3d_addon.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/tests/test_avoidance.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/tests/test_coordinates_plot.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/tests/test_coordinates_serialize.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/tests/test_point.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/tests/test_ref_model.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/tests/test_reference_frames.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-coordinates/tests/test_refmodel.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/.envrc.disabled +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/README.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/service_registry.db +0 -0
- {cgse-0.12.1/libs/cgse-core/src/egse/notifyhub → cgse-0.13.0/libs/cgse-core/src/cgse_core}/__init__.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/cgse_core/_start.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/cgse_core/_status.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/cgse_core/_stop.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/cgse_core/cgse_explore.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/cgse_core/services.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/async_control.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/confman/__main__.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/confman/confman.yaml +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/confman/confman_cs.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/icons/busy.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/icons/operational-mode.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/icons/pm_ui.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/icons/simulator-mode.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/icons/start-process-button.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/icons/stop-process-button.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/icons/user-interface.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/logger/__init__.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/logger/__main__.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/logger/log_cs.py +0 -0
- {cgse-0.12.1/projects/generic/cgse-tools/src/cgse_tools → cgse-0.13.0/libs/cgse-core/src/egse/metricshub}/__init__.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/notifyhub/event.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/procman/__init__.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/procman/procman.yaml +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/procman/procman_cs.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/procman/procman_ui.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/registry/__init__.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/registry/backend.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/registry/client.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/registry/server.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/registry/service.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/storage/__main__.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/storage/storage.yaml +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/src/egse/storage/storage_cs.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/conftest.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/data/local_settings.yaml +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/fixtures/default_env.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/fixtures/helpers.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/fixtures/services.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/script_test_async_registry_client.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/script_test_registry_client_server.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/script_test_service_registry_server.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/script_test_sync_registry_client.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/services.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/stress_test_registry_server.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/test_async_control.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/test_cm_cs.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/test_confman_setups.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/test_logger.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/test_registry_backend.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/test_registry_service.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/test_server_running.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/test_server_running_with_fixture.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/test_settings_core.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-core/tests/test_zmq_microservice.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/README.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/__init__.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/buttons.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-start.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-stop.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/aeu-cs.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-started.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-stopped.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/aeu_cs.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/alert.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/arrow-double-left.png +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/arrow-double-right.png +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/arrow-up.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/backward.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/busy.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/cleaning.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/color-scheme.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/cs-connected-alert.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/cs-connected-disabled.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/cs-connected.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/cs-not-connected.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/double-left-arrow.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/double-right-arrow.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/erase-disabled.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/erase.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/fitsgen-start.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/fitsgen-stop.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/fitsgen.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/forward.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/fov-hk-start.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/fov-hk-stop.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/fov-hk.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/front-desk.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/home-actioned.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/home-disabled.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/home.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/info.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/invalid.png +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/led-green.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/led-grey.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/led-orange.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/led-red.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/led-square-green.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/led-square-grey.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/led-square-orange.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/led-square-red.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-green.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-red.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el+.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el-.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/location-marker.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/logo-dpu.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/logo-gimbal.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/logo-huber.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/logo-ogse.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/logo-puna.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/logo-tcs.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/logo-zonda.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/maximize.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/meter.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/more.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-start.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-stop.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/observing-off.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/observing-on.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.png +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/ops-mode.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/play-green.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/plugged-disabled.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/plugged.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/pm_ui.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/power-button-green.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/power-button-red.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/power-button.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/radar.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/radioactive.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/reload.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/remote-control-off.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/remote-control-on.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/repeat-blue.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/repeat.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/settings.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/shrink.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/shutter.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/sign-off.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/sign-on.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/sim-mode.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/small-buttons-go.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/small-buttons-minus.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/small-buttons-plus.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/sponge.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/start-button-disabled.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/start-button.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/stop-button-disabled.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/stop-button.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/stop-red.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/stop.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/switch-disabled-square.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/switch-disabled.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/switch-off-square.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/switch-off.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/switch-on-square.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/switch-on.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/temperature-control.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/th_ui_logo.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/unplugged.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/unvalid.png +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/user-interface.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/vacuum.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/valid.png +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-dark.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-white.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/led.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/limitswitch.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/states.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/styles/dark.qss +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/styles/default.qss +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/styles.qss +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/libs/cgse-gui/src/egse/gui/switch.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/mkdocs.yml +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/noxfile.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/overrides/.icons/custom/dbend-dark.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/overrides/.icons/custom/dbend-light.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/overrides/.icons/custom/gear.svg +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/cgse-tools/README.md +0 -0
- {cgse-0.12.1/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol → cgse-0.13.0/projects/generic/cgse-tools/src/cgse_tools}/__init__.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/cgse-tools/src/cgse_tools/cgse_clock.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/cgse-tools/src/cgse_tools/cgse_commands.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/cgse-tools/src/cgse_tools/cgse_services.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/cgse-tools/src/egse/tools/status.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/README.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/justfile +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/noxfile.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/service_registry.db +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/__init__.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510.yaml +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_adev.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_dev.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_sim.py +0 -0
- {cgse-0.12.1/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol → cgse-0.13.0/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol}/__init__.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/cgse_explore.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/settings.yaml +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/temperature_readings.log +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/tests/script_daq6510_mon.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/tests/test_adev.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/keithley-tempcontrol/tests/test_dev.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/lakeshore-tempcontrol/README.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336.yaml +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_cs.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_devif.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_protocol.py +0 -0
- {cgse-0.12.1/projects/generic/symetrie-hexapod/src/symetrie_hexapod → cgse-0.13.0/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol}/__init__.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/cgse_explore.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/cgse_services.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/settings.yaml +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/lakeshore-tempcontrol/tests/test_lakeshore336_simulator.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/README.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/__init__.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/__init__.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/alpha.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/dynalpha.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod_ui.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.yaml +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_cs.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_protocol.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_ui.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac_regex.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.yaml +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_cs.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_protocol.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_sim.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_ui.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/punaplus.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.yaml +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_cs.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_devif.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_protocol.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_ui.py +0 -0
- /cgse-0.12.1/projects/plato/plato-hdf5/README.md → /cgse-0.13.0/projects/generic/symetrie-hexapod/src/symetrie_hexapod/__init__.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/cgse_explore.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/cgse_services.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/settings.yaml +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/tests/test_puna.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/tests/test_puna_cs.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/generic/symetrie-hexapod/tests/test_puna_simulator.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/plato/plato-fits/README.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/plato/plato-fits/src/egse/plugins/storage/fits.py +0 -0
- {cgse-0.12.1/projects/plato/plato-spw → cgse-0.13.0/projects/plato/plato-hdf5}/README.md +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/projects/plato/plato-hdf5/src/egse/plugins/storage/hdf5.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/ruff.toml +0 -0
- {cgse-0.12.1 → cgse-0.13.0/scratch}/advanced-process-monitoring.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0/scratch}/live-process-monitoring.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0/scratch}/processes.json +0 -0
- {cgse-0.12.1 → cgse-0.13.0/scratch}/simple-process-monitoring.py +0 -0
- {cgse-0.12.1 → cgse-0.13.0}/test_service_registry.db +0 -0
|
@@ -44,11 +44,12 @@ A microservice can register as follows:
|
|
|
44
44
|
from egse.registry.client import AsyncRegistryClient
|
|
45
45
|
|
|
46
46
|
registry_client = AsyncRegistryClient()
|
|
47
|
+
registry_client.connect()
|
|
47
48
|
|
|
48
49
|
service_id = await registry_client.register(
|
|
49
50
|
name=service_name,
|
|
50
|
-
host=
|
|
51
|
-
port=
|
|
51
|
+
host=hostname,
|
|
52
|
+
port=port_number,
|
|
52
53
|
service_type=service_type,
|
|
53
54
|
metadata={},
|
|
54
55
|
ttl=30,
|
|
@@ -31,20 +31,20 @@ Provide a `cgse` command that is extensible with new commands and command groups
|
|
|
31
31
|
|
|
32
32
|
- [ ] Reference Frames and coordinate transformations -> Graphs
|
|
33
33
|
- [ ] Metrics for all devices will be handled using InfluxDB
|
|
34
|
-
- [
|
|
34
|
+
- [x] Use of Grafana to visualize the metrics
|
|
35
35
|
|
|
36
36
|
## Core Services
|
|
37
37
|
|
|
38
38
|
- [ ] Process Manager needs to be added with optimised design and performance
|
|
39
39
|
- [ ] Synoptic Manager
|
|
40
40
|
- [x] Distributed Service Registry
|
|
41
|
-
- [
|
|
41
|
+
- [x] dynamic port assignment for all services -> service registry
|
|
42
42
|
|
|
43
43
|
## Devices
|
|
44
44
|
|
|
45
45
|
- [x] The Symétrie Hexapods: PUNA, ZONDA, JORAN
|
|
46
46
|
- [x] The Keithley Data Acquisition Multimeter
|
|
47
|
-
- [
|
|
47
|
+
- [x] The Lakeshore temperature controller
|
|
48
48
|
|
|
49
49
|
## Projects
|
|
50
50
|
|
|
@@ -72,7 +72,8 @@ Provide a `cgse` command that is extensible with new commands and command groups
|
|
|
72
72
|
|
|
73
73
|
## Removals
|
|
74
74
|
|
|
75
|
-
- [
|
|
75
|
+
- [x] The `get_common_egse_root()` is of no use anymore and needs to be
|
|
76
|
+
removed or replaced in some
|
|
76
77
|
cases.
|
|
77
78
|
|
|
78
79
|
## Testing
|
|
@@ -80,4 +81,6 @@ Provide a `cgse` command that is extensible with new commands and command groups
|
|
|
80
81
|
- [x] Add unit testing with `nox` running tests for Python 3.9, 3.10, 3.11, and 3.12
|
|
81
82
|
- [ ] Add proper unit tests for all packages – using `pytest`
|
|
82
83
|
- [ ] Add a CI test suite
|
|
83
|
-
- [ ]
|
|
84
|
+
- [ ] Add GitHub Action to check proper formatting of all the code in a pull
|
|
85
|
+
request
|
|
86
|
+
- [ ] Add GitHub Actions for running tests before merging
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "cgse-common"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.13.0"
|
|
4
4
|
description = "Software framework to support hardware testing"
|
|
5
5
|
authors = [
|
|
6
6
|
{name = "IvS KU Leuven"}
|
|
@@ -28,8 +28,7 @@ dependencies = [
|
|
|
28
28
|
"pyyaml>=6.0.2",
|
|
29
29
|
"rich>=13.9.4",
|
|
30
30
|
"typer>=0.15.1",
|
|
31
|
-
"navdict>=0.
|
|
32
|
-
|
|
31
|
+
"navdict>=0.5.9",
|
|
33
32
|
# Python 3.9 specific dependencies
|
|
34
33
|
"numpy==1.26.4; python_version == '3.9'",
|
|
35
34
|
"pandas==1.5.1; python_version == '3.9'",
|
|
@@ -38,10 +37,12 @@ dependencies = [
|
|
|
38
37
|
"numpy>=2.1; python_version >= '3.10'",
|
|
39
38
|
"pandas>=2.2.0; python_version >= '3.10'",
|
|
40
39
|
"pyzmq>=25.1.0; python_version >= '3.10'",
|
|
41
|
-
|
|
42
40
|
# Python 3.10+ entrypoints interface changed
|
|
43
41
|
"importlib_metadata>=4.6.0; python_version <= '3.11'",
|
|
44
42
|
"influxdb3-python",
|
|
43
|
+
"duckdb>=1.3.1",
|
|
44
|
+
"requests>=2.32.4",
|
|
45
|
+
"psycopg>=3.2.9",
|
|
45
46
|
]
|
|
46
47
|
|
|
47
48
|
[project.scripts]
|
|
Binary file
|
|
@@ -145,46 +145,6 @@ def stringify_function_call(function_info: dict) -> str:
|
|
|
145
145
|
return result
|
|
146
146
|
|
|
147
147
|
|
|
148
|
-
def dry_run(func: Callable) -> Callable:
|
|
149
|
-
"""This decorator prepares the function to handle a dry run.
|
|
150
|
-
|
|
151
|
-
A dry run is used to check the logic of an instrument commanding script without
|
|
152
|
-
actually executing the instrument commands. The commands are instead added to the
|
|
153
|
-
command sequence in the global state.
|
|
154
|
-
|
|
155
|
-
Args:
|
|
156
|
-
func: the function that needs to be executed
|
|
157
|
-
|
|
158
|
-
Returns:
|
|
159
|
-
A wrapper around the given function.
|
|
160
|
-
"""
|
|
161
|
-
|
|
162
|
-
@functools.wraps(func)
|
|
163
|
-
def func_wrapper(self, *args, **kwargs):
|
|
164
|
-
from egse.state import GlobalState # prevent circular import
|
|
165
|
-
|
|
166
|
-
if GlobalState.dry_run:
|
|
167
|
-
if callable(func) and func.__name__ == "client_call":
|
|
168
|
-
# This client_call function takes an additional argument which is the Proxy.
|
|
169
|
-
# the Proxy is not part of the CommandExecution signature and shall be removed
|
|
170
|
-
# FIXME: do we introduce a memory leak here by adding 'self' to this GlobalState?
|
|
171
|
-
args = args[1:]
|
|
172
|
-
try:
|
|
173
|
-
self.validate_arguments(*args, **kwargs)
|
|
174
|
-
except CommandError as e_ce:
|
|
175
|
-
GlobalState.add_command(InvalidCommandExecution(e_ce, self, *args, **kwargs))
|
|
176
|
-
else:
|
|
177
|
-
GlobalState.add_command(CommandExecution(self, *args, **kwargs))
|
|
178
|
-
else:
|
|
179
|
-
FunctionExecution = namedtuple("FunctionExecution", ["name", "args", "kwargs"])
|
|
180
|
-
GlobalState.add_command(FunctionExecution(func.__name__, args, kwargs))
|
|
181
|
-
return Success("Command execution appended to command sequence, function not executed in dry_run.")
|
|
182
|
-
else:
|
|
183
|
-
return func(self, *args, **kwargs)
|
|
184
|
-
|
|
185
|
-
return func_wrapper
|
|
186
|
-
|
|
187
|
-
|
|
188
148
|
def parse_format_string(fstring):
|
|
189
149
|
"""
|
|
190
150
|
Parse and decode the format string.
|
|
@@ -479,7 +439,6 @@ class Command:
|
|
|
479
439
|
|
|
480
440
|
|
|
481
441
|
class ClientServerCommand(Command):
|
|
482
|
-
@dry_run
|
|
483
442
|
def client_call(self, other: type, *args: tuple, **kwargs: dict) -> Any:
|
|
484
443
|
"""
|
|
485
444
|
This method is called at the client side. It is used by the Proxy
|
|
@@ -22,12 +22,15 @@ from urllib3.exceptions import NewConnectionError
|
|
|
22
22
|
from egse.decorators import retry
|
|
23
23
|
from egse.decorators import retry_with_exponential_backoff
|
|
24
24
|
from egse.listener import Listeners
|
|
25
|
+
from egse.metrics import get_metrics_repo
|
|
25
26
|
from egse.registry.client import RegistryClient
|
|
26
27
|
from egse.signal import FileBasedSignaling
|
|
27
28
|
from egse.system import SignalCatcher
|
|
28
29
|
from egse.system import camel_to_kebab
|
|
29
30
|
from egse.system import camel_to_snake
|
|
31
|
+
from egse.system import str_to_datetime
|
|
30
32
|
from egse.system import time_in_ms
|
|
33
|
+
from egse.system import type_name
|
|
31
34
|
from egse.zmq_ser import get_port_number
|
|
32
35
|
|
|
33
36
|
try:
|
|
@@ -47,9 +50,6 @@ from egse.system import get_average_execution_times
|
|
|
47
50
|
from egse.system import get_full_classname
|
|
48
51
|
from egse.system import get_host_ip
|
|
49
52
|
from egse.system import save_average_execution_time
|
|
50
|
-
from influxdb_client_3 import InfluxDBClient3
|
|
51
|
-
from influxdb_client_3.write_client.domain.write_precision import WritePrecision
|
|
52
|
-
from influxdb_client_3 import Point
|
|
53
53
|
|
|
54
54
|
_LOGGER = logging.getLogger(__name__)
|
|
55
55
|
|
|
@@ -179,12 +179,15 @@ class ControlServer(metaclass=abc.ABCMeta):
|
|
|
179
179
|
|
|
180
180
|
token = os.getenv("INFLUXDB3_AUTH_TOKEN")
|
|
181
181
|
project = os.getenv("PROJECT")
|
|
182
|
-
self.metrics_time_precision = WritePrecision.MS
|
|
183
182
|
|
|
184
183
|
if project and token:
|
|
185
|
-
self.
|
|
184
|
+
self.metrics_client = get_metrics_repo(
|
|
185
|
+
"influxdb", {"host": "http://localhost:8181", "database": project, "token": token}
|
|
186
|
+
)
|
|
187
|
+
# self.metrics_client = get_metrics_repo("duckdb", {"db_path": "duckdb_metrics.db", "table_name": "cs_timeseries"})
|
|
188
|
+
self.metrics_client.connect()
|
|
186
189
|
else:
|
|
187
|
-
self.
|
|
190
|
+
self.metrics_client = None
|
|
188
191
|
_LOGGER.warning(
|
|
189
192
|
"INFLUXDB3_AUTH_TOKEN and/or PROJECT environment variable is not set. "
|
|
190
193
|
"Metrics will not be propagated to InfluxDB."
|
|
@@ -545,7 +548,7 @@ class ControlServer(metaclass=abc.ABCMeta):
|
|
|
545
548
|
except Exception as exc:
|
|
546
549
|
_LOGGER.error(
|
|
547
550
|
textwrap.dedent(
|
|
548
|
-
f"""
|
|
551
|
+
f"""{type_name(exc)}
|
|
549
552
|
An Exception occurred while collecting housekeeping from the device to be stored in {self.get_storage_mnemonic()}.
|
|
550
553
|
This might be a temporary problem, still needs to be looked into:
|
|
551
554
|
|
|
@@ -659,20 +662,21 @@ class ControlServer(metaclass=abc.ABCMeta):
|
|
|
659
662
|
return
|
|
660
663
|
|
|
661
664
|
try:
|
|
662
|
-
if self.
|
|
663
|
-
|
|
664
|
-
"measurement": origin.lower(),
|
|
665
|
-
"tags": {"site_id": SITE_ID, "origin": origin},
|
|
666
|
-
"fields":
|
|
667
|
-
"time": hk["timestamp"],
|
|
665
|
+
if self.metrics_client:
|
|
666
|
+
point = {
|
|
667
|
+
"measurement": origin.lower(),
|
|
668
|
+
"tags": {"site_id": SITE_ID, "origin": origin},
|
|
669
|
+
"fields": {hk_name.lower(): hk[hk_name] for hk_name in hk if hk_name != "timestamp"},
|
|
670
|
+
"time": str_to_datetime(hk["timestamp"]),
|
|
668
671
|
}
|
|
669
|
-
|
|
670
|
-
self.client.write(point)
|
|
672
|
+
self.metrics_client.write(point)
|
|
671
673
|
else:
|
|
672
|
-
_LOGGER.warning(
|
|
674
|
+
_LOGGER.warning(
|
|
675
|
+
f"Could not write {origin} metrics to the time series database (self.metrics_client is None)."
|
|
676
|
+
)
|
|
673
677
|
except NewConnectionError:
|
|
674
678
|
_LOGGER.warning(
|
|
675
|
-
f"No connection to
|
|
679
|
+
f"No connection to the time series database could be established to propagate {origin} metrics. Check "
|
|
676
680
|
f"whether this service is (still) running."
|
|
677
681
|
)
|
|
678
682
|
|
|
@@ -52,7 +52,6 @@ from egse.listener import Event
|
|
|
52
52
|
from egse.listener import EventInterface
|
|
53
53
|
from egse.protocol import CommandProtocol
|
|
54
54
|
from egse.proxy import Proxy
|
|
55
|
-
from egse.response import Failure
|
|
56
55
|
from egse.settings import Settings
|
|
57
56
|
from egse.system import SignalCatcher
|
|
58
57
|
from egse.system import attrdict
|
|
@@ -648,6 +647,10 @@ def start_dev():
|
|
|
648
647
|
if not data:
|
|
649
648
|
_LOGGER.info("Connection closed by peer, waiting for connection..")
|
|
650
649
|
break # connection closed by peer
|
|
650
|
+
if data.decode().strip() == "QUIT":
|
|
651
|
+
_LOGGER.info("QUIT command received, terminating...")
|
|
652
|
+
quit_request = True
|
|
653
|
+
break
|
|
651
654
|
if (response := process_command(data.decode().rstrip())) is not None:
|
|
652
655
|
response = f"{response}\r\n".encode()
|
|
653
656
|
conn.sendall(response)
|
|
@@ -667,6 +670,18 @@ def start_dev():
|
|
|
667
670
|
_LOGGER.info("Dummy Device terminated.")
|
|
668
671
|
|
|
669
672
|
|
|
673
|
+
@app.command()
|
|
674
|
+
def stop_dev():
|
|
675
|
+
multiprocessing.current_process().name = "dummy_dev"
|
|
676
|
+
|
|
677
|
+
_LOGGER.info("Stopping the Dummy Device simulator")
|
|
678
|
+
|
|
679
|
+
dev = DummyDeviceEthernetInterface(DEV_HOST, DEV_PORT)
|
|
680
|
+
dev.connect()
|
|
681
|
+
dev.write("QUIT\n")
|
|
682
|
+
dev.disconnect()
|
|
683
|
+
|
|
684
|
+
|
|
670
685
|
COMMAND_ACTIONS_RESPONSES = {"info": (None, f"Dummy Device {__version__}"), "get_value": (None, random.random)}
|
|
671
686
|
|
|
672
687
|
|
|
@@ -1,14 +1,31 @@
|
|
|
1
|
+
__all__ = [
|
|
2
|
+
"DataPoint",
|
|
3
|
+
"TimeSeriesRepository",
|
|
4
|
+
"define_metrics",
|
|
5
|
+
"get_metrics_repo",
|
|
6
|
+
]
|
|
7
|
+
|
|
1
8
|
import logging
|
|
9
|
+
from dataclasses import dataclass
|
|
10
|
+
from typing import Any
|
|
2
11
|
from typing import Optional
|
|
12
|
+
from typing import Protocol
|
|
13
|
+
from typing import Self
|
|
3
14
|
|
|
4
15
|
import numpy as np
|
|
5
16
|
from prometheus_client import Gauge
|
|
6
17
|
|
|
7
18
|
from egse.hk import TmDictionaryColumns
|
|
19
|
+
from egse.plugin import load_plugins_fn
|
|
8
20
|
from egse.settings import Settings
|
|
9
|
-
from egse.setup import
|
|
21
|
+
from egse.setup import Setup
|
|
22
|
+
from egse.setup import SetupError
|
|
23
|
+
from egse.setup import load_setup
|
|
24
|
+
from egse.system import format_datetime
|
|
25
|
+
from egse.system import str_to_datetime
|
|
26
|
+
|
|
27
|
+
logger = logging.getLogger("egse.metrics")
|
|
10
28
|
|
|
11
|
-
LOGGER = logging.getLogger(__name__)
|
|
12
29
|
SITE_ID = Settings.load("SITE").ID
|
|
13
30
|
|
|
14
31
|
|
|
@@ -64,7 +81,7 @@ def define_metrics(origin: str, dashboard: str = None, use_site: bool = False, s
|
|
|
64
81
|
try:
|
|
65
82
|
metrics[syn_name] = Gauge(syn_name, description)
|
|
66
83
|
except ValueError:
|
|
67
|
-
|
|
84
|
+
logger.warning(f"ValueError for {syn_name}")
|
|
68
85
|
|
|
69
86
|
return metrics
|
|
70
87
|
|
|
@@ -100,4 +117,105 @@ def update_metrics(metrics: dict, updates: dict):
|
|
|
100
117
|
else:
|
|
101
118
|
metrics[metric_name].set(float(value))
|
|
102
119
|
except KeyError:
|
|
103
|
-
|
|
120
|
+
logger.warning(f"Unknown metric name: {metric_name=}")
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
class PointLike(Protocol):
|
|
124
|
+
@staticmethod
|
|
125
|
+
def measurement(measurement_name: str) -> "PointLike": ...
|
|
126
|
+
|
|
127
|
+
def tag(self, key, value) -> Self: ...
|
|
128
|
+
|
|
129
|
+
def field(self, field, value) -> Self: ...
|
|
130
|
+
|
|
131
|
+
def time(self, time) -> Self: ...
|
|
132
|
+
|
|
133
|
+
def as_dict(self) -> dict: ...
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
class DataPoint(PointLike):
|
|
137
|
+
def __init__(self, measurement_name: str):
|
|
138
|
+
self.measurement: str = measurement_name
|
|
139
|
+
self.tags: dict[str, str] = {}
|
|
140
|
+
self.fields: dict[str, Any] = {}
|
|
141
|
+
self.timestamp: int | str = format_datetime()
|
|
142
|
+
|
|
143
|
+
def as_dict(self):
|
|
144
|
+
if isinstance(self.timestamp, str):
|
|
145
|
+
timestamp = str_to_datetime(self.timestamp).timestamp()
|
|
146
|
+
else:
|
|
147
|
+
timestamp = self.timestamp
|
|
148
|
+
|
|
149
|
+
return {
|
|
150
|
+
"measurement": self.measurement,
|
|
151
|
+
"tags": self.tags,
|
|
152
|
+
"fields": self.fields,
|
|
153
|
+
"time": timestamp,
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
@staticmethod
|
|
157
|
+
def measurement(measurement_name):
|
|
158
|
+
p = DataPoint(measurement_name)
|
|
159
|
+
return p
|
|
160
|
+
|
|
161
|
+
def tag(self, key, value):
|
|
162
|
+
self.tags[key] = value
|
|
163
|
+
return self
|
|
164
|
+
|
|
165
|
+
def field(self, field, value):
|
|
166
|
+
self.fields[field] = value
|
|
167
|
+
return self
|
|
168
|
+
|
|
169
|
+
def time(self, time):
|
|
170
|
+
self.timestamp = time
|
|
171
|
+
return self
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
class TimeSeriesRepository(Protocol):
|
|
175
|
+
def connect(self) -> None: ...
|
|
176
|
+
|
|
177
|
+
def write(self, points: PointLike | dict | list[PointLike | dict]) -> None: ...
|
|
178
|
+
|
|
179
|
+
def query(self, query_str: str, mode: str) -> Any: ...
|
|
180
|
+
|
|
181
|
+
def get_table_names(self) -> list[str]: ...
|
|
182
|
+
|
|
183
|
+
def get_column_names(self, table_name: str) -> list[str]: ...
|
|
184
|
+
|
|
185
|
+
def get_values_last_hours(self, table_name: str, column_name: str, hours: int, mode: str) -> Any: ...
|
|
186
|
+
|
|
187
|
+
def get_values_in_range(
|
|
188
|
+
self, table_name: str, column_name: str, start_time: str, end_time: str, mode: str
|
|
189
|
+
) -> Any: ...
|
|
190
|
+
|
|
191
|
+
def close(self) -> None: ...
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
def get_metrics_repo(plugin_name: str, config: dict[str, Any]) -> TimeSeriesRepository:
|
|
195
|
+
"""
|
|
196
|
+
Create a TimeSeriesRepository instance from a plugin.
|
|
197
|
+
|
|
198
|
+
Args:
|
|
199
|
+
plugin_name: Name of the plugin (without .py extension)
|
|
200
|
+
config: Configuration parameters for the repository
|
|
201
|
+
|
|
202
|
+
Returns:
|
|
203
|
+
Configured TimeSeriesRepository instance.
|
|
204
|
+
|
|
205
|
+
Raises:
|
|
206
|
+
ModuleNotFoundError: If plugin not found
|
|
207
|
+
NotImplementedError: If plugin is missing get_repository_class()
|
|
208
|
+
"""
|
|
209
|
+
|
|
210
|
+
package_name = "egse.plugins"
|
|
211
|
+
plugins = load_plugins_fn(f"{plugin_name}.py", package_name)
|
|
212
|
+
|
|
213
|
+
if plugin_name in plugins:
|
|
214
|
+
plugin = plugins[plugin_name]
|
|
215
|
+
if hasattr(plugin, "get_repository_class"):
|
|
216
|
+
repo_class = plugin.get_repository_class()
|
|
217
|
+
else:
|
|
218
|
+
raise NotImplementedError(f"Missing 'get_repository_class()` function in metrics plugin {plugin_name}.")
|
|
219
|
+
return repo_class(**config)
|
|
220
|
+
else:
|
|
221
|
+
raise ModuleNotFoundError(f"No plugin found for {plugin_name} in {package_name}.")
|
|
@@ -3,18 +3,25 @@ This module provides function to load plugins and settings from entry-points.
|
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
5
|
__all__ = [
|
|
6
|
-
"
|
|
6
|
+
"load_plugins_ep",
|
|
7
|
+
"load_plugins_fn",
|
|
7
8
|
"get_file_infos",
|
|
8
9
|
"entry_points",
|
|
9
10
|
"HierarchicalEntryPoints",
|
|
10
11
|
]
|
|
12
|
+
|
|
13
|
+
import importlib.util
|
|
11
14
|
import logging
|
|
12
15
|
import os
|
|
13
16
|
import sys
|
|
14
17
|
import textwrap
|
|
15
18
|
import traceback
|
|
19
|
+
import types
|
|
20
|
+
from functools import lru_cache
|
|
16
21
|
from pathlib import Path
|
|
17
22
|
|
|
23
|
+
from egse.system import type_name
|
|
24
|
+
|
|
18
25
|
if sys.version_info >= (3, 12): # Use the standard library version (Python 3.10+)
|
|
19
26
|
from importlib.metadata import entry_points as lib_entry_points
|
|
20
27
|
from importlib.metadata import EntryPoint
|
|
@@ -26,7 +33,8 @@ else:
|
|
|
26
33
|
import click
|
|
27
34
|
import rich
|
|
28
35
|
|
|
29
|
-
|
|
36
|
+
logger = logging.getLogger(__name__)
|
|
37
|
+
HERE = Path(__file__).parent
|
|
30
38
|
|
|
31
39
|
|
|
32
40
|
def entry_points(group: str) -> set[EntryPoint]:
|
|
@@ -43,7 +51,7 @@ def entry_points(group: str) -> set[EntryPoint]:
|
|
|
43
51
|
return set()
|
|
44
52
|
|
|
45
53
|
|
|
46
|
-
def
|
|
54
|
+
def load_plugins_ep(entry_point: str) -> dict:
|
|
47
55
|
"""
|
|
48
56
|
Returns a dictionary with plugins loaded. The keys are the names of the entry-points,
|
|
49
57
|
the values are the loaded modules or objects.
|
|
@@ -58,11 +66,90 @@ def load_plugins(entry_point: str) -> dict:
|
|
|
58
66
|
eps[ep.name] = ep.load()
|
|
59
67
|
except Exception as exc:
|
|
60
68
|
eps[ep.name] = None
|
|
61
|
-
|
|
69
|
+
logger.error(f"Couldn't load entry point {entry_point}: {type_name(exc)} – {exc}")
|
|
62
70
|
|
|
63
71
|
return eps
|
|
64
72
|
|
|
65
73
|
|
|
74
|
+
@lru_cache
|
|
75
|
+
def load_plugins_fn(pattern: str, package_name: str = None) -> dict[str, types.ModuleType]:
|
|
76
|
+
"""
|
|
77
|
+
Returns a dictionary with plugins loaded for the filenames that match the given pattern.
|
|
78
|
+
The keys are the names of the modules, the values are the loaded modules.
|
|
79
|
+
|
|
80
|
+
If no package_name is provided, the pattern is relative to the location of this module
|
|
81
|
+
(which is in the top-level module `egse`).
|
|
82
|
+
|
|
83
|
+
If the pattern results in two or more modules with the same name, a warning will be logged
|
|
84
|
+
and only the last imported module will be returned in the dictionary.
|
|
85
|
+
|
|
86
|
+
Plugins are usually located in the `egse.plugins` module. Remember that `egse.plugins`
|
|
87
|
+
is a namespace and external packages can also deliver plugin modules in that location.
|
|
88
|
+
|
|
89
|
+
Note:
|
|
90
|
+
When a plugin cannot be loaded, an error is logged.
|
|
91
|
+
|
|
92
|
+
This function uses an LRU cache to avoid reloading modules. If you need to reload,
|
|
93
|
+
use `load_plugins_fn.cache_clear()` to reset the cache.
|
|
94
|
+
|
|
95
|
+
Raises:
|
|
96
|
+
ImportError when the given package_name cannot be imported as a module.
|
|
97
|
+
|
|
98
|
+
Examples:
|
|
99
|
+
|
|
100
|
+
# Loading the InfluxDB plugin for time series metrics
|
|
101
|
+
>>> influxdb = load_plugins_fn("influxdb.py", "egse.plugins.metrics")
|
|
102
|
+
|
|
103
|
+
# Loading the HDF5 storage plugin for PLATO
|
|
104
|
+
>>> hdf5 = load_plugins_fn("hdf5.py", "egse.plugins.storage")
|
|
105
|
+
|
|
106
|
+
# Loading all plugins
|
|
107
|
+
>>> x = load_plugins_fn("**/*.py", "egse.plugins")
|
|
108
|
+
|
|
109
|
+
"""
|
|
110
|
+
loaded_modules = {}
|
|
111
|
+
failed_modules = {} # we keep failed modules for housekeeping only
|
|
112
|
+
|
|
113
|
+
if package_name is None:
|
|
114
|
+
package_path = [HERE]
|
|
115
|
+
else:
|
|
116
|
+
try:
|
|
117
|
+
package = importlib.import_module(package_name)
|
|
118
|
+
except ImportError as exc:
|
|
119
|
+
raise ImportError(f"Cannot import package '{package_name}': {exc}")
|
|
120
|
+
|
|
121
|
+
if hasattr(package, "__path__"):
|
|
122
|
+
package_path = package.__path__
|
|
123
|
+
else:
|
|
124
|
+
package_path = [package.__file__.replace("__init__.py", "")]
|
|
125
|
+
|
|
126
|
+
# rich.print(package_path)
|
|
127
|
+
|
|
128
|
+
for path_entry in map(Path, package_path):
|
|
129
|
+
# rich.print(path_entry)
|
|
130
|
+
for plugin_file in path_entry.rglob(pattern):
|
|
131
|
+
# rich.print(" ", plugin_file)
|
|
132
|
+
module_name = plugin_file.stem
|
|
133
|
+
try:
|
|
134
|
+
spec = importlib.util.spec_from_file_location(module_name, plugin_file)
|
|
135
|
+
module = importlib.util.module_from_spec(spec)
|
|
136
|
+
spec.loader.exec_module(module)
|
|
137
|
+
if module_name in loaded_modules:
|
|
138
|
+
logger.warning(
|
|
139
|
+
f"Overwriting module '{module_name}' from {loaded_modules[module_name].__file__} "
|
|
140
|
+
f"with {plugin_file}."
|
|
141
|
+
)
|
|
142
|
+
loaded_modules[module_name] = module
|
|
143
|
+
except Exception as exc:
|
|
144
|
+
error_msg = f"Couldn't load module '{module_name}' from {plugin_file}: {type_name(exc)} – {exc}"
|
|
145
|
+
logger.error(error_msg)
|
|
146
|
+
if module_name in failed_modules:
|
|
147
|
+
logger.warning(f"Overwriting previously unloaded module '{module_name}' with {plugin_file}.")
|
|
148
|
+
failed_modules[module_name] = error_msg
|
|
149
|
+
|
|
150
|
+
return loaded_modules
|
|
151
|
+
|
|
152
|
+
|
|
66
153
|
def get_file_infos(entry_point: str) -> dict[str, tuple[Path, str]]:
|
|
67
154
|
"""
|
|
68
155
|
Returns a dictionary with location and filename of all the entries found for
|
|
@@ -93,7 +180,7 @@ def get_file_infos(entry_point: str) -> dict[str, tuple[Path, str]]:
|
|
|
93
180
|
path = get_module_location(ep.module)
|
|
94
181
|
|
|
95
182
|
if path is None:
|
|
96
|
-
|
|
183
|
+
logger.error(
|
|
97
184
|
f"The entry-point '{ep.name}' is ill defined. The module part doesn't exist or is a "
|
|
98
185
|
f"namespace. No settings are loaded for this entry-point."
|
|
99
186
|
)
|
|
@@ -101,7 +188,7 @@ def get_file_infos(entry_point: str) -> dict[str, tuple[Path, str]]:
|
|
|
101
188
|
eps[ep.name] = (path, ep.attr)
|
|
102
189
|
|
|
103
190
|
except Exception as exc:
|
|
104
|
-
|
|
191
|
+
logger.error(f"The entry point '{ep.name}' is ill defined: {exc}")
|
|
105
192
|
|
|
106
193
|
return eps
|
|
107
194
|
|