Python package for eventsourcing with EventStoreDB
Project description
Event Sourcing in Python with EventStoreDB
This package supports using the Python eventsourcing library with 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"
The application's methods may be then called, 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']
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
File details
Details for the file eventsourcing-eventstoredb-0.2.2.tar.gz
.
File metadata
- Download URL: eventsourcing-eventstoredb-0.2.2.tar.gz
- Upload date:
- Size: 7.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.13 CPython/3.10.4 Darwin/19.6.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8c55cbd9f48512866121512d0198606891c930031fe2891dae17c78bcdf1b10a |
|
MD5 | b3ec2c2a70a772ac815c6430b7af8556 |
|
BLAKE2b-256 | dd3fcb4f7aa320c1db558baf69f3fe291e57e2b4c59e1cd7b2a37252bcae039c |
File details
Details for the file eventsourcing_eventstoredb-0.2.2-py3-none-any.whl
.
File metadata
- Download URL: eventsourcing_eventstoredb-0.2.2-py3-none-any.whl
- Upload date:
- Size: 6.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.13 CPython/3.10.4 Darwin/19.6.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5e3994834455a089b13e67db6ad301e55021c6ef1f0b85ca8dc28960d2cf72de |
|
MD5 | cf4c66698dd31d1b5c9fcd0d69a46f06 |
|
BLAKE2b-256 | 65422d8dd3acb4b23e8b45eb2f0b1dbf80590367b43949c0984322eb4dbe92a5 |