def append_field(self, name, field_class): utils._check_str(name) utils._check_type(field_class, _FieldClass) ret = self._add_field(field_class._ptr, name) utils._handle_ret( ret, "cannot add field to {} field class object".format( self._NAME.lower()))
def __setitem__(self, key, value): utils._check_str(key) value = bt2.create_value(value) ret = native_bt.trace_set_environment_field(self._trace._ptr, key, value._ptr) utils._handle_ret(ret, "cannot set trace class object's environment entry")
def log_level(self, log_level): log_levels = ( EventClassLogLevel.UNSPECIFIED, EventClassLogLevel.EMERGENCY, EventClassLogLevel.ALERT, EventClassLogLevel.CRITICAL, EventClassLogLevel.ERROR, EventClassLogLevel.WARNING, EventClassLogLevel.NOTICE, EventClassLogLevel.INFO, EventClassLogLevel.DEBUG_SYSTEM, EventClassLogLevel.DEBUG_PROGRAM, EventClassLogLevel.DEBUG_PROCESS, EventClassLogLevel.DEBUG_MODULE, EventClassLogLevel.DEBUG_UNIT, EventClassLogLevel.DEBUG_FUNCTION, EventClassLogLevel.DEBUG_LINE, EventClassLogLevel.DEBUG, ) if log_level not in log_levels: raise ValueError("'{}' is not a valid log level".format(log_level)) ret = native_bt.event_class_set_log_level(self._ptr, log_level) utils._handle_ret(ret, "cannot set event class object's log level")
def __setitem__(self, key, value): utils._check_type(key, bt2.ClockClass) utils._check_uint64(value) ret = native_bt.clock_class_priority_map_add_clock_class(self._ptr, key._ptr, value) utils._handle_ret(ret, "cannot set clock class's priority in clock class priority map object")
def add_listener(self, listener_type, listener): if not hasattr(listener, '__call__'): raise TypeError("'listener' parameter is not callable") if listener_type == GraphListenerType.PORT_ADDED: fn = native_bt.py3_graph_add_port_added_listener listener_from_native = functools.partial(_graph_port_added_listener_from_native, listener) elif listener_type == GraphListenerType.PORT_REMOVED: fn = native_bt.py3_graph_add_port_removed_listener listener_from_native = functools.partial(_graph_port_removed_listener_from_native, listener) elif listener_type == GraphListenerType.PORTS_CONNECTED: fn = native_bt.py3_graph_add_ports_connected_listener listener_from_native = functools.partial(_graph_ports_connected_listener_from_native, listener) elif listener_type == GraphListenerType.PORTS_DISCONNECTED: fn = native_bt.py3_graph_add_ports_disconnected_listener listener_from_native = functools.partial(_graph_ports_disconnected_listener_from_native, listener) else: raise TypeError listener_id = fn(self._ptr, listener_from_native) utils._handle_ret(listener_id, 'cannot add listener to graph object') return bt2._ListenerHandle(listener_id, self)
def offset(self, offset): utils._check_type(offset, ClockClassOffset) ret = native_bt.clock_class_set_offset_s(self._ptr, offset.seconds) utils._handle_ret(ret, "cannot set clock class object's offset (seconds)") ret = native_bt.clock_class_set_offset_cycles(self._ptr, offset.cycles) utils._handle_ret(ret, "cannot set clock class object's offset (cycles)")
def exponent_size(self, exponent_size): utils._check_uint64(exponent_size) ret = native_bt.field_class_floating_point_set_exponent_digits( self._ptr, exponent_size) utils._handle_ret( ret, "cannot set floating point number field class object's exponent size" )
def offset(self): ret, offset_s = native_bt.ctf_clock_get_offset_s(self._ptr) utils._handle_ret( ret, "cannot get CTF writer clock object's offset (seconds)") ret, offset_cycles = native_bt.ctf_clock_get_offset(self._ptr) utils._handle_ret( ret, "cannot get CTF writer clock object's offset (cycles)") return bt2.ClockClassOffset(offset_s, offset_cycles)
def value(self): if self.field_type.is_signed: ret, value = native_bt.ctf_field_signed_integer_get_value(self._ptr) else: ret, value = native_bt.ctf_field_unsigned_integer_get_value(self._ptr) utils._handle_ret(ret, "cannot get integer field object's value") return value
def offset(self, offset): utils._check_type(offset, bt2.ClockClassOffset) ret = native_bt.ctf_clock_set_offset_s(self._ptr, offset.seconds) utils._handle_ret( ret, "cannot set CTF writer clock object's offset (seconds)") ret = native_bt.ctf_clock_set_offset(self._ptr, offset.cycles) utils._handle_ret( ret, "cannot set CTF writer clock object's offset (cycles)")
def mantissa_size(self, mantissa_size): utils._check_uint64(mantissa_size) ret = native_bt.field_class_floating_point_set_mantissa_digits( self._ptr, mantissa_size) utils._handle_ret( ret, "cannot set floating point number field class object's mantissa size" )
def context_field(self, context): context_ptr = None if context is not None: utils._check_type(context, bt2.fields._Field) context_ptr = context._ptr ret = native_bt.ctf_event_set_event_context(self._ptr, context_ptr) utils._handle_ret(ret, "cannot set event object's context field")
def offset(self): ret, offset_s = native_bt.ctf_clock_class_get_offset_s(self._ptr) utils._handle_ret(ret, "cannot get clock class object's offset (seconds)") ret, offset_cycles = native_bt.ctf_clock_class_get_offset_cycles( self._ptr) utils._handle_ret(ret, "cannot get clock class object's offset (cycles)") return ClockClassOffset(offset_s, offset_cycles)
def header_field(self, header_field): header_field_ptr = None if header_field is not None: utils._check_type(header_field, bt2.fields._Field) header_field_ptr = header_field._ptr ret = native_bt.ctf_event_set_header(self._ptr, header_field_ptr) utils._handle_ret(ret, "cannot set event object's header field")
def __next__(self): if self._at == len(self._variant_field_type): raise StopIteration ret, name, field_type_ptr = native_bt.ctf_field_type_variant_get_field(self._variant_field_type._ptr, self._at) utils._handle_ret(ret, "cannot get variant field type object's field") native_bt.put(field_type_ptr) self._at += 1 return name
def __setitem__(self, key, value): utils._check_type(key, bt2.ClockClass) utils._check_uint64(value) ret = native_bt.clock_class_priority_map_add_clock_class( self._ptr, key._ptr, value) utils._handle_ret( ret, "cannot set clock class's priority in clock class priority map object" )
def _set_value(self, value): value = self._value_to_int(value) if self.field_class.is_signed: ret = native_bt.field_signed_integer_set_value(self._ptr, value) else: ret = native_bt.field_unsigned_integer_set_value(self._ptr, value) utils._handle_ret(ret, "cannot set integer field object's value")
def payload_field(self, payload): payload_ptr = None if payload is not None: utils._check_type(payload, bt2.fields._Field) payload_ptr = payload._ptr ret = native_bt.ctf_event_set_payload_field(self._ptr, payload_ptr) utils._handle_ret(ret, "cannot set event object's payload field")
def context_field(self, context_field): context_field_ptr = None if context_field is not None: utils._check_type(context_field, bt2.field._Field) context_field_ptr = context_field._ptr ret = native_bt.packet_set_context(self._ptr, context_field_ptr) utils._handle_ret(ret, "cannot set packet object's context field")
def payload_field_type(self, payload_field_type): payload_field_type_ptr = None if payload_field_type is not None: utils._check_type(payload_field_type, bt2.field_types._FieldType) payload_field_type_ptr = payload_field_type._ptr ret = native_bt.event_class_set_payload_type(self._ptr, payload_field_type_ptr) utils._handle_ret(ret, "cannot set event class object's payload field type")
def value(self, value): value = self._value_to_int(value) if self.field_type.is_signed: ret = native_bt.ctf_field_signed_integer_set_value(self._ptr, value) else: ret = native_bt.ctf_field_unsigned_integer_set_value(self._ptr, value) utils._handle_ret(ret, "cannot set integer field object's value")
def context_field_type(self, context_field_type): context_field_type_ptr = None if context_field_type is not None: utils._check_type(context_field_type, bt2.field_types._FieldType) context_field_type_ptr = context_field_type._ptr ret = native_bt.event_class_set_context_type(self._ptr, context_field_type_ptr) utils._handle_ret(ret, "cannot set event class object's context field type")
def packet_header_field_type(self, packet_header_field_type): packet_header_field_type_ptr = None if packet_header_field_type is not None: utils._check_type(packet_header_field_type, bt2.field_types._FieldType) packet_header_field_type_ptr = packet_header_field_type._ptr ret = native_bt.trace_set_packet_header_type(self._ptr, packet_header_field_type_ptr) utils._handle_ret(ret, "cannot set trace class object's packet header field type")
def stream_event_context_field(self, stream_event_context): stream_event_context_ptr = None if stream_event_context is not None: utils._check_type(stream_event_context, bt2.fields._Field) stream_event_context_ptr = stream_event_context._ptr ret = native_bt.event_set_stream_event_context(self._ptr, stream_event_context_ptr) utils._handle_ret(ret, "cannot set event object's stream event context field")
def value(self): if self.field_type.is_signed: ret, value = native_bt.ctf_field_signed_integer_get_value( self._ptr) else: ret, value = native_bt.ctf_field_unsigned_integer_get_value( self._ptr) utils._handle_ret(ret, "cannot get integer field object's value") return value
def stream_event_context_field(self, stream_event_context): stream_event_context_ptr = None if stream_event_context is not None: utils._check_type(stream_event_context, bt2.fields._Field) stream_event_context_ptr = stream_event_context._ptr ret = native_bt.ctf_event_set_stream_event_context(self._ptr, stream_event_context_ptr) utils._handle_ret(ret, "cannot set event object's stream event context field")
def _value(self): ret, value = native_bt.field_floating_point_get_value(self._ptr) if ret < 0: if not self.is_set: return utils._handle_ret(ret, "cannot get floating point number field's value") return value
def packet_header_field_class(self, packet_header_field_class): packet_header_field_class_ptr = None if packet_header_field_class is not None: utils._check_type(packet_header_field_class, bt2.field_class._FieldClass) packet_header_field_class_ptr = packet_header_field_class._ptr ret = native_bt.trace_set_packet_header_type(self._ptr, packet_header_field_class_ptr) utils._handle_ret(ret, "cannot set trace class object's packet header field class")
def packet_context_field_type(self, packet_context_field_type): packet_context_field_type_ptr = None if packet_context_field_type is not None: utils._check_type(packet_context_field_type, bt2.field_types._FieldType) packet_context_field_type_ptr = packet_context_field_type._ptr ret = native_bt.ctf_stream_class_set_packet_context_type(self._ptr, packet_context_field_type_ptr) utils._handle_ret(ret, "cannot set stream class object's packet context field type")
def event_context_field_type(self, event_context_field_type): event_context_field_type_ptr = None if event_context_field_type is not None: utils._check_type(event_context_field_type, bt2.field_types._FieldType) event_context_field_type_ptr = event_context_field_type._ptr ret = native_bt.ctf_stream_class_set_event_context_type(self._ptr, event_context_field_type_ptr) utils._handle_ret(ret, "cannot set stream class object's event context field type")
def packet_header_field(self, packet_header_field): packet_header_field_ptr = None if packet_header_field is not None: utils._check_type(packet_header_field, fields._Field) packet_header_field_ptr = packet_header_field._ptr ret = native_bt.ctf_stream_set_packet_header(self._ptr, packet_header_field_ptr) utils._handle_ret(ret, "cannot set CTF writer stream object's packet header field")
def event_context_field_class(self, event_context_field_class): event_context_field_class_ptr = None if event_context_field_class is not None: utils._check_type(event_context_field_class, bt2.field_class._FieldClass) event_context_field_class_ptr = event_context_field_class._ptr ret = native_bt.stream_class_set_event_context_type(self._ptr, event_context_field_class_ptr) utils._handle_ret(ret, "cannot set stream class object's event context field class")
def packet_context_field_class(self, packet_context_field_class): packet_context_field_class_ptr = None if packet_context_field_class is not None: utils._check_type(packet_context_field_class, bt2.field_class._FieldClass) packet_context_field_class_ptr = packet_context_field_class._ptr ret = native_bt.stream_class_set_packet_context_type(self._ptr, packet_context_field_class_ptr) utils._handle_ret(ret, "cannot set stream class object's packet context field class")
def packet_context_field(self, packet_context_field): packet_context_field_ptr = None if packet_context_field is not None: utils._check_type(packet_context_field, bt2.fields._Field) packet_context_field_ptr = packet_context_field._ptr ret = native_bt.stream_set_packet_context(self._ptr, packet_context_field_ptr) utils._handle_ret(ret, "cannot set CTF writer stream object's packet context field")
def __eq__(self, other): if not isinstance(other, self.__class__): # not comparing apples to apples return False if self.addr == other.addr: return True ret = native_bt.field_class_compare(self._ptr, other._ptr) utils._handle_ret(ret, "cannot compare field classes") return ret == 0
def context_field_class(self, context_field_class): context_field_class_ptr = None if context_field_class is not None: utils._check_type(context_field_class, bt2.field_class._FieldClass) context_field_class_ptr = context_field_class._ptr ret = native_bt.event_class_set_context_type(self._ptr, context_field_class_ptr) utils._handle_ret( ret, "cannot set event class object's context field class")
def payload_field_class(self, payload_field_class): payload_field_class_ptr = None if payload_field_class is not None: utils._check_type(payload_field_class, bt2.field_class._FieldClass) payload_field_class_ptr = payload_field_class._ptr ret = native_bt.event_class_set_payload_type(self._ptr, payload_field_class_ptr) utils._handle_ret( ret, "cannot set event class object's payload field class")
def _get_clock_value_cycles(self, clock_class_ptr): clock_value_ptr = native_bt.ctf_event_get_clock_value(self._ptr, clock_class_ptr) if clock_value_ptr is None: return ret, cycles = native_bt.ctf_clock_value_get_value(clock_value_ptr) native_bt.put(clock_value_ptr) utils._handle_ret(ret, "cannot get clock value object's cycles") return cycles
def _get_clock_value_cycles(self, clock_class_ptr): clock_value_ptr = native_bt.ctf_event_get_clock_value( self._ptr, clock_class_ptr) if clock_value_ptr is None: return ret, cycles = native_bt.ctf_clock_value_get_value(clock_value_ptr) native_bt.put(clock_value_ptr) utils._handle_ret(ret, "cannot get clock value object's cycles") return cycles
def context_field_type(self, context_field_type): context_field_type_ptr = None if context_field_type is not None: utils._check_type(context_field_type, bt2.field_types._FieldType) context_field_type_ptr = context_field_type._ptr ret = native_bt.ctf_event_class_set_context_type( self._ptr, context_field_type_ptr) utils._handle_ret( ret, "cannot set event class object's context field type")
def payload_field_type(self, payload_field_type): payload_field_type_ptr = None if payload_field_type is not None: utils._check_type(payload_field_type, bt2.field_types._FieldType) payload_field_type_ptr = payload_field_type._ptr ret = native_bt.ctf_event_class_set_payload_type( self._ptr, payload_field_type_ptr) utils._handle_ret( ret, "cannot set event class object's payload field type")
def packet_context_field(self, packet_context_field): packet_context_field_ptr = None if packet_context_field is not None: utils._check_type(packet_context_field, bt2.field._Field) packet_context_field_ptr = packet_context_field._ptr ret = native_bt.stream_set_packet_context(self._ptr, packet_context_field_ptr) utils._handle_ret( ret, "cannot set CTF writer stream object's packet context field")
def __next__(self): if self._at == len(self._stream_class): raise StopIteration ec_ptr = native_bt.stream_class_get_event_class_by_index(self._stream_class._ptr, self._at) assert(ec_ptr) ev_id = native_bt.event_class_get_id(ec_ptr) native_bt.put(ec_ptr) utils._handle_ret(ev_id, "cannot get event class object's ID") self._at += 1 return ev_id
def _value(self): if self.field_type.is_signed: ret, value = native_bt.field_signed_integer_get_value(self._ptr) else: ret, value = native_bt.field_unsigned_integer_get_value(self._ptr) if ret < 0: if not self.is_set: return utils._handle_ret(ret, "cannot get integer field's value") return value
def __getitem__(self, index): utils._check_uint64(index) if index >= len(self): raise IndexError if self.is_signed: get_fn = native_bt.ctf_field_type_enumeration_get_mapping_signed else: get_fn = native_bt.ctf_field_type_enumeration_get_mapping_unsigned ret, name, lower, upper = get_fn(self._ptr, index) utils._handle_ret(ret, "cannot get enumeration field type object's mapping") return _EnumerationFieldTypeMapping(name, lower, upper)
def __next__(self): if self._done: raise StopIteration if self._is_signed: ret, name, lower, upper = native_bt.ctf_field_type_enumeration_mapping_iterator_get_signed(self._ptr) else: ret, name, lower, upper = native_bt.ctf_field_type_enumeration_mapping_iterator_get_unsigned(self._ptr) utils._handle_ret(ret, "cannot get enumeration field type mapping iterator object's current mapping") mapping = _EnumerationFieldTypeMapping(name, lower, upper) ret = native_bt.ctf_field_type_enumeration_mapping_iterator_next(self._ptr) if ret < 0: self._done = True return mapping
def add_mapping(self, name, lower, upper=None): utils._check_str(name) if upper is None: upper = lower if self.is_signed: add_fn = native_bt.field_class_enumeration_add_mapping_signed utils._check_int64(lower) utils._check_int64(upper) else: add_fn = native_bt.field_class_enumeration_add_mapping_unsigned utils._check_uint64(lower) utils._check_uint64(upper) ret = add_fn(self._ptr, name, lower, upper) utils._handle_ret(ret, "cannot add mapping to enumeration field class object")
def add_clock_class(self, clock_class): utils._check_type(clock_class, bt2.ClockClass) ret = native_bt.trace_add_clock_class(self._ptr, clock_class._ptr) utils._handle_ret(ret, "cannot add clock class object to trace class object")