def test_with_versioned_entity_event(self):
        # Setup the mapper, and create an event.
        mapper = SequencedItemMapper(
            sequenced_item_class=SequencedItem,
            sequence_id_attr_name='originator_id',
            position_attr_name='originator_version'
        )
        entity_id1 = uuid4()
        event1 = Event1(originator_id=entity_id1, originator_version=101)

        # Check to_sequenced_item() method results in a sequenced item.
        sequenced_item = mapper.to_sequenced_item(event1)
        self.assertIsInstance(sequenced_item, SequencedItem)
        self.assertEqual(sequenced_item.position, 101)
        self.assertEqual(sequenced_item.sequence_id, entity_id1)
        self.assertEqual(sequenced_item.topic, topic_from_domain_class(Event1))
        self.assertTrue(sequenced_item.data)

        # Use the returned values to create a new sequenced item.
        sequenced_item_copy = SequencedItem(
            sequence_id=sequenced_item.sequence_id,
            position=sequenced_item.position,
            topic=sequenced_item.topic,
            data=sequenced_item.data,
        )

        # Check from_sequenced_item() returns an event.
        domain_event = mapper.from_sequenced_item(sequenced_item_copy)
        self.assertIsInstance(domain_event, Event1)
        self.assertEqual(domain_event.originator_id, event1.originator_id)
        self.assertEqual(domain_event.originator_version, event1.originator_version)
    def test_with_versioned_entity_event(self):
        # Setup the mapper, and create an event.
        mapper = SequencedItemMapper(sequenced_item_class=SequencedItem,
                                     sequence_id_attr_name='originator_id',
                                     position_attr_name='originator_version')
        entity_id1 = uuid4()
        event1 = Event1(originator_id=entity_id1, originator_version=101)

        # Check to_sequenced_item() method results in a sequenced item.
        sequenced_item = mapper.to_sequenced_item(event1)
        self.assertIsInstance(sequenced_item, SequencedItem)
        self.assertEqual(sequenced_item.position, 101)
        self.assertEqual(sequenced_item.sequence_id, entity_id1)
        self.assertEqual(sequenced_item.topic, topic_from_domain_class(Event1))
        self.assertTrue(sequenced_item.data)

        # Use the returned values to create a new sequenced item.
        sequenced_item_copy = SequencedItem(
            sequence_id=sequenced_item.sequence_id,
            position=sequenced_item.position,
            topic=sequenced_item.topic,
            data=sequenced_item.data,
        )

        # Check from_sequenced_item() returns an event.
        domain_event = mapper.from_sequenced_item(sequenced_item_copy)
        self.assertIsInstance(domain_event, Event1)
        self.assertEqual(domain_event.originator_id, event1.originator_id)
        self.assertEqual(domain_event.originator_version,
                         event1.originator_version)
    def test_with_timestamped_entity_event(self):
        # Setup the mapper, and create an event.
        mapper = SequencedItemMapper(
            sequenced_item_class=SequencedItem,
            sequence_id_attr_name='originator_id',
            position_attr_name='timestamp'
        )
        before = time()
        sleep(0.000001)  # Avoid test failing due to timestamp having limited precision.
        event2 = Event2(originator_id='entity2')
        sleep(0.000001)  # Avoid test failing due to timestamp having limited precision.
        after = time()

        # Check to_sequenced_item() method results in a sequenced item.
        sequenced_item = mapper.to_sequenced_item(event2)
        self.assertIsInstance(sequenced_item, SequencedItem)
        self.assertGreater(sequenced_item.position, before)
        self.assertLess(sequenced_item.position, after)
        self.assertEqual(sequenced_item.sequence_id, 'entity2')
        self.assertEqual(sequenced_item.topic, topic_from_domain_class(Event2))
        self.assertTrue(sequenced_item.data)

        # Use the returned values to create a new sequenced item.
        sequenced_item_copy = SequencedItem(
            sequence_id=sequenced_item.sequence_id,
            position=sequenced_item.position,
            topic=sequenced_item.topic,
            data=sequenced_item.data,
        )

        # Check from_sequenced_item() returns an event.
        domain_event = mapper.from_sequenced_item(sequenced_item_copy)
        self.assertIsInstance(domain_event, Event2)
        self.assertEqual(domain_event.originator_id, event2.originator_id)
        self.assertEqual(domain_event.timestamp, event2.timestamp)
    def test_with_timestamped_entity_event(self):
        # Setup the mapper, and create an event.
        mapper = SequencedItemMapper(
            sequenced_item_class=SequencedItem,
            sequence_id_attr_name="originator_id",
            position_attr_name="timestamp",
        )
        before = decimaltimestamp()
        sleep(0.000001)  # Avoid test failing due to timestamp having limited precision.
        event2 = Event2(originator_id="entity2")
        sleep(0.000001)  # Avoid test failing due to timestamp having limited precision.
        after = decimaltimestamp()

        # Check to_sequenced_item() method results in a sequenced item.
        sequenced_item = mapper.item_from_event(event2)
        self.assertIsInstance(sequenced_item, SequencedItem)
        self.assertGreater(sequenced_item.position, before)
        self.assertLess(sequenced_item.position, after)
        self.assertEqual(sequenced_item.sequence_id, "entity2")
        self.assertEqual(sequenced_item.topic, get_topic(Event2))
        self.assertTrue(sequenced_item.state)

        # Use the returned values to create a new sequenced item.
        sequenced_item_copy = SequencedItem(
            sequence_id=sequenced_item.sequence_id,
            position=sequenced_item.position,
            topic=sequenced_item.topic,
            state=sequenced_item.state,
        )

        # Check from_sequenced_item() returns an event.
        domain_event = mapper.event_from_item(sequenced_item_copy)
        self.assertIsInstance(domain_event, Event2)
        self.assertEqual(domain_event.originator_id, event2.originator_id)
        self.assertEqual(domain_event.timestamp, event2.timestamp)
