cgse 0.13.0__tar.gz → 0.14.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.13.0 → cgse-0.14.0}/.gitignore +1 -0
- {cgse-0.13.0 → cgse-0.14.0}/PKG-INFO +1 -1
- {cgse-0.13.0 → cgse-0.14.0}/docs/roadmap.md +2 -1
- {cgse-0.13.0 → cgse-0.14.0}/justfile +1 -1
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/pyproject.toml +4 -4
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/cgse_common/cgse.py +23 -6
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/calibration.py +2 -2
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/config.py +3 -27
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/counter.py +4 -8
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/decorators.py +11 -12
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/device.py +0 -1
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/dicts.py +15 -14
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/env.py +2 -3
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/heartbeat.py +0 -3
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/hk.py +5 -6
- cgse-0.14.0/libs/cgse-common/src/egse/log.py +132 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/metrics.py +1 -4
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/plugin.py +14 -10
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/process.py +21 -23
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/resource.py +6 -9
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/scpi.py +1 -3
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/settings.py +4 -5
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/setup.py +176 -127
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/signal.py +1 -3
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/socketdevice.py +1 -4
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/state.py +5 -30
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/system.py +3 -3
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/zmq_ser.py +5 -2
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/scripts/empty_process.py +3 -3
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/scripts/process_with_children.py +4 -3
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_decorators.py +7 -2
- cgse-0.14.0/libs/cgse-common/tests/test_log.py +46 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_plugin.py +14 -3
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_process.py +10 -1
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_setup.py +45 -21
- cgse-0.14.0/libs/cgse-common/tests/test_state.py +21 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/pyproject.toml +1 -1
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/pyproject.toml +4 -1
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/cgse_core/_stop.py +30 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/cgse_core/services.py +3 -9
- cgse-0.14.0/libs/cgse-core/src/egse/_setup_core.py +154 -0
- {cgse-0.13.0/libs/cgse-common → cgse-0.14.0/libs/cgse-core}/src/egse/command.py +1 -6
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/confman/__init__.py +28 -29
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/confman/confman_cs.py +1 -1
- {cgse-0.13.0/libs/cgse-common → cgse-0.14.0/libs/cgse-core}/src/egse/control.py +30 -34
- {cgse-0.13.0/libs/cgse-common → cgse-0.14.0/libs/cgse-core}/src/egse/dummy.py +79 -79
- {cgse-0.13.0/libs/cgse-common → cgse-0.14.0/libs/cgse-core}/src/egse/listener.py +4 -5
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/logger/__init__.py +8 -7
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/logger/log_cs.py +40 -21
- {cgse-0.13.0/libs/cgse-common → cgse-0.14.0/libs/cgse-core}/src/egse/mixin.py +11 -14
- {cgse-0.13.0/libs/cgse-common → cgse-0.14.0/libs/cgse-core}/src/egse/monitoring.py +14 -16
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/procman/procman_cs.py +1 -1
- {cgse-0.13.0/libs/cgse-common → cgse-0.14.0/libs/cgse-core}/src/egse/protocol.py +1 -3
- {cgse-0.13.0/libs/cgse-common → cgse-0.14.0/libs/cgse-core}/src/egse/proxy.py +8 -3
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/registry/client.py +4 -3
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/registry/server.py +1 -1
- {cgse-0.13.0/libs/cgse-common → cgse-0.14.0/libs/cgse-core}/src/egse/services.py +14 -15
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/storage/storage_cs.py +1 -1
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/fixtures/helpers.py +7 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/fixtures/services.py +23 -5
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/test_async_control.py +2 -0
- {cgse-0.13.0/libs/cgse-common → cgse-0.14.0/libs/cgse-core}/tests/test_client_server_interaction.py +41 -3
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/test_cm_cs.py +18 -6
- {cgse-0.13.0/libs/cgse-common → cgse-0.14.0/libs/cgse-core}/tests/test_command.py +0 -1
- cgse-0.14.0/libs/cgse-core/tests/test_dummy.py +68 -0
- cgse-0.14.0/libs/cgse-core/tests/test_extensions.py +10 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/test_logger.py +10 -3
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/test_registry_service.py +128 -54
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/test_server_running.py +5 -8
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/test_server_running_with_fixture.py +5 -9
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/pyproject.toml +1 -1
- {cgse-0.13.0 → cgse-0.14.0}/noxfile.py +1 -1
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/cgse-tools/pyproject.toml +1 -1
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/cgse-tools/src/cgse_tools/cgse_commands.py +2 -2
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/cgse-tools/src/cgse_tools/cgse_services.py +2 -1
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/pyproject.toml +1 -1
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_cs.py +1 -1
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/cgse_services.py +1 -3
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/lakeshore-tempcontrol/pyproject.toml +1 -1
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/cgse_services.py +0 -1
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/pyproject.toml +1 -1
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/cgse_services.py +3 -3
- {cgse-0.13.0 → cgse-0.14.0}/projects/plato/plato-fits/pyproject.toml +1 -1
- {cgse-0.13.0 → cgse-0.14.0}/projects/plato/plato-hdf5/pyproject.toml +1 -1
- {cgse-0.13.0 → cgse-0.14.0}/projects/plato/plato-spw/pyproject.toml +1 -1
- {cgse-0.13.0 → cgse-0.14.0}/pyproject.toml +5 -5
- {cgse-0.13.0 → cgse-0.14.0}/ruff.toml +2 -2
- {cgse-0.13.0 → cgse-0.14.0}/service_registry.db +0 -0
- cgse-0.13.0/=0.5.1 +0 -0
- cgse-0.13.0/TODO.md +0 -3
- 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.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_state.py +0 -9
- cgse-0.13.0/service_registry.db-shm +0 -0
- cgse-0.13.0/service_registry.db-wal +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/.github/workflows/ruff-format-check.yaml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/README.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/bump.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/conftest.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/api/bits.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/api/calibration.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/api/command.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/api/config.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/api/control.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/api/counter.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/api/decorators.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/api/device.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/api/dicts.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/api/dummy.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/api/env.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/api/exceptions.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/api/heartbeat.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/api/hk.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/api/index.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/api/listener.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/api/metrics.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/api/mixin.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/api/monitoring.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/api/observer.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/api/obsid.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/api/persistence.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/api/plugin.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/api/process.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/api/reload.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/api/settings.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/api/setup.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/api/system.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/custom_theme/main.html +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/dev_guide/coding_style.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/dev_guide/docs.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/dev_guide/index.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/dev_guide/installation.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/dev_guide/monitoring.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/dev_guide/monorepo.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/dev_guide/nox.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/dev_guide/plugins.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/dev_guide/project-configuration.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/dev_guide/unit_testing.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/dev_guide/uv.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/dev_guide/versioning.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/getting_started.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/help.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/images/github-fork-clone-dark.png +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/images/github-fork-clone.png +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/images/grafana-queries.png +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/images/icons/cgse-logo-blue.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/images/icons/cgse-logo.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/index.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/initialize.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/libs/cgse-common/images/load_methods.png +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/libs/cgse-common/index.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/libs/cgse-common/settings.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/libs/cgse-common/setup.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/libs/cgse-coordinates/index.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/libs/cgse-core/index.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/libs/cgse-core/registry.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/libs/cgse-gui/index.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/libs/index.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/package_list.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/projects/cgse-tools.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/projects/index.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/projects/symetrie-hexapod.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/stylesheets/custom.css +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/stylesheets/extra.css +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/tutorial.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/docs/user_guide/index.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/duckdb_metrics.db +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/duckdb_metrics.db.wal +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/identifier.sqlite +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/README.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/justfile +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/noxfile.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/service_registry.db +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/cgse_common/__init__.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/cgse_common/settings.yaml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/bits.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/exceptions.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/observer.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/obsid.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/persistence.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/plugins/metrics/duckdb.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/plugins/metrics/influxdb.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/plugins/metrics/timescaledb.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/py.typed +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/randomwalk.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/ratelimit.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/reload.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/response.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/settings.yaml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/task.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/src/egse/version.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/conftest.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/COPYING +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00028_201028_155259.yaml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00029_201028_155331.yaml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00030_210311_134043.yaml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00080_210917_105245.yaml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00081_210922_142259.yaml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00082_210923_094458.yaml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/CSL1/README.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/CSL2/README.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/IAS/README.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/INTA/README.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/LAB23/README.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00027_211119_140441.yaml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00028_211119_160406.yaml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00029_211119_172918.yaml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00030_211122_103604.yaml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00031_211123_124900.yaml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/common/telemetry/tm-dictionary-default.csv +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/conf/SETUP_20250114_1519.yaml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/conf/config-file.toml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/data/cal_coeff_1234.csv +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/data/calibration.csv +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/data/calibration.yaml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/data/command.yaml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/data/corrupt.yaml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/data/data-file.txt +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/data/empty_data_file.txt +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/data/empty_yaml_file.yaml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/data/local_settings.yaml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/data/new_local_settings.yaml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/data/test_setup.yaml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/icons/hourglass.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/icons/keyboard.png +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/icons/soap_sponge.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/lib/dev1/shared-lib.so +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/data/lib/dev2/shared-lib.so +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/fixtures/default_env.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/fixtures/helpers.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/scripts/handle_sigterm.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/scripts/raise_value_error.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/scripts/void-0.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/scripts/void-1.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_bits.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_config.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_device.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_env.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_fixtures.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_hk.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_influxdb_plugin.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_metrics.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_ratelimit.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_resource.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_response.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_settings.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_signal.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_system.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_task.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-common/tests/test_zmq_ser.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/README.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/src/cgse_coordinates/__init__.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/src/cgse_coordinates/settings.yaml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/src/egse/coordinates/__init__.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/src/egse/coordinates/avoidance.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/src/egse/coordinates/cslmodel.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/src/egse/coordinates/laser_tracker_to_dict.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/src/egse/coordinates/point.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/src/egse/coordinates/pyplot.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/src/egse/coordinates/referenceFrame.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/src/egse/coordinates/refmodel.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/src/egse/coordinates/rotationMatrix.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/src/egse/coordinates/transform3d_addon.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/tests/test_avoidance.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/tests/test_coordinates_plot.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/tests/test_coordinates_serialize.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/tests/test_point.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/tests/test_ref_model.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/tests/test_reference_frames.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-coordinates/tests/test_refmodel.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/.envrc.disabled +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/README.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/service_registry.db +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/cgse_core/__init__.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/cgse_core/_start.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/cgse_core/_status.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/cgse_core/cgse_explore.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/cgse_core/settings.yaml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/async_control.py +0 -0
- {cgse-0.13.0/libs/cgse-common → cgse-0.14.0/libs/cgse-core}/src/egse/async_control_claude.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/confman/__main__.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/confman/confman.yaml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/icons/busy.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/icons/operational-mode.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/icons/pm_ui.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/icons/simulator-mode.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/icons/start-process-button.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/icons/stop-process-button.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/icons/user-interface.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/logger/__main__.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/metricshub/__init__.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/metricshub/server.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/notifyhub/__init__.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/notifyhub/event.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/notifyhub/server.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/notifyhub/services.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/notifyhub/test.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/procman/__init__.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/procman/procman.yaml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/procman/procman_protocol.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/procman/procman_ui.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/registry/__init__.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/registry/backend.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/registry/service.py +0 -0
- {cgse-0.13.0/libs/cgse-common → cgse-0.14.0/libs/cgse-core}/src/egse/services.yaml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/storage/__init__.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/storage/__main__.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/storage/persistence.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/src/egse/storage/storage.yaml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/conftest.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/data/local_settings.yaml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/fixtures/default_env.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/script_test_async_registry_client.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/script_test_registry_client_server.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/script_test_service_registry_server.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/script_test_sync_registry_client.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/services.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/stress_test_registry_server.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/test_confman_setups.py +0 -0
- {cgse-0.13.0/libs/cgse-common → cgse-0.14.0/libs/cgse-core}/tests/test_control.py +0 -0
- {cgse-0.13.0/libs/cgse-common → cgse-0.14.0/libs/cgse-core}/tests/test_listener.py +0 -0
- {cgse-0.13.0/libs/cgse-common → cgse-0.14.0/libs/cgse-core}/tests/test_mixin.py +0 -0
- {cgse-0.13.0/libs/cgse-common → cgse-0.14.0/libs/cgse-core}/tests/test_protocol.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/test_registry_backend.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/test_settings_core.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-core/tests/test_zmq_microservice.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/README.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/__init__.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/buttons.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-start.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-stop.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/aeu-cs.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-started.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-stopped.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/aeu_cs.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/alert.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/arrow-double-left.png +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/arrow-double-right.png +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/arrow-up.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/backward.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/busy.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/cleaning.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/color-scheme.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/cs-connected-alert.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/cs-connected-disabled.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/cs-connected.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/cs-not-connected.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/double-left-arrow.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/double-right-arrow.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/erase-disabled.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/erase.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/fitsgen-start.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/fitsgen-stop.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/fitsgen.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/forward.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/fov-hk-start.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/fov-hk-stop.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/fov-hk.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/front-desk.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/home-actioned.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/home-disabled.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/home.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/info.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/invalid.png +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/led-green.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/led-grey.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/led-orange.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/led-red.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/led-square-green.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/led-square-grey.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/led-square-orange.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/led-square-red.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-green.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-red.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el+.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el-.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/location-marker.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/logo-dpu.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/logo-gimbal.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/logo-huber.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/logo-ogse.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/logo-puna.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/logo-tcs.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/logo-zonda.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/maximize.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/meter.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/more.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-start.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-stop.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/observing-off.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/observing-on.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.png +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/ops-mode.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/play-green.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/plugged-disabled.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/plugged.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/pm_ui.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/power-button-green.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/power-button-red.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/power-button.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/radar.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/radioactive.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/reload.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/remote-control-off.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/remote-control-on.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/repeat-blue.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/repeat.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/settings.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/shrink.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/shutter.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/sign-off.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/sign-on.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/sim-mode.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/small-buttons-go.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/small-buttons-minus.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/small-buttons-plus.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/sponge.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/start-button-disabled.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/start-button.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/stop-button-disabled.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/stop-button.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/stop-red.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/stop.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/switch-disabled-square.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/switch-disabled.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/switch-off-square.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/switch-off.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/switch-on-square.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/switch-on.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/temperature-control.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/th_ui_logo.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/unplugged.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/unvalid.png +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/user-interface.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/vacuum.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/valid.png +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-dark.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-white.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/led.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/limitswitch.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/states.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/styles/dark.qss +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/styles/default.qss +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/styles.qss +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/libs/cgse-gui/src/egse/gui/switch.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/mkdocs.yml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/overrides/.icons/custom/dbend-dark.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/overrides/.icons/custom/dbend-light.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/overrides/.icons/custom/gear.svg +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/cgse-tools/README.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/cgse-tools/src/cgse_tools/__init__.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/cgse-tools/src/cgse_tools/cgse_clock.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/cgse-tools/src/egse/tools/status.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/README.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/justfile +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/noxfile.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/service_registry.db +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/__init__.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510.yaml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_adev.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_dev.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_mon.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_protocol.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_sim.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/__init__.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/cgse_explore.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/settings.yaml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/temperature_readings.log +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/tests/script_daq6510_mon.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/tests/test_adev.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/keithley-tempcontrol/tests/test_dev.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/lakeshore-tempcontrol/README.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336.yaml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_cs.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_devif.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_protocol.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/__init__.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/cgse_explore.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/settings.yaml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/lakeshore-tempcontrol/tests/test_lakeshore336_simulator.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/README.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/__init__.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/__init__.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/alpha.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/dynalpha.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod_ui.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.yaml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_cs.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_protocol.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_ui.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac_regex.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.yaml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_cs.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_protocol.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_sim.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_ui.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/punaplus.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.yaml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_cs.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_devif.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_protocol.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_ui.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/__init__.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/cgse_explore.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/settings.yaml +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/tests/test_puna.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/tests/test_puna_cs.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/generic/symetrie-hexapod/tests/test_puna_simulator.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/plato/plato-fits/README.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/plato/plato-fits/src/egse/plugins/storage/fits.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/plato/plato-hdf5/README.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/plato/plato-hdf5/src/egse/plugins/storage/hdf5.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/plato/plato-spw/README.md +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/projects/plato/plato-spw/src/egse/spw.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/scratch/advanced-process-monitoring.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/scratch/live-process-monitoring.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/scratch/match-case.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/scratch/processes.json +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/scratch/simple-process-monitoring.py +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/temperature_readings.log +0 -0
- {cgse-0.13.0 → cgse-0.14.0}/test_service_registry.db +0 -0
|
@@ -67,7 +67,8 @@ Provide a `cgse` command that is extensible with new commands and command groups
|
|
|
67
67
|
use of command YAML files, replace `dynamic_interface` with `dynamic_command`.
|
|
68
68
|
- [ ] Introduce asyncio into the commanding protocol, e.g. `get_status()`
|
|
69
69
|
and `get_housekeeping()` shall be handled asynchronously.
|
|
70
|
-
- [
|
|
70
|
+
- [x] GlobalState Setup needs some redesign, especially `GlobalState.setup`
|
|
71
|
+
which should not consult
|
|
71
72
|
the configuration manager by default.
|
|
72
73
|
|
|
73
74
|
## Removals
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "cgse-common"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.14.0"
|
|
4
4
|
description = "Software framework to support hardware testing"
|
|
5
5
|
authors = [
|
|
6
6
|
{name = "IvS KU Leuven"}
|
|
@@ -19,7 +19,7 @@ keywords = [
|
|
|
19
19
|
"software framework"
|
|
20
20
|
]
|
|
21
21
|
dependencies = [
|
|
22
|
-
"click>=8.1
|
|
22
|
+
"click>=8.2.1",
|
|
23
23
|
"deepdiff>=8.1.1",
|
|
24
24
|
"distro>=1.9.0",
|
|
25
25
|
"gitpython>=3.1.44",
|
|
@@ -27,7 +27,7 @@ dependencies = [
|
|
|
27
27
|
"psutil>=6.1.1",
|
|
28
28
|
"pyyaml>=6.0.2",
|
|
29
29
|
"rich>=13.9.4",
|
|
30
|
-
"typer>=0.
|
|
30
|
+
"typer>=0.16.0",
|
|
31
31
|
"navdict>=0.5.9",
|
|
32
32
|
# Python 3.9 specific dependencies
|
|
33
33
|
"numpy==1.26.4; python_version == '3.9'",
|
|
@@ -58,7 +58,7 @@ cgse-common = "cgse_common:settings.yaml"
|
|
|
58
58
|
[tool.pytest.ini_options]
|
|
59
59
|
pythonpath = "src"
|
|
60
60
|
testpaths = ["tests"]
|
|
61
|
-
addopts = "-
|
|
61
|
+
addopts = "-ra --cov --cov-branch --cov-report html"
|
|
62
62
|
log_cli = true
|
|
63
63
|
log_cli_level = "INFO"
|
|
64
64
|
filterwarnings = [
|
|
@@ -85,7 +85,7 @@ class SortedCommandGroup(TyperGroup):
|
|
|
85
85
|
return sorted(commands, key=get_command_priority)
|
|
86
86
|
|
|
87
87
|
|
|
88
|
-
app = typer.Typer(add_completion=True, cls=SortedCommandGroup
|
|
88
|
+
app = typer.Typer(add_completion=True, cls=SortedCommandGroup)
|
|
89
89
|
|
|
90
90
|
|
|
91
91
|
@app.command()
|
|
@@ -121,22 +121,33 @@ def version(ctx: typer.Context):
|
|
|
121
121
|
)
|
|
122
122
|
|
|
123
123
|
|
|
124
|
+
def subcommand_callback(ctx: typer.Context):
|
|
125
|
+
"""Normal callback."""
|
|
126
|
+
if ctx.invoked_subcommand is None:
|
|
127
|
+
typer.echo("No command specified:")
|
|
128
|
+
typer.echo(ctx.get_help())
|
|
129
|
+
raise typer.Exit()
|
|
130
|
+
|
|
131
|
+
|
|
124
132
|
def build_app():
|
|
125
133
|
global app
|
|
126
134
|
|
|
135
|
+
# rich.print("Available command groups:", entry_points("cgse.command"))
|
|
136
|
+
|
|
127
137
|
for ep in entry_points("cgse.command"):
|
|
128
138
|
try:
|
|
129
139
|
obj = ep.load()
|
|
130
140
|
if isinstance(obj, typer.Typer):
|
|
131
|
-
|
|
141
|
+
obj.callback(invoke_without_command=True)(subcommand_callback)
|
|
142
|
+
app.add_typer(obj, name=ep.name)
|
|
132
143
|
else:
|
|
133
|
-
app.command()(
|
|
144
|
+
app.command()(obj)
|
|
134
145
|
except Exception as exc:
|
|
135
146
|
app.command()(broken_command(ep.name, ep.module, exc))
|
|
136
147
|
|
|
137
148
|
cgse_eps = HierarchicalEntryPoints("cgse.service")
|
|
138
149
|
|
|
139
|
-
# rich.print("Available groups:", cgse_eps.get_all_groups())
|
|
150
|
+
# rich.print("Available services groups:", cgse_eps.get_all_groups())
|
|
140
151
|
|
|
141
152
|
for group in cgse_eps.get_all_groups():
|
|
142
153
|
for ep in entry_points(group):
|
|
@@ -145,12 +156,14 @@ def build_app():
|
|
|
145
156
|
app.add_typer(ep.load(), name=ep.name)
|
|
146
157
|
else:
|
|
147
158
|
command_group = snake_to_title(group.split(".")[-1])
|
|
148
|
-
|
|
159
|
+
plugin_app: typer.Typer = ep.load()
|
|
160
|
+
plugin_app.callback(invoke_without_command=True)(subcommand_callback)
|
|
161
|
+
app.add_typer(plugin_app, name=ep.name, rich_help_panel=command_group)
|
|
149
162
|
except Exception as exc:
|
|
150
163
|
app.command()(broken_command(ep.name, ep.module, exc))
|
|
151
164
|
|
|
152
165
|
|
|
153
|
-
@app.callback(
|
|
166
|
+
@app.callback(invoke_without_command=True)
|
|
154
167
|
def main(ctx: typer.Context, verbose: bool = False):
|
|
155
168
|
"""
|
|
156
169
|
The `cgse` command is used to:
|
|
@@ -167,6 +180,10 @@ def main(ctx: typer.Context, verbose: bool = False):
|
|
|
167
180
|
|
|
168
181
|
ctx.obj = AppState(verbose=verbose)
|
|
169
182
|
|
|
183
|
+
if ctx.invoked_subcommand is None:
|
|
184
|
+
# print("Try 'cgse --help' for a list of commands.")
|
|
185
|
+
typer.echo(ctx.get_help())
|
|
186
|
+
|
|
170
187
|
|
|
171
188
|
build_app()
|
|
172
189
|
|
|
@@ -5,8 +5,8 @@ This module provides functions to calibrate sensor values.
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
7
7
|
import numpy as np
|
|
8
|
-
|
|
9
|
-
from egse.setup import
|
|
8
|
+
from navdict import navdict
|
|
9
|
+
from egse.setup import Setup, SetupError
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
def apply_gain_offset(counts: float, gain: float, offset: float) -> float:
|
|
@@ -3,27 +3,15 @@ This module provides convenience functions to properly configure the CGSE
|
|
|
3
3
|
and to find paths and resources.
|
|
4
4
|
"""
|
|
5
5
|
|
|
6
|
-
from __future__ import annotations
|
|
7
|
-
|
|
8
|
-
import errno
|
|
9
6
|
import fnmatch
|
|
10
|
-
import logging
|
|
11
7
|
import os
|
|
12
|
-
from functools import lru_cache
|
|
13
|
-
from os.path import exists
|
|
14
|
-
from os.path import join
|
|
15
8
|
from pathlib import Path
|
|
16
9
|
from pathlib import PurePath
|
|
17
|
-
from typing import
|
|
18
|
-
from typing import Optional
|
|
10
|
+
from typing import Generator
|
|
19
11
|
from typing import Tuple
|
|
20
12
|
from typing import Union
|
|
21
|
-
from typing import Generator
|
|
22
13
|
|
|
23
|
-
import
|
|
24
|
-
from egse.decorators import deprecate
|
|
25
|
-
|
|
26
|
-
_logger = logging.getLogger(__name__)
|
|
14
|
+
from egse.log import logger
|
|
27
15
|
|
|
28
16
|
|
|
29
17
|
def find_first_occurrence_of_dir(pattern: str, root: Path | str) -> Path | None:
|
|
@@ -252,18 +240,6 @@ def find_root(
|
|
|
252
240
|
return Path(default) if default is not None else None
|
|
253
241
|
|
|
254
242
|
|
|
255
|
-
def set_logger_levels(logger_levels: List[Tuple] = None):
|
|
256
|
-
"""
|
|
257
|
-
Set the logging level for the given loggers.
|
|
258
|
-
|
|
259
|
-
"""
|
|
260
|
-
logger_levels = logger_levels or []
|
|
261
|
-
|
|
262
|
-
for name, level in logger_levels:
|
|
263
|
-
a_logger = logging.getLogger(name)
|
|
264
|
-
a_logger.setLevel(level)
|
|
265
|
-
|
|
266
|
-
|
|
267
243
|
class WorkingDirectory:
|
|
268
244
|
"""
|
|
269
245
|
WorkingDirectory is a context manager to temporarily change the working directory while
|
|
@@ -301,7 +277,7 @@ class WorkingDirectory:
|
|
|
301
277
|
try:
|
|
302
278
|
os.chdir(self._current_dir)
|
|
303
279
|
except OSError as exc:
|
|
304
|
-
|
|
280
|
+
logger.warning(f"Change back to previous directory failed: {exc}")
|
|
305
281
|
|
|
306
282
|
@property
|
|
307
283
|
def path(self):
|
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
This module manages files that have a counter in their filename.
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
-
from __future__ import annotations
|
|
6
|
-
|
|
7
5
|
__all__ = [
|
|
8
6
|
"counter_exists",
|
|
9
7
|
"counter_filename",
|
|
@@ -11,12 +9,10 @@ __all__ = [
|
|
|
11
9
|
"new_counter",
|
|
12
10
|
]
|
|
13
11
|
|
|
14
|
-
import logging
|
|
15
12
|
from pathlib import Path
|
|
16
13
|
|
|
17
14
|
from egse.config import find_files
|
|
18
|
-
|
|
19
|
-
_LOGGER = logging.getLogger(__name__)
|
|
15
|
+
from egse.log import logger
|
|
20
16
|
|
|
21
17
|
|
|
22
18
|
def counter_filename(location: Path, filename: Path | str) -> Path:
|
|
@@ -133,7 +129,7 @@ def get_next_counter(filename: Path) -> int:
|
|
|
133
129
|
return counter
|
|
134
130
|
|
|
135
131
|
|
|
136
|
-
def determine_counter_from_dir_list(location: str, pattern: str, index: int = -1) -> int:
|
|
132
|
+
def determine_counter_from_dir_list(location: Path | str, pattern: str, index: int = -1) -> int:
|
|
137
133
|
"""
|
|
138
134
|
Determine counter for a new file at the given location and with the given pattern.
|
|
139
135
|
The next counter is determined from the sorted list of files that match the given pattern.
|
|
@@ -170,9 +166,9 @@ def determine_counter_from_dir_list(location: str, pattern: str, index: int = -1
|
|
|
170
166
|
# <anything here>_counter>.<extension>
|
|
171
167
|
|
|
172
168
|
counter = int(parts[index].split(".")[0]) + 1
|
|
173
|
-
|
|
169
|
+
logger.debug(f"{counter = }")
|
|
174
170
|
return counter
|
|
175
171
|
|
|
176
172
|
except ValueError:
|
|
177
|
-
|
|
173
|
+
logger.warning("ValueError", exc_info=True)
|
|
178
174
|
return 1
|
|
@@ -17,8 +17,7 @@ import rich
|
|
|
17
17
|
|
|
18
18
|
from egse.settings import Settings
|
|
19
19
|
from egse.system import get_caller_info
|
|
20
|
-
|
|
21
|
-
_LOGGER = logging.getLogger(__name__)
|
|
20
|
+
from egse.log import logger
|
|
22
21
|
|
|
23
22
|
|
|
24
23
|
def static_vars(**kwargs):
|
|
@@ -161,14 +160,14 @@ def average_time(*, name: str = "average_time", level: int = logging.INFO, preci
|
|
|
161
160
|
def _report_average_time():
|
|
162
161
|
if func._call_count:
|
|
163
162
|
average_time = func._run_time / func._call_count
|
|
164
|
-
|
|
163
|
+
logger.log(
|
|
165
164
|
level,
|
|
166
165
|
f"{name}: "
|
|
167
166
|
f"average runtime of {func.__name__!r} is {average_time:.{precision}f}s, "
|
|
168
167
|
f"#calls = {func._call_count}.",
|
|
169
168
|
)
|
|
170
169
|
else:
|
|
171
|
-
|
|
170
|
+
logger.log(level, f"{name}: function {func.__name__!r} was never called.")
|
|
172
171
|
|
|
173
172
|
return func._run_time, func._call_count
|
|
174
173
|
|
|
@@ -210,7 +209,7 @@ def timer(*, name: str = "timer", level: int = logging.INFO, precision: int = 4)
|
|
|
210
209
|
value = func(*args, **kwargs)
|
|
211
210
|
end_time = time.perf_counter()
|
|
212
211
|
run_time = end_time - start_time
|
|
213
|
-
|
|
212
|
+
logger.log(level, f"{name}: Finished {func.__name__!r} in {run_time:.{precision}f} secs")
|
|
214
213
|
return value
|
|
215
214
|
|
|
216
215
|
return wrapper_timer
|
|
@@ -235,7 +234,7 @@ def async_timer(*, name: str = "timer", level: int = logging.INFO, precision: in
|
|
|
235
234
|
value = await func(*args, **kwargs)
|
|
236
235
|
end_time = time.perf_counter()
|
|
237
236
|
run_time = end_time - start_time
|
|
238
|
-
|
|
237
|
+
logger.log(level, f"{name}: Finished {func.__name__!r} in {run_time:.{precision}f} secs")
|
|
239
238
|
return value
|
|
240
239
|
|
|
241
240
|
return wrapper_timer
|
|
@@ -307,9 +306,9 @@ def debug(func):
|
|
|
307
306
|
args_repr = [repr(a) for a in args]
|
|
308
307
|
kwargs_repr = [f"{k}={v!r}" for k, v in kwargs.items()]
|
|
309
308
|
signature = ", ".join(args_repr + kwargs_repr)
|
|
310
|
-
|
|
309
|
+
logger.debug(f"Calling {func.__name__}({signature})")
|
|
311
310
|
value = func(*args, **kwargs)
|
|
312
|
-
|
|
311
|
+
logger.debug(f"{func.__name__!r} returned {value!r}")
|
|
313
312
|
else:
|
|
314
313
|
value = func(*args, **kwargs)
|
|
315
314
|
return value
|
|
@@ -523,7 +522,7 @@ def to_be_implemented(func):
|
|
|
523
522
|
|
|
524
523
|
@functools.wraps(func)
|
|
525
524
|
def wrapper_tbi(*args, **kwargs):
|
|
526
|
-
|
|
525
|
+
logger.warning(f"The function/method {func.__name__} is not yet implemented.")
|
|
527
526
|
return func(*args, **kwargs)
|
|
528
527
|
|
|
529
528
|
return wrapper_tbi
|
|
@@ -736,12 +735,12 @@ def retry_with_exponential_backoff(
|
|
|
736
735
|
while attempt < max_attempts:
|
|
737
736
|
try:
|
|
738
737
|
response = func(*args, **kwargs) # Attempt to call the function
|
|
739
|
-
|
|
738
|
+
logger.info(f"{func.__name__} successfully executed.")
|
|
740
739
|
return response
|
|
741
740
|
except tuple(exceptions) as exc:
|
|
742
741
|
last_exception = exc
|
|
743
742
|
attempt += 1
|
|
744
|
-
|
|
743
|
+
logger.info(
|
|
745
744
|
f"Retry {attempt}: {func.__name__} will be executing again in {wait_time * backoff_factor}s. "
|
|
746
745
|
f"Received a {last_exception!r}."
|
|
747
746
|
)
|
|
@@ -805,7 +804,7 @@ def retry(times: int = 3, wait: float = 10.0, exceptions: List = None) -> Callab
|
|
|
805
804
|
except tuple(exceptions) as exc:
|
|
806
805
|
previous_exception = exc
|
|
807
806
|
if n < times:
|
|
808
|
-
|
|
807
|
+
logger.info(
|
|
809
808
|
f"Retry {n + 1}: {func.__name__} will be executing again in {wait}s. "
|
|
810
809
|
f"Received a {previous_exception!r}."
|
|
811
810
|
)
|
|
@@ -9,14 +9,14 @@ __all__ = [
|
|
|
9
9
|
]
|
|
10
10
|
import logging
|
|
11
11
|
|
|
12
|
-
from egse.system import capture_rich_output
|
|
13
|
-
from egse.system import flatten_dict
|
|
14
12
|
from rich.table import Table
|
|
15
13
|
|
|
16
|
-
|
|
14
|
+
from egse.log import logger
|
|
15
|
+
from egse.system import capture_rich_output
|
|
16
|
+
from egse.system import flatten_dict
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
def log_differences(dict_1, dict_2):
|
|
19
|
+
def log_differences(dict_1, dict_2, log_level: int = logging.INFO):
|
|
20
20
|
"""
|
|
21
21
|
Takes two flattened dictionaries and compares them. This function only compares those
|
|
22
22
|
keys that are common to both dictionaries. The key-value pairs that are unique to one
|
|
@@ -49,13 +49,14 @@ def log_differences(dict_1, dict_2):
|
|
|
49
49
|
for name in sorted(mismatched):
|
|
50
50
|
table.add_row(name, str(dict_1[name]), str(dict_2[name]))
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
# rich.print(table)
|
|
52
|
+
logger.log(log_level, capture_rich_output(table))
|
|
54
53
|
else:
|
|
55
|
-
|
|
54
|
+
logger.log(
|
|
55
|
+
log_level, f"No differences between the two flattened dictionaries, {len(all_keys)} values compared."
|
|
56
|
+
)
|
|
56
57
|
|
|
57
58
|
|
|
58
|
-
def log_key_differences(dict_1, dict_2):
|
|
59
|
+
def log_key_differences(dict_1, dict_2, log_level: int = logging.INFO):
|
|
59
60
|
"""
|
|
60
61
|
Takes two dictionaries and compares the top-level keys. The differences are logged in a Rich Table at level=INFO.
|
|
61
62
|
Keys that are present on both dictionaries are not logged.
|
|
@@ -81,7 +82,7 @@ def log_key_differences(dict_1, dict_2):
|
|
|
81
82
|
not_in_s1 = s2 - s1
|
|
82
83
|
|
|
83
84
|
if not not_in_s1 and not not_in_s2:
|
|
84
|
-
|
|
85
|
+
logger.log(log_level, "Both dictionaries contains the same keys.")
|
|
85
86
|
|
|
86
87
|
table = Table("Dictionary 1", "Dictionary 2", title="Key differences", title_justify="left")
|
|
87
88
|
|
|
@@ -91,11 +92,11 @@ def log_key_differences(dict_1, dict_2):
|
|
|
91
92
|
for key in not_in_s1:
|
|
92
93
|
table.add_row("", str(key))
|
|
93
94
|
|
|
94
|
-
|
|
95
|
+
logger.log(log_level, capture_rich_output(table))
|
|
95
96
|
|
|
96
97
|
|
|
97
98
|
if __name__ == "__main__":
|
|
98
|
-
|
|
99
|
+
logging.basicConfig(level=logging.DEBUG)
|
|
99
100
|
|
|
100
101
|
d1 = {
|
|
101
102
|
"A": 1,
|
|
@@ -115,7 +116,7 @@ if __name__ == "__main__":
|
|
|
115
116
|
"C": 3,
|
|
116
117
|
}
|
|
117
118
|
|
|
118
|
-
log_differences(d1, d2)
|
|
119
|
-
log_key_differences(d1, d2)
|
|
119
|
+
log_differences(d1, d2, logging.DEBUG)
|
|
120
|
+
log_key_differences(d1, d2, logging.DEBUG)
|
|
120
121
|
|
|
121
|
-
log_differences(d1, d3)
|
|
122
|
+
log_differences(d1, d3, logging.DEBUG)
|
|
@@ -63,11 +63,11 @@ __all__ = [
|
|
|
63
63
|
]
|
|
64
64
|
|
|
65
65
|
import contextlib
|
|
66
|
-
import logging
|
|
67
66
|
import os
|
|
68
67
|
import warnings
|
|
69
68
|
from pathlib import Path
|
|
70
69
|
|
|
70
|
+
from egse.log import logger
|
|
71
71
|
from egse.system import all_logging_disabled
|
|
72
72
|
from egse.system import get_caller_info
|
|
73
73
|
from egse.system import ignore_m_warning
|
|
@@ -75,7 +75,6 @@ from egse.system import ignore_m_warning
|
|
|
75
75
|
from rich.console import Console
|
|
76
76
|
|
|
77
77
|
console = Console(width=100)
|
|
78
|
-
logger = logging.getLogger("egse.env")
|
|
79
78
|
|
|
80
79
|
# Every project shall have a PROJECT and a SITE_ID environment variable set. This variable will be used to
|
|
81
80
|
# create the other environment variables that are specific to the project.
|
|
@@ -484,7 +483,7 @@ def get_local_settings_path() -> str or None:
|
|
|
484
483
|
|
|
485
484
|
def has_conf_repo_location() -> bool:
|
|
486
485
|
location = _env.get("CONF_REPO_LOCATION")
|
|
487
|
-
return True if location else False
|
|
486
|
+
return True if location in (None, NoValue) else False
|
|
488
487
|
|
|
489
488
|
|
|
490
489
|
def get_conf_repo_location_env_name() -> str:
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import contextlib
|
|
4
|
-
import logging
|
|
5
4
|
import pickle
|
|
6
5
|
import queue
|
|
7
6
|
import random
|
|
@@ -13,8 +12,6 @@ import zmq
|
|
|
13
12
|
from egse.system import format_datetime
|
|
14
13
|
from egse.zmq_ser import MessageIdentifier
|
|
15
14
|
|
|
16
|
-
_LOGGER = logging.getLogger(__name__)
|
|
17
|
-
|
|
18
15
|
|
|
19
16
|
def _g_tick(period: float):
|
|
20
17
|
"""Generator for ticks every period [s]."""
|
|
@@ -10,7 +10,6 @@ __all__ = [
|
|
|
10
10
|
]
|
|
11
11
|
import csv
|
|
12
12
|
import datetime
|
|
13
|
-
import logging
|
|
14
13
|
from enum import Enum
|
|
15
14
|
from pathlib import Path
|
|
16
15
|
from typing import Optional
|
|
@@ -19,9 +18,11 @@ from typing import Union
|
|
|
19
18
|
import dateutil.parser as date_parser
|
|
20
19
|
import numpy as np
|
|
21
20
|
import pandas as pd
|
|
21
|
+
|
|
22
22
|
from egse.config import find_files
|
|
23
23
|
from egse.env import get_data_storage_location
|
|
24
24
|
from egse.env import get_site_id
|
|
25
|
+
from egse.log import logger
|
|
25
26
|
from egse.obsid import ObservationIdentifier
|
|
26
27
|
from egse.obsid import obsid_from_storage
|
|
27
28
|
from egse.setup import Setup
|
|
@@ -33,8 +34,6 @@ from egse.system import read_last_lines
|
|
|
33
34
|
from egse.system import str_to_datetime
|
|
34
35
|
from egse.system import time_since_epoch_1958
|
|
35
36
|
|
|
36
|
-
_LOGGER = logging.getLogger(__name__)
|
|
37
|
-
|
|
38
37
|
|
|
39
38
|
class TmDictionaryColumns(str, Enum):
|
|
40
39
|
"""Enumeration of the relevant columns in the TM dictionary spreadsheet.
|
|
@@ -438,7 +437,7 @@ def _get_housekeeping_daily(hk_name: str, data_dir, time_window: int = None, set
|
|
|
438
437
|
# (those will have to be read entirely)
|
|
439
438
|
|
|
440
439
|
else:
|
|
441
|
-
|
|
440
|
+
logger.warning(f"No HK available for {origin} on {start_time.day}/{start_time.month}/{start_time.year}")
|
|
442
441
|
|
|
443
442
|
day = (start_time + datetime.timedelta(days=1)).date() # The day after the first day
|
|
444
443
|
last_day = datetime.date(now.year, now.month, now.day) # Today
|
|
@@ -463,7 +462,7 @@ def _get_housekeeping_daily(hk_name: str, data_dir, time_window: int = None, set
|
|
|
463
462
|
hk_array = np.append(hk_array, row[hk_index])
|
|
464
463
|
|
|
465
464
|
else:
|
|
466
|
-
|
|
465
|
+
logger.warning(f"No HK available for {origin} on {day.day}/{day.month}/{day.year}")
|
|
467
466
|
|
|
468
467
|
day += datetime.timedelta(days=1)
|
|
469
468
|
|
|
@@ -673,7 +672,7 @@ def read_conversion_dict(storage_mnemonic: str, use_site: bool = False, setup: O
|
|
|
673
672
|
|
|
674
673
|
else:
|
|
675
674
|
if len(original_name_col) != len(correct_name_col):
|
|
676
|
-
|
|
675
|
+
logger.error(
|
|
677
676
|
f"Name columns in TM dictionary have different length: "
|
|
678
677
|
f"{len(original_name_col)} != {len(correct_name_col)}"
|
|
679
678
|
)
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Configure local logging for the CGSE.
|
|
3
|
+
|
|
4
|
+
I use 'local logging' here because the CGSE also has a Logger server which stores
|
|
5
|
+
all CGSE log messages in a rotated file. That server is part of the `cgse-core` package.
|
|
6
|
+
|
|
7
|
+
Environment variables that affect logging:
|
|
8
|
+
|
|
9
|
+
- LOG_FORMAT: full | FULL
|
|
10
|
+
- LOG_LEVEL: an integer [10, 50] or a level name DEBUG, INFO, WARNING, CRITICAL, ERROR
|
|
11
|
+
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
__all__ = [
|
|
15
|
+
"LOG_FORMAT_FULL",
|
|
16
|
+
"logger",
|
|
17
|
+
"root_logger",
|
|
18
|
+
"egse_logger",
|
|
19
|
+
]
|
|
20
|
+
|
|
21
|
+
import logging
|
|
22
|
+
import os
|
|
23
|
+
import textwrap
|
|
24
|
+
|
|
25
|
+
import rich
|
|
26
|
+
|
|
27
|
+
LOG_FORMAT_STYLE = "{"
|
|
28
|
+
LOG_FORMAT_FULL = (
|
|
29
|
+
"{asctime:19s}.{msecs:03.0f} : {processName:20s} : {levelname:8s} : {name:^25s} : {lineno:6d} : {filename:20s} : {"
|
|
30
|
+
"message}"
|
|
31
|
+
)
|
|
32
|
+
LOG_FORMAT_CLEAN = "{asctime} [{levelname:>8s}] {message} ({filename}:{lineno:d})"
|
|
33
|
+
|
|
34
|
+
LOG_DATE_FORMAT_FULL = "%Y-%m-%d %H:%M:%S"
|
|
35
|
+
LOG_DATE_FORMAT_CLEAN = "%Y-%m-%d %H:%M:%S"
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class EGSEFilter(logging.Filter):
|
|
39
|
+
def filter(self, record):
|
|
40
|
+
return record.name.startswith("egse")
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
egse_filter = EGSEFilter()
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
class NonEGSEFilter(logging.Filter):
|
|
47
|
+
def filter(self, record):
|
|
48
|
+
return not record.name.startswith("egse")
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
root_filter = NonEGSEFilter()
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def get_log_level_from_env(env_var: str = "LOG_LEVEL", default: int = logging.INFO):
|
|
55
|
+
"""Read the log level from an environment variable."""
|
|
56
|
+
log_level_str = os.getenv(env_var, default)
|
|
57
|
+
|
|
58
|
+
# Try to convert to integer first (for numeric levels)
|
|
59
|
+
try:
|
|
60
|
+
log_level = int(log_level_str)
|
|
61
|
+
|
|
62
|
+
if 10 <= log_level <= 50:
|
|
63
|
+
return log_level
|
|
64
|
+
else:
|
|
65
|
+
logging.warning(
|
|
66
|
+
f"Log level {log_level} outside standard range (10-50). Using {logging.getLevelName(default)}."
|
|
67
|
+
)
|
|
68
|
+
return default
|
|
69
|
+
|
|
70
|
+
except ValueError:
|
|
71
|
+
log_level_str = log_level_str.upper()
|
|
72
|
+
try:
|
|
73
|
+
return getattr(logging, log_level_str)
|
|
74
|
+
except AttributeError:
|
|
75
|
+
logging.error(f"Invalid LOG_LEVEL '{log_level_str}'. Using {logging.getLevelName(default)}.")
|
|
76
|
+
return default
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
egse_logger = logging.getLogger("egse")
|
|
80
|
+
egse_logger.level = get_log_level_from_env() # We might want to choose another env e.g. CGSE_LOG_LEVEL
|
|
81
|
+
|
|
82
|
+
root_logger = logging.getLogger()
|
|
83
|
+
root_logger.level = get_log_level_from_env()
|
|
84
|
+
|
|
85
|
+
egse_handler = logging.StreamHandler()
|
|
86
|
+
if os.getenv("LOG_FORMAT", "").lower() == "full":
|
|
87
|
+
egse_formatter = logging.Formatter(fmt=LOG_FORMAT_FULL, datefmt=LOG_DATE_FORMAT_FULL, style=LOG_FORMAT_STYLE)
|
|
88
|
+
else:
|
|
89
|
+
egse_formatter = logging.Formatter(fmt=LOG_FORMAT_CLEAN, datefmt=LOG_DATE_FORMAT_CLEAN, style=LOG_FORMAT_STYLE)
|
|
90
|
+
|
|
91
|
+
egse_handler.setFormatter(egse_formatter)
|
|
92
|
+
egse_handler.addFilter(egse_filter)
|
|
93
|
+
|
|
94
|
+
root_logger.addHandler(egse_handler)
|
|
95
|
+
|
|
96
|
+
for handler in root_logger.handlers:
|
|
97
|
+
if handler != egse_handler: # Don't filter our new handler
|
|
98
|
+
handler.addFilter(root_filter)
|
|
99
|
+
|
|
100
|
+
logger = egse_logger
|
|
101
|
+
|
|
102
|
+
if __name__ == "__main__":
|
|
103
|
+
logging.basicConfig(
|
|
104
|
+
level=get_log_level_from_env(), format=LOG_FORMAT_CLEAN, datefmt=LOG_DATE_FORMAT_CLEAN, style="{"
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
root_logger = logging.getLogger()
|
|
108
|
+
|
|
109
|
+
rich.print(
|
|
110
|
+
textwrap.dedent(
|
|
111
|
+
"""
|
|
112
|
+
Example logging statements
|
|
113
|
+
- logging level set to INFO
|
|
114
|
+
- fields are separated by a colon ':'
|
|
115
|
+
- fields: date & time: process name : level : logger name : lineno : filename : message
|
|
116
|
+
"""
|
|
117
|
+
)
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
if os.getenv("LOG_FORMAT_FULL") == "true":
|
|
121
|
+
rich.print(
|
|
122
|
+
f"[b]{'Date & Time':^23s} : {'Process Name':20s} : {'Level':8s} : {'Logger Name':^25s} : {' Line '} : "
|
|
123
|
+
f"{'Filename':20s} : {'Message'}[/]"
|
|
124
|
+
)
|
|
125
|
+
else:
|
|
126
|
+
rich.print(f"[b]{'Date & Time':^19s} [ Level ] Message (filename:lineno)[/]")
|
|
127
|
+
|
|
128
|
+
rich.print("-" * 150)
|
|
129
|
+
for name, level in logging.getLevelNamesMapping().items():
|
|
130
|
+
logger.log(level, f"{name} logging message")
|
|
131
|
+
|
|
132
|
+
root_logger.info("This should come out of the root logger, not the egse logger.")
|