bt2: add option field class and field support
[babeltrace.git] / src / bindings / python / bt2 / bt2 / field_class.py
index 06980b393bc2ade4b6fa06ec35d33246d422e43e..9974a29203c96146108c134bf0f3177c9c59b2f9 100644 (file)
@@ -22,9 +22,8 @@
 
 from bt2 import native_bt, object, utils
 import collections.abc
-import bt2.field
-import bt2.field_path
-import bt2.integer_range_set
+from bt2 import field_path as bt2_field_path
+from bt2 import integer_range_set as bt2_integer_range_set
 import bt2
 
 
@@ -46,11 +45,15 @@ class _FieldClass(object._SharedObject):
 
     def _check_create_status(self, ptr):
         if ptr is None:
-            raise bt2.CreationError(
+            raise bt2._MemoryError(
                 'cannot create {} field class object'.format(self._NAME.lower())
             )
 
 
+class _BoolFieldClass(_FieldClass):
+    _NAME = 'Boolean'
+
+
 class _IntegerFieldClass(_FieldClass):
     @property
     def field_value_range(self):
@@ -134,7 +137,7 @@ class _EnumerationFieldClassMapping:
 
 
 class _UnsignedEnumerationFieldClassMapping(_EnumerationFieldClassMapping):
-    _ranges_type = bt2.integer_range_set.UnsignedIntegerRangeSet
+    _ranges_type = bt2_integer_range_set.UnsignedIntegerRangeSet
     _as_enumeration_field_class_mapping_ptr = staticmethod(
         native_bt.field_class_enumeration_unsigned_mapping_as_mapping_const
     )
@@ -144,7 +147,7 @@ class _UnsignedEnumerationFieldClassMapping(_EnumerationFieldClassMapping):
 
 
 class _SignedEnumerationFieldClassMapping(_EnumerationFieldClassMapping):
-    _ranges_type = bt2.integer_range_set.SignedIntegerRangeSet
+    _ranges_type = bt2_integer_range_set.SignedIntegerRangeSet
     _as_enumeration_field_class_mapping_ptr = staticmethod(
         native_bt.field_class_enumeration_signed_mapping_as_mapping_const
     )
@@ -203,7 +206,7 @@ class _UnsignedEnumerationFieldClass(
     _EnumerationFieldClass, _UnsignedIntegerFieldClass
 ):
     _NAME = 'Unsigned enumeration'
-    _range_set_type = bt2.integer_range_set.UnsignedIntegerRangeSet
+    _range_set_type = bt2_integer_range_set.UnsignedIntegerRangeSet
     _add_mapping = staticmethod(native_bt.field_class_enumeration_unsigned_add_mapping)
 
     @staticmethod
@@ -235,7 +238,7 @@ class _UnsignedEnumerationFieldClass(
 
 class _SignedEnumerationFieldClass(_EnumerationFieldClass, _SignedIntegerFieldClass):
     _NAME = 'Signed enumeration'
-    _range_set_type = bt2.integer_range_set.SignedIntegerRangeSet
+    _range_set_type = bt2_integer_range_set.SignedIntegerRangeSet
     _add_mapping = staticmethod(native_bt.field_class_enumeration_signed_add_mapping)
 
     @staticmethod
@@ -358,6 +361,21 @@ class _StructureFieldClass(_FieldClass, collections.abc.Mapping):
         return self._create_member_from_ptr(member_ptr)
 
 
+class _OptionFieldClass(_FieldClass):
+    @property
+    def field_class(self):
+        elem_fc_ptr = native_bt.field_class_option_borrow_field_class_const(self._ptr)
+        return _create_field_class_from_ptr_and_get_ref(elem_fc_ptr)
+
+    @property
+    def selector_field_path(self):
+        ptr = native_bt.field_class_option_borrow_selector_field_path_const(self._ptr)
+        if ptr is None:
+            return
+
+        return bt2_field_path._FieldPath._create_from_ptr_and_get_ref(ptr)
+
+
 class _VariantFieldClassOption:
     def __init__(self, name, field_class):
         self._name = name
@@ -489,7 +507,7 @@ class _VariantFieldClassWithSelector(_VariantFieldClass):
         if ptr is None:
             return
 
-        return bt2.field_path._FieldPath._create_from_ptr_and_get_ref(ptr)
+        return bt2_field_path._FieldPath._create_from_ptr_and_get_ref(ptr)
 
     def append_option(self, name, field_class, ranges):
         utils._check_str(name)
@@ -533,7 +551,7 @@ class _VariantFieldClassWithUnsignedSelector(_VariantFieldClassWithSelector):
     _option_borrow_ranges_ptr = staticmethod(
         native_bt.field_class_variant_with_selector_unsigned_option_borrow_ranges_const
     )
-    _range_set_type = bt2.integer_range_set.UnsignedIntegerRangeSet
+    _range_set_type = bt2_integer_range_set.UnsignedIntegerRangeSet
 
 
 class _VariantFieldClassWithSignedSelector(_VariantFieldClassWithSelector):
@@ -553,7 +571,7 @@ class _VariantFieldClassWithSignedSelector(_VariantFieldClassWithSelector):
     _option_borrow_ranges_ptr = staticmethod(
         native_bt.field_class_variant_with_selector_signed_option_borrow_ranges_const
     )
-    _range_set_type = bt2.integer_range_set.SignedIntegerRangeSet
+    _range_set_type = bt2_integer_range_set.SignedIntegerRangeSet
 
 
 class _ArrayFieldClass(_FieldClass):
@@ -580,10 +598,11 @@ class _DynamicArrayFieldClass(_ArrayFieldClass):
         if ptr is None:
             return
 
-        return bt2.field_path._FieldPath._create_from_ptr_and_get_ref(ptr)
+        return bt2_field_path._FieldPath._create_from_ptr_and_get_ref(ptr)
 
 
 _FIELD_CLASS_TYPE_TO_OBJ = {
+    native_bt.FIELD_CLASS_TYPE_BOOL: _BoolFieldClass,
     native_bt.FIELD_CLASS_TYPE_UNSIGNED_INTEGER: _UnsignedIntegerFieldClass,
     native_bt.FIELD_CLASS_TYPE_SIGNED_INTEGER: _SignedIntegerFieldClass,
     native_bt.FIELD_CLASS_TYPE_REAL: _RealFieldClass,
@@ -593,6 +612,7 @@ _FIELD_CLASS_TYPE_TO_OBJ = {
     native_bt.FIELD_CLASS_TYPE_STRUCTURE: _StructureFieldClass,
     native_bt.FIELD_CLASS_TYPE_STATIC_ARRAY: _StaticArrayFieldClass,
     native_bt.FIELD_CLASS_TYPE_DYNAMIC_ARRAY: _DynamicArrayFieldClass,
+    native_bt.FIELD_CLASS_TYPE_OPTION: _OptionFieldClass,
     native_bt.FIELD_CLASS_TYPE_VARIANT_WITHOUT_SELECTOR: _VariantFieldClassWithoutSelector,
     native_bt.FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_SELECTOR: _VariantFieldClassWithUnsignedSelector,
     native_bt.FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_SELECTOR: _VariantFieldClassWithSignedSelector,
This page took 0.040192 seconds and 4 git commands to generate.