示例#5
0
    def setUp(self):
        super(WithPersistencePolicies, self).setUp()
        # Setup the persistence subscriber.
        self.entity_event_store = EventStore(
            record_manager=self.entity_record_manager,
            sequenced_item_mapper=SequencedItemMapper(
                sequenced_item_class=SequencedItem,
                sequence_id_attr_name='originator_id',
                position_attr_name='originator_version'
            )
        )
        self.log_event_store = EventStore(
            record_manager=self.log_record_manager,
            sequenced_item_mapper=SequencedItemMapper(
                sequenced_item_class=SequencedItem,
                sequence_id_attr_name='originator_id',
                position_attr_name='timestamp'
            )
        )
        self.snapshot_store = EventStore(
            record_manager=self.snapshot_record_manager,
            sequenced_item_mapper=SequencedItemMapper(
                sequenced_item_class=SequencedItem,
                sequence_id_attr_name='originator_id',
                position_attr_name='originator_version'
            )
        )

        self.integer_sequenced_event_policy = None
        if self.entity_event_store is not None:
            self.integer_sequenced_event_policy = PersistencePolicy(
                event_store=self.entity_event_store,
                event_type=VersionedEntity.Event,
            )

        self.timestamp_sequenced_event_policy = None
        if self.log_event_store is not None:
            self.timestamp_sequenced_event_policy = PersistencePolicy(
                event_store=self.log_event_store,
                event_type=Logged,
            )

        self.snapshot_policy = None
        if self.snapshot_store is not None:
            self.snapshot_policy = PersistencePolicy(
                event_store=self.snapshot_store,
                event_type=Snapshot,
            )
    def test_errors(self):
        # Setup the mapper, and create an event.
        mapper = SequencedItemMapper(sequenced_item_class=SequencedItem,
                                     sequence_id_attr_name='originator_id',
                                     position_attr_name='a')

        # Create an event with dates and datetimes.
        event3 = Event3(
            originator_id='entity3',
            originator_version=303,
            a=Decimal(1.0),
        )

        # Check to_sequenced_item() method results in a sequenced item.
        with self.assertRaises(TypeError):
            mapper.to_sequenced_item(event3)
