cpp-common/bt2c/fmt.hpp: use `wise_enum::string_type` in `EnableIfIsWiseEnum` definition
[babeltrace.git] / src / bindings / python / bt2 / bt2 / event.py
CommitLineData
0235b0db 1# SPDX-License-Identifier: MIT
81447b5b
PP
2#
3# Copyright (c) 2016-2017 Philippe Proulx <pproulx@efficios.com>
81447b5b 4
5995b304
SM
5import collections.abc
6
7from bt2 import field as bt2_field
e5914347 8from bt2 import utils as bt2_utils
5995b304 9from bt2 import object as bt2_object
3fb99a22
PP
10from bt2 import packet as bt2_packet
11from bt2 import stream as bt2_stream
5995b304
SM
12from bt2 import native_bt
13from bt2 import event_class as bt2_event_class
81447b5b
PP
14
15
e5914347 16class _EventConst(bt2_object._UniqueObject, collections.abc.Mapping):
f0a42b33
FD
17 _borrow_class_ptr = staticmethod(native_bt.event_borrow_class_const)
18 _borrow_packet_ptr = staticmethod(native_bt.event_borrow_packet_const)
19 _borrow_stream_ptr = staticmethod(native_bt.event_borrow_stream_const)
20 _borrow_common_context_field_ptr = staticmethod(
21 native_bt.event_borrow_common_context_field_const
22 )
23 _borrow_specific_context_field_ptr = staticmethod(
24 native_bt.event_borrow_specific_context_field_const
25 )
26 _borrow_payload_field_ptr = staticmethod(native_bt.event_borrow_payload_field_const)
27 _create_field_from_ptr = staticmethod(bt2_field._create_field_from_const_ptr)
28
29 _event_class_pycls = property(lambda _: bt2_event_class._EventClassConst)
30 _packet_pycls = property(lambda _: bt2_packet._PacketConst)
31 _stream_pycls = property(lambda _: bt2_stream._StreamConst)
32
81447b5b 33 @property
e8ac1aae 34 def cls(self):
f0a42b33 35 event_class_ptr = self._borrow_class_ptr(self._ptr)
2ae9f48c 36 assert event_class_ptr is not None
f0a42b33 37 return self._event_class_pycls._create_from_ptr_and_get_ref(event_class_ptr)
81447b5b
PP
38
39 @property
40 def name(self):
e8ac1aae 41 return self.cls.name
81447b5b
PP
42
43 @property
44 def id(self):
e8ac1aae 45 return self.cls.id
81447b5b
PP
46
47 @property
48 def packet(self):
f0a42b33 49 packet_ptr = self._borrow_packet_ptr(self._ptr)
26fc5aed
PP
50
51 if packet_ptr is None:
52 return
53
f0a42b33 54 return self._packet_pycls._create_from_ptr_and_get_ref(packet_ptr)
81447b5b
PP
55
56 @property
57 def stream(self):
f0a42b33 58 stream_ptr = self._borrow_stream_ptr(self._ptr)
2ae9f48c 59 assert stream_ptr is not None
f0a42b33 60 return self._stream_pycls._create_from_ptr_and_get_ref(stream_ptr)
81447b5b
PP
61
62 @property
2ae9f48c 63 def common_context_field(self):
f0a42b33 64 field_ptr = self._borrow_common_context_field_ptr(self._ptr)
81447b5b
PP
65
66 if field_ptr is None:
67 return
68
f0a42b33 69 return self._create_field_from_ptr(
cfbd7cf3
FD
70 field_ptr, self._owner_ptr, self._owner_get_ref, self._owner_put_ref
71 )
81447b5b
PP
72
73 @property
2ae9f48c 74 def specific_context_field(self):
f0a42b33 75 field_ptr = self._borrow_specific_context_field_ptr(self._ptr)
81447b5b
PP
76
77 if field_ptr is None:
78 return
79
f0a42b33 80 return self._create_field_from_ptr(
cfbd7cf3
FD
81 field_ptr, self._owner_ptr, self._owner_get_ref, self._owner_put_ref
82 )
81447b5b
PP
83
84 @property
85 def payload_field(self):
f0a42b33 86 field_ptr = self._borrow_payload_field_ptr(self._ptr)
81447b5b
PP
87
88 if field_ptr is None:
89 return
90
f0a42b33 91 return self._create_field_from_ptr(
cfbd7cf3
FD
92 field_ptr, self._owner_ptr, self._owner_get_ref, self._owner_put_ref
93 )
81447b5b
PP
94
95 def __getitem__(self, key):
e5914347 96 bt2_utils._check_str(key)
81447b5b
PP
97 payload_field = self.payload_field
98
99 if payload_field is not None and key in payload_field:
100 return payload_field[key]
101
2ae9f48c 102 specific_context_field = self.specific_context_field
81447b5b 103
2ae9f48c
SM
104 if specific_context_field is not None and key in specific_context_field:
105 return specific_context_field[key]
81447b5b 106
2ae9f48c 107 common_context_field = self.common_context_field
81447b5b 108
2ae9f48c
SM
109 if common_context_field is not None and key in common_context_field:
110 return common_context_field[key]
81447b5b 111
3e05e718
PP
112 if self.packet:
113 packet_context_field = self.packet.context_field
81447b5b 114
3e05e718
PP
115 if packet_context_field is not None and key in packet_context_field:
116 return packet_context_field[key]
81447b5b
PP
117
118 raise KeyError(key)
f0a42b33 119
f03b6364
PP
120 def __iter__(self):
121 # To only yield unique keys, keep a set of member names that are
122 # already yielded. Two root structure fields (for example,
123 # payload and common context) can contain immediate members
124 # which share the same name.
125 member_names = set()
126
127 if self.payload_field is not None:
128 for field_name in self.payload_field:
129 yield field_name
130 member_names.add(field_name)
131
132 if self.specific_context_field is not None:
133 for field_name in self.specific_context_field:
134 if field_name not in member_names:
135 yield field_name
136 member_names.add(field_name)
137
138 if self.common_context_field is not None:
139 for field_name in self.common_context_field:
140 if field_name not in member_names:
141 yield field_name
142 member_names.add(field_name)
143
144 if self.packet and self.packet.context_field is not None:
145 for field_name in self.packet.context_field:
146 if field_name not in member_names:
147 yield field_name
148 member_names.add(field_name)
149
150 def __len__(self):
151 return sum(1 for _ in self)
152
f0a42b33
FD
153
154class _Event(_EventConst):
155 _borrow_class_ptr = staticmethod(native_bt.event_borrow_class)
156 _borrow_packet_ptr = staticmethod(native_bt.event_borrow_packet)
157 _borrow_stream_ptr = staticmethod(native_bt.event_borrow_stream)
158 _borrow_common_context_field_ptr = staticmethod(
159 native_bt.event_borrow_common_context_field
160 )
161 _borrow_specific_context_field_ptr = staticmethod(
162 native_bt.event_borrow_specific_context_field
163 )
164 _borrow_payload_field_ptr = staticmethod(native_bt.event_borrow_payload_field)
165 _create_field_from_ptr = staticmethod(bt2_field._create_field_from_ptr)
166
167 _event_class_pycls = property(lambda _: bt2_event_class._EventClass)
168 _packet_pycls = property(lambda _: bt2_packet._Packet)
169 _stream_pycls = property(lambda _: bt2_stream._Stream)
This page took 0.096922 seconds and 4 git commands to generate.