Source code for eventsourcing.infrastructure.activerecord

from abc import ABCMeta, abstractmethod

import six

from eventsourcing.exceptions import SequencedItemError
from eventsourcing.infrastructure.sequenceditem import SequencedItem, SequencedItemFieldNames


[docs]class AbstractActiveRecordStrategy(six.with_metaclass(ABCMeta)): def __init__(self, active_record_class, sequenced_item_class=SequencedItem): self.active_record_class = active_record_class self.sequenced_item_class = sequenced_item_class self.field_names = SequencedItemFieldNames(self.sequenced_item_class)
[docs] @abstractmethod def append(self, sequenced_item_or_items): """ Writes sequenced item into the datastore. """
[docs] @abstractmethod def get_item(self, sequence_id, eq): """ Reads sequenced item from the datastore. """
[docs] @abstractmethod def get_items(self, sequence_id, gt=None, gte=None, lt=None, lte=None, limit=None, query_ascending=True, results_ascending=True): """ Reads sequenced items from the datastore. """
[docs] @abstractmethod def all_items(self): """ Returns all stored items from all sequences (possibly in chronological order, depending on database). """
[docs] @abstractmethod def all_records(self, resume=None, *arg, **kwargs): """ Returns all records in the table (possibly in chronological order, depending on database). """
[docs] @abstractmethod def delete_record(self, record): """ Removes permanently given record from the table. """
[docs] def get_field_kwargs(self, item): return {name: getattr(item, name) for name in self.field_names}
[docs] def raise_sequenced_item_error(self, sequenced_item, e): sequenced_item = sequenced_item[0] if isinstance(sequenced_item, list) else sequenced_item raise SequencedItemError("Item at position '{}' already exists in sequence '{}': {}" "".format(sequenced_item[1], sequenced_item[0], e))
[docs] def raise_index_error(self, eq): raise IndexError("Sequence index out of range: {}".format(eq))