示例#7
0
def construct_sqlalchemy_eventstore(
    session,
    sequenced_item_class=None,
    sequence_id_attr_name=None,
    position_attr_name=None,
    json_encoder_class=None,
    json_decoder_class=None,
    cipher=None,
    record_class=None,
    contiguous_record_ids=False,
):
    sequenced_item_class = sequenced_item_class or StoredEvent
    sequenced_item_mapper = SequencedItemMapper(
        sequenced_item_class=sequenced_item_class,
        sequence_id_attr_name=sequence_id_attr_name,
        position_attr_name=position_attr_name,
        json_encoder_class=json_encoder_class,
        json_decoder_class=json_decoder_class,
        cipher=cipher,
    )
    factory = SQLAlchemyInfrastructureFactory(
        session=session,
        integer_sequenced_record_class=record_class or StoredEventRecord,
        sequenced_item_class=sequenced_item_class,
        contiguous_record_ids=contiguous_record_ids,
    )
    record_manager = factory.construct_integer_sequenced_record_manager()
    event_store = EventStore(
        record_manager=record_manager,
        sequenced_item_mapper=sequenced_item_mapper,
    )
    return event_store
示例#8
0
def construct_sqlalchemy_eventstore(
    session,
    sequenced_item_class=StoredEvent,
    sequence_id_attr_name=None,
    position_attr_name=None,
    json_encoder_class=ObjectJSONEncoder,
    json_decoder_class=ObjectJSONDecoder,
    always_encrypt=False,
    cipher=None,
    active_record_class=StoredEventRecord,
):
    sequenced_item_mapper = SequencedItemMapper(
        sequenced_item_class=sequenced_item_class,
        sequence_id_attr_name=sequence_id_attr_name,
        position_attr_name=position_attr_name,
        json_encoder_class=json_encoder_class,
        json_decoder_class=json_decoder_class,
        always_encrypt=always_encrypt,
        cipher=cipher,
    )
    active_record_strategy = SQLAlchemyActiveRecordStrategy(
        session=session,
        active_record_class=active_record_class,
        sequenced_item_class=sequenced_item_class,
    )
    event_store = EventStore(
        active_record_strategy=active_record_strategy,
        sequenced_item_mapper=sequenced_item_mapper,
    )
    return event_store
示例#9
0
 def construct_event_store(self):
     event_store = EventStore(record_manager=self.factory.
                              construct_integer_sequenced_record_manager(),
                              sequenced_item_mapper=SequencedItemMapper(
                                  sequenced_item_class=SequencedItem,
                                  sequence_id_attr_name='originator_id',
                                  position_attr_name='originator_version'))
     return event_store
    def test_errors(self):
        # Setup the mapper, and create an event.
        mapper = SequencedItemMapper(
            sequenced_item_class=SequencedItem,
            sequence_id_attr_name='originator_id',
            position_attr_name='a'
        )

        # Create an event with dates and datetimes.
        event3 = Event3(
            originator_id='entity3',
            originator_version=303,
            a=Decimal(1.0),
        )

        # Check to_sequenced_item() method results in a sequenced item.
        with self.assertRaises(TypeError):
            mapper.to_sequenced_item(event3)
    def test_with_different_types_of_event_attributes(self):
        # Setup the mapper, and create an event.
        mapper = SequencedItemMapper(
            sequenced_item_class=SequencedItem,
            sequence_id_attr_name="originator_id",
            position_attr_name="a",
        )

        # Check value objects can be compared ok.
        self.assertEqual(ValueObject1("value1"), ValueObject1("value1"))
        self.assertNotEqual(ValueObject1("value1"), ValueObject1("value2"))

        # Create an event with dates and datetimes.
        event3 = Event3(
            originator_id="entity3",
            originator_version=303,
            a=datetime.datetime(2017, 3, 22, 9, 12, 14),
            b=datetime.date(2017, 3, 22),
            c=uuid4(),
            # d=Decimal(1.1),
            e=ValueObject1("value1"),
        )

        # Check to_sequenced_item() method results in a sequenced item.
        sequenced_item = mapper.item_from_event(event3)

        # Use the returned values to create a new sequenced item.
        sequenced_item_copy = SequencedItem(
            sequence_id=sequenced_item.sequence_id,
            position=sequenced_item.position,
            topic=sequenced_item.topic,
            state=sequenced_item.state,
        )

        # Check from_sequenced_item() returns an event.
        domain_event = mapper.event_from_item(sequenced_item_copy)
        self.assertIsInstance(domain_event, Event3)
        self.assertEqual(domain_event.originator_id, event3.originator_id)
        self.assertEqual(domain_event.a, event3.a)
        self.assertEqual(domain_event.b, event3.b)
        self.assertEqual(domain_event.c, event3.c)
        # self.assertEqual(domain_event.d, event3.d)
        self.assertEqual(domain_event.e, event3.e)
