1 # The MIT License (MIT)
3 # Copyright (c) 2017 Philippe Proulx <pproulx@efficios.com>
5 # Permission is hereby granted, free of charge, to any person obtaining a copy
6 # of this software and associated documentation files (the "Software"), to deal
7 # in the Software without restriction, including without limitation the rights
8 # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 # copies of the Software, and to permit persons to whom the Software is
10 # furnished to do so, subject to the following conditions:
12 # The above copyright notice and this permission notice shall be included in
13 # all copies or substantial portions of the Software.
15 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23 from bt2
import native_bt
, object, utils
24 import bt2
.field_class
25 import collections
.abc
32 class EventClassLogLevel
:
33 EMERGENCY
= native_bt
.EVENT_CLASS_LOG_LEVEL_EMERGENCY
34 ALERT
= native_bt
.EVENT_CLASS_LOG_LEVEL_ALERT
35 CRITICAL
= native_bt
.EVENT_CLASS_LOG_LEVEL_CRITICAL
36 ERROR
= native_bt
.EVENT_CLASS_LOG_LEVEL_ERROR
37 WARNING
= native_bt
.EVENT_CLASS_LOG_LEVEL_WARNING
38 NOTICE
= native_bt
.EVENT_CLASS_LOG_LEVEL_NOTICE
39 INFO
= native_bt
.EVENT_CLASS_LOG_LEVEL_INFO
40 DEBUG_SYSTEM
= native_bt
.EVENT_CLASS_LOG_LEVEL_DEBUG_SYSTEM
41 DEBUG_PROGRAM
= native_bt
.EVENT_CLASS_LOG_LEVEL_DEBUG_PROGRAM
42 DEBUG_PROCESS
= native_bt
.EVENT_CLASS_LOG_LEVEL_DEBUG_PROCESS
43 DEBUG_MODULE
= native_bt
.EVENT_CLASS_LOG_LEVEL_DEBUG_MODULE
44 DEBUG_UNIT
= native_bt
.EVENT_CLASS_LOG_LEVEL_DEBUG_UNIT
45 DEBUG_FUNCTION
= native_bt
.EVENT_CLASS_LOG_LEVEL_DEBUG_FUNCTION
46 DEBUG_LINE
= native_bt
.EVENT_CLASS_LOG_LEVEL_DEBUG_LINE
47 DEBUG
= native_bt
.EVENT_CLASS_LOG_LEVEL_DEBUG
50 class EventClass(object._SharedObject
):
51 _get_ref
= staticmethod(native_bt
.event_class_get_ref
)
52 _put_ref
= staticmethod(native_bt
.event_class_put_ref
)
54 def __init__(self
, name
, id=None, log_level
=None, emf_uri
=None,
55 context_field_class
=None, payload_field_class
=None):
56 utils
._check
_str
(name
)
57 ptr
= native_bt
.event_class_create(name
)
60 raise bt2
.CreationError('cannot create event class object')
67 if log_level
is not None:
68 self
.log_level
= log_level
70 if emf_uri
is not None:
71 self
.emf_uri
= emf_uri
73 if context_field_class
is not None:
74 self
.context_field_class
= context_field_class
76 if payload_field_class
is not None:
77 self
.payload_field_class
= payload_field_class
80 def stream_class(self
):
81 sc_ptr
= native_bt
.event_class_get_stream_class(self
._ptr
)
83 if sc_ptr
is not None:
84 return bt2
.StreamClass
._create
_from
_ptr
(sc_ptr
)
88 return native_bt
.event_class_get_name(self
._ptr
)
92 id = native_bt
.event_class_get_id(self
._ptr
)
93 return id if id >= 0 else None
97 utils
._check
_int
64(id)
98 ret
= native_bt
.event_class_set_id(self
._ptr
, id)
99 utils
._handle
_ret
(ret
, "cannot set event class object's ID")
103 log_level
= native_bt
.event_class_get_log_level(self
._ptr
)
104 return log_level
if log_level
>= 0 else None
107 def log_level(self
, log_level
):
109 EventClassLogLevel
.UNSPECIFIED
,
110 EventClassLogLevel
.EMERGENCY
,
111 EventClassLogLevel
.ALERT
,
112 EventClassLogLevel
.CRITICAL
,
113 EventClassLogLevel
.ERROR
,
114 EventClassLogLevel
.WARNING
,
115 EventClassLogLevel
.NOTICE
,
116 EventClassLogLevel
.INFO
,
117 EventClassLogLevel
.DEBUG_SYSTEM
,
118 EventClassLogLevel
.DEBUG_PROGRAM
,
119 EventClassLogLevel
.DEBUG_PROCESS
,
120 EventClassLogLevel
.DEBUG_MODULE
,
121 EventClassLogLevel
.DEBUG_UNIT
,
122 EventClassLogLevel
.DEBUG_FUNCTION
,
123 EventClassLogLevel
.DEBUG_LINE
,
124 EventClassLogLevel
.DEBUG
,
127 if log_level
not in log_levels
:
128 raise ValueError("'{}' is not a valid log level".format(log_level
))
130 ret
= native_bt
.event_class_set_log_level(self
._ptr
, log_level
)
131 utils
._handle
_ret
(ret
, "cannot set event class object's log level")
135 return native_bt
.event_class_get_emf_uri(self
._ptr
)
138 def emf_uri(self
, emf_uri
):
139 utils
._check
_str
(emf_uri
)
140 ret
= native_bt
.event_class_set_emf_uri(self
._ptr
, emf_uri
)
141 utils
._handle
_ret
(ret
, "cannot set event class object's EMF URI")
144 def context_field_class(self
):
145 fc_ptr
= native_bt
.event_class_get_context_type(self
._ptr
)
150 return bt2
.field_class
._create
_from
_ptr
(fc_ptr
)
152 @context_field_class.setter
153 def context_field_class(self
, context_field_class
):
154 context_field_class_ptr
= None
156 if context_field_class
is not None:
157 utils
._check
_type
(context_field_class
, bt2
.field_class
._FieldClass
)
158 context_field_class_ptr
= context_field_class
._ptr
160 ret
= native_bt
.event_class_set_context_type(self
._ptr
, context_field_class_ptr
)
161 utils
._handle
_ret
(ret
, "cannot set event class object's context field class")
164 def payload_field_class(self
):
165 fc_ptr
= native_bt
.event_class_get_payload_type(self
._ptr
)
170 return bt2
.field_class
._create
_from
_ptr
(fc_ptr
)
172 @payload_field_class.setter
173 def payload_field_class(self
, payload_field_class
):
174 payload_field_class_ptr
= None
176 if payload_field_class
is not None:
177 utils
._check
_type
(payload_field_class
, bt2
.field_class
._FieldClass
)
178 payload_field_class_ptr
= payload_field_class
._ptr
180 ret
= native_bt
.event_class_set_payload_type(self
._ptr
, payload_field_class_ptr
)
181 utils
._handle
_ret
(ret
, "cannot set event class object's payload field class")
184 event_ptr
= native_bt
.event_create(self
._ptr
)
186 if event_ptr
is None:
187 raise bt2
.CreationError('cannot create event field object')
189 return bt2
.event
._create
_from
_ptr
(event_ptr
)
191 def __eq__(self
, other
):
192 if type(other
) is not type(self
):
195 if self
.addr
== other
.addr
:
203 self
.context_field_class
,
204 self
.payload_field_class
211 other
.context_field_class
,
212 other
.payload_field_class
214 return self_props
== other_props
216 def _copy(self
, fc_copy_func
):
217 cpy
= EventClass(self
.name
)
220 if self
.log_level
is not None:
221 cpy
.log_level
= self
.log_level
223 if self
.emf_uri
is not None:
224 cpy
.emf_uri
= self
.emf_uri
226 cpy
.context_field_class
= fc_copy_func(self
.context_field_class
)
227 cpy
.payload_field_class
= fc_copy_func(self
.payload_field_class
)
231 return self
._copy
(lambda fc
: fc
)
233 def __deepcopy__(self
, memo
):
234 cpy
= self
._copy
(copy
.deepcopy
)