Source code for aioriak.datatypes.register

from collections import Sized
from aioriak.datatypes.datatype import Datatype
from aioriak.datatypes import TYPES


[docs]class Register(Sized, Datatype): ''' A convergent datatype that represents an opaque string that is set with last-write-wins semantics, and may only be embedded in :class:`~aioriak.datatypes.Map` instances. ''' type_name = 'register' _type_error_msg = 'Registers can only be strings' def _post_init(self): self._new_value = None def _default_value(self): return '' @Datatype.value.getter def value(self): ''' Returns a copy of the original value of the register. :rtype: str ''' return self._value[:] @Datatype.modified.getter def modified(self): ''' Whether this register has staged assignment. ''' return self._new_value is not None def to_op(self): ''' Extracts the mutation operation from the register. :rtype: str, None ''' if self._new_value is not None: return ('assign', self._new_value)
[docs] def assign(self, new_value): ''' Assigns a new value to the register. :param new_value: the new value for the register :type new_value: str ''' self._raise_if_badtype(new_value) self._new_value = new_value
def __len__(self): return len(self.value) def _check_type(self, new_value): return isinstance(new_value, str)
TYPES['register'] = Register