import bt2
-def _handle_status(status, obj_name):
- if status >= 0:
+def _create_from_ptr(ptr):
+ if ptr is None:
return
- else:
- raise RuntimeError('unexpected error')
-
-def _create_from_ptr(ptr):
- if ptr is None or ptr == native_bt.value_null:
+ # bt_value_null is translated to None. However, we are given a reference
+ # to it that we are not going to manage anymore, since we don't create a
+ # Python wrapper for it. Therefore put that reference immediately.
+ if ptr == native_bt.value_null:
+ _Value._put_ref(ptr)
return
typeid = native_bt.value_get_type(ptr)
if isinstance(value, collections.abc.Mapping):
return MapValue(value)
- raise TypeError("cannot create value object from '{}' object".format(value.__class__.__name__))
+ raise TypeError(
+ "cannot create value object from '{}' object".format(value.__class__.__name__)
+ )
class _Value(object._SharedObject, metaclass=abc.ABCMeta):
def __ne__(self, other):
return not (self == other)
- def _handle_status(self, status):
- _handle_status(status, self._NAME)
-
def _check_create_status(self, ptr):
if ptr is None:
- raise bt2.CreationError(
- 'cannot create {} value object'.format(self._NAME.lower()))
+ raise bt2._MemoryError(
+ 'cannot create {} value object'.format(self._NAME.lower())
+ )
@functools.total_ordering
if isinstance(other, numbers.Complex):
return complex(other)
- raise TypeError("'{}' object is not a number object".format(other.__class__.__name__))
+ raise TypeError(
+ "'{}' object is not a number object".format(other.__class__.__name__)
+ )
def __int__(self):
return int(self._value)
value = value._value
if not isinstance(value, bool):
- raise TypeError("'{}' object is not a 'bool' or 'BoolValue' object".format(value.__class__))
+ raise TypeError(
+ "'{}' object is not a 'bool' or 'BoolValue' object".format(
+ value.__class__
+ )
+ )
return value
class UnsignedIntegerValue(_IntegerValue):
_check_int_range = staticmethod(utils._check_uint64)
- _create_default_value = staticmethod(native_bt.value_unsigned_integer_create)
- _create_value = staticmethod(native_bt.value_unsigned_integer_create_init)
- _set_value = staticmethod(native_bt.value_unsigned_integer_set)
- _get_value = staticmethod(native_bt.value_unsigned_integer_get)
+ _create_default_value = staticmethod(native_bt.value_integer_unsigned_create)
+ _create_value = staticmethod(native_bt.value_integer_unsigned_create_init)
+ _set_value = staticmethod(native_bt.value_integer_unsigned_set)
+ _get_value = staticmethod(native_bt.value_integer_unsigned_get)
class SignedIntegerValue(_IntegerValue):
_check_int_range = staticmethod(utils._check_int64)
- _create_default_value = staticmethod(native_bt.value_signed_integer_create)
- _create_value = staticmethod(native_bt.value_signed_integer_create_init)
- _set_value = staticmethod(native_bt.value_signed_integer_set)
- _get_value = staticmethod(native_bt.value_signed_integer_get)
+ _create_default_value = staticmethod(native_bt.value_integer_signed_create)
+ _create_value = staticmethod(native_bt.value_integer_signed_create_init)
+ _set_value = staticmethod(native_bt.value_integer_signed_set)
+ _get_value = staticmethod(native_bt.value_integer_signed_get)
class RealValue(_RealValue):
def _set_value(self, value):
status = native_bt.value_string_set(self._ptr, self._value_to_str(value))
- self._handle_status(status)
+ utils._handle_func_status(status)
value = property(fset=_set_value)
def __len__(self):
size = native_bt.value_array_get_size(self._ptr)
- assert(size >= 0)
+ assert size >= 0
return size
def _check_index(self, index):
# TODO: support slices also
if not isinstance(index, numbers.Integral):
- raise TypeError("'{}' object is not an integral number object: invalid index".format(index.__class__.__name__))
+ raise TypeError(
+ "'{}' object is not an integral number object: invalid index".format(
+ index.__class__.__name__
+ )
+ )
index = int(index)
def __getitem__(self, index):
self._check_index(index)
ptr = native_bt.value_array_borrow_element_by_index(self._ptr, index)
- assert(ptr)
+ assert ptr
return _create_from_ptr_and_get_ref(ptr)
def __setitem__(self, index, value):
else:
ptr = value._ptr
- status = native_bt.value_array_set_element_by_index(
- self._ptr, index, ptr)
- self._handle_status(status)
+ status = native_bt.value_array_set_element_by_index(self._ptr, index, ptr)
+ utils._handle_func_status(status)
def append(self, value):
value = create_value(value)
ptr = value._ptr
status = native_bt.value_array_append_element(self._ptr, ptr)
- self._handle_status(status)
+ utils._handle_func_status(status)
def __iadd__(self, iterable):
# Python will raise a TypeError if there's anything wrong with
def __len__(self):
size = native_bt.value_map_get_size(self._ptr)
- assert(size >= 0)
+ assert size >= 0
return size
def __contains__(self, key):
def __getitem__(self, key):
self._check_key(key)
ptr = native_bt.value_map_borrow_entry_value(self._ptr, key)
- assert(ptr)
+ assert ptr
return _create_from_ptr_and_get_ref(ptr)
def __iter__(self):
ptr = value._ptr
status = native_bt.value_map_insert_entry(self._ptr, key, ptr)
- self._handle_status(status)
+ utils._handle_func_status(status)
def __repr__(self):
items = ['{}: {}'.format(repr(k), repr(v)) for k, v in self.items()]