Source code for mx_remote.Uid

######################################################
##            MX Remote Python Interface            ##
##                                                  ##
## author: Lars Op den Kamp (lars@opdenkamp-it.nl)  ##
## copyright (c) 2021-2026 Op den Kamp IT Solutions ##
######################################################
'''Unique device and bay identifier types for mx_remote.'''

import logging
import json
_LOGGER = logging.getLogger(__name__)
[docs] class MxrDeviceUid: ''' Unique ID of an mx_remote device on the network'''
[docs] def __init__(self, value: object) -> None: self._value:bytes if value is None: self._value = bytes([ 0 for _ in range(16)]) return if isinstance(value, MxrDeviceUid): self._value = value._value return if isinstance(value, str): spl = value.split(".") if len(spl) < 4: raise Exception(f"invalid uid {value}") valuelist:list[int] = [] for part in spl: valuelist += int(part, 16).to_bytes(4, 'little') self._value = bytes(valuelist) elif isinstance(value, bytes): if len(value) == 0: self._value = bytes([ 0 for _ in range(16)]) elif len(value) < 16: raise Exception(f"invalid uid length {len(value)}") else: self._value = value else: raise Exception(f"invalid uid type {str(type(value))}")
def toJson(self) -> str: return json.dumps(self, default=lambda o: o.__dict__) @property def value(self) -> str: ''' value as human readble string ''' return ''.join('%02x'%i for i in reversed(self._value[0:4])) + '.' + \ ''.join('%02x'%i for i in reversed(self._value[4:8])) + '.' + \ ''.join('%02x'%i for i in reversed(self._value[8:12])) + '.' + \ ''.join('%02x'%i for i in reversed(self._value[12:16])) @property def empty(self) -> bool: ''' True if all 0 ''' for v in self._value: if int(v) != 0: return False return True @property def byte_value(self) -> bytes: ''' value as bytes ''' return self._value def __str__(self) -> str: return self.value def __repr__(self) -> str: return str(self) def __eq__(self, value: object) -> bool: if isinstance(value, str) or isinstance(value, MxrDeviceUid): return str(self) == str(value) return False def __hash__(self) -> int: return hash(str(self))
[docs] class MxrBayUidOld: '''Legacy bay identifier using serial number and port name.'''
[docs] def __init__(self, serial:str, port_name:str) -> None: self._serial = serial self._port_name = port_name
@property def serial(self) -> str: return self._serial @property def port_name(self) -> str: return self._port_name @property def empty(self) -> bool: return (len(self.serial) == 0) or (len(self.port_name) == 0) def __str__(self) -> str: return f"{self.serial}:{self.port_name}" def __eq__(self, value: object) -> bool: if isinstance(value, str): return (str(self) == value) if isinstance(value, MxrBayUidOld): return (self.serial == value.serial) and (self.port_name == value.port_name) return False def __hash__(self) -> int: return hash(str(self))
[docs] class MxrBayUid: '''Bay identifier using a device UID and port number.'''
[docs] def __init__(self, device:MxrDeviceUid, port_number:int) -> None: self._device = device self._port = port_number
@property def device(self) -> MxrDeviceUid: return self._device @property def port(self) -> int: return self._port def __str__(self) -> str: return f"{str(self.device)}:{self.port}" def __repr__(self) -> str: return str(self) def __eq__(self, value: object) -> bool: if isinstance(value, str): return (str(self) == value) if not isinstance(value, MxrBayUid): return False return (self.device == value.device) and (self.port == value.port) def __hash__(self) -> int: return hash(str(self))