X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fbindings%2Fpython%2Fbt2%2Fbt2%2Ffield_class.py;h=9974a29203c96146108c134bf0f3177c9c59b2f9;hb=cec0261d56a42e810f56b39fcefbe33987c8aab8;hp=17a150faf1d9453c7d6c4eff0600d87be7318709;hpb=9c08c816a55bbc538957648b49d41354e43c7cdf;p=babeltrace.git diff --git a/src/bindings/python/bt2/bt2/field_class.py b/src/bindings/python/bt2/bt2/field_class.py index 17a150fa..9974a292 100644 --- a/src/bindings/python/bt2/bt2/field_class.py +++ b/src/bindings/python/bt2/bt2/field_class.py @@ -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 ) @@ -164,7 +167,7 @@ class _EnumerationFieldClass(_IntegerFieldClass, collections.abc.Mapping): utils._check_type(ranges, self._range_set_type) if label in self: - raise bt2.Error("duplicate mapping label '{}'".format(label)) + raise ValueError("duplicate mapping label '{}'".format(label)) status = self._add_mapping(self._ptr, label, ranges._ptr) utils._handle_func_status( @@ -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 @@ -291,7 +294,7 @@ class _StructureFieldClass(_FieldClass, collections.abc.Mapping): utils._check_type(field_class, _FieldClass) if name in self: - raise bt2.Error("duplicate member name '{}'".format(name)) + raise ValueError("duplicate member name '{}'".format(name)) status = native_bt.field_class_structure_append_member( self._ptr, name, field_class._ptr @@ -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 @@ -447,7 +465,7 @@ class _VariantFieldClassWithoutSelector(_VariantFieldClass): utils._check_type(field_class, _FieldClass) if name in self: - raise bt2.Error("duplicate option name '{}'".format(name)) + raise ValueError("duplicate option name '{}'".format(name)) status = native_bt.field_class_variant_without_selector_append_option( self._ptr, name, field_class._ptr @@ -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) @@ -497,7 +515,7 @@ class _VariantFieldClassWithSelector(_VariantFieldClass): utils._check_type(ranges, self._range_set_type) if name in self: - raise bt2.Error("duplicate option name '{}'".format(name)) + raise ValueError("duplicate option name '{}'".format(name)) if len(ranges) == 0: raise ValueError('range set is empty') @@ -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,