示例#12
0
 def construct_event_store(self):
     event_store = EventStore(
         active_record_strategy=
         construct_integer_sequenced_active_record_strategy(
             datastore=self.datastore, ),
         sequenced_item_mapper=SequencedItemMapper(
             sequenced_item_class=SequencedItem,
             sequence_id_attr_name='originator_id',
             position_attr_name='originator_version'))
     return event_store
示例#13
0
 def setup_event_store(self):
     super(SnapshottingApplication, self).setup_event_store()
     # Setup snapshot store, using datastore session, and SnapshotRecord class.
     # Todo: Refactor this into a new create_sqlalchemy_snapshotstore() function.
     self.snapshot_store = EventStore(
         SQLAlchemyRecordManager(session=self.datastore.session,
                                 record_class=self.snapshot_record_class
                                 or SnapshotRecord),
         SequencedItemMapper(sequence_id_attr_name='originator_id',
                             position_attr_name='originator_version'))
示例#14
0
 def __init__(self):
     self.event_store = EventStore(
         record_manager=CassandraRecordManager(
             record_class=StoredEventRecord,
             sequenced_item_class=StoredEvent),
         event_mapper=SequencedItemMapper(sequenced_item_class=StoredEvent,
                                          other_attr_names=()),
     )
     self.repository = ExampleRepository(event_store=self.event_store)
     self.persistence_policy = PersistencePolicy(
         event_store=self.event_store, persist_event_type=DomainEvent)
示例#15
0
 def construct_event_store(self):
     event_store = EventStore(
         active_record_strategy=
         construct_integer_sequenced_active_record_strategy(
             datastore=self.datastore, ),
         sequenced_item_mapper=SequencedItemMapper(
             sequenced_item_class=SequencedItem,
             event_sequence_id_attr='entity_id',
             event_position_attr='entity_version',
         ))
     return event_store
示例#16
0
def create_event_store(db) -> EventStore:
    record_manager = SQLAlchemyRecordManager(session=db.session,
                                             sequenced_item_class=StoredEvent,
                                             record_class=StoredEventRecord,
                                             application_name="CompanyApp",
                                             contiguous_record_ids=True)
    event_mapper = SequencedItemMapper(sequenced_item_class=StoredEvent,
                                       cipher=cipher)
    event_store = EventStore(record_manager=record_manager,
                             event_mapper=event_mapper)
    return event_store
示例#17
0
 def __init__(self):
     self.event_store = EventStore(
         active_record_strategy=CassandraActiveRecordStrategy(
             active_record_class=StoredEventRecord,
             sequenced_item_class=StoredEvent,
         ),
         sequenced_item_mapper=SequencedItemMapper(
             sequenced_item_class=StoredEvent,
             other_attr_names=(),
         ))
     self.repository = ExampleRepository(event_store=self.event_store, )
     self.persistence_policy = PersistencePolicy(self.event_store)
