X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=bindings%2Fpython%2Fbabeltrace.i.in;h=5a06f0ba4639db4ca12a76723b5c5198e5779be9;hp=7b796335d20505d582ffd034dd53dfd3fef977a7;hb=e11b8d3a38c016ebbbc849e2b1aabf0a80a28ce4;hpb=d0f6c52337c832c27cfde06c7e5b58255871d786 diff --git a/bindings/python/babeltrace.i.in b/bindings/python/babeltrace.i.in index 7b796335..5a06f0ba 100644 --- a/bindings/python/babeltrace.i.in +++ b/bindings/python/babeltrace.i.in @@ -93,7 +93,10 @@ struct definition_sequence *_bt_python_get_sequence_from_def( struct bt_definition *field); struct bt_declaration *_bt_python_get_array_element_declaration( struct bt_declaration *field); +struct bt_declaration *_bt_python_get_sequence_element_declaration( + struct bt_declaration *field); const char *_bt_python_get_array_string(struct bt_definition *field); +const char *_bt_python_get_sequence_string(struct bt_definition *field); int _bt_python_field_integer_get_signedness(const struct bt_ctf_field *field); enum ctf_type_id _bt_python_get_field_type(const struct bt_ctf_field *field); @@ -952,6 +955,14 @@ class SequenceFieldDeclaration(FieldDeclaration): def __init__(self): raise NotImplementedError("SequenceFieldDeclaration cannot be instantiated") + @property + def element_declaration(self): + """ + Return element declaration. + """ + field_decl_ptr = _bt_python_get_sequence_element_declaration(self._fd) + return _create_field_declaration(field_decl_ptr, "", self.scope) + class FloatFieldDeclaration(FieldDeclaration): """Do not instantiate.""" def __init__(self): @@ -1179,11 +1190,17 @@ class _Definition(object): elif id == CTFTypeId.ENUM: value = self._get_enum_str() elif id == CTFTypeId.SEQUENCE: - seq_len = self._get_sequence_len() - value = [] - for i in range(seq_len): - evDef = self._get_sequence_element_at(i) - value.append(evDef.value) + element_decl = self.declaration.element_declaration + if ((element_decl.type == CTFTypeId.INTEGER + and element_decl.length == 8) + and (element_decl.encoding == CTFStringEncoding.ASCII or element_decl.encoding == CTFStringEncoding.UTF8)): + value = _bt_python_get_sequence_string(self._d) + else: + seq_len = self._get_sequence_len() + value = [] + for i in range(seq_len): + evDef = self._get_sequence_element_at(i) + value.append(evDef.value) elif id == CTFTypeId.FLOAT: value = self._get_float() elif id == CTFTypeId.VARIANT: @@ -1939,9 +1956,9 @@ class CTFWriter: """ @length.setter def length(self, length_field): - if not isinstance(length, CTFWriter.IntegerField): + if not isinstance(length_field, CTFWriter.IntegerField): raise TypeError("Invalid length field.") - ret = _bt_ctf_field_sequence_set_length(self._f, length._f) + ret = _bt_ctf_field_sequence_set_length(self._f, length_field._f) if ret < 0: raise ValueError("Could not set sequence length.") @@ -2012,7 +2029,7 @@ class CTFWriter: def set_payload(self, field_name, value_field): if not isinstance(value, CTFWriter.Field): raise TypeError("Invalid value type.") - ret = _bt_ctf_event_set_payload(self._e, str(field_name), value._f) + ret = _bt_ctf_event_set_payload(self._e, str(field_name), value_field._f) if ret < 0: raise ValueError("Could not set event field payload.") @@ -2088,9 +2105,7 @@ class CTFWriter: Increase the current packet's discarded event count. """ def append_discarded_events(self, event_count): - ret = _bt_ctf_stream_append_discarded_events(self._s, event_count) - if ret < 0: - raise ValueError("Could not append discarded events.") + _bt_ctf_stream_append_discarded_events(self._s, event_count) """ Append "event" to the stream's current packet. The stream's associated clock