1 # SPDX-License-Identifier: MIT
3 # Copyright (c) 2017 Philippe Proulx <pproulx@efficios.com>
5 from bt2
import utils
as bt2_utils
6 from bt2
import value
as bt2_value
7 from bt2
import object as bt2_object
8 from bt2
import native_bt
9 from bt2
import field_class
as bt2_field_class
12 def _bt2_stream_class():
13 from bt2
import stream_class
as bt2_stream_class
15 return bt2_stream_class
18 class EventClassLogLevel
:
19 EMERGENCY
= native_bt
.EVENT_CLASS_LOG_LEVEL_EMERGENCY
20 ALERT
= native_bt
.EVENT_CLASS_LOG_LEVEL_ALERT
21 CRITICAL
= native_bt
.EVENT_CLASS_LOG_LEVEL_CRITICAL
22 ERROR
= native_bt
.EVENT_CLASS_LOG_LEVEL_ERROR
23 WARNING
= native_bt
.EVENT_CLASS_LOG_LEVEL_WARNING
24 NOTICE
= native_bt
.EVENT_CLASS_LOG_LEVEL_NOTICE
25 INFO
= native_bt
.EVENT_CLASS_LOG_LEVEL_INFO
26 DEBUG_SYSTEM
= native_bt
.EVENT_CLASS_LOG_LEVEL_DEBUG_SYSTEM
27 DEBUG_PROGRAM
= native_bt
.EVENT_CLASS_LOG_LEVEL_DEBUG_PROGRAM
28 DEBUG_PROCESS
= native_bt
.EVENT_CLASS_LOG_LEVEL_DEBUG_PROCESS
29 DEBUG_MODULE
= native_bt
.EVENT_CLASS_LOG_LEVEL_DEBUG_MODULE
30 DEBUG_UNIT
= native_bt
.EVENT_CLASS_LOG_LEVEL_DEBUG_UNIT
31 DEBUG_FUNCTION
= native_bt
.EVENT_CLASS_LOG_LEVEL_DEBUG_FUNCTION
32 DEBUG_LINE
= native_bt
.EVENT_CLASS_LOG_LEVEL_DEBUG_LINE
33 DEBUG
= native_bt
.EVENT_CLASS_LOG_LEVEL_DEBUG
36 class _EventClassConst(bt2_object
._SharedObject
):
39 native_bt
.event_class_get_ref(ptr
)
43 native_bt
.event_class_put_ref(ptr
)
45 _borrow_stream_class_ptr
= staticmethod(
46 native_bt
.event_class_borrow_stream_class_const
48 _borrow_specific_context_field_class_ptr
= staticmethod(
49 native_bt
.event_class_borrow_specific_context_field_class_const
51 _borrow_payload_field_class_ptr
= staticmethod(
52 native_bt
.event_class_borrow_payload_field_class_const
54 _borrow_user_attributes_ptr
= staticmethod(
55 native_bt
.event_class_borrow_user_attributes_const
57 _create_field_class_from_ptr_and_get_ref
= staticmethod(
58 bt2_field_class
._create
_field
_class
_from
_const
_ptr
_and
_get
_ref
60 _create_value_from_ptr_and_get_ref
= staticmethod(
61 bt2_value
._create
_from
_const
_ptr
_and
_get
_ref
63 _stream_class_pycls
= property(lambda s
: _bt2_stream_class()._StreamClassConst
)
66 def stream_class(self
):
67 sc_ptr
= self
._borrow
_stream
_class
_ptr
(self
._ptr
)
69 if sc_ptr
is not None:
70 return self
._stream
_class
_pycls
._create
_from
_ptr
_and
_get
_ref
(sc_ptr
)
73 def user_attributes(self
):
74 ptr
= self
._borrow
_user
_attributes
_ptr
(self
._ptr
)
75 assert ptr
is not None
76 return self
._create
_value
_from
_ptr
_and
_get
_ref
(ptr
)
80 return native_bt
.event_class_get_name(self
._ptr
)
84 id = native_bt
.event_class_get_id(self
._ptr
)
85 return id if id >= 0 else None
89 is_available
, log_level
= native_bt
.event_class_get_log_level(self
._ptr
)
91 if is_available
!= native_bt
.PROPERTY_AVAILABILITY_AVAILABLE
:
94 return _EVENT_CLASS_LOG_LEVEL_TO_OBJ
[log_level
]
98 return native_bt
.event_class_get_emf_uri(self
._ptr
)
101 def specific_context_field_class(self
):
102 fc_ptr
= self
._borrow
_specific
_context
_field
_class
_ptr
(self
._ptr
)
107 return self
._create
_field
_class
_from
_ptr
_and
_get
_ref
(fc_ptr
)
110 def payload_field_class(self
):
111 fc_ptr
= self
._borrow
_payload
_field
_class
_ptr
(self
._ptr
)
116 return self
._create
_field
_class
_from
_ptr
_and
_get
_ref
(fc_ptr
)
119 class _EventClass(_EventClassConst
):
120 _borrow_stream_class_ptr
= staticmethod(native_bt
.event_class_borrow_stream_class
)
121 _borrow_specific_context_field_class_ptr
= staticmethod(
122 native_bt
.event_class_borrow_specific_context_field_class
124 _borrow_payload_field_class_ptr
= staticmethod(
125 native_bt
.event_class_borrow_payload_field_class
127 _borrow_user_attributes_ptr
= staticmethod(
128 native_bt
.event_class_borrow_user_attributes
130 _create_field_class_from_ptr_and_get_ref
= staticmethod(
131 bt2_field_class
._create
_field
_class
_from
_ptr
_and
_get
_ref
133 _create_value_from_ptr_and_get_ref
= staticmethod(
134 bt2_value
._create
_from
_ptr
_and
_get
_ref
136 _stream_class_pycls
= property(lambda s
: _bt2_stream_class()._StreamClass
)
138 def _user_attributes(self
, user_attributes
):
139 value
= bt2_value
.create_value(user_attributes
)
140 native_bt
.event_class_set_user_attributes(self
._ptr
, value
._ptr
)
142 _user_attributes
= property(fset
=_user_attributes
)
144 def _name(self
, name
):
145 return native_bt
.event_class_set_name(self
._ptr
, name
)
147 _name
= property(fset
=_name
)
149 def _log_level(self
, log_level
):
150 native_bt
.event_class_set_log_level(self
._ptr
, log_level
)
152 _log_level
= property(fset
=_log_level
)
154 def _emf_uri(self
, emf_uri
):
155 status
= native_bt
.event_class_set_emf_uri(self
._ptr
, emf_uri
)
156 bt2_utils
._handle
_func
_status
(status
, "cannot set event class object's EMF URI")
158 _emf_uri
= property(fset
=_emf_uri
)
160 def _specific_context_field_class(self
, context_field_class
):
161 status
= native_bt
.event_class_set_specific_context_field_class(
162 self
._ptr
, context_field_class
._ptr
164 bt2_utils
._handle
_func
_status
(
165 status
, "cannot set event class object's context field class"
168 _specific_context_field_class
= property(fset
=_specific_context_field_class
)
170 def _payload_field_class(self
, payload_field_class
):
171 status
= native_bt
.event_class_set_payload_field_class(
172 self
._ptr
, payload_field_class
._ptr
174 bt2_utils
._handle
_func
_status
(
175 status
, "cannot set event class object's payload field class"
178 _payload_field_class
= property(fset
=_payload_field_class
)
181 def _validate_create_params(
186 specific_context_field_class
,
190 bt2_utils
._check
_str
(name
)
192 if user_attributes
is not None:
193 value
= bt2_value
.create_value(user_attributes
)
194 bt2_utils
._check
_type
(value
, bt2_value
.MapValue
)
196 if log_level
is not None:
198 EventClassLogLevel
.EMERGENCY
,
199 EventClassLogLevel
.ALERT
,
200 EventClassLogLevel
.CRITICAL
,
201 EventClassLogLevel
.ERROR
,
202 EventClassLogLevel
.WARNING
,
203 EventClassLogLevel
.NOTICE
,
204 EventClassLogLevel
.INFO
,
205 EventClassLogLevel
.DEBUG_SYSTEM
,
206 EventClassLogLevel
.DEBUG_PROGRAM
,
207 EventClassLogLevel
.DEBUG_PROCESS
,
208 EventClassLogLevel
.DEBUG_MODULE
,
209 EventClassLogLevel
.DEBUG_UNIT
,
210 EventClassLogLevel
.DEBUG_FUNCTION
,
211 EventClassLogLevel
.DEBUG_LINE
,
212 EventClassLogLevel
.DEBUG
,
215 if log_level
not in log_levels
:
216 raise ValueError("'{}' is not a valid log level".format(log_level
))
218 if emf_uri
is not None:
219 bt2_utils
._check
_str
(emf_uri
)
221 if specific_context_field_class
is not None:
222 bt2_utils
._check
_type
(
223 specific_context_field_class
, bt2_field_class
._StructureFieldClass
226 if payload_field_class
is not None:
227 bt2_utils
._check
_type
(
228 payload_field_class
, bt2_field_class
._StructureFieldClass
232 _EVENT_CLASS_LOG_LEVEL_TO_OBJ
= {
233 native_bt
.EVENT_CLASS_LOG_LEVEL_EMERGENCY
: EventClassLogLevel
.EMERGENCY
,
234 native_bt
.EVENT_CLASS_LOG_LEVEL_ALERT
: EventClassLogLevel
.ALERT
,
235 native_bt
.EVENT_CLASS_LOG_LEVEL_CRITICAL
: EventClassLogLevel
.CRITICAL
,
236 native_bt
.EVENT_CLASS_LOG_LEVEL_ERROR
: EventClassLogLevel
.ERROR
,
237 native_bt
.EVENT_CLASS_LOG_LEVEL_WARNING
: EventClassLogLevel
.WARNING
,
238 native_bt
.EVENT_CLASS_LOG_LEVEL_NOTICE
: EventClassLogLevel
.NOTICE
,
239 native_bt
.EVENT_CLASS_LOG_LEVEL_INFO
: EventClassLogLevel
.INFO
,
240 native_bt
.EVENT_CLASS_LOG_LEVEL_DEBUG_SYSTEM
: EventClassLogLevel
.DEBUG_SYSTEM
,
241 native_bt
.EVENT_CLASS_LOG_LEVEL_DEBUG_PROGRAM
: EventClassLogLevel
.DEBUG_PROGRAM
,
242 native_bt
.EVENT_CLASS_LOG_LEVEL_DEBUG_PROCESS
: EventClassLogLevel
.DEBUG_PROCESS
,
243 native_bt
.EVENT_CLASS_LOG_LEVEL_DEBUG_MODULE
: EventClassLogLevel
.DEBUG_MODULE
,
244 native_bt
.EVENT_CLASS_LOG_LEVEL_DEBUG_UNIT
: EventClassLogLevel
.DEBUG_UNIT
,
245 native_bt
.EVENT_CLASS_LOG_LEVEL_DEBUG_FUNCTION
: EventClassLogLevel
.DEBUG_FUNCTION
,
246 native_bt
.EVENT_CLASS_LOG_LEVEL_DEBUG_LINE
: EventClassLogLevel
.DEBUG_LINE
,
247 native_bt
.EVENT_CLASS_LOG_LEVEL_DEBUG
: EventClassLogLevel
.DEBUG
,