Skip to content

Commit

Permalink
Fix string formatting in exception messages
Browse files Browse the repository at this point in the history
  • Loading branch information
ankohanse committed Feb 26, 2025
1 parent e6f03a2 commit 094bbd5
Show file tree
Hide file tree
Showing 7 changed files with 50 additions and 26 deletions.
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "aioxcom"
version = "1.7.4"
version = "1.7.5"
authors = [
{ name="Anko Hanse", email="[email protected]" },
]
Expand Down
26 changes: 16 additions & 10 deletions src/aioxcom/xcom_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -157,16 +157,18 @@ async def requestValue(self, parameter: XcomDatapoint, dstAddr = 100, retries =
return None

if response.isError():
msg = response.getError()
raise XcomApiResponseIsError(f"Response package for {parameter.nr}:{dstAddr} contains message: '{msg}'")
message = response.getError()
msg = f"Response package for {parameter.nr}:{dstAddr} contains message: '{message}'"
raise XcomApiResponseIsError(msg)

# Unpack the response value
# Keep this in the retry loop, sometimes strange invalid byte lengths occur
try:
return XcomData.unpack(response.frame_data.service_data.property_data, parameter.format)

except Exception as e:
raise XcomApiUnpackException(f"Failed to unpack response package for {parameter.nr}:{dstAddr}, data={response.frame_data.service_data.property_data.hex()}: {e}") from None
msg = f"Failed to unpack response package for {parameter.nr}:{dstAddr}, data={response.frame_data.service_data.property_data.hex()}: {e}"
raise XcomApiUnpackException(msg) from None

except Exception as e:
last_exception = e
Expand Down Expand Up @@ -270,8 +272,9 @@ async def updateValue(self, parameter: XcomDatapoint, value, dstAddr = 100, retr
return None

if response.isError():
msg = response.getError()
raise XcomApiResponseIsError(f"Response package for {parameter.nr}:{dstAddr} contains message: '{msg}'")
message = response.getError()
msg = f"Response package for {parameter.nr}:{dstAddr} contains message: '{message}'"
raise XcomApiResponseIsError(msg)

# Success
return True
Expand Down Expand Up @@ -396,8 +399,8 @@ async def _client_connected_callback(self, reader: asyncio.StreamReader, writer:
self._writer: asyncio.StreamWriter = writer
self._connected = True

peername = self._writer.get_extra_info("peername")
_LOGGER.info(f"Connected to Xcom client '{peername}'")
(peer_ip,peer_port) = self._writer.get_extra_info("peername")
_LOGGER.info(f"Connected to Xcom client '{peer_ip}'")


async def _sendPackage(self, request: XcomPackage, timeout=REQ_TIMEOUT, verbose=False) -> XcomPackage | None:
Expand All @@ -422,7 +425,8 @@ async def _sendPackage(self, request: XcomPackage, timeout=REQ_TIMEOUT, verbose=
self._writer.write(data)

except Exception as e:
raise XcomApiWriteException(f"Exception while sending request package to Xcom client: {e}") from None
msg = f"Exception while sending request package to Xcom client: {e}"
raise XcomApiWriteException(msg) from None

# Receive packages until we get the one we expect
try:
Expand All @@ -444,10 +448,12 @@ async def _sendPackage(self, request: XcomPackage, timeout=REQ_TIMEOUT, verbose=
pass

except asyncio.TimeoutError as te:
raise XcomApiTimeoutException(f"Timeout while listening for response package from Xcom client") from None
msg = f"Timeout while listening for response package from Xcom client"
raise XcomApiTimeoutException(msg) from None

except Exception as e:
raise XcomApiReadException(f"Exception while listening for response package from Xcom client: {e}") from None
msg = f"Exception while listening for response package from Xcom client: {e}"
raise XcomApiReadException() from None


##
Expand Down
17 changes: 12 additions & 5 deletions src/aioxcom/xcom_const.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@ def from_str(s: str, default: str|None = None):
if default is not None:
return default
else:
raise Exception(f"Unknown voltage: '{s}'")
msg = f"Unknown voltage: '{s}'"
raise Exception(msg)


### data types
Expand All @@ -46,7 +47,8 @@ def from_str(s: str, default: int|None = None):
if default is not None:
return default
else:
raise Exception(f"Unknown level: '{s}'")
msg = f"Unknown level: '{s}'"
raise Exception(msg)

def __str__(self):
return self.name
Expand Down Expand Up @@ -87,7 +89,8 @@ def from_str(s: str, default: str|None = None):
if default is not None:
return default
else:
raise Exception(f"Unknown format: '{s}'")
msg = f"Unknown format: '{s}'"
raise Exception(msg)

def __str__(self):
return self.name
Expand Down Expand Up @@ -117,7 +120,9 @@ def fromScomObjType(obj_type):
case SCOM_OBJ_TYPE.MESSAGE: return OBJ_TYPE.MESSAGE
case SCOM_OBJ_TYPE.GUID: return OBJ_TYPE.GUID
case SCOM_OBJ_TYPE.DATALOG: return OBJ_TYPE.DATALOG
case _: raise Exception(f"Unknown obj_type: '{obj_type}'")
case _:
msg = f"Unknown obj_type: '{obj_type}'"
raise Exception(msg)

### object_type in Scom/Xcom
class SCOM_OBJ_TYPE:
Expand All @@ -142,7 +147,9 @@ def fromObjType(obj_type):
case OBJ_TYPE.MESSAGE: return SCOM_OBJ_TYPE.MESSAGE
case OBJ_TYPE.GUID: return SCOM_OBJ_TYPE.GUID
case OBJ_TYPE.DATALOG: return SCOM_OBJ_TYPE.DATALOG
case _: raise Exception(f"Unknown obj_type: '{obj_type}'")
case _:
msg = f"Unknown obj_type: '{obj_type}'"
raise Exception(msg)

### service_id
class SCOM_SERVICE:
Expand Down
3 changes: 2 additions & 1 deletion src/aioxcom/xcom_datapoints.py
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,8 @@ async def create(voltage: str):
_LOGGER.info(f"Using {len(datapoints)} datapoints for 240 Vac")

else:
raise Exception(f"Unknown voltage: '{voltage}'")
msg = f"Unknown voltage: '{voltage}'"
raise Exception(msg)

return XcomDataset(datapoints)

Expand Down
3 changes: 2 additions & 1 deletion src/aioxcom/xcom_families.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@ def getCode(self, addr):
idx = addr - self.addrDevicesStart + 1
return f"{self.id.upper()}{idx}"

raise XcomDeviceAddrUnknownException(f"Addr {addr} is not in range for family {self.id} addresses ({self.addrDevicesStart}-{self.addrDevicesEnd})")
msg = f"Addr {addr} is not in range for family {self.id} addresses ({self.addrDevicesStart}-{self.addrDevicesEnd})"
raise XcomDeviceAddrUnknownException(msg)


class XcomDeviceFamilies:
Expand Down
12 changes: 9 additions & 3 deletions src/aioxcom/xcom_protocol.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,9 @@ def unpack(value: bytes, format):
case FORMAT.INT32: return struct.unpack("<i", value)[0] # 4 bytes, little endian, signed long/int32
case FORMAT.LONG_ENUM: return struct.unpack("<I", value)[0] # 4 bytes, little endian, unsigned long/int32
case FORMAT.STRING: return value.decode('iso-8859-15') # n bytes, ISO_8859-15 string of 8 bit characters
case _: raise TypeError("Unknown data format '{format}")
case _:
msg = "Unknown data format '{format}"
raise TypeError(msg)

@staticmethod
def pack(value, format) -> bytes:
Expand All @@ -48,7 +50,9 @@ def pack(value, format) -> bytes:
case FORMAT.INT32: return struct.pack("<i", int(value)) # 4 bytes, little endian, signed long/int32
case FORMAT.LONG_ENUM: return struct.pack("<I", int(value)) # 4 bytes, little endian, unsigned long/int32
case FORMAT.STRING: return value.encode('iso-8859-15') # n bytes, ISO_8859-15 string of 8 bit characters
case _: raise TypeError("Unknown data format '{format}")
case _:
msg = "Unknown data format '{format}"
raise TypeError(msg)

@staticmethod
def cast(value: float, format):
Expand All @@ -61,7 +65,9 @@ def cast(value: float, format):
case FORMAT.INT32: return int(value)
case FORMAT.LONG_ENUM: return int(value)
case FORMAT.STRING: return value.decode('iso-8859-15')
case _: raise TypeError(f"Unknown data format '{format}")
case _:
msg = f"Unknown data format '{format}"
raise TypeError(msg)


class XcomDataMultiInfoReqItem():
Expand Down
13 changes: 8 additions & 5 deletions tests/xcom_testclient.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,8 @@ async def start(self, timeout=START_TIMEOUT) -> bool:

self._reader, self._writer = await asyncio.open_connection("127.0.0.1", self.localPort, limit=1000, family=socket.AF_INET)

peername = self._writer.get_extra_info("peername")
_LOGGER.info(f"Connected to Xcom server '{peername}'")
(peer_ip,peer_port) = self._writer.get_extra_info("peername")
_LOGGER.info(f"Connected to Xcom server '{peer_ip}'")

self._started = True
self._connected = True
Expand Down Expand Up @@ -111,10 +111,12 @@ async def receivePackage(self, timeout=REQ_TIMEOUT) -> XcomPackage | None:
return request

except asyncio.TimeoutError as te:
raise XcomApiTimeoutException(f"Timeout while listening for request package from Xcom server") from None
msg = f"Timeout while listening for request package from Xcom server"
raise XcomApiTimeoutException(msg) from None

except Exception as e:
raise XcomApiReadException(f"Exception while listening for request package from Xcom server: {e}") from None
msg = f"Exception while listening for request package from Xcom server: {e}"
raise XcomApiReadException(msg) from None


async def sendPackage(self, package: XcomPackage, timeout=REQ_TIMEOUT):
Expand All @@ -137,4 +139,5 @@ async def sendPackage(self, package: XcomPackage, timeout=REQ_TIMEOUT):
await self._writer.drain()

except Exception as e:
raise XcomApiWriteException(f"Exception while sending package to Xcom server: {e}") from None
msg = f"Exception while sending package to Xcom server: {e}"
raise XcomApiWriteException(msg) from None

0 comments on commit 094bbd5

Please sign in to comment.