示例#18
0
 def setUp(self):
     super(WithPersistencePolicy, self).setUp()
     # Setup the persistence subscriber.
     self.versioned_entity_event_store = EventStore(
         active_record_strategy=self.
         integer_sequence_active_record_strategy,
         sequenced_item_mapper=SequencedItemMapper(
             sequenced_item_class=SequencedItem,
             event_sequence_id_attr='entity_id',
             event_position_attr='entity_version'))
     self.timestamped_entity_event_store = EventStore(
         active_record_strategy=self.
         timestamp_sequence_active_record_strategy,
         sequenced_item_mapper=SequencedItemMapper(
             sequenced_item_class=SequencedItem,
             event_sequence_id_attr='entity_id',
             event_position_attr='timestamp'))
     self.persistence_policy = CombinedPersistencePolicy(
         versioned_entity_event_store=self.versioned_entity_event_store,
         timestamped_entity_event_store=self.timestamped_entity_event_store,
     )
示例#19
0
 def construct_sequenced_item_mapper(self, sequenced_item_class, event_sequence_id_attr, event_position_attr,
                                     json_encoder_class=ObjectJSONEncoder, json_decoder_class=ObjectJSONDecoder,
                                     always_encrypt=False, cipher=None):
     return SequencedItemMapper(
         sequenced_item_class=sequenced_item_class,
         sequence_id_attr_name=event_sequence_id_attr,
         position_attr_name=event_position_attr,
         json_encoder_class=json_encoder_class,
         json_decoder_class=json_decoder_class,
         always_encrypt=always_encrypt,
         cipher=cipher
     )
    def test_with_different_types_of_event_attributes(self):
        # Setup the mapper, and create an event.
        mapper = SequencedItemMapper(
            sequenced_item_class=SequencedItem,
            sequence_id_attr_name='originator_id',
            position_attr_name='a'
        )

        # Create an event with dates and datetimes.
        event3 = Event3(
            originator_id='entity3',
            originator_version=303,
            a=datetime.datetime(2017, 3, 22, 9, 12, 14),
            b=datetime.date(2017, 3, 22),
            c=uuid4(),
            # d=Decimal(1.1),
            e=ValueObject1('value1'),
        )

        # Check to_sequenced_item() method results in a sequenced item.
        sequenced_item = mapper.to_sequenced_item(event3)

        # Use the returned values to create a new sequenced item.
        sequenced_item_copy = SequencedItem(
            sequence_id=sequenced_item.sequence_id,
            position=sequenced_item.position,
            topic=sequenced_item.topic,
            data=sequenced_item.data,
        )

        # Check from_sequenced_item() returns an event.
        domain_event = mapper.from_sequenced_item(sequenced_item_copy)
        self.assertIsInstance(domain_event, Event3)
        self.assertEqual(domain_event.originator_id, event3.originator_id)
        self.assertEqual(domain_event.a, event3.a)
        self.assertEqual(domain_event.b, event3.b)
        self.assertEqual(domain_event.c, event3.c)
        # self.assertEqual(domain_event.d, event3.d)
        self.assertEqual(domain_event.e, event3.e)
示例#21
0
 def __init__(self):
     self.event_store = EventStore(
         record_manager=CassandraRecordManager(
             record_class=TimeuuidSequencedRecord,
             sequenced_item_class=SequencedItem),
         event_mapper=SequencedItemMapper(
             sequenced_item_class=SequencedItem,
             sequence_id_attr_name="originator_id",
             position_attr_name="event_id",
         ),
     )
     self.repository = EventSourcedRepository(event_store=self.event_store)
     self.persistence_policy = PersistencePolicy(
         event_store=self.event_store, persist_event_type=DomainEvent)
 def __init__(self, datastore):
     event_store = EventStore(
         record_manager=SQLAlchemyRecordManager(
             session=datastore.session,
             record_class=IntegerSequencedNoIDRecord),
         event_mapper=SequencedItemMapper(
             sequence_id_attr_name="originator_id",
             position_attr_name="originator_version",
         ),
     )
     self.repository = EventSourcedRepository(event_store=event_store)
     self.persistence_policy = PersistencePolicy(
         persist_event_type=ExampleAggregateRoot.Event,
         event_store=event_store)
