diff --git a/src/calng/calcat_utils.py b/src/calng/calcat_utils.py index cb8a67192628d79ea30283c6f05a1f56dc8ae339..76b27adf0d18e3129daf5e331bd5492caef59ce1 100644 --- a/src/calng/calcat_utils.py +++ b/src/calng/calcat_utils.py @@ -22,6 +22,7 @@ from karabo.bound import ( SLOT_ELEMENT, STRING_ELEMENT, UINT32_ELEMENT, + VECTOR_UINT32_ELEMENT, ) from karabo import version as karaboVersion from pkg_resources import parse_version @@ -73,16 +74,16 @@ def add_status_schema_from_enum(schema, prefix, enum_class): .initialValue("") .commit(), - STRING_ELEMENT(schema) - .key(f"{constant_node}.conditionId") + VECTOR_UINT32_ELEMENT(schema) + .key(f"{constant_node}.conditionIds") .readOnly() - .initialValue("") + .initialValue([]) .commit(), - STRING_ELEMENT(schema) - .key(f"{constant_node}.constantId") + VECTOR_UINT32_ELEMENT(schema) + .key(f"{constant_node}.constantIds") .readOnly() - .initialValue("") + .initialValue([]) .commit(), STRING_ELEMENT(schema) @@ -402,7 +403,7 @@ class BaseCalcatFriend: return resp["data"]["id"] @utils.threadsafe_cache - def condition_id(self, pdu, condition): + def condition_ids(self, pdu, condition): # modifying condition parameter messes with cache condition_with_detector = copy.copy(condition) condition_with_detector["Detector UUID"] = pdu @@ -415,18 +416,17 @@ class BaseCalcatFriend: ConditionNotFound, f"Failed to find condition {condition} for pdu {pdu}", ) - return resp["data"][0]["id"] + return [d["id"] for d in resp["data"]] - @utils.threadsafe_cache - def constant_id(self, calibration_id, condition_id): - resp = CalibrationConstant.get_by_uk( + def constant_ids(self, calibration_id, condition_ids): + resp = CalibrationConstant.get_all_by_conditions( self.client, calibration_id=calibration_id, detector_type_id=self.detector_type_id, - condition_id=condition_id, + condition_ids=condition_ids, ) self._check_resp(resp, warning="Failed to retrieve constant ID") - return resp["data"]["id"] + return [d["id"] for d in resp["data"]] def get_constant_version(self, constant): # TODO: catch exceptions, give warnings appropriately @@ -447,19 +447,19 @@ class BaseCalcatFriend: self._set_status(constant, "calibrationId", calibration_id) condition = self._constants_need_conditions[constant]() - condition_id = self.condition_id( + condition_ids = self.condition_ids( self._karabo_da_to_float_uuid[karabo_da], condition ) - self._set_status(constant, "conditionId", condition_id) + self._set_status(constant, "conditionIds", condition_ids) - constant_id = self.constant_id( - calibration_id=calibration_id, condition_id=condition_id + constant_ids = self.constant_ids( + calibration_id=calibration_id, condition_ids=condition_ids ) - self._set_status(constant, "constantId", constant_id) + self._set_status(constant, "constantIds", constant_ids) resp = CalibrationConstantVersion.get_closest_by_time( self.client, - calibration_constant_ids=[constant_id], + calibration_constant_ids=constant_ids, physical_detector_unit_id=self._karabo_da_to_id[karabo_da], event_at=self._get_param("constantVersionEventAt"), snapshot_at=None,