From 37646f7049de5b0ae6baa5b2a12da63fd597f418 Mon Sep 17 00:00:00 2001 From: Simon Birkholz Date: Thu, 10 Apr 2025 11:10:37 +0200 Subject: [PATCH 1/3] make Measurement.set_name and Measurement.set_comment as properties --- cuvis/Measurement.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/cuvis/Measurement.py b/cuvis/Measurement.py index fd51461..9aa1243 100644 --- a/cuvis/Measurement.py +++ b/cuvis/Measurement.py @@ -65,7 +65,7 @@ def _refresh_metadata(self): milliseconds=_metaData.capture_time) self.measurement_flags = MeasurementFlags(_metaData.measurement_flags) self.path = _metaData.path - self.comment = _metaData.comment + self._comment = _metaData.comment try: self.factory_calibration = base_datetime + datetime.timedelta( milliseconds=_metaData.factory_calibration) @@ -79,7 +79,7 @@ def _refresh_metadata(self): self.product_name = _metaData.product_name self.processing_mode = internal.__ProcessingMode__[ _metaData.processing_mode] - self.name = _metaData.name + self._name = _metaData.name self.session_info = SessionData(_metaData.session_info_name, _metaData.session_info_session_no, _metaData.session_info_sequence_no) @@ -134,7 +134,12 @@ def save(self, saveargs: SaveArgs) -> None: raise SDKException() pass - def set_name(self, name: str) -> None: + @property + def name(self) -> str: + return self._name + + @name.setter + def name(self, name: str) -> None: if cuvis_il.status_ok != cuvis_il.cuvis_measurement_set_name( self._handle, name): raise SDKException() @@ -202,7 +207,12 @@ def calibration_id(self) -> str: _id = cuvis_il.cuvis_measurement_get_calib_id_swig(self._handle) return _id - def set_comment(self, comment: str) -> None: + @property + def comment(self) -> str: + return self._comment + + @comment.setter + def comment(self, comment: str) -> None: if cuvis_il.status_ok != cuvis_il.cuvis_measurement_set_comment( self._handle, comment): raise SDKException() From 376c68a12b90d2649f033c7676c50284f3f9d6f5 Mon Sep 17 00:00:00 2001 From: Simon Birkholz Date: Tue, 22 Apr 2025 09:19:44 +0200 Subject: [PATCH 2/3] also set other metadata fields as properties to make intend more clear. --- cuvis/Measurement.py | 134 ++++++++++++++++++++++++++++++------------- 1 file changed, 93 insertions(+), 41 deletions(-) diff --git a/cuvis/Measurement.py b/cuvis/Measurement.py index 9aa1243..565df82 100644 --- a/cuvis/Measurement.py +++ b/cuvis/Measurement.py @@ -16,21 +16,21 @@ class Measurement(object): - capture_time: datetime.datetime - measurement_flags: MeasurementFlags - path: str + capture_time: datetime.datetime # read-only + measurement_flags: MeasurementFlags # read-only + path: str # read-only comment: str - factory_calibration: datetime.datetime - assembly: str - integration_time: int - averages: int - distance: float - serial_number: str - product_name: str - processing_mode: ProcessingMode + factory_calibration: datetime.datetime # read-only + assembly: str # read-only + integration_time: int # read-only + averages: int # read-only + distance: float # read-only + serial_number: str # read-only + product_name: str # read-only + processing_mode: ProcessingMode # read-only name: str - session_info: SessionData - frame_id: int + session_info: SessionData # read-only + frame_id: int # read-only def __init__(self, base: Union[int, str, Path]): self._handle = None @@ -61,29 +61,29 @@ def _refresh_metadata(self): self._handle, _metaData): raise SDKException - self.capture_time = base_datetime + datetime.timedelta( + self._capture_time = base_datetime + datetime.timedelta( milliseconds=_metaData.capture_time) - self.measurement_flags = MeasurementFlags(_metaData.measurement_flags) - self.path = _metaData.path + self._measurement_flags = MeasurementFlags(_metaData.measurement_flags) + self._path = _metaData.path self._comment = _metaData.comment try: - self.factory_calibration = base_datetime + datetime.timedelta( + self._factory_calibration = base_datetime + datetime.timedelta( milliseconds=_metaData.factory_calibration) except OverflowError: - self.factory_calibration = None - self.assembly = _metaData.assembly - self.averages = _metaData.averages - self.distance = _metaData.distance - self.integration_time = _metaData.integration_time - self.serial_number = _metaData.serial_number - self.product_name = _metaData.product_name - self.processing_mode = internal.__ProcessingMode__[ + self._factory_calibration = None + self._assembly = _metaData.assembly + self._averages = _metaData.averages + self._distance = _metaData.distance + self._integration_time = _metaData.integration_time + self._serial_number = _metaData.serial_number + self._product_name = _metaData.product_name + self._processing_mode = internal.__ProcessingMode__[ _metaData.processing_mode] self._name = _metaData.name - self.session_info = SessionData(_metaData.session_info_name, - _metaData.session_info_session_no, - _metaData.session_info_sequence_no) - self.frame_id = _metaData.measurement_frame_id + self._session_info = SessionData(_metaData.session_info_name, + _metaData.session_info_session_no, + _metaData.session_info_sequence_no) + self._frame_id = _metaData.measurement_frame_id cuvis_il.cuvis_mesu_metadata_free(_metaData) def refresh(self) -> None: @@ -134,6 +134,62 @@ def save(self, saveargs: SaveArgs) -> None: raise SDKException() pass + @property + def capture_time(self) -> datetime.datetime: + return self._capture_time + + @property + def measurement_flags(self) -> MeasurementFlags: + return self._measurement_flags + + @property + def path(self) -> str: + return self._path + + @property + def comment(self) -> str: + return self._comment + + @comment.setter + def comment(self, comment: str) -> None: + if cuvis_il.status_ok != cuvis_il.cuvis_measurement_set_comment( + self._handle, comment): + raise SDKException() + self._refresh_metadata() + pass + + @property + def factory_calibration(self) -> datetime.datetime: + return self._factory_calibration + + @property + def assembly(self) -> str: + return self._assembly + + @property + def integration_time(self) -> int: + return self._integration_time + + @property + def averages(self) -> int: + return self._averages + + @property + def distance(self) -> float: + return self._distance + + @property + def serial_number(self) -> str: + return self._serial_number + + @property + def product_name(self) -> str: + return self._product_name + + @property + def processing_mode(self) -> ProcessingMode: + return self._processing_mode + @property def name(self) -> str: return self._name @@ -146,6 +202,14 @@ def name(self, name: str) -> None: self._refresh_metadata() pass + @property + def session_info(self) -> SessionData: + return self._session_info + + @property + def frame_id(self) -> int: + return self._frame_id + @property def cube(self) -> ImageData: """ @@ -207,18 +271,6 @@ def calibration_id(self) -> str: _id = cuvis_il.cuvis_measurement_get_calib_id_swig(self._handle) return _id - @property - def comment(self) -> str: - return self._comment - - @comment.setter - def comment(self, comment: str) -> None: - if cuvis_il.status_ok != cuvis_il.cuvis_measurement_set_comment( - self._handle, comment): - raise SDKException() - self._refresh_metadata() - pass - @property def data_count(self) -> int: out = cuvis_il.new_p_int() From b8e782ac3704f1190458af8fff3c1cd6bf1bb52e Mon Sep 17 00:00:00 2001 From: Simon Birkholz Date: Tue, 22 Apr 2025 09:20:13 +0200 Subject: [PATCH 3/3] mark auxiliary dataclasses as frozen, to make intend more clear. --- cuvis/cuvis_aux.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/cuvis/cuvis_aux.py b/cuvis/cuvis_aux.py index c63c288..d6eed45 100644 --- a/cuvis/cuvis_aux.py +++ b/cuvis/cuvis_aux.py @@ -35,7 +35,7 @@ def __init__(self, *args): pass -@dataclass +@dataclass(frozen=True) class SessionData(object): name: str session_number: int @@ -47,7 +47,7 @@ def __repr__(self): self.sequence_number) -@dataclass +@dataclass(frozen=True) class CalibrationInfo(object): model_name: str serial_no: str @@ -66,7 +66,7 @@ def __repr__(self): self.file_path) -@dataclass +@dataclass(frozen=True) class GPSData(object): longitude: float latitude: float @@ -87,7 +87,7 @@ def _from_internal(cls, gps): milliseconds=gps.time)) -@dataclass +@dataclass(frozen=True) class SensorInfo(object): averages: int temperature: int @@ -113,7 +113,7 @@ def _from_internal(cls, info): binning=(info.binning != 0)) -@dataclass +@dataclass(frozen=True) class WorkerState(object): measurementsInQueue: int sessionFilesInQueue: int