示例#23
0
 def __init__(self, datastore):
     self.event_store = EventStore(
         active_record_strategy=SQLAlchemyActiveRecordStrategy(
             datastore=datastore,
             active_record_class=SqlStoredEvent,
             sequenced_item_class=StoredEvent,
         ),
         sequenced_item_mapper=SequencedItemMapper(
             sequenced_item_class=StoredEvent,
             event_sequence_id_attr='entity_id',
             event_position_attr='entity_version',
         ))
     self.repository = ExampleRepository(event_store=self.event_store, )
     self.persistence_policy = PersistencePolicy(self.event_store)
 def __init__(self, session):
     self.event_store = EventStore(
         record_manager=SQLAlchemyRecordManager(
             session=session,
             record_class=StoredEventRecord,
             sequenced_item_class=StoredEvent,
         ),
         sequenced_item_mapper=SequencedItemMapper(
             sequenced_item_class=StoredEvent,
             sequence_id_attr_name='originator_id',
             position_attr_name='originator_version',
         ))
     self.repository = ExampleRepository(event_store=self.event_store, )
     self.persistence_policy = PersistencePolicy(self.event_store)
    def test_with_different_types_of_event_attributes(self):
        # Setup the mapper, and create an event.
        mapper = SequencedItemMapper(sequenced_item_class=SequencedItem,
                                     sequence_id_attr_name='originator_id',
                                     position_attr_name='a')

        # Create an event with dates and datetimes.
        event3 = Event3(
            originator_id='entity3',
            originator_version=303,
            a=datetime.datetime(2017, 3, 22, 9, 12, 14),
            b=datetime.date(2017, 3, 22),
            c=uuid4(),
            # d=Decimal(1.1),
            e=ValueObject1('value1'),
        )

        # Check to_sequenced_item() method results in a sequenced item.
        sequenced_item = mapper.to_sequenced_item(event3)

        # Use the returned values to create a new sequenced item.
        sequenced_item_copy = SequencedItem(
            sequence_id=sequenced_item.sequence_id,
            position=sequenced_item.position,
            topic=sequenced_item.topic,
            data=sequenced_item.data,
        )

        # Check from_sequenced_item() returns an event.
        domain_event = mapper.from_sequenced_item(sequenced_item_copy)
        self.assertIsInstance(domain_event, Event3)
        self.assertEqual(domain_event.originator_id, event3.originator_id)
        self.assertEqual(domain_event.a, event3.a)
        self.assertEqual(domain_event.b, event3.b)
        self.assertEqual(domain_event.c, event3.c)
        # self.assertEqual(domain_event.d, event3.d)
        self.assertEqual(domain_event.e, event3.e)
    def test_with_timestamped_entity_event(self):
        # Setup the mapper, and create an event.
        mapper = SequencedItemMapper(sequenced_item_class=SequencedItem,
                                     sequence_id_attr_name='originator_id',
                                     position_attr_name='timestamp')
        before = time()
        sleep(
            0.000001
        )  # Avoid test failing due to timestamp having limited precision.
        event2 = Event2(originator_id='entity2')
        sleep(
            0.000001
        )  # Avoid test failing due to timestamp having limited precision.
        after = time()

        # Check to_sequenced_item() method results in a sequenced item.
        sequenced_item = mapper.to_sequenced_item(event2)
        self.assertIsInstance(sequenced_item, SequencedItem)
        self.assertGreater(sequenced_item.position, before)
        self.assertLess(sequenced_item.position, after)
        self.assertEqual(sequenced_item.sequence_id, 'entity2')
        self.assertEqual(sequenced_item.topic, topic_from_domain_class(Event2))
        self.assertTrue(sequenced_item.data)

        # Use the returned values to create a new sequenced item.
        sequenced_item_copy = SequencedItem(
            sequence_id=sequenced_item.sequence_id,
            position=sequenced_item.position,
            topic=sequenced_item.topic,
            data=sequenced_item.data,
        )

        # Check from_sequenced_item() returns an event.
        domain_event = mapper.from_sequenced_item(sequenced_item_copy)
        self.assertIsInstance(domain_event, Event2)
        self.assertEqual(domain_event.originator_id, event2.originator_id)
        self.assertEqual(domain_event.timestamp, event2.timestamp)
