From 7b5a74b561f7951a03b2d14cb58579822fe5db39 Mon Sep 17 00:00:00 2001 From: Philipp Schmidt <philipp.schmidt@xfel.eu> Date: Wed, 3 Nov 2021 15:34:38 +0100 Subject: [PATCH] manager: Apply previous values after proxy creation --- src/calng/CalibrationManager.py | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/src/calng/CalibrationManager.py b/src/calng/CalibrationManager.py index 68158430..bd519b39 100644 --- a/src/calng/CalibrationManager.py +++ b/src/calng/CalibrationManager.py @@ -654,25 +654,15 @@ class CalibrationManager(DeviceClientBase, Device): if path not in managed_paths: del managed_hash[path] - # Check for current values of managed keys on DAQ devices and - # update schema correspondingly. - try: - if self._daq_device_ids: - daq_vals = await self._get_shared_keys( - self._daq_device_ids, ManagedKeysNode.DAQ_KEYS.keys()) - - for orig_key, managed_key in ManagedKeysNode.DAQ_KEYS.items(): - managed_hash[managed_key, 'defaultValue'] = daq_vals[orig_key] - except Exception as e: - self.logger.warn(f'Error in getting defaults from DAQs: "{e}"') - - # Check for current values of managed keys on correction - # devices and update schema correspondingly. - corr_vals = await self._get_shared_keys( + # Retrieve any previous values already on running devices in + # order to update the defaultValue attribute in the schema just + # before injection. + prev_vals = await self._get_shared_keys( self._correction_device_ids, managed_keys) - for key, value in corr_vals.items(): - managed_hash[key, 'defaultValue'] = value + if self._daq_device_ids: + prev_vals.update(await self._get_shared_keys( + self._daq_device_ids, ManagedKeysNode.DAQ_KEYS.keys())) # Retrieve the attributes on the current managed node. The # original implementation of toSchemaAndAttrs in the Node's @@ -741,6 +731,12 @@ class CalibrationManager(DeviceClientBase, Device): descr.accessMode = AccessMode.RECONFIGURABLE descr.allowedStates = [State.ACTIVE] + try: + # If there's been a previous value before + # injection, use it. + descr.defaultValue = prev_vals[full_key] + except KeyError: + pass else: self.logger.warn(f'Encountered unknown descriptor type ' f'{type(descr)}') -- GitLab