cgse 2024.7.0__py3-none-any.whl → 2025.0.2__py3-none-any.whl
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.
- README.md +27 -0
- bump.py +85 -0
- cgse-2025.0.2.dist-info/METADATA +38 -0
- cgse-2025.0.2.dist-info/RECORD +5 -0
- {cgse-2024.7.0.dist-info → cgse-2025.0.2.dist-info}/WHEEL +1 -2
- cgse-2024.7.0.dist-info/COPYING +0 -674
- cgse-2024.7.0.dist-info/COPYING.LESSER +0 -165
- cgse-2024.7.0.dist-info/METADATA +0 -144
- cgse-2024.7.0.dist-info/RECORD +0 -660
- cgse-2024.7.0.dist-info/entry_points.txt +0 -75
- cgse-2024.7.0.dist-info/top_level.txt +0 -2
- egse/__init__.py +0 -12
- egse/__main__.py +0 -32
- egse/aeu/aeu.py +0 -5238
- egse/aeu/aeu_awg.yaml +0 -265
- egse/aeu/aeu_crio.yaml +0 -273
- egse/aeu/aeu_cs.py +0 -627
- egse/aeu/aeu_devif.py +0 -321
- egse/aeu/aeu_main_ui.py +0 -903
- egse/aeu/aeu_metrics.py +0 -131
- egse/aeu/aeu_protocol.py +0 -463
- egse/aeu/aeu_psu.yaml +0 -204
- egse/aeu/aeu_ui.py +0 -873
- egse/aeu/arbdata/FccdRead.arb +0 -2
- egse/aeu/arbdata/FccdRead_min_points.arb +0 -2
- egse/aeu/arbdata/HeaterSync_FccdRead.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead25.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead31_25.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead37_50.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead43_75.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead50.arb +0 -2
- egse/aeu/arbdata/Heater_FccdRead_min_points.arb +0 -2
- egse/aeu/arbdata/ccdRead25.arb +0 -2
- egse/aeu/arbdata/ccdRead25_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead31_25.arb +0 -2
- egse/aeu/arbdata/ccdRead31_25_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead37_50.arb +0 -2
- egse/aeu/arbdata/ccdRead37_50_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead43_75.arb +0 -2
- egse/aeu/arbdata/ccdRead43_75_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead50.arb +0 -2
- egse/aeu/arbdata/ccdRead50_150ms.arb +0 -2
- egse/alert/__init__.py +0 -1049
- egse/alert/alertman.yaml +0 -37
- egse/alert/alertman_cs.py +0 -233
- egse/alert/alertman_ui.py +0 -600
- egse/alert/gsm/beaglebone.py +0 -138
- egse/alert/gsm/beaglebone.yaml +0 -51
- egse/alert/gsm/beaglebone_cs.py +0 -108
- egse/alert/gsm/beaglebone_devif.py +0 -122
- egse/alert/gsm/beaglebone_protocol.py +0 -46
- egse/bits.py +0 -318
- egse/camera.py +0 -44
- egse/collimator/__init__.py +0 -0
- egse/collimator/fcul/__init__.py +0 -0
- egse/collimator/fcul/ogse.py +0 -1077
- egse/collimator/fcul/ogse.yaml +0 -14
- egse/collimator/fcul/ogse_cs.py +0 -154
- egse/collimator/fcul/ogse_devif.py +0 -358
- egse/collimator/fcul/ogse_protocol.py +0 -132
- egse/collimator/fcul/ogse_sim.py +0 -431
- egse/collimator/fcul/ogse_ui.py +0 -1108
- egse/command.py +0 -699
- egse/config.py +0 -410
- egse/confman/__init__.py +0 -1058
- egse/confman/confman.yaml +0 -70
- egse/confman/confman_cs.py +0 -240
- egse/confman/confman_ui.py +0 -381
- egse/confman/setup_ui.py +0 -565
- egse/control.py +0 -632
- egse/coordinates/__init__.py +0 -534
- egse/coordinates/avoidance.py +0 -100
- egse/coordinates/cslmodel.py +0 -127
- egse/coordinates/laser_tracker_to_dict.py +0 -122
- egse/coordinates/point.py +0 -707
- egse/coordinates/pyplot.py +0 -194
- egse/coordinates/referenceFrame.py +0 -1279
- egse/coordinates/refmodel.py +0 -737
- egse/coordinates/rotationMatrix.py +0 -85
- egse/coordinates/transform3d_addon.py +0 -419
- egse/csl/__init__.py +0 -50
- egse/csl/commanding.py +0 -78
- egse/csl/icons/hexapod-connected-selected.svg +0 -30
- egse/csl/icons/hexapod-connected.svg +0 -30
- egse/csl/icons/hexapod-homing-selected.svg +0 -68
- egse/csl/icons/hexapod-homing.svg +0 -68
- egse/csl/icons/hexapod-retract-selected.svg +0 -56
- egse/csl/icons/hexapod-retract.svg +0 -51
- egse/csl/icons/hexapod-zero-selected.svg +0 -56
- egse/csl/icons/hexapod-zero.svg +0 -56
- egse/csl/icons/logo-puna.svg +0 -92
- egse/csl/icons/stop.svg +0 -1
- egse/csl/initialisation.py +0 -102
- egse/csl/mech_pos_settings.yaml +0 -18
- egse/das.py +0 -1240
- egse/das.yaml +0 -7
- egse/data/conf/SETUP_CSL_00000_170620_150000.yaml +0 -5
- egse/data/conf/SETUP_CSL_00001_170620_151010.yaml +0 -69
- egse/data/conf/SETUP_CSL_00002_170620_151020.yaml +0 -69
- egse/data/conf/SETUP_CSL_00003_170620_151030.yaml +0 -69
- egse/data/conf/SETUP_CSL_00004_170620_151040.yaml +0 -69
- egse/data/conf/SETUP_CSL_00005_170620_151050.yaml +0 -69
- egse/data/conf/SETUP_CSL_00006_170620_151060.yaml +0 -69
- egse/data/conf/SETUP_CSL_00007_170620_151070.yaml +0 -69
- egse/data/conf/SETUP_CSL_00008_170620_151080.yaml +0 -75
- egse/data/conf/SETUP_CSL_00010_210308_083016.yaml +0 -138
- egse/data/conf/SETUP_INTA_00000_170620_150000.yaml +0 -4
- egse/data/conf/SETUP_SRON_00000_170620_150000.yaml +0 -4
- egse/decorators.py +0 -514
- egse/device.py +0 -269
- egse/dpu/__init__.py +0 -2698
- egse/dpu/ccd_ui.py +0 -514
- egse/dpu/dpu.py +0 -783
- egse/dpu/dpu.yaml +0 -153
- egse/dpu/dpu_cs.py +0 -272
- egse/dpu/dpu_ui.py +0 -671
- egse/dpu/fitsgen.py +0 -2096
- egse/dpu/fitsgen_ui.py +0 -399
- egse/dpu/hdf5_model.py +0 -332
- egse/dpu/hdf5_ui.py +0 -277
- egse/dpu/hdf5_viewer.py +0 -506
- egse/dpu/hk_ui.py +0 -468
- egse/dpu_commands.py +0 -81
- egse/dsi/__init__.py +0 -33
- egse/dsi/_libesl.py +0 -232
- egse/dsi/constants.py +0 -296
- egse/dsi/esl.py +0 -630
- egse/dsi/rmap.py +0 -444
- egse/dsi/rmapci.py +0 -39
- egse/dsi/spw.py +0 -335
- egse/dsi/spw_state.py +0 -29
- egse/dummy.py +0 -318
- egse/dyndummy.py +0 -179
- egse/env.py +0 -278
- egse/exceptions.py +0 -88
- egse/fdir/__init__.py +0 -26
- egse/fdir/fdir_manager.py +0 -85
- egse/fdir/fdir_manager.yaml +0 -37
- egse/fdir/fdir_manager_controller.py +0 -136
- egse/fdir/fdir_manager_cs.py +0 -164
- egse/fdir/fdir_manager_interface.py +0 -15
- egse/fdir/fdir_remote.py +0 -73
- egse/fdir/fdir_remote.yaml +0 -30
- egse/fdir/fdir_remote_controller.py +0 -30
- egse/fdir/fdir_remote_cs.py +0 -94
- egse/fdir/fdir_remote_interface.py +0 -9
- egse/fdir/fdir_remote_popup.py +0 -26
- egse/fee/__init__.py +0 -106
- egse/fee/f_fee_register.yaml +0 -43
- egse/fee/feesim.py +0 -914
- egse/fee/n_fee_hk.py +0 -768
- egse/fee/nfee.py +0 -188
- egse/filterwheel/__init__.py +0 -4
- egse/filterwheel/eksma/__init__.py +0 -49
- egse/filterwheel/eksma/fw8smc4.py +0 -657
- egse/filterwheel/eksma/fw8smc4.yaml +0 -121
- egse/filterwheel/eksma/fw8smc4_cs.py +0 -144
- egse/filterwheel/eksma/fw8smc4_devif.py +0 -473
- egse/filterwheel/eksma/fw8smc4_protocol.py +0 -82
- egse/filterwheel/eksma/fw8smc4_ui.py +0 -940
- egse/filterwheel/eksma/fw8smc5.py +0 -115
- egse/filterwheel/eksma/fw8smc5.yaml +0 -105
- egse/filterwheel/eksma/fw8smc5_controller.py +0 -307
- egse/filterwheel/eksma/fw8smc5_cs.py +0 -141
- egse/filterwheel/eksma/fw8smc5_interface.py +0 -65
- egse/filterwheel/eksma/fw8smc5_simulator.py +0 -29
- egse/filterwheel/eksma/fw8smc5_ui.py +0 -1065
- egse/filterwheel/eksma/testpythonfw.py +0 -215
- egse/fov/__init__.py +0 -65
- egse/fov/fov_hk.py +0 -710
- egse/fov/fov_ui.py +0 -859
- egse/fov/fov_ui_controller.py +0 -140
- egse/fov/fov_ui_model.py +0 -200
- egse/fov/fov_ui_view.py +0 -345
- egse/gimbal/__init__.py +0 -32
- egse/gimbal/symetrie/__init__.py +0 -26
- egse/gimbal/symetrie/alpha.py +0 -586
- egse/gimbal/symetrie/generic_gimbal_ui.py +0 -1521
- egse/gimbal/symetrie/gimbal.py +0 -877
- egse/gimbal/symetrie/gimbal.yaml +0 -168
- egse/gimbal/symetrie/gimbal_cs.py +0 -183
- egse/gimbal/symetrie/gimbal_protocol.py +0 -138
- egse/gimbal/symetrie/gimbal_ui.py +0 -361
- egse/gimbal/symetrie/pmac.py +0 -1006
- egse/gimbal/symetrie/pmac_regex.py +0 -83
- egse/graph.py +0 -132
- egse/gui/__init__.py +0 -47
- egse/gui/buttons.py +0 -378
- egse/gui/focalplane.py +0 -1285
- egse/gui/formatter.py +0 -10
- egse/gui/led.py +0 -162
- egse/gui/limitswitch.py +0 -143
- egse/gui/mechanisms.py +0 -587
- egse/gui/states.py +0 -148
- egse/gui/stripchart.py +0 -729
- egse/gui/styles.qss +0 -48
- egse/gui/switch.py +0 -112
- egse/h5.py +0 -274
- egse/help/__init__.py +0 -0
- egse/help/help_ui.py +0 -126
- egse/hexapod/__init__.py +0 -32
- egse/hexapod/symetrie/__init__.py +0 -137
- egse/hexapod/symetrie/alpha.py +0 -874
- egse/hexapod/symetrie/dynalpha.py +0 -1387
- egse/hexapod/symetrie/hexapod_ui.py +0 -1516
- egse/hexapod/symetrie/pmac.py +0 -1010
- egse/hexapod/symetrie/pmac_regex.py +0 -83
- egse/hexapod/symetrie/puna.py +0 -1167
- egse/hexapod/symetrie/puna.yaml +0 -193
- egse/hexapod/symetrie/puna_cs.py +0 -195
- egse/hexapod/symetrie/puna_protocol.py +0 -134
- egse/hexapod/symetrie/puna_ui.py +0 -433
- egse/hexapod/symetrie/punaplus.py +0 -107
- egse/hexapod/symetrie/zonda.py +0 -872
- egse/hexapod/symetrie/zonda.yaml +0 -337
- egse/hexapod/symetrie/zonda_cs.py +0 -172
- egse/hexapod/symetrie/zonda_devif.py +0 -414
- egse/hexapod/symetrie/zonda_protocol.py +0 -123
- egse/hexapod/symetrie/zonda_ui.py +0 -449
- egse/hk.py +0 -791
- egse/icons/aeu-cs-start.svg +0 -117
- egse/icons/aeu-cs-stop.svg +0 -118
- egse/icons/aeu-cs.svg +0 -107
- egse/icons/aeu_cs-started.svg +0 -112
- egse/icons/aeu_cs-stopped.svg +0 -112
- egse/icons/aeu_cs.svg +0 -55
- egse/icons/alert.svg +0 -1
- egse/icons/arrow-double-left.png +0 -0
- egse/icons/arrow-double-right.png +0 -0
- egse/icons/arrow-up.svg +0 -11
- egse/icons/backward.svg +0 -1
- egse/icons/busy.svg +0 -1
- egse/icons/cleaning.svg +0 -115
- egse/icons/color-scheme.svg +0 -1
- egse/icons/cs-connected-alert.svg +0 -91
- egse/icons/cs-connected-disabled.svg +0 -43
- egse/icons/cs-connected.svg +0 -89
- egse/icons/cs-not-connected.svg +0 -44
- egse/icons/double-left-arrow.svg +0 -1
- egse/icons/double-right-arrow.svg +0 -1
- egse/icons/erase-disabled.svg +0 -19
- egse/icons/erase.svg +0 -59
- egse/icons/fitsgen-start.svg +0 -47
- egse/icons/fitsgen-stop.svg +0 -48
- egse/icons/fitsgen.svg +0 -1
- egse/icons/forward.svg +0 -1
- egse/icons/fov-hk-start.svg +0 -33
- egse/icons/fov-hk-stop.svg +0 -37
- egse/icons/fov-hk.svg +0 -1
- egse/icons/front-desk.svg +0 -1
- egse/icons/home-actioned.svg +0 -15
- egse/icons/home-disabled.svg +0 -15
- egse/icons/home.svg +0 -13
- egse/icons/info.svg +0 -1
- egse/icons/invalid.png +0 -0
- egse/icons/led-green.svg +0 -20
- egse/icons/led-grey.svg +0 -20
- egse/icons/led-orange.svg +0 -20
- egse/icons/led-red.svg +0 -20
- egse/icons/led-square-green.svg +0 -134
- egse/icons/led-square-grey.svg +0 -134
- egse/icons/led-square-orange.svg +0 -134
- egse/icons/led-square-red.svg +0 -134
- egse/icons/limit-switch-all-green.svg +0 -115
- egse/icons/limit-switch-all-red.svg +0 -117
- egse/icons/limit-switch-el+.svg +0 -116
- egse/icons/limit-switch-el-.svg +0 -117
- egse/icons/location-marker.svg +0 -1
- egse/icons/logo-dpu.svg +0 -48
- egse/icons/logo-gimbal.svg +0 -112
- egse/icons/logo-huber.svg +0 -23
- egse/icons/logo-ogse.svg +0 -31
- egse/icons/logo-puna.svg +0 -92
- egse/icons/logo-tcs.svg +0 -29
- egse/icons/logo-zonda.svg +0 -66
- egse/icons/maximize.svg +0 -1
- egse/icons/meter.svg +0 -1
- egse/icons/more.svg +0 -45
- egse/icons/n-fee-hk-start.svg +0 -24
- egse/icons/n-fee-hk-stop.svg +0 -25
- egse/icons/n-fee-hk.svg +0 -83
- egse/icons/observing-off.svg +0 -46
- egse/icons/observing-on.svg +0 -46
- egse/icons/open-document-hdf5.png +0 -0
- egse/icons/open-document-hdf5.svg +0 -21
- egse/icons/ops-mode.svg +0 -1
- egse/icons/play-green.svg +0 -17
- egse/icons/plugged-disabled.svg +0 -27
- egse/icons/plugged.svg +0 -21
- egse/icons/pm_ui.svg +0 -1
- egse/icons/power-button-green.svg +0 -27
- egse/icons/power-button-red.svg +0 -27
- egse/icons/power-button.svg +0 -27
- egse/icons/radar.svg +0 -1
- egse/icons/radioactive.svg +0 -2
- egse/icons/reload.svg +0 -1
- egse/icons/remote-control-off.svg +0 -28
- egse/icons/remote-control-on.svg +0 -28
- egse/icons/repeat-blue.svg +0 -15
- egse/icons/repeat.svg +0 -1
- egse/icons/settings.svg +0 -1
- egse/icons/shrink.svg +0 -1
- egse/icons/shutter.svg +0 -1
- egse/icons/sign-off.svg +0 -1
- egse/icons/sign-on.svg +0 -1
- egse/icons/sim-mode.svg +0 -1
- egse/icons/small-buttons-go.svg +0 -20
- egse/icons/small-buttons-minus.svg +0 -51
- egse/icons/small-buttons-plus.svg +0 -51
- egse/icons/sponge.svg +0 -220
- egse/icons/start-button-disabled.svg +0 -84
- egse/icons/start-button.svg +0 -50
- egse/icons/stop-button-disabled.svg +0 -84
- egse/icons/stop-button.svg +0 -50
- egse/icons/stop-red.svg +0 -17
- egse/icons/stop.svg +0 -1
- egse/icons/switch-disabled-square.svg +0 -87
- egse/icons/switch-disabled.svg +0 -15
- egse/icons/switch-off-square.svg +0 -87
- egse/icons/switch-off.svg +0 -72
- egse/icons/switch-on-square.svg +0 -87
- egse/icons/switch-on.svg +0 -61
- egse/icons/temperature-control.svg +0 -44
- egse/icons/th_ui_logo.svg +0 -1
- egse/icons/unplugged.svg +0 -23
- egse/icons/unvalid.png +0 -0
- egse/icons/user-interface.svg +0 -1
- egse/icons/vacuum.svg +0 -1
- egse/icons/valid.png +0 -0
- egse/icons/zoom-to-pixel-dark.svg +0 -64
- egse/icons/zoom-to-pixel-white.svg +0 -36
- egse/images/big-rotation-stage.png +0 -0
- egse/images/connected-100.png +0 -0
- egse/images/cross.svg +0 -6
- egse/images/disconnected-100.png +0 -0
- egse/images/gui-icon.png +0 -0
- egse/images/home.svg +0 -6
- egse/images/info-icon.png +0 -0
- egse/images/led-black.svg +0 -89
- egse/images/led-green.svg +0 -85
- egse/images/led-orange.svg +0 -85
- egse/images/led-red.svg +0 -85
- egse/images/load-icon.png +0 -0
- egse/images/load-setup.png +0 -0
- egse/images/load.png +0 -0
- egse/images/pause.png +0 -0
- egse/images/play-button.svg +0 -8
- egse/images/play.png +0 -0
- egse/images/process-status.png +0 -0
- egse/images/restart.png +0 -0
- egse/images/search.png +0 -0
- egse/images/sma.png +0 -0
- egse/images/start.png +0 -0
- egse/images/stop-button.svg +0 -8
- egse/images/stop.png +0 -0
- egse/images/switch-off.svg +0 -48
- egse/images/switch-on.svg +0 -48
- egse/images/undo.png +0 -0
- egse/images/update-button.svg +0 -11
- egse/imageviewer/exposureselection.py +0 -475
- egse/imageviewer/imageviewer.py +0 -198
- egse/imageviewer/matchfocalplane.py +0 -179
- egse/imageviewer/subfieldposition.py +0 -133
- egse/lampcontrol/__init__.py +0 -4
- egse/lampcontrol/beaglebone/beaglebone.py +0 -178
- egse/lampcontrol/beaglebone/beaglebone.yaml +0 -62
- egse/lampcontrol/beaglebone/beaglebone_cs.py +0 -106
- egse/lampcontrol/beaglebone/beaglebone_devif.py +0 -150
- egse/lampcontrol/beaglebone/beaglebone_protocol.py +0 -73
- egse/lampcontrol/energetiq/__init__.py +0 -22
- egse/lampcontrol/energetiq/eq99.yaml +0 -98
- egse/lampcontrol/energetiq/lampEQ99.py +0 -283
- egse/lampcontrol/energetiq/lampEQ99_cs.py +0 -128
- egse/lampcontrol/energetiq/lampEQ99_devif.py +0 -158
- egse/lampcontrol/energetiq/lampEQ99_encode_decode_errors.py +0 -73
- egse/lampcontrol/energetiq/lampEQ99_protocol.py +0 -71
- egse/lampcontrol/energetiq/lampEQ99_ui.py +0 -465
- egse/lib/CentOS-7/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/CentOS-8/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/CentOS-8/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Debian/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Debian/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Debian/libetherspacelink_v35_21.dylib +0 -0
- egse/lib/Linux/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Linux/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Ubuntu-20/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Ubuntu-20/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/gssw/python3-gssw_2.2.3+31f63c9f-1_all.deb +0 -0
- egse/lib/ximc/__pycache__/pyximc.cpython-38 2.pyc +0 -0
- egse/lib/ximc/__pycache__/pyximc.cpython-38.pyc +0 -0
- egse/lib/ximc/libximc.framework/Frameworks/libbindy.dylib +0 -0
- egse/lib/ximc/libximc.framework/Frameworks/libxiwrapper.dylib +0 -0
- egse/lib/ximc/libximc.framework/Headers/ximc.h +0 -5510
- egse/lib/ximc/libximc.framework/Resources/Info.plist +0 -42
- egse/lib/ximc/libximc.framework/Resources/keyfile.sqlite +0 -0
- egse/lib/ximc/libximc.framework/libbindy.so +0 -0
- egse/lib/ximc/libximc.framework/libximc +0 -0
- egse/lib/ximc/libximc.framework/libximc.so +0 -0
- egse/lib/ximc/libximc.framework/libximc.so.7.0.0 +0 -0
- egse/lib/ximc/libximc.framework/libxiwrapper.so +0 -0
- egse/lib/ximc/pyximc.py +0 -922
- egse/listener.py +0 -179
- egse/logger/__init__.py +0 -243
- egse/logger/log_cs.py +0 -321
- egse/metrics.py +0 -102
- egse/mixin.py +0 -464
- egse/monitoring.py +0 -95
- egse/ni/alarms/__init__.py +0 -26
- egse/ni/alarms/cdaq9375.py +0 -300
- egse/ni/alarms/cdaq9375.yaml +0 -89
- egse/ni/alarms/cdaq9375_cs.py +0 -130
- egse/ni/alarms/cdaq9375_devif.py +0 -183
- egse/ni/alarms/cdaq9375_protocol.py +0 -48
- egse/obs_inspection.py +0 -165
- egse/observer.py +0 -41
- egse/obsid.py +0 -163
- egse/powermeter/__init__.py +0 -0
- egse/powermeter/ni/__init__.py +0 -38
- egse/powermeter/ni/cdaq9184.py +0 -224
- egse/powermeter/ni/cdaq9184.yaml +0 -73
- egse/powermeter/ni/cdaq9184_cs.py +0 -130
- egse/powermeter/ni/cdaq9184_devif.py +0 -201
- egse/powermeter/ni/cdaq9184_protocol.py +0 -48
- egse/powermeter/ni/cdaq9184_ui.py +0 -544
- egse/powermeter/thorlabs/__init__.py +0 -25
- egse/powermeter/thorlabs/pm100a.py +0 -380
- egse/powermeter/thorlabs/pm100a.yaml +0 -132
- egse/powermeter/thorlabs/pm100a_cs.py +0 -136
- egse/powermeter/thorlabs/pm100a_devif.py +0 -127
- egse/powermeter/thorlabs/pm100a_protocol.py +0 -80
- egse/powermeter/thorlabs/pm100a_ui.py +0 -725
- egse/process.py +0 -451
- egse/procman/__init__.py +0 -834
- egse/procman/cannot_start_process_popup.py +0 -43
- egse/procman/procman.yaml +0 -49
- egse/procman/procman_cs.py +0 -201
- egse/procman/procman_ui.py +0 -2081
- egse/protocol.py +0 -605
- egse/proxy.py +0 -531
- egse/randomwalk.py +0 -140
- egse/reg.py +0 -585
- egse/reload.py +0 -122
- egse/reprocess.py +0 -693
- egse/resource.py +0 -333
- egse/rmap.py +0 -406
- egse/rst.py +0 -135
- egse/search.py +0 -182
- egse/serialdevice.py +0 -190
- egse/services.py +0 -247
- egse/services.yaml +0 -68
- egse/settings.py +0 -379
- egse/settings.yaml +0 -980
- egse/setup.py +0 -1181
- egse/shutter/__init__.py +0 -0
- egse/shutter/thorlabs/__init__.py +0 -19
- egse/shutter/thorlabs/ksc101.py +0 -205
- egse/shutter/thorlabs/ksc101.yaml +0 -105
- egse/shutter/thorlabs/ksc101_cs.py +0 -136
- egse/shutter/thorlabs/ksc101_devif.py +0 -201
- egse/shutter/thorlabs/ksc101_protocol.py +0 -71
- egse/shutter/thorlabs/ksc101_ui.py +0 -548
- egse/shutter/thorlabs/sc10.py +0 -82
- egse/shutter/thorlabs/sc10.yaml +0 -52
- egse/shutter/thorlabs/sc10_controller.py +0 -81
- egse/shutter/thorlabs/sc10_cs.py +0 -108
- egse/shutter/thorlabs/sc10_interface.py +0 -25
- egse/shutter/thorlabs/sc10_simulator.py +0 -30
- egse/simulator.py +0 -41
- egse/slack.py +0 -61
- egse/socketdevice.py +0 -218
- egse/sockets.py +0 -218
- egse/spw.py +0 -1401
- egse/stages/__init__.py +0 -12
- egse/stages/aerotech/ensemble.py +0 -245
- egse/stages/aerotech/ensemble.yaml +0 -205
- egse/stages/aerotech/ensemble_controller.py +0 -275
- egse/stages/aerotech/ensemble_cs.py +0 -110
- egse/stages/aerotech/ensemble_interface.py +0 -132
- egse/stages/aerotech/ensemble_parameters.py +0 -433
- egse/stages/aerotech/ensemble_simulator.py +0 -27
- egse/stages/aerotech/mgse_sim.py +0 -188
- egse/stages/arun/smd3.py +0 -110
- egse/stages/arun/smd3.yaml +0 -68
- egse/stages/arun/smd3_controller.py +0 -470
- egse/stages/arun/smd3_cs.py +0 -112
- egse/stages/arun/smd3_interface.py +0 -53
- egse/stages/arun/smd3_simulator.py +0 -27
- egse/stages/arun/smd3_stop.py +0 -16
- egse/stages/huber/__init__.py +0 -49
- egse/stages/huber/smc9300.py +0 -920
- egse/stages/huber/smc9300.yaml +0 -63
- egse/stages/huber/smc9300_cs.py +0 -178
- egse/stages/huber/smc9300_devif.py +0 -345
- egse/stages/huber/smc9300_protocol.py +0 -113
- egse/stages/huber/smc9300_sim.py +0 -547
- egse/stages/huber/smc9300_ui.py +0 -973
- egse/state.py +0 -173
- egse/statemachine.py +0 -274
- egse/storage/__init__.py +0 -1067
- egse/storage/persistence.py +0 -2295
- egse/storage/storage.yaml +0 -79
- egse/storage/storage_cs.py +0 -231
- egse/styles/dark.qss +0 -343
- egse/styles/default.qss +0 -48
- egse/synoptics/__init__.py +0 -417
- egse/synoptics/syn.yaml +0 -9
- egse/synoptics/syn_cs.py +0 -195
- egse/system.py +0 -1611
- egse/tcs/__init__.py +0 -14
- egse/tcs/tcs.py +0 -879
- egse/tcs/tcs.yaml +0 -14
- egse/tcs/tcs_cs.py +0 -202
- egse/tcs/tcs_devif.py +0 -292
- egse/tcs/tcs_protocol.py +0 -180
- egse/tcs/tcs_sim.py +0 -177
- egse/tcs/tcs_ui.py +0 -543
- egse/tdms.py +0 -171
- egse/tempcontrol/__init__.py +0 -23
- egse/tempcontrol/agilent/agilent34970.py +0 -109
- egse/tempcontrol/agilent/agilent34970.yaml +0 -44
- egse/tempcontrol/agilent/agilent34970_cs.py +0 -114
- egse/tempcontrol/agilent/agilent34970_devif.py +0 -182
- egse/tempcontrol/agilent/agilent34970_protocol.py +0 -96
- egse/tempcontrol/agilent/agilent34972.py +0 -111
- egse/tempcontrol/agilent/agilent34972.yaml +0 -44
- egse/tempcontrol/agilent/agilent34972_cs.py +0 -115
- egse/tempcontrol/agilent/agilent34972_devif.py +0 -189
- egse/tempcontrol/agilent/agilent34972_protocol.py +0 -98
- egse/tempcontrol/beaglebone/beaglebone.py +0 -341
- egse/tempcontrol/beaglebone/beaglebone.yaml +0 -110
- egse/tempcontrol/beaglebone/beaglebone_cs.py +0 -117
- egse/tempcontrol/beaglebone/beaglebone_protocol.py +0 -134
- egse/tempcontrol/beaglebone/beaglebone_ui.py +0 -674
- egse/tempcontrol/digalox/digalox.py +0 -115
- egse/tempcontrol/digalox/digalox.yaml +0 -36
- egse/tempcontrol/digalox/digalox_cs.py +0 -108
- egse/tempcontrol/digalox/digalox_protocol.py +0 -56
- egse/tempcontrol/keithley/__init__.py +0 -33
- egse/tempcontrol/keithley/daq6510.py +0 -662
- egse/tempcontrol/keithley/daq6510.yaml +0 -105
- egse/tempcontrol/keithley/daq6510_cs.py +0 -163
- egse/tempcontrol/keithley/daq6510_devif.py +0 -343
- egse/tempcontrol/keithley/daq6510_protocol.py +0 -79
- egse/tempcontrol/keithley/daq6510_sim.py +0 -186
- egse/tempcontrol/lakeshore/__init__.py +0 -33
- egse/tempcontrol/lakeshore/lsci.py +0 -361
- egse/tempcontrol/lakeshore/lsci.yaml +0 -162
- egse/tempcontrol/lakeshore/lsci_cs.py +0 -174
- egse/tempcontrol/lakeshore/lsci_devif.py +0 -292
- egse/tempcontrol/lakeshore/lsci_protocol.py +0 -76
- egse/tempcontrol/lakeshore/lsci_ui.py +0 -387
- egse/tempcontrol/ni/__init__.py +0 -0
- egse/tempcontrol/spid/spid.py +0 -109
- egse/tempcontrol/spid/spid.yaml +0 -81
- egse/tempcontrol/spid/spid_controller.py +0 -279
- egse/tempcontrol/spid/spid_cs.py +0 -136
- egse/tempcontrol/spid/spid_protocol.py +0 -107
- egse/tempcontrol/spid/spid_ui.py +0 -723
- egse/tempcontrol/srs/__init__.py +0 -22
- egse/tempcontrol/srs/ptc10.py +0 -867
- egse/tempcontrol/srs/ptc10.yaml +0 -227
- egse/tempcontrol/srs/ptc10_cs.py +0 -128
- egse/tempcontrol/srs/ptc10_devif.py +0 -116
- egse/tempcontrol/srs/ptc10_protocol.py +0 -39
- egse/tempcontrol/srs/ptc10_ui.py +0 -906
- egse/ups/apc/apc.py +0 -236
- egse/ups/apc/apc.yaml +0 -45
- egse/ups/apc/apc_cs.py +0 -101
- egse/ups/apc/apc_protocol.py +0 -125
- egse/user.yaml +0 -7
- egse/vacuum/beaglebone/beaglebone.py +0 -149
- egse/vacuum/beaglebone/beaglebone.yaml +0 -44
- egse/vacuum/beaglebone/beaglebone_cs.py +0 -108
- egse/vacuum/beaglebone/beaglebone_devif.py +0 -159
- egse/vacuum/beaglebone/beaglebone_protocol.py +0 -192
- egse/vacuum/beaglebone/beaglebone_ui.py +0 -638
- egse/vacuum/instrutech/igm402.py +0 -91
- egse/vacuum/instrutech/igm402.yaml +0 -90
- egse/vacuum/instrutech/igm402_controller.py +0 -124
- egse/vacuum/instrutech/igm402_cs.py +0 -108
- egse/vacuum/instrutech/igm402_interface.py +0 -49
- egse/vacuum/instrutech/igm402_simulator.py +0 -36
- egse/vacuum/keller/kellerBus.py +0 -256
- egse/vacuum/keller/leo3.py +0 -100
- egse/vacuum/keller/leo3.yaml +0 -38
- egse/vacuum/keller/leo3_controller.py +0 -81
- egse/vacuum/keller/leo3_cs.py +0 -101
- egse/vacuum/keller/leo3_interface.py +0 -33
- egse/vacuum/mks/evision.py +0 -86
- egse/vacuum/mks/evision.yaml +0 -75
- egse/vacuum/mks/evision_cs.py +0 -101
- egse/vacuum/mks/evision_devif.py +0 -313
- egse/vacuum/mks/evision_interface.py +0 -60
- egse/vacuum/mks/evision_simulator.py +0 -24
- egse/vacuum/mks/evision_ui.py +0 -701
- egse/vacuum/pfeiffer/acp40.py +0 -87
- egse/vacuum/pfeiffer/acp40.yaml +0 -60
- egse/vacuum/pfeiffer/acp40_controller.py +0 -117
- egse/vacuum/pfeiffer/acp40_cs.py +0 -109
- egse/vacuum/pfeiffer/acp40_interface.py +0 -40
- egse/vacuum/pfeiffer/acp40_simulator.py +0 -37
- egse/vacuum/pfeiffer/tc400.py +0 -87
- egse/vacuum/pfeiffer/tc400.yaml +0 -83
- egse/vacuum/pfeiffer/tc400_controller.py +0 -136
- egse/vacuum/pfeiffer/tc400_cs.py +0 -109
- egse/vacuum/pfeiffer/tc400_interface.py +0 -70
- egse/vacuum/pfeiffer/tc400_simulator.py +0 -35
- egse/vacuum/pfeiffer/tpg261.py +0 -80
- egse/vacuum/pfeiffer/tpg261.yaml +0 -66
- egse/vacuum/pfeiffer/tpg261_controller.py +0 -150
- egse/vacuum/pfeiffer/tpg261_cs.py +0 -109
- egse/vacuum/pfeiffer/tpg261_interface.py +0 -59
- egse/vacuum/pfeiffer/tpg261_simulator.py +0 -23
- egse/version.py +0 -174
- egse/visitedpositions.py +0 -398
- egse/windowing.py +0 -213
- egse/zmq/__init__.py +0 -28
- egse/zmq/spw.py +0 -160
- egse/zmq_ser.py +0 -41
- scripts/alerts/cold.yaml +0 -278
- scripts/alerts/example_alerts.yaml +0 -54
- scripts/alerts/transition.yaml +0 -14
- scripts/alerts/warm.yaml +0 -49
- scripts/analyse_n_fee_hk_data.py +0 -52
- scripts/check_hdf5_files.py +0 -192
- scripts/check_register_sync.py +0 -47
- scripts/check_tcs_calib_coef.py +0 -90
- scripts/correct_ccd_cold_temperature_cal.py +0 -157
- scripts/create_hdf5_report.py +0 -293
- scripts/csl_model.py +0 -420
- scripts/csl_restore_setup.py +0 -229
- scripts/export-grafana-dashboards.py +0 -49
- scripts/fdir/cs_recovery/fdir_cs_recovery.py +0 -54
- scripts/fdir/fdir_table.yaml +0 -70
- scripts/fdir/fdir_test_recovery.py +0 -10
- scripts/fdir/hw_recovery/fdir_agilent_hw_recovery.py +0 -73
- scripts/fdir/limit_recovery/fdir_agilent_limit.py +0 -61
- scripts/fdir/limit_recovery/fdir_bb_heater_limit.py +0 -59
- scripts/fdir/limit_recovery/fdir_ensemble_limit.py +0 -33
- scripts/fdir/limit_recovery/fdir_pressure_limit_recovery.py +0 -71
- scripts/fix_csv.py +0 -80
- scripts/ias/correct_ccd_temp_cal_elfique.py +0 -43
- scripts/ias/correct_ccd_temp_cal_floreffe.py +0 -43
- scripts/ias/correct_trp_swap_achel.py +0 -199
- scripts/inta/correct_ccd_temp_cal_duvel.py +0 -43
- scripts/inta/correct_ccd_temp_cal_gueuze.py +0 -43
- scripts/n_fee_supply_voltage_calculation.py +0 -92
- scripts/playground.py +0 -30
- scripts/print_hdf5_hk_data.py +0 -68
- scripts/print_register_map.py +0 -43
- scripts/remove_lines_between_matches.py +0 -188
- scripts/sron/commanding/control_heaters.py +0 -44
- scripts/sron/commanding/pumpdown.py +0 -46
- scripts/sron/commanding/set_pid_setpoint.py +0 -19
- scripts/sron/commanding/shutdown_bbb_heaters.py +0 -10
- scripts/sron/commanding/shutdown_pumps.py +0 -33
- scripts/sron/correct_mgse_coordinates_brigand_chimay.py +0 -272
- scripts/sron/correct_trp_swap_brigand.py +0 -204
- scripts/sron/gimbal_conversions.py +0 -75
- scripts/sron/tm_gen/tm_gen_agilent.py +0 -37
- scripts/sron/tm_gen/tm_gen_heaters.py +0 -4
- scripts/sron/tm_gen/tm_gen_spid.py +0 -13
- scripts/update_operational_cgse.py +0 -268
- scripts/update_operational_cgse_old.py +0 -273
egse/settings.py
DELETED
|
@@ -1,379 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
The Settings class handles user and configuration settings that are provided in
|
|
3
|
-
a [`YAML`](http://yaml.org) file.
|
|
4
|
-
|
|
5
|
-
The idea is that settings are grouped by components or any arbitrary grouping that makes sense for
|
|
6
|
-
the application or for the user. The Settings class can read from different YAML files. By default,
|
|
7
|
-
settings are loaded from a file called ``settings.yaml``. The default yaml configuration file is
|
|
8
|
-
located in the same directory as this module.
|
|
9
|
-
|
|
10
|
-
The YAML file is read and the configuration parameters for the given group are
|
|
11
|
-
made available as instance variables of the returned class.
|
|
12
|
-
|
|
13
|
-
The intended use is as follows:
|
|
14
|
-
|
|
15
|
-
from egse.settings import Settings
|
|
16
|
-
|
|
17
|
-
dsi_settings = Settings.load("DSI")
|
|
18
|
-
|
|
19
|
-
if (dsi_settings.RMAP_BASE_ADDRESS
|
|
20
|
-
<= addr
|
|
21
|
-
< dsi_settings.RMAP_BASE_ADDRESS + dsi_settings.RMAP_MEMORY_SIZE):
|
|
22
|
-
# do something here
|
|
23
|
-
else:
|
|
24
|
-
raise RMAPError("Attempt to access outside the RMAP memory map.")
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
The above code reads the settings from the default YAML file for a group called ``DSI``.
|
|
28
|
-
The settings will then be available as variables of the returned class, in this case
|
|
29
|
-
``dsi_settings``. The returned class is and behaves also like a dictionary, so you can check
|
|
30
|
-
if a configuration parameter is defined like this:
|
|
31
|
-
|
|
32
|
-
if "DSI_FEE_IP_ADDRESS" not in dsi_settings:
|
|
33
|
-
# define the IP address of the DSI
|
|
34
|
-
|
|
35
|
-
The YAML section for the above code looks like this:
|
|
36
|
-
|
|
37
|
-
DSI:
|
|
38
|
-
|
|
39
|
-
# DSI Specific Settings
|
|
40
|
-
|
|
41
|
-
DSI_FEE_IP_ADDRESS 10.33.178.144 # IP address of the DSI EtherSpaceLink interface
|
|
42
|
-
LINK_SPEED: 100 # SpW link speed used for both up- and downlink
|
|
43
|
-
|
|
44
|
-
# RMAP Specific Settings
|
|
45
|
-
|
|
46
|
-
RMAP_BASE_ADDRESS: 0x00000000 # The start of the RMAP memory map managed by the FEE
|
|
47
|
-
RMAP_MEMORY_SIZE: 4096 # The size of the RMAP memory map managed by the FEE
|
|
48
|
-
|
|
49
|
-
When you want to read settings from another YAML file, specify the ``filename=`` keyword.
|
|
50
|
-
If that file is located at a specific location, also use the ``location=`` keyword.
|
|
51
|
-
|
|
52
|
-
my_settings = Settings.load(filename="user.yaml", location="/Users/JohnDoe")
|
|
53
|
-
|
|
54
|
-
The above code will read the complete YAML file, i.e. all the groups into a dictionary.
|
|
55
|
-
|
|
56
|
-
"""
|
|
57
|
-
|
|
58
|
-
import logging
|
|
59
|
-
import os
|
|
60
|
-
import pathlib
|
|
61
|
-
import re
|
|
62
|
-
|
|
63
|
-
import yaml # This module is provided by the pip package PyYaml - pip install pyyaml
|
|
64
|
-
|
|
65
|
-
from egse.env import ENV_PLATO_LOCAL_SETTINGS
|
|
66
|
-
from egse.exceptions import FileIsEmptyError
|
|
67
|
-
from egse.system import AttributeDict
|
|
68
|
-
from egse.system import get_caller_info
|
|
69
|
-
from egse.system import ignore_m_warning
|
|
70
|
-
from egse.system import recursive_dict_update
|
|
71
|
-
|
|
72
|
-
logger = logging.getLogger(__name__)
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
class SettingsError(Exception):
|
|
76
|
-
pass
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
def is_defined(cls, name):
|
|
80
|
-
return hasattr(cls, name)
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
def get_attr_value(cls, name, default=None):
|
|
84
|
-
try:
|
|
85
|
-
return getattr(cls, name)
|
|
86
|
-
except AttributeError:
|
|
87
|
-
return default
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
def set_attr_value(cls, name, value):
|
|
91
|
-
if hasattr(cls, name):
|
|
92
|
-
raise KeyError(f"Overwriting setting {name} with {value}, was {hasattr(cls, name)}")
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
# Fix the problem: YAML loads 5e-6 as string and not a number
|
|
96
|
-
# https://stackoverflow.com/questions/30458977/yaml-loads-5e-6-as-string-and-not-a-number
|
|
97
|
-
|
|
98
|
-
SAFE_LOADER = yaml.SafeLoader
|
|
99
|
-
SAFE_LOADER.add_implicit_resolver(
|
|
100
|
-
u'tag:yaml.org,2002:float',
|
|
101
|
-
re.compile(u"""^(?:
|
|
102
|
-
[-+]?(?:[0-9][0-9_]*)\\.[0-9_]*(?:[eE][-+]?[0-9]+)?
|
|
103
|
-
|[-+]?(?:[0-9][0-9_]*)(?:[eE][-+]?[0-9]+)
|
|
104
|
-
|\\.[0-9_]+(?:[eE][-+][0-9]+)?
|
|
105
|
-
|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*
|
|
106
|
-
|[-+]?\\.(?:inf|Inf|INF)
|
|
107
|
-
|\\.(?:nan|NaN|NAN))$""", re.X),
|
|
108
|
-
list(u'-+0123456789.'))
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
class Settings:
|
|
112
|
-
"""
|
|
113
|
-
The Settings class provides a load() method that loads configuration settings for a group
|
|
114
|
-
into a dynamically created class as instance variables.
|
|
115
|
-
"""
|
|
116
|
-
|
|
117
|
-
__memoized_yaml = {} # Memoized settings yaml files
|
|
118
|
-
|
|
119
|
-
__profile = False # Used for profiling methods and functions
|
|
120
|
-
__simulation = False # Use simulation mode where applicable and possible
|
|
121
|
-
|
|
122
|
-
LOG_FORMAT_DEFAULT = "%(levelname)s:%(module)s:%(lineno)d:%(message)s"
|
|
123
|
-
LOG_FORMAT_FULL = "%(asctime)23s:%(levelname)8s:%(lineno)5d:%(name)-20s: %(message)s"
|
|
124
|
-
LOG_FORMAT_THREAD = (
|
|
125
|
-
"%(asctime)23s:%(levelname)7s:%(lineno)5d:%(name)-20s(%(threadName)-15s): %(message)s"
|
|
126
|
-
)
|
|
127
|
-
LOG_FORMAT_PROCESS = (
|
|
128
|
-
"%(asctime)23s:%(levelname)7s:%(lineno)5d:%(name)20s.%(funcName)-31s(%(processName)-20s): "
|
|
129
|
-
"%(message)s"
|
|
130
|
-
)
|
|
131
|
-
LOG_FORMAT_DATE = "%d/%m/%Y %H:%M:%S"
|
|
132
|
-
|
|
133
|
-
@classmethod
|
|
134
|
-
def read_configuration_file(cls, filename: str, *, force=False):
|
|
135
|
-
"""
|
|
136
|
-
Read the YAML input configuration file. The configuration file is only read
|
|
137
|
-
once and memoized as load optimization.
|
|
138
|
-
|
|
139
|
-
Args:
|
|
140
|
-
filename (str): the fully qualified filename of the YAML file
|
|
141
|
-
force (bool): force reloading the file
|
|
142
|
-
|
|
143
|
-
Returns:
|
|
144
|
-
a dictionary containing all the configuration settings from the YAML file.
|
|
145
|
-
"""
|
|
146
|
-
if force or filename not in cls.__memoized_yaml:
|
|
147
|
-
|
|
148
|
-
# logger.debug(f"Parsing YAML configuration file {filename}.")
|
|
149
|
-
|
|
150
|
-
with open(filename, "r") as stream:
|
|
151
|
-
try:
|
|
152
|
-
yaml_document = yaml.load(stream, Loader=SAFE_LOADER)
|
|
153
|
-
except yaml.YAMLError as exc:
|
|
154
|
-
logger.error(exc)
|
|
155
|
-
raise SettingsError(f"Error loading YAML document {filename}") from exc
|
|
156
|
-
|
|
157
|
-
cls.__memoized_yaml[filename] = yaml_document
|
|
158
|
-
|
|
159
|
-
return cls.__memoized_yaml[filename]
|
|
160
|
-
|
|
161
|
-
@classmethod
|
|
162
|
-
def get_memoized_locations(cls):
|
|
163
|
-
return cls.__memoized_yaml.keys()
|
|
164
|
-
|
|
165
|
-
@classmethod
|
|
166
|
-
def load(cls, group_name=None, filename="settings.yaml", location=None, *, force=False,
|
|
167
|
-
add_local_settings=True):
|
|
168
|
-
"""
|
|
169
|
-
Load the settings for the given group from YAML configuration file.
|
|
170
|
-
When no group is provided, the complete configuration is returned.
|
|
171
|
-
|
|
172
|
-
The default YAML file is 'settings.yaml' and is located in the same directory
|
|
173
|
-
as the settings module.
|
|
174
|
-
|
|
175
|
-
About the ``location`` keyword several options are available.
|
|
176
|
-
|
|
177
|
-
* when no location is given, i.e. ``location=None``, the YAML settings file is searched for
|
|
178
|
-
at the same location as the settings module.
|
|
179
|
-
|
|
180
|
-
* when a relative location is given, the YAML settings file is searched for relative to the
|
|
181
|
-
current working directory.
|
|
182
|
-
|
|
183
|
-
* when an absolute location is given, that location is used 'as is'.
|
|
184
|
-
|
|
185
|
-
Args:
|
|
186
|
-
group_name (str): the name of one of the main groups from the YAML file
|
|
187
|
-
filename (str): the name of the YAML file to read
|
|
188
|
-
location (str): the path to the location of the YAML file
|
|
189
|
-
force (bool): force reloading the file
|
|
190
|
-
add_local_settings (bool): update the Settings with site specific local settings
|
|
191
|
-
|
|
192
|
-
Returns:
|
|
193
|
-
a dynamically created class with the configuration parameters as instance variables.
|
|
194
|
-
|
|
195
|
-
Raises:
|
|
196
|
-
a SettingsError when the group is not defined in the YAML file.
|
|
197
|
-
"""
|
|
198
|
-
|
|
199
|
-
_THIS_FILE_LOCATION = pathlib.Path(__file__).resolve().parent
|
|
200
|
-
|
|
201
|
-
if location is None:
|
|
202
|
-
|
|
203
|
-
# Check if the yaml file is located at the location of the caller,
|
|
204
|
-
# if not, use the file that is located where the Settings module is located.
|
|
205
|
-
|
|
206
|
-
caller_dir = get_caller_info(level=2).filename
|
|
207
|
-
caller_dir = pathlib.Path(caller_dir).resolve().parent
|
|
208
|
-
|
|
209
|
-
if (caller_dir / filename).is_file():
|
|
210
|
-
yaml_location = caller_dir
|
|
211
|
-
else:
|
|
212
|
-
yaml_location = _THIS_FILE_LOCATION
|
|
213
|
-
else:
|
|
214
|
-
|
|
215
|
-
# The location was given as an argument
|
|
216
|
-
|
|
217
|
-
yaml_location = pathlib.Path(location).resolve()
|
|
218
|
-
|
|
219
|
-
logger.log(5, f"yaml_location in Settings.load(location={location}) is {yaml_location}")
|
|
220
|
-
|
|
221
|
-
# Load the YAML global document
|
|
222
|
-
|
|
223
|
-
try:
|
|
224
|
-
yaml_document_global = cls.read_configuration_file(
|
|
225
|
-
yaml_location / filename, force=force
|
|
226
|
-
)
|
|
227
|
-
except FileNotFoundError as exc:
|
|
228
|
-
raise SettingsError(
|
|
229
|
-
f"Filename {filename} not found at location {yaml_location}."
|
|
230
|
-
) from exc
|
|
231
|
-
|
|
232
|
-
# Check if there were any groups defined in the YAML document
|
|
233
|
-
|
|
234
|
-
if not yaml_document_global:
|
|
235
|
-
raise SettingsError(f"Empty YAML document {filename} at {yaml_location}.")
|
|
236
|
-
|
|
237
|
-
# Load the LOCAL settings YAML file
|
|
238
|
-
|
|
239
|
-
if add_local_settings:
|
|
240
|
-
try:
|
|
241
|
-
local_settings_location = os.environ[ENV_PLATO_LOCAL_SETTINGS]
|
|
242
|
-
logger.log(5, f"Using {ENV_PLATO_LOCAL_SETTINGS} to update global settings.")
|
|
243
|
-
try:
|
|
244
|
-
yaml_document_local = cls.read_configuration_file(
|
|
245
|
-
local_settings_location, force=force
|
|
246
|
-
)
|
|
247
|
-
if yaml_document_local is None:
|
|
248
|
-
raise FileIsEmptyError()
|
|
249
|
-
local_settings = AttributeDict(
|
|
250
|
-
{name: value for name, value in yaml_document_local.items()}
|
|
251
|
-
)
|
|
252
|
-
except FileNotFoundError as exc:
|
|
253
|
-
raise SettingsError(
|
|
254
|
-
f"Local settings YAML file '{local_settings_location}' not found. "
|
|
255
|
-
f"Check your environment variable {ENV_PLATO_LOCAL_SETTINGS}."
|
|
256
|
-
) from exc
|
|
257
|
-
except FileIsEmptyError as exc:
|
|
258
|
-
logger.warning(f"Local settings YAML file '{local_settings_location}' is empty. "
|
|
259
|
-
f"No local settings were loaded.")
|
|
260
|
-
local_settings = {}
|
|
261
|
-
except KeyError:
|
|
262
|
-
logger.debug(f"The environment variable {ENV_PLATO_LOCAL_SETTINGS} is not defined.")
|
|
263
|
-
local_settings = {}
|
|
264
|
-
|
|
265
|
-
if group_name in (None, ""):
|
|
266
|
-
global_settings = AttributeDict(
|
|
267
|
-
{name: value for name, value in yaml_document_global.items()}
|
|
268
|
-
)
|
|
269
|
-
if add_local_settings:
|
|
270
|
-
recursive_dict_update(global_settings, local_settings)
|
|
271
|
-
return global_settings
|
|
272
|
-
|
|
273
|
-
# Check if the requested group is defined in the YAML document
|
|
274
|
-
|
|
275
|
-
if group_name not in yaml_document_global:
|
|
276
|
-
raise SettingsError(
|
|
277
|
-
f"Group name '{group_name}' is not defined in the YAML "
|
|
278
|
-
f"document '{filename}' at '{yaml_location}."
|
|
279
|
-
)
|
|
280
|
-
|
|
281
|
-
# Check if the group has any settings
|
|
282
|
-
|
|
283
|
-
if not yaml_document_global[group_name]:
|
|
284
|
-
raise SettingsError(f"Empty group in YAML document {filename} at {yaml_location}.")
|
|
285
|
-
|
|
286
|
-
group_settings = AttributeDict(
|
|
287
|
-
{name: value for name, value in yaml_document_global[group_name].items()}
|
|
288
|
-
)
|
|
289
|
-
|
|
290
|
-
if add_local_settings and group_name in local_settings:
|
|
291
|
-
recursive_dict_update(group_settings, local_settings[group_name])
|
|
292
|
-
|
|
293
|
-
return group_settings
|
|
294
|
-
|
|
295
|
-
@classmethod
|
|
296
|
-
def to_string(cls):
|
|
297
|
-
"""
|
|
298
|
-
Returns a simple string representation of the cached configuration of this Settings class.
|
|
299
|
-
"""
|
|
300
|
-
memoized = cls.__memoized_yaml
|
|
301
|
-
|
|
302
|
-
msg = ""
|
|
303
|
-
for key in memoized.keys():
|
|
304
|
-
msg += f"YAML file: {key}\n"
|
|
305
|
-
for field in memoized[key].keys():
|
|
306
|
-
length = 60
|
|
307
|
-
line = str(memoized[key][field])
|
|
308
|
-
trunc = line[:length]
|
|
309
|
-
if len(line) > length:
|
|
310
|
-
trunc += " ..."
|
|
311
|
-
msg += f" {field}: {trunc}\n"
|
|
312
|
-
|
|
313
|
-
return msg
|
|
314
|
-
|
|
315
|
-
@classmethod
|
|
316
|
-
def set_profiling(cls, flag):
|
|
317
|
-
cls.__profile = flag
|
|
318
|
-
|
|
319
|
-
@classmethod
|
|
320
|
-
def profiling(cls):
|
|
321
|
-
return cls.__profile
|
|
322
|
-
|
|
323
|
-
@classmethod
|
|
324
|
-
def set_simulation_mode(cls, flag: bool) -> bool:
|
|
325
|
-
cls.__simulation = flag
|
|
326
|
-
|
|
327
|
-
@classmethod
|
|
328
|
-
def simulation_mode(cls) -> bool:
|
|
329
|
-
return cls.__simulation
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
ignore_m_warning('egse.settings')
|
|
333
|
-
|
|
334
|
-
if __name__ == "__main__":
|
|
335
|
-
|
|
336
|
-
# We provide convenience to inspect the settings by calling this module directly from Python.
|
|
337
|
-
#
|
|
338
|
-
# python -m egse.settings
|
|
339
|
-
#
|
|
340
|
-
# Use the '--help' option to see the what your choices are.
|
|
341
|
-
|
|
342
|
-
logging.basicConfig(level=20)
|
|
343
|
-
|
|
344
|
-
import argparse
|
|
345
|
-
|
|
346
|
-
parser = argparse.ArgumentParser(
|
|
347
|
-
description=(
|
|
348
|
-
f"Print out the default Settings, updated with local settings if the "
|
|
349
|
-
f"{ENV_PLATO_LOCAL_SETTINGS} environment variable is set."
|
|
350
|
-
),
|
|
351
|
-
)
|
|
352
|
-
parser.add_argument("--local", action="store_true", help="print only the local settings.")
|
|
353
|
-
args = parser.parse_args()
|
|
354
|
-
|
|
355
|
-
# The following import will activate the pretty printing of the AttributeDict
|
|
356
|
-
# through the __rich__ method.
|
|
357
|
-
|
|
358
|
-
from rich import print
|
|
359
|
-
|
|
360
|
-
if args.local:
|
|
361
|
-
location = os.environ.get(ENV_PLATO_LOCAL_SETTINGS)
|
|
362
|
-
if location:
|
|
363
|
-
settings = Settings.load(filename=location)
|
|
364
|
-
print(settings)
|
|
365
|
-
print(f"Loaded from [purple]{location}.")
|
|
366
|
-
else:
|
|
367
|
-
print("[red]No local settings defined.")
|
|
368
|
-
else:
|
|
369
|
-
settings = Settings.load()
|
|
370
|
-
print(settings)
|
|
371
|
-
print("[blue]Memoized locations:")
|
|
372
|
-
locations = Settings.get_memoized_locations()
|
|
373
|
-
print([str(loc) for loc in locations])
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
def get_site_id() -> str:
|
|
377
|
-
|
|
378
|
-
site = Settings.load("SITE")
|
|
379
|
-
return site.ID
|