Python package for eventsourcing with EventStoreDB
Project description
Event Sourcing in Python with EventStoreDB
This is an extension package for the Python eventsourcing library that provides a persistence module for EventStoreDB. It uses the esdbclient package to communicate with EventStoreDB via its gRPC interface.
Installation
Use pip to install the stable distribution from the Python Package Index.
$ pip install eventsourcing-eventstoredb
Please note, it is recommended to install Python packages into a Python virtual environment.
Getting started
Define aggregates and applications in the usual way. Please note, aggregate
sequences in EventStoreDB start from position 0
, so set INITIAL_VERSION
on your aggregate classes accordingly.
from eventsourcing.application import Application
from eventsourcing.domain import Aggregate, event
class TrainingSchool(Application):
def register(self, name):
dog = Dog(name)
self.save(dog)
return dog.id
def add_trick(self, dog_id, trick):
dog = self.repository.get(dog_id)
dog.add_trick(trick)
self.save(dog)
def get_dog(self, dog_id):
dog = self.repository.get(dog_id)
return {'name': dog.name, 'tricks': list(dog.tricks)}
class Dog(Aggregate):
INITIAL_VERSION = 0
@event('Registered')
def __init__(self, name):
self.name = name
self.tricks = []
@event('TrickAdded')
def add_trick(self, trick):
self.tricks.append(trick)
Configure the application to use EventStoreDB. Set environment variable
PERSISTENCE_MODULE
to 'eventsourcing_eventstoredb'
, and set
EVENTSTOREDB_URI
to the host and port of your EventStoreDB.
school = TrainingSchool(env={
'PERSISTENCE_MODULE': 'eventsourcing_eventstoredb',
'EVENTSTOREDB_URI': 'localhost:2113',
})
NB: SSL/TLS not yet supported: In case you are running against a cluster, or want to use SSL/TLS certificates, you can specify these things in the URI.
'EVENTSTOREDB_URI': 'esdb://localhost:2111,localhost:2112,localhost:2113?tls&rootCertificate=./certs/ca/ca.crt'
Call application methods from tests and user interfaces.
dog_id = school.register('Fido')
school.add_trick(dog_id, 'roll over')
school.add_trick(dog_id, 'play dead')
dog_details = school.get_dog(dog_id)
assert dog_details['name'] == 'Fido'
assert dog_details['tricks'] == ['roll over', 'play dead']
To see the events have been saved, we can reconstruct the application and get Fido's details again.
school = TrainingSchool(env={
'PERSISTENCE_MODULE': 'eventsourcing_eventstoredb',
'EVENTSTOREDB_URI': 'localhost:2113',
})
dog_details = school.get_dog(dog_id)
assert dog_details['name'] == 'Fido'
assert dog_details['tricks'] == ['roll over', 'play dead']
For more information, please refer to the Python eventsourcing library and the EventStoreDB project.
Developers
Clone the eventsourcing-eventstoredb
repository, set up a virtual
environment, and install dependencies.
Use your IDE (e.g. PyCharm) to open the project repository. Create a Poetry virtual environment, and then update packages.
$ make update-packages
Alternatively, use the make install
command to create a dedicated
Python virtual environment for this project.
$ make install
Start EventStoreDB.
$ make start-eventstoredb
Run tests.
$ make test
Add tests in ./tests
. Add code in ./eventsourcing_eventstoredb
.
Check the formatting of the code.
$ make lint
Reformat the code.
$ make fmt
Add dependencies in pyproject.toml
and then update installed packages.
$ make update-packages
Stop EventStoreDB.
$ make stop-eventstoredb
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for eventsourcing-eventstoredb-0.3.3.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 981402463c367626ff3f69b0a378fb1984d3bc269ee56dfe3f23448411fb2198 |
|
MD5 | 9c1f1f8952ebfdef5a02a45820ce1719 |
|
BLAKE2b-256 | c841dbe6be8ece8037a848180700a97db013f0ec466e89a9ef46caec9e947ea5 |
Hashes for eventsourcing_eventstoredb-0.3.3-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9946207b9dd4a8431cd04e5ad1d14545b4baced6038d6c9883f5d74200dcb33d |
|
MD5 | db8f4c67a8f072883abe2a5a5720f319 |
|
BLAKE2b-256 | a33e64df25c8dc1cac474ec22933fef9ef9db7b130da928459531606d2e94c11 |