Python bt2: add reset and is_set to fields
[babeltrace.git] / bindings / python / bt2 / bt2 / fields.py
index 44d6a386ad847a1f6ad62745e134e0ab414406ad..e40a86c67bb3969f7a13d20a28cd6dbc19c8d3dd 100644 (file)
@@ -58,6 +58,15 @@ class _Field(object._Object, metaclass=abc.ABCMeta):
     def field_type(self):
         return self._field_type
 
+    @property
+    def is_set(self):
+        is_set = native_bt.ctf_field_value_is_set(self._ptr)
+        return is_set > 0
+
+    def reset(self):
+        ret = native_bt.ctf_field_reset_value(self._ptr)
+        utils._handle_ret(ret, "cannot reset field object's value")
+
 
 @functools.total_ordering
 class _NumericField(_Field):
@@ -483,6 +492,18 @@ class _StructureField(_ContainerField, collections.abc.MutableMapping):
 
         return True
 
+    @property
+    def value(self):
+        return {key: field.value for key, field in self.items()}
+
+    @value.setter
+    def value(self, values):
+        if not hasattr(type(values), '__getitem__'):
+            raise TypeError('expecting a Mapping collection')
+
+        for key, value in values.items():
+            self[key].value = value
+
 
 class _VariantField(_Field):
     _NAME = 'Variant'
@@ -571,6 +592,21 @@ class _ArraySequenceField(_ContainerField, collections.abc.MutableSequence):
 
         return True
 
+    @property
+    def value(self):
+        return [field.value for field in self]
+
+    @value.setter
+    def value(self, values):
+        if not hasattr(type(values), '__iter__'):
+            raise TypeError('expecting an iterable container (Sequence)')
+
+        if len(self) != len(values):
+            raise ValueError('expected length of value and field to match')
+
+        for index, value in enumerate(values):
+            self[index].value = value
+
 
 class _ArrayField(_ArraySequenceField):
     _NAME = 'Array'
This page took 0.023702 seconds and 4 git commands to generate.