From 37b9f25d286144143f92539469ebed1bb64ae878 Mon Sep 17 00:00:00 2001 From: Philippe Proulx Date: Tue, 7 Apr 2020 09:41:55 -0400 Subject: [PATCH] Fix: _EventConst.__getitem__(): check if event has a packet I'm also adding a test to check this. Without this patch and an invalid key, __getitem__() throws `AttributeError` instead of the expected `KeyError`. Signed-off-by: Philippe Proulx Change-Id: Ie6258a2354ece8aee6c8530587c900ea08e45fe8 Reviewed-on: https://review.lttng.org/c/babeltrace/+/3350 Tested-by: jenkins --- src/bindings/python/bt2/bt2/event.py | 7 ++++--- tests/bindings/python/bt2/test_event.py | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/bindings/python/bt2/bt2/event.py b/src/bindings/python/bt2/bt2/event.py index 08d6ae09..6a6c1185 100644 --- a/src/bindings/python/bt2/bt2/event.py +++ b/src/bindings/python/bt2/bt2/event.py @@ -123,10 +123,11 @@ class _EventConst(object._UniqueObject): if common_context_field is not None and key in common_context_field: return common_context_field[key] - packet_context_field = self.packet.context_field + if self.packet: + packet_context_field = self.packet.context_field - if packet_context_field is not None and key in packet_context_field: - return packet_context_field[key] + if packet_context_field is not None and key in packet_context_field: + return packet_context_field[key] raise KeyError(key) diff --git a/tests/bindings/python/bt2/test_event.py b/tests/bindings/python/bt2/test_event.py index a770c8f5..e8effef3 100644 --- a/tests/bindings/python/bt2/test_event.py +++ b/tests/bindings/python/bt2/test_event.py @@ -331,6 +331,20 @@ class EventTestCase(unittest.TestCase): with self.assertRaises(KeyError): ev['yes'] + def test_const_getitem_no_packet(self): + def event_fields_config(event): + event.payload_field['giraffe'] = 1 + event.payload_field['gnu'] = 23 + event.payload_field['mosquito'] = 42 + + msg = self._create_test_const_event_message( + event_fields_config=event_fields_config, with_ep=True, + ) + ev = msg.event + + with self.assertRaises(KeyError): + ev['yes'] + def test_getitem(self): msg = utils.get_event_message() ev = msg.event -- 2.34.1