示例#27
0
    def setUp(self):
        assert_event_handlers_empty()
        super(TestEventPlayer, self).setUp()

        self.datastore.setup_connection()
        self.datastore.setup_tables()

        # Setup an event store for version entity events.
        self.version_entity_event_store = EventStore(
            active_record_strategy=SQLAlchemyActiveRecordStrategy(
                datastore=self.datastore,
                active_record_class=SqlIntegerSequencedItem,
                sequenced_item_class=SequencedItem,
            ),
            sequenced_item_mapper=SequencedItemMapper(
                sequenced_item_class=SequencedItem,
                event_sequence_id_attr='entity_id',
                event_position_attr='entity_version',
            ),
        )

        # Setup an event store for timestamp entity events.
        self.timestamp_entity_event_store = EventStore(
            active_record_strategy=SQLAlchemyActiveRecordStrategy(
                datastore=self.datastore,
                active_record_class=SqlTimestampSequencedItem,
                sequenced_item_class=SequencedItem,
            ),
            sequenced_item_mapper=SequencedItemMapper(
                sequenced_item_class=SequencedItem,
                event_sequence_id_attr='entity_id',
                event_position_attr='timestamp',
            ),
        )

        self.policy = None
示例#28
0
    def setUp(self):
        assert_event_handlers_empty()
        super(TestEventPlayer, self).setUp()

        self.datastore.setup_connection()
        self.datastore.setup_tables()

        # Setup an event store for versioned entity events.
        self.entity_event_store = EventStore(
            active_record_strategy=SQLAlchemyActiveRecordStrategy(
                session=self.datastore.session,
                active_record_class=IntegerSequencedItemRecord,
                sequenced_item_class=SequencedItem,
            ),
            sequenced_item_mapper=SequencedItemMapper(
                sequenced_item_class=SequencedItem,
                sequence_id_attr_name='originator_id',
                position_attr_name='originator_version',
            ),
        )

        # Setup an event store for snapshots.
        self.snapshot_store = EventStore(
            active_record_strategy=SQLAlchemyActiveRecordStrategy(
                session=self.datastore.session,
                active_record_class=SnapshotRecord,
                sequenced_item_class=SequencedItem,
            ),
            sequenced_item_mapper=SequencedItemMapper(
                sequenced_item_class=SequencedItem,
                sequence_id_attr_name='originator_id',
                position_attr_name='originator_version',
            ),
        )
        self.entity_persistence_policy = None
        self.snapshot_persistence_policy = None
 def __init__(self):
     self.event_store = EventStore(
         record_manager=CassandraRecordManager(
             record_class=TimeuuidSequencedRecord,
             sequenced_item_class=SequencedItem,
         ),
         sequenced_item_mapper=SequencedItemMapper(
             sequenced_item_class=SequencedItem,
             sequence_id_attr_name='originator_id',
             position_attr_name='event_id',
         )
     )
     self.repository = EventSourcedRepository(
         event_store=self.event_store,
     )
     self.persistence_policy = PersistencePolicy(self.event_store)
 def __init__(self, datastore):
     event_store = EventStore(
         record_manager=SQLAlchemyRecordManager(
             session=datastore.session, record_class=IntegerSequencedNoIDRecord
         ),
         event_mapper=SequencedItemMapper(
             sequence_id_attr_name="originator_id",
             position_attr_name="originator_version",
         ),
     )
     # Todo: Remove having two repositories, because they are identical.
     self.aggregate1_repository = AggregateRepository(event_store=event_store)
     self.aggregate2_repository = AggregateRepository(event_store=event_store)
     self.persistence_policy = PersistencePolicy(
         persist_event_type=ExampleAggregateRoot.Event, event_store=event_store
     )
 def __init__(self):
     self.event_store = EventStore(
         active_record_strategy=CassandraActiveRecordStrategy(
             active_record_class=CqlTimeuuidSequencedItem,
             sequenced_item_class=SequencedItem,
         ),
         sequenced_item_mapper=SequencedItemMapper(
             sequenced_item_class=SequencedItem,
             event_sequence_id_attr='entity_id',
             event_position_attr='event_id',
         ))
     self.repository = EventSourcedRepository(
         mutator=ExampleEntity.mutate,
         event_store=self.event_store,
     )
     self.persistence_policy = PersistencePolicy(self.event_store)
