diff --git a/src/secop_ophyd/SECoPSignal.py b/src/secop_ophyd/SECoPSignal.py index 4ada3b2..0a82025 100644 --- a/src/secop_ophyd/SECoPSignal.py +++ b/src/secop_ophyd/SECoPSignal.py @@ -292,6 +292,19 @@ async def put(self, value: Any | None, wait=True, timeout=None): async def get_datakey(self, source: str) -> DataKey: """Metadata like source, dtype, shape, precision, units""" + + if self.SECoP_type_info._is_composite or isinstance( + self.SECoPdtype_obj, ArrayOf + ): + # getlast cached value + dataset = await self._secclient.get_parameter( + **self.get_param_path(), trycache=True + ) + + # this ensures the datakey is updated to the latest cached value + SECoPReading(entry=dataset, secop_dt=self.SECoP_type_info) + self.describe_dict.update(self.SECoP_type_info.describe_dict) + return self.describe_dict async def get_reading(self) -> Reading: diff --git a/src/secop_ophyd/util.py b/src/secop_ophyd/util.py index 3ee90bb..4ea4812 100644 --- a/src/secop_ophyd/util.py +++ b/src/secop_ophyd/util.py @@ -625,7 +625,7 @@ def update_dtype(self, input_val): self.dtype_str = self.numpy_dtype.str self.describe_dict["dtype_str"] = self.dtype_str - self.dtype_descr = str(self.numpy_dtype.descr) + self.dtype_descr = self.numpy_dtype.descr self.describe_dict["dtype_descr"] = self.dtype_descr self.describe_dict["dtype"] = self.dtype