-# The MIT License (MIT)
+# SPDX-License-Identifier: MIT
#
# Copyright (c) 2017 Philippe Proulx <pproulx@efficios.com>
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
-
-from bt2 import native_bt, object, utils
-from bt2 import field_class as bt2_field_class
-import collections.abc
-import functools
-import numbers
+
import math
+import numbers
+import functools
+import collections.abc
+
+from bt2 import utils as bt2_utils
+from bt2 import object as bt2_object
+from bt2 import native_bt
+from bt2 import field_class as bt2_field_class
def _create_field_from_ptr_template(
object_map, ptr, owner_ptr, owner_get_ref, owner_put_ref
):
-
field_class_ptr = native_bt.field_borrow_class_const(ptr)
typeid = native_bt.field_class_get_type(field_class_ptr)
field = object_map[typeid]._create_from_ptr_and_get_ref(
return field
-class _FieldConst(object._UniqueObject):
+class _FieldConst(bt2_object._UniqueObject):
_create_field_from_ptr = staticmethod(_create_field_from_const_ptr)
_create_field_class_from_ptr_and_get_ref = staticmethod(
bt2_field_class._create_field_class_from_const_ptr_and_get_ref
class _BitArrayFieldConst(_FieldConst):
- _NAME = 'Const bit array'
+ _NAME = "Const bit array"
@property
def value_as_integer(self):
class _BitArrayField(_BitArrayFieldConst, _Field):
- _NAME = 'Bit array'
+ _NAME = "Bit array"
def _value_as_integer(self, value):
- utils._check_uint64(value)
+ bt2_utils._check_uint64(value)
native_bt.field_bit_array_set_value_as_integer(self._ptr, value)
value_as_integer = property(
def __lt__(self, other):
if not isinstance(other, numbers.Number):
raise TypeError(
- 'unorderable types: {}() < {}()'.format(
+ "unorderable types: {}() < {}()".format(
self.__class__.__name__, other.__class__.__name__
)
)
def __hash__(self):
# Non const field are not hashable as their value may be modified
# without changing the underlying Python object.
- raise TypeError('unhashable type: \'{}\''.format(self._NAME))
+ raise TypeError("unhashable type: '{}'".format(self._NAME))
class _IntegralFieldConst(_NumericFieldConst, numbers.Integral):
class _BoolFieldConst(_IntegralFieldConst, _FieldConst):
- _NAME = 'Const boolean'
+ _NAME = "Const boolean"
def __bool__(self):
return self._value
class _BoolField(_BoolFieldConst, _IntegralField, _Field):
- _NAME = 'Boolean'
+ _NAME = "Boolean"
def _set_value(self, value):
value = self._value_to_bool(value)
class _UnsignedIntegerFieldConst(_IntegerFieldConst, _FieldConst):
- _NAME = 'Const unsigned integer'
+ _NAME = "Const unsigned integer"
@classmethod
def _value_to_int(cls, value):
if not isinstance(value, numbers.Integral):
- raise TypeError('expecting an integral number object')
+ raise TypeError("expecting an integral number object")
return int(value)
class _UnsignedIntegerField(_UnsignedIntegerFieldConst, _IntegerField, _Field):
- _NAME = 'Unsigned integer'
+ _NAME = "Unsigned integer"
def _set_value(self, value):
value = self._value_to_int(value)
@property
def _upper_bound(self):
- return (2 ** self.cls.field_value_range) - 1
+ return (2**self.cls.field_value_range) - 1
class _SignedIntegerFieldConst(_IntegerFieldConst, _FieldConst):
- _NAME = 'Const signed integer'
+ _NAME = "Const signed integer"
@classmethod
def _value_to_int(cls, value):
if not isinstance(value, numbers.Integral):
- raise TypeError('expecting an integral number object')
+ raise TypeError("expecting an integral number object")
return int(value)
class _SignedIntegerField(_SignedIntegerFieldConst, _IntegerField, _Field):
- _NAME = 'Signed integer'
+ _NAME = "Signed integer"
def _set_value(self, value):
value = self._value_to_int(value)
class _RealFieldConst(_NumericFieldConst, numbers.Real):
- _NAME = 'Const real'
+ _NAME = "Const real"
@classmethod
def _value_to_float(cls, value):
class _SinglePrecisionRealFieldConst(_RealFieldConst):
- _NAME = 'Const single-precision real'
+ _NAME = "Const single-precision real"
@property
def _value(self):
class _DoublePrecisionRealFieldConst(_RealFieldConst):
- _NAME = 'Const double-precision real'
+ _NAME = "Const double-precision real"
@property
def _value(self):
class _RealField(_RealFieldConst, _NumericField):
- _NAME = 'Real'
+ _NAME = "Real"
class _SinglePrecisionRealField(_SinglePrecisionRealFieldConst, _RealField):
- _NAME = 'Single-precision real'
+ _NAME = "Single-precision real"
def _set_value(self, value):
value = self._value_to_float(value)
class _DoublePrecisionRealField(_DoublePrecisionRealFieldConst, _RealField):
- _NAME = 'Double-precision real'
+ _NAME = "Double-precision real"
def _set_value(self, value):
value = self._value_to_float(value)
class _EnumerationFieldConst(_IntegerFieldConst):
def _repr(self):
- return '{} ({})'.format(self._value, ', '.join(self.labels))
+ return "{} ({})".format(self._value, ", ".join(self.labels))
@property
def labels(self):
status, labels = self._get_mapping_labels(self._ptr)
- utils._handle_func_status(status, "cannot get label for enumeration field")
+ bt2_utils._handle_func_status(status, "cannot get label for enumeration field")
assert labels is not None
return labels
class _UnsignedEnumerationFieldConst(
_EnumerationFieldConst, _UnsignedIntegerFieldConst
):
- _NAME = 'Const unsigned Enumeration'
+ _NAME = "Const unsigned Enumeration"
_get_mapping_labels = staticmethod(
native_bt.field_enumeration_unsigned_get_mapping_labels
)
class _UnsignedEnumerationField(
_UnsignedEnumerationFieldConst, _EnumerationField, _UnsignedIntegerField
):
- _NAME = 'Unsigned enumeration'
+ _NAME = "Unsigned enumeration"
class _SignedEnumerationFieldConst(_EnumerationFieldConst, _SignedIntegerFieldConst):
- _NAME = 'Const signed Enumeration'
+ _NAME = "Const signed Enumeration"
_get_mapping_labels = staticmethod(
native_bt.field_enumeration_signed_get_mapping_labels
)
class _SignedEnumerationField(
_SignedEnumerationFieldConst, _EnumerationField, _SignedIntegerField
):
- _NAME = 'Signed enumeration'
+ _NAME = "Signed enumeration"
@functools.total_ordering
class _StringFieldConst(_FieldConst):
- _NAME = 'Const string'
+ _NAME = "Const string"
@classmethod
def _value_to_str(cls, value):
class _StringField(_StringFieldConst, _Field):
- _NAME = 'String'
+ _NAME = "String"
def _set_value(self, value):
value = self._value_to_str(value)
def __iadd__(self, value):
value = self._value_to_str(value)
status = native_bt.field_string_append(self._ptr, value)
- utils._handle_func_status(
+ bt2_utils._handle_func_status(
status, "cannot append to string field object's value"
)
return self
def __hash__(self):
# Non const field are not hashable as their value may be modified
# without changing the underlying Python object.
- raise TypeError('unhashable type: \'{}\''.format(self._NAME))
+ raise TypeError("unhashable type: '{}'".format(self._NAME))
class _ContainerFieldConst(_FieldConst):
def __setitem__(self, index, value):
raise TypeError(
- '\'{}\' object does not support item assignment'.format(self.__class__)
+ "'{}' object does not support item assignment".format(self.__class__)
)
class _StructureFieldConst(_ContainerFieldConst, collections.abc.Mapping):
- _NAME = 'Const structure'
+ _NAME = "Const structure"
_borrow_member_field_ptr_by_index = staticmethod(
native_bt.field_structure_borrow_member_field_by_index_const
)
return True
def _repr(self):
- items = ['{}: {}'.format(repr(k), repr(v)) for k, v in self.items()]
- return '{{{}}}'.format(', '.join(items))
+ items = ["{}: {}".format(repr(k), repr(v)) for k, v in self.items()]
+ return "{{{}}}".format(", ".join(items))
def __getitem__(self, key):
- utils._check_str(key)
+ bt2_utils._check_str(key)
field_ptr = self._borrow_member_field_ptr_by_name(self._ptr, key)
if field_ptr is None:
)
def member_at_index(self, index):
- utils._check_uint64(index)
+ bt2_utils._check_uint64(index)
if index >= len(self):
raise IndexError
class _StructureField(
_StructureFieldConst, _ContainerField, collections.abc.MutableMapping
):
- _NAME = 'Structure'
+ _NAME = "Structure"
_borrow_member_field_ptr_by_index = staticmethod(
native_bt.field_structure_borrow_member_field_by_index
)
class _OptionFieldConst(_FieldConst):
- _NAME = 'Const option'
+ _NAME = "Const option"
_borrow_field_ptr = staticmethod(native_bt.field_option_borrow_field_const)
@property
class _OptionField(_OptionFieldConst, _Field):
- _NAME = 'Option'
+ _NAME = "Option"
_borrow_field_ptr = staticmethod(native_bt.field_option_borrow_field)
def _has_field(self, value):
- utils._check_bool(value)
+ bt2_utils._check_bool(value)
native_bt.field_option_set_has_field(self._ptr, value)
has_field = property(fget=_OptionFieldConst.has_field.fget, fset=_has_field)
class _VariantFieldConst(_ContainerFieldConst, _FieldConst):
- _NAME = 'Const variant'
+ _NAME = "Const variant"
_borrow_selected_option_field_ptr = staticmethod(
native_bt.field_variant_borrow_selected_option_field_const
)
@property
def selected_option_index(self):
- return native_bt.field_variant_get_selected_option_field_index(self._ptr)
+ return native_bt.field_variant_get_selected_option_index(self._ptr)
@property
def selected_option(self):
class _VariantField(_VariantFieldConst, _ContainerField, _Field):
- _NAME = 'Variant'
+ _NAME = "Variant"
_borrow_selected_option_field_ptr = staticmethod(
native_bt.field_variant_borrow_selected_option_field
)
def _selected_option_index(self, index):
if index < 0 or index >= len(self):
- raise IndexError('{} field object index is out of range'.format(self._NAME))
+ raise IndexError("{} field object index is out of range".format(self._NAME))
- native_bt.field_variant_select_option_field_by_index(self._ptr, index)
+ native_bt.field_variant_select_option_by_index(self._ptr, index)
selected_option_index = property(
fget=_VariantFieldConst.selected_option_index.fget, fset=_selected_option_index
index = int(index)
if index < 0 or index >= len(self):
- raise IndexError('{} field object index is out of range'.format(self._NAME))
+ raise IndexError("{} field object index is out of range".format(self._NAME))
field_ptr = self._borrow_element_field_ptr_by_index(self._ptr, index)
assert field_ptr
return True
def _repr(self):
- return '[{}]'.format(', '.join([repr(v) for v in self]))
+ return "[{}]".format(", ".join([repr(v) for v in self]))
class _ArrayField(
field = self[index]
if not isinstance(field, (_NumericField, _StringField)):
- raise TypeError('can only set the value of a number or string field')
+ raise TypeError("can only set the value of a number or string field")
# the field's property does the appropriate conversion or raises
# the appropriate exception
class _StaticArrayFieldConst(_ArrayFieldConst, _FieldConst):
- _NAME = 'Const static array'
+ _NAME = "Const static array"
def _count(self):
return native_bt.field_array_get_length(self._ptr)
class _StaticArrayField(_StaticArrayFieldConst, _ArrayField, _Field):
- _NAME = 'Static array'
+ _NAME = "Static array"
def _set_value(self, values):
if len(self) != len(values):
raise ValueError(
- 'expected length of value ({}) and array field ({}) to match'.format(
+ "expected length of value ({}) and array field ({}) to match".format(
len(values), len(self)
)
)
class _DynamicArrayFieldConst(_ArrayFieldConst, _FieldConst):
- _NAME = 'Const dynamic array'
+ _NAME = "Const dynamic array"
def _count(self):
return self.length
class _DynamicArrayField(_DynamicArrayFieldConst, _ArrayField, _Field):
- _NAME = 'Dynamic array'
+ _NAME = "Dynamic array"
def _set_length(self, length):
- utils._check_uint64(length)
+ bt2_utils._check_uint64(length)
status = native_bt.field_array_dynamic_set_length(self._ptr, length)
- utils._handle_func_status(status, "cannot set dynamic array length")
+ bt2_utils._handle_func_status(status, "cannot set dynamic array length")
length = property(fget=_ArrayField._get_length, fset=_set_length)
native_bt.FIELD_CLASS_TYPE_STRING: _StringFieldConst,
native_bt.FIELD_CLASS_TYPE_STRUCTURE: _StructureFieldConst,
native_bt.FIELD_CLASS_TYPE_STATIC_ARRAY: _StaticArrayFieldConst,
- native_bt.FIELD_CLASS_TYPE_DYNAMIC_ARRAY: _DynamicArrayFieldConst,
- native_bt.FIELD_CLASS_TYPE_OPTION_WITHOUT_SELECTOR: _OptionFieldConst,
- native_bt.FIELD_CLASS_TYPE_OPTION_WITH_BOOL_SELECTOR: _OptionFieldConst,
- native_bt.FIELD_CLASS_TYPE_OPTION_WITH_UNSIGNED_INTEGER_SELECTOR: _OptionFieldConst,
- native_bt.FIELD_CLASS_TYPE_OPTION_WITH_SIGNED_INTEGER_SELECTOR: _OptionFieldConst,
- native_bt.FIELD_CLASS_TYPE_VARIANT_WITHOUT_SELECTOR: _VariantFieldConst,
- native_bt.FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_SELECTOR: _VariantFieldConst,
- native_bt.FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_SELECTOR: _VariantFieldConst,
+ native_bt.FIELD_CLASS_TYPE_DYNAMIC_ARRAY_WITHOUT_LENGTH_FIELD: _DynamicArrayFieldConst,
+ native_bt.FIELD_CLASS_TYPE_DYNAMIC_ARRAY_WITH_LENGTH_FIELD: _DynamicArrayFieldConst,
+ native_bt.FIELD_CLASS_TYPE_OPTION_WITHOUT_SELECTOR_FIELD: _OptionFieldConst,
+ native_bt.FIELD_CLASS_TYPE_OPTION_WITH_BOOL_SELECTOR_FIELD: _OptionFieldConst,
+ native_bt.FIELD_CLASS_TYPE_OPTION_WITH_UNSIGNED_INTEGER_SELECTOR_FIELD: _OptionFieldConst,
+ native_bt.FIELD_CLASS_TYPE_OPTION_WITH_SIGNED_INTEGER_SELECTOR_FIELD: _OptionFieldConst,
+ native_bt.FIELD_CLASS_TYPE_VARIANT_WITHOUT_SELECTOR_FIELD: _VariantFieldConst,
+ native_bt.FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_INTEGER_SELECTOR_FIELD: _VariantFieldConst,
+ native_bt.FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_INTEGER_SELECTOR_FIELD: _VariantFieldConst,
}
_TYPE_ID_TO_OBJ = {
native_bt.FIELD_CLASS_TYPE_STRING: _StringField,
native_bt.FIELD_CLASS_TYPE_STRUCTURE: _StructureField,
native_bt.FIELD_CLASS_TYPE_STATIC_ARRAY: _StaticArrayField,
- native_bt.FIELD_CLASS_TYPE_DYNAMIC_ARRAY: _DynamicArrayField,
- native_bt.FIELD_CLASS_TYPE_OPTION_WITHOUT_SELECTOR: _OptionField,
- native_bt.FIELD_CLASS_TYPE_OPTION_WITH_BOOL_SELECTOR: _OptionField,
- native_bt.FIELD_CLASS_TYPE_OPTION_WITH_UNSIGNED_INTEGER_SELECTOR: _OptionField,
- native_bt.FIELD_CLASS_TYPE_OPTION_WITH_SIGNED_INTEGER_SELECTOR: _OptionField,
- native_bt.FIELD_CLASS_TYPE_VARIANT_WITHOUT_SELECTOR: _VariantField,
- native_bt.FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_SELECTOR: _VariantField,
- native_bt.FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_SELECTOR: _VariantField,
+ native_bt.FIELD_CLASS_TYPE_DYNAMIC_ARRAY_WITHOUT_LENGTH_FIELD: _DynamicArrayField,
+ native_bt.FIELD_CLASS_TYPE_DYNAMIC_ARRAY_WITH_LENGTH_FIELD: _DynamicArrayField,
+ native_bt.FIELD_CLASS_TYPE_OPTION_WITHOUT_SELECTOR_FIELD: _OptionField,
+ native_bt.FIELD_CLASS_TYPE_OPTION_WITH_BOOL_SELECTOR_FIELD: _OptionField,
+ native_bt.FIELD_CLASS_TYPE_OPTION_WITH_UNSIGNED_INTEGER_SELECTOR_FIELD: _OptionField,
+ native_bt.FIELD_CLASS_TYPE_OPTION_WITH_SIGNED_INTEGER_SELECTOR_FIELD: _OptionField,
+ native_bt.FIELD_CLASS_TYPE_VARIANT_WITHOUT_SELECTOR_FIELD: _VariantField,
+ native_bt.FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_INTEGER_SELECTOR_FIELD: _VariantField,
+ native_bt.FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_INTEGER_SELECTOR_FIELD: _VariantField,
}