示例#32
0
 def __init__(self, datastore):
     event_store = EventStore(record_manager=SQLAlchemyRecordManager(
         session=datastore.session,
         record_class=IntegerSequencedNoIDRecord,
     ),
                              sequenced_item_mapper=SequencedItemMapper(
                                  sequence_id_attr_name='originator_id',
                                  position_attr_name='originator_version',
                              ))
     self.aggregate1_repository = AggregateRepository(
         event_store=event_store, )
     self.aggregate2_repository = AggregateRepository(
         event_store=event_store, )
     self.persistence_policy = PersistencePolicy(
         event_type=ExampleAggregateRoot.Event,
         event_store=event_store,
     )
示例#33
0
 def __init__(self, datastore):
     event_store = EventStore(
         active_record_strategy=SQLAlchemyActiveRecordStrategy(
             session=datastore.session,
             active_record_class=IntegerSequencedItemRecord,
         ),
         sequenced_item_mapper=SequencedItemMapper(
             sequence_id_attr_name='originator_id',
             position_attr_name='originator_version',
         ))
     self.aggregate_repository = EventSourcedRepository(
         mutator=ExampleAggregateRoot._mutate,
         event_store=event_store,
     )
     self.persistence_policy = PersistencePolicy(
         event_type=ExampleAggregateRoot.Event,
         event_store=event_store,
     )
示例#34
0
import uuid
from eventsourcing.infrastructure.sequenceditemmapper import SequencedItemMapper
from eventsourcing.infrastructure.eventsourcedrepository import EventSourcedRepository
from eventsourcing.infrastructure.eventstore import EventStore
from eventsourcing.infrastructure.sequenceditem import StoredEvent
from eventsourcing.infrastructure.sqlalchemy.datastore import SQLAlchemyDatastore, SQLAlchemySettings
from eventsourcing.infrastructure.sqlalchemy.manager import SQLAlchemyRecordManager
from eventsourcing.infrastructure.sqlalchemy.records import StoredEventRecord

datastore = SQLAlchemyDatastore(
    tables=(StoredEventRecord, ),
    settings=SQLAlchemySettings(uri='sqlite:///mydatabase'))

datastore.setup_connection()
datastore.setup_tables()

recordmanager = SQLAlchemyRecordManager(session=datastore.session,
                                        record_class=StoredEventRecord,
                                        application_name=uuid.uuid4().hex,
                                        contiguous_record_ids=True,
                                        sequenced_item_class=StoredEvent)

sequenceitemmapper = SequencedItemMapper(sequenced_item_class=StoredEvent)

eventstore = EventStore(record_manager=recordmanager,
                        sequenced_item_mapper=sequenceitemmapper)

repository = EventSourcedRepository(event_store=eventstore)