X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=bindings%2Fpython%2Fbt2%2Fbt2%2Ffields.py;h=9871bce88e6e847007e358c4836ebaf281396cff;hb=5602ef8155de326402dcb33f40ee4c7d5d693ca5;hp=c79bb8996508f9dfb8f7b53066e617facd117fe4;hpb=ac7e2dc617360c61ee46cc1b3dd275d1d00aae03;p=babeltrace.git diff --git a/bindings/python/bt2/bt2/fields.py b/bindings/python/bt2/bt2/fields.py index c79bb899..9871bce8 100644 --- a/bindings/python/bt2/bt2/fields.py +++ b/bindings/python/bt2/bt2/fields.py @@ -85,6 +85,12 @@ class _Field(object._Object, metaclass=abc.ABCMeta): ret = native_bt.field_reset(self._ptr) utils._handle_ret(ret, "cannot reset field object's value") + def _repr(self): + raise NotImplementedError + + def __repr__(self): + return self._repr() if self.is_set else 'Unset' + @functools.total_ordering class _NumericField(_Field): @@ -110,8 +116,8 @@ class _NumericField(_Field): def __float__(self): return float(self._value) - def __str__(self): - return str(self._value) + def _repr(self): + return repr(self._value) def __lt__(self, other): if not isinstance(other, numbers.Number): @@ -366,7 +372,7 @@ class _EnumerationField(_IntegerField): def _set_value(self, value): self.integer_field.value = value - def __repr__(self): + def _repr(self): labels = [repr(v.name) for v in self.mappings] return '{} ({})'.format(self._value, ', '.join(labels)) @@ -426,8 +432,11 @@ class _StringField(_Field, collections.abc.Sequence): def __bool__(self): return bool(self._value) + def _repr(self): + return repr(self._value) + def __str__(self): - return self._value + return self._value if self.is_set else repr(self) def __getitem__(self, index): return self._value[index] @@ -526,7 +535,7 @@ class _StructureField(_ContainerField, collections.abc.MutableMapping): value = property(fset=_set_value) - def __repr__(self): + def _repr(self): items = ['{}: {}'.format(repr(k), repr(v)) for k, v in self.items()] return '{{{}}}'.format(', '.join(items)) @@ -566,6 +575,12 @@ class _VariantField(_Field): def __bool__(self): return bool(self.selected_field) + def __str__(self): + return str(self.selected_field) if self.is_set else repr(self) + + def _repr(self): + return repr(self.selected_field) + @property def _value(self): if self.selected_field is not None: @@ -626,6 +641,9 @@ class _ArraySequenceField(_ContainerField, collections.abc.MutableSequence): def _value(self): return [field._value for field in self] + def _repr(self): + return '[{}]'.format(', '.join([repr(v) for v in self])) + class _ArrayField(_ArraySequenceField): _NAME = 'Array' @@ -707,12 +725,4 @@ class _SequenceField(_ArraySequenceField): _TYPE_ID_TO_OBJ = { - native_bt.FIELD_TYPE_ID_INTEGER: _IntegerField, - native_bt.FIELD_TYPE_ID_FLOAT: _FloatingPointNumberField, - native_bt.FIELD_TYPE_ID_ENUM: _EnumerationField, - native_bt.FIELD_TYPE_ID_STRING: _StringField, - native_bt.FIELD_TYPE_ID_STRUCT: _StructureField, - native_bt.FIELD_TYPE_ID_ARRAY: _ArrayField, - native_bt.FIELD_TYPE_ID_SEQUENCE: _SequenceField, - native_bt.FIELD_TYPE_ID_VARIANT: _VariantField, }