Source code for aioriak.datatypes.counter

from . import TYPES
from .datatype import Datatype


[docs]class Counter(Datatype): ''' A convergent datatype that represents a counter which can be incremented or decremented. This type can stand on its own or be embedded within a :class:`~riak.datatypes.Map`. ''' type_name = 'counter' _type_error_msg = 'Counters can only be integers' def _post_init(self): self._increment = 0 def _default_value(self): return 0 @Datatype.modified.getter def modified(self): ''' Whether this counter has staged increments. ''' return self._increment is not 0 def to_op(self): ''' Extracts the mutation operation from the counter :rtype: int, None ''' if not self._increment == 0: return ('increment', self._increment)
[docs] def increment(self, amount=1): ''' Increments the counter by one or the given amount. :param amount: the amount to increment the counter :type amount: int ''' self._raise_if_badtype(amount) self._increment += amount
[docs] def decrement(self, amount=1): ''' Decrements the counter by one or the given amount. :param amount: the amount to decrement the counter :type amount: int ''' self._raise_if_badtype(amount) self._increment -= amount
def _check_type(self, new_value): return isinstance(new_value, int)
TYPES['counter'] = Counter