From d3edb94aec4b3b8c06f9f40ab8c0a535ba2e1e56 Mon Sep 17 00:00:00 2001 From: Adam Shapiro Date: Wed, 21 Oct 2026 10:18:13 -0400 Subject: [PATCH 1/2] Use lookup_value() to resolve the message type in MessageHeader.unpack(). This skips the enum call machinery for every decoded header, which improves performance. --- python/fusion_engine_client/messages/defs.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/python/fusion_engine_client/messages/defs.py b/python/fusion_engine_client/messages/defs.py index 5accb65a..10e5d762 100644 --- a/python/fusion_engine_client/messages/defs.py +++ b/python/fusion_engine_client/messages/defs.py @@ -12,7 +12,7 @@ from .timestamp import * from ..utils import trace as logging from ..utils.construct_utils import construct_message_to_string -from ..utils.enum_utils import IntEnum +from ..utils.enum_utils import IntEnum, lookup_value _logger = logging.getLogger('point_one.fusion_engine.messages.defs') @@ -372,13 +372,10 @@ def unpack(self, buffer: bytes, offset: int = 0, validate_sync: bool = False, va if validate_crc: self.validate_crc(buffer, offset) - try: - self.message_type = MessageType(message_type_int) - except (ValueError, KeyError): - if warn_on_unrecognized: - _logger.log(logging.WARNING if message_type_int < int(MessageType.RESERVED) else logging.DEBUG, - 'Unrecognized message type %d.' % message_type_int) - self.message_type = MessageType(message_type_int, raise_on_unrecognized=False) + self.message_type = lookup_value(MessageType, message_type_int) + if warn_on_unrecognized and self.message_type.is_unrecognized(): + _logger.log(logging.WARNING if message_type_int < int(MessageType.RESERVED) else logging.DEBUG, + 'Unrecognized message type %d.' % message_type_int) if return_sync_bytes: return MessageHeader._SIZE, bytes((sync0, sync1)) From ab9205ec2897271323806d496f461c2463b0fa97 Mon Sep 17 00:00:00 2001 From: Adam Shapiro Date: Wed, 28 Oct 2026 11:15:03 -0400 Subject: [PATCH 2/2] Fixed P1 time checks in the reader tests failing under pytest 9.2. pytest 9.2 no longer accepts a non-numeric expected value with a relative tolerance, and the expected P1 time is a Timestamp. --- python/tests/test_data_loader.py | 2 +- python/tests/test_mixed_log_reader.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/python/tests/test_data_loader.py b/python/tests/test_data_loader.py index 423614ce..30d92a04 100644 --- a/python/tests/test_data_loader.py +++ b/python/tests/test_data_loader.py @@ -124,7 +124,7 @@ def _check_message(self, message, expected_message): expected_p1_time = expected_message.get_p1_time() if expected_p1_time is not None: - assert float(message.get_p1_time()) == pytest.approx(expected_p1_time, 1e-6) + assert float(message.get_p1_time()) == pytest.approx(float(expected_p1_time), 1e-6) expected_system_time_sec = expected_message.get_system_time_sec() if expected_system_time_sec is not None: diff --git a/python/tests/test_mixed_log_reader.py b/python/tests/test_mixed_log_reader.py index ec268236..2bd69bf5 100644 --- a/python/tests/test_mixed_log_reader.py +++ b/python/tests/test_mixed_log_reader.py @@ -98,7 +98,7 @@ def _check_message(self, message, expected_message): expected_p1_time = expected_message.get_p1_time() if expected_p1_time is not None: - assert float(message.get_p1_time()) == pytest.approx(expected_p1_time, 1e-6), "P1 time mismatch." + assert float(message.get_p1_time()) == pytest.approx(float(expected_p1_time), 1e-6), "P1 time mismatch." expected_system_time_sec = expected_message.get_system_time_sec() if expected_system_time_sec is not None: