Source code for brainaccess.utils.exceptions

import ctypes
import enum


[docs] class BrainAccessException(Exception): pass
def _callback() -> tuple: success: bool = False @ctypes.CFUNCTYPE(None, ctypes.c_bool, ctypes.c_void_p) def callback(_success: bool, user_data: ctypes.c_void_p) -> None: nonlocal success success = bool(_success) def get_success() -> bool: return success return callback, get_success class _Error(enum.Enum): OK = 0 CONNECTION = 1 UNSUPPORTED_DEVICE = 2 WRONG_VALUE = 3 BLUETOOTH_DISABLED = 4 BLUETOOTH_ADAPTER_NOT_FUND = 5 ADAPTER_OUT_OF_INDEX = 6 UPDATE_FILE_NOT_FOUND = 7 UPDATE_INITIATED_UNSUCCESSFULLY = 8 UPDATE_FAILED_DEVICE_DISCONNECTED = 9 ANNOTATION_UNAVAILABLE_CALIBRATING = 10 NO_DEVICES_FOUND = 11 NOT_ALL_MANAGERS_CLOSED = 12 CORE_NOT_INITIALIZED = 13 PATH_NOT_FOUND = 14 UNKNOWN = 0xFF def _get_error(val) -> _Error: try: return _Error(val) except ValueError: return _Error.UNKNOWN def _handle_error(val: int) -> bool: err = _get_error(val) if err == _Error.OK: return True elif err == _Error.CONNECTION: raise BrainAccessException("Connection error") elif err == _Error.UNSUPPORTED_DEVICE: raise BrainAccessException("Unsupported device") elif err == _Error.WRONG_VALUE: raise BrainAccessException("Wrong value") elif err == _Error.BLUETOOTH_DISABLED: raise BrainAccessException("Bluetooth disabled") elif err == _Error.BLUETOOTH_ADAPTER_NOT_FUND: raise BrainAccessException("Bluetooth adapter not found") elif err == _Error.ADAPTER_OUT_OF_INDEX: raise BrainAccessException("Adapter out of index") elif err == _Error.UPDATE_FILE_NOT_FOUND: raise BrainAccessException("Update file not found") elif err == _Error.UPDATE_INITIATED_UNSUCCESSFULLY: raise BrainAccessException("Update initiated unsuccessfully") elif err == _Error.UPDATE_FAILED_DEVICE_DISCONNECTED: raise BrainAccessException("Update failed device disconnected") elif err == _Error.ANNOTATION_UNAVAILABLE_CALIBRATING: print("Warning: Annotation unavailable while calibrating") return False elif err == _Error.NO_DEVICES_FOUND: raise BrainAccessException("No devices found") elif err == _Error.NOT_ALL_MANAGERS_CLOSED: raise BrainAccessException("Not all managers closed") elif err == _Error.CORE_NOT_INITIALIZED: raise BrainAccessException("Core not initialized") elif err == _Error.PATH_NOT_FOUND: raise BrainAccessException("Path not found") else: raise BrainAccessException("Unknown error") class _ErrorBacore(enum.Enum): OK = 0 CONFIG_TYPE = 1 WRONG_ADAPTER_VALUE = 2 INCOMPATIBLE_VERSION = 3 NOT_ENALBLED = 4 NOT_FOUND = 5 CONFIG_PARSE = 6 INIT_ALREADY_INITIALIZED = 7 INVALID_FILE_PATH = 8 UNKNOWN = 0xFF def _get_error_bacore(val) -> _ErrorBacore: try: return _ErrorBacore(val) except ValueError: return _ErrorBacore.UNKNOWN def _handle_error_bacore(val: int) -> bool: err = _get_error_bacore(val) if err == _ErrorBacore.OK: return True elif err == _ErrorBacore.CONFIG_TYPE: raise BrainAccessException( "Configuration file contains a value of the wrong type" ) elif err == _ErrorBacore.WRONG_ADAPTER_VALUE: raise BrainAccessException("Bluetooth adapter value is wrong") elif err == _ErrorBacore.INCOMPATIBLE_VERSION: raise BrainAccessException("Incompatible BrainAccess version") elif err == _ErrorBacore.NOT_ENALBLED: raise BrainAccessException("Bluetooth not enabled") elif err == _ErrorBacore.NOT_FOUND: raise BrainAccessException("Bluetooth adapter not found") elif err == _ErrorBacore.CONFIG_PARSE: raise BrainAccessException("Error parsing configuration file") elif err == _ErrorBacore.INIT_ALREADY_INITIALIZED: raise BrainAccessException("Library already initialized") elif err == _ErrorBacore.INVALID_FILE_PATH: raise BrainAccessException("Invalid file path") else: raise BrainAccessException("Unknown error")