WARNING: This repository is unmaintained
A CQRS and Event Sourcing framework, safe for humans.
- Event Store
- Optimistic concurrency control
- JSON serialization
- SQLAlchemy Projections
- Snapshots [IN PROGRESS]
Kant officially supports Python 3.5-3.6.
Create declarative events
from kant import events
class BankAccountCreated(events.Event):
id = events.CUIDField(primary_key=True)
owner = events.CharField()
class DepositPerformed(events.Event):
amount = events.DecimalField()
Create aggregate to apply events
from kant import aggregates
class BankAccount(aggregates.Aggregate):
id = aggregates.CUIDField()
owner = aggregates.CharField()
balance = aggregates.DecimalField()
def apply_bank_account_created(self, event):
self.id = event.id
self.owner = event.owner
self.balance = 0
def apply_deposit_performed(self, event):
self.balance += event.amount
Now, save the events
from kant.eventstore import connect
await connect(user='user', password='user', database='database')
# create event store for bank_account
conn.create_keyspace('bank_account')
# create events
bank_account_created = BankAccountCreated(
id=123,
owner='John Doe',
)
deposit_performed = DepositPerformed(
amount=20,
)
bank_account = BankAccount()
bank_account.dispatch([bank_account_created, deposit_performed])
bank_account.save()
stored_bank_account = BankAccount.objects.get(123)
To install Kant, simply use pipenv (or pip)
$ pipenv install kant
Please, read the contribute guide CONTRIBUTING.