from pathlib import Path
from ._cuvis_il import cuvis_il
from .Measurement import Measurement, ImageData
from .cuvis_aux import SDKException
from .cuvis_types import OperationMode, SessionItemType, ReferenceType, CUVIS_imbuffer_format
import cuvis.cuvis_types as internal
from typing import Union, Optional
[docs]
class SessionFile(object):
def __init__(self, base: Union[Path, str]):
base = Path(base)
self._handle = None
self._pc = None
if base.exists():
_ptr = cuvis_il.new_p_int()
if cuvis_il.status_ok != cuvis_il.cuvis_session_file_load(str(base),
_ptr):
raise SDKException()
self._handle = cuvis_il.p_int_value(_ptr)
else:
raise FileNotFoundError(
"Could not open SessionFile File! File not found!")
[docs]
def get_measurement(self, frameNo: int = 0, itemtype: SessionItemType = SessionItemType.no_gaps) -> Optional[Measurement]:
_ptr = cuvis_il.new_p_int()
ret = cuvis_il.cuvis_session_file_get_mesu(self._handle, frameNo, internal.__CuvisSessionItemType__[itemtype],
_ptr)
if cuvis_il.status_no_measurement == ret:
return None
if cuvis_il.status_ok != ret:
raise SDKException()
mesu = Measurement(cuvis_il.p_int_value(_ptr))
mesu._session = self
return mesu
[docs]
def get_reference(self, frameNo: int, reftype: ReferenceType) -> Optional[Measurement]:
_ptr = cuvis_il.new_p_int()
ret = cuvis_il.cuvis_session_file_get_reference_mesu(
self._handle, frameNo, internal.__CuvisReferenceType__[reftype],
_ptr)
if cuvis_il.status_no_measurement == ret:
return None
if cuvis_il.status_ok != ret:
raise SDKException()
return Measurement(cuvis_il.p_int_value(_ptr))
@property
def thumbnail(self) -> ImageData:
thumbnail_data = cuvis_il.cuvis_view_data_t()
if cuvis_il.status_ok != cuvis_il.cuvis_session_file_get_thumbnail(self, thumbnail_data):
raise SDKException()
if thumbnail_data.data.format == CUVIS_imbuffer_format["imbuffer_format_uint8"]:
return ImageData(img_buf=thumbnail_data.data,
dformat=thumbnail_data.data.format)
else:
raise SDKException("Unsupported viewer bit depth!")
[docs]
def get_size(self, itemtype: SessionItemType = SessionItemType.no_gaps) -> int:
val = cuvis_il.new_p_int()
if cuvis_il.status_ok != cuvis_il.cuvis_session_file_get_size(
self._handle, internal.__CuvisSessionItemType__[itemtype], val):
raise SDKException()
return cuvis_il.p_int_value(val)
@property
def fps(self) -> float:
val = cuvis_il.new_p_double()
if cuvis_il.status_ok != cuvis_il.cuvis_session_file_get_fps(
self._handle, val):
raise SDKException()
return cuvis_il.p_double_value(val)
@property
def operation_mode(self) -> OperationMode:
val = cuvis_il.new_p_cuvis_operation_mode_t()
if cuvis_il.status_ok != cuvis_il.cuvis_session_file_get_operation_mode(
self._handle, val):
raise SDKException()
return internal.__OperationMode__[cuvis_il.p_cuvis_operation_mode_t_value(val)]
@property
def hash(self) -> str:
return cuvis_il.cuvis_session_file_get_hash_swig(self._handle)
# Python Magic Methods
def __iter__(self):
for i in range(len(self)):
yield self[i]
pass
def __len__(self):
return self.get_size()
def __getitem__(self, key: int) -> Measurement:
return self.get_measurement(key)
def __del__(self):
_ptr = cuvis_il.new_p_int()
cuvis_il.p_int_assign(_ptr, self._handle)
cuvis_il.cuvis_session_file_free(_ptr)
self._handle = cuvis_il.p_int_value(_ptr)
def __deepcopy__(self, memo):
'''This functions is not permitted due to the class only keeping a handle, that is managed by the cuvis sdk.'''
raise TypeError('Deep copying is not supported for SessionFile')
def __copy__(self):
'''This functions is not permitted due to the class only keeping a handle, that is managed by the cuvis sdk.'''
raise TypeError('Shallow copying is not supported for SessionFile')