跳转到主要内容

Python中的事件溯源

项目描述

Build Status Coverage Status Documentation Status Latest Release Downloads Code Style: Black

Python中的事件溯源

Python中事件溯源的库。

"非常棒,使用起来很愉快"

"非常清晰直观"

"非常有帮助,节省时间"

阅读文档。另请参阅扩展项目

安装

使用pip从Python包索引安装稳定版

$ pip install eventsourcing

请注意,建议将Python包安装到Python虚拟环境中。

摘要

使用Aggregate类和@event装饰器定义聚合。

from eventsourcing.domain import Aggregate, event

class Dog(Aggregate):
    @event('Registered')
    def __init__(self, name):
        self.name = name
        self.tricks = []

    @event('TrickAdded')
    def add_trick(self, trick):
        self.tricks.append(trick)

使用Application类定义应用程序对象。

from eventsourcing.application import Application

class DogSchool(Application):
    def register_dog(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': tuple(dog.tricks)}

编写测试。

def test_dog_school():
    # Construct application object.
    school = DogSchool()

    # Evolve application state.
    dog_id = school.register_dog('Fido')
    school.add_trick(dog_id, 'roll over')
    school.add_trick(dog_id, 'play dead')

    # Query application state.
    dog = school.get_dog(dog_id)
    assert dog['name'] == 'Fido'
    assert dog['tricks'] == ('roll over', 'play dead')

    # Select notifications.
    notifications = school.notification_log.select(start=1, limit=10)
    assert len(notifications) == 3

使用默认持久化模块运行测试。事件使用Python对象存储在内存中。

test_dog_school()

配置应用程序以使用SQLite数据库运行。其他持久化模块可用。

import os

os.environ["PERSISTENCE_MODULE"] = 'eventsourcing.sqlite'
os.environ["SQLITE_DBNAME"] = 'dog-school.db'

使用SQLite运行测试。

test_dog_school()

请参阅文档获取更多信息。

特性

聚合和应用 — 事件源聚合和应用的基础类。建议如何构建事件源应用。所有类都完全类型提示,以指导开发人员使用库。

灵活的事件存储 — 聚合事件的灵活持久化。以易于扩展的方式结合事件映射器和事件记录器。映射器使用可轻松扩展以支持自定义模型对象类型的转码器。支持不同数据库的记录器可以轻松替换,并可通过环境变量进行配置。

应用级加密和压缩 — 在应用内部加密和解密事件。这意味着数据将在网络传输(“在线”)和在磁盘级别(包括备份,“静态”)中进行加密,这在某些司法管辖区处理个人身份信息(PII)时是法律要求,例如欧盟的GDPR。压缩可减少存储的聚合事件和快照的大小,通常可减少约25%至50%的原始大小。压缩可减小数据库中的数据大小,并减少网络传输时间。

快照 — 减少具有许多事件聚合的访问时间。

版本控制 - 允许在应用部署后引入更改。聚合事件和聚合快照都可以进行版本控制。

乐观并发控制 — 确保分布式或水平扩展的应用程序不会因为并发方法执行而变得不一致。利用适配的数据库管理系统中的乐观并发控制。

通知和投影 — 通过基于拉的通告可靠地传播应用程序事件,允许将应用程序状态准确投影到副本、索引、视图模型和其他应用程序。支持物化视图和CQRS。

事件驱动系统 — 可靠的事件处理。事件驱动系统可以独立于特定的持久化基础设施和运行模式进行定义。

详细文档 — 文档提供概述、概念介绍、使用说明和库类的详细描述。所有代码均带有类型提示注释。

示例 — 包括如何开发聚合、应用程序和系统的示例。

扩展

GitHub组织Python事件源托管Python事件源库的扩展项目。有项目适配流行的ORM,如DjangoSQLAlchemy。还有适配专业事件存储的项目,如Axon ServerEventStoreDB。还有支持流行的NoSQL数据库的项目,如DynamoDB。还有使用Web框架(如FastAPIFlask)的示例,以及使用高效进程间通信技术(如gRPC)提供应用程序和服务运行系统的示例。还有事件源应用程序和系统的示例,例如用作Paxos系统基础的复制状态机,该状态机用作分布式键值存储的基础。

项目

该项目托管在GitHub上。

请在GitHub上注册问题、请求和问题,或在项目的Slack频道中发表帖子。

本项目有一个Slack频道,欢迎您加入。

请参阅文档以获取安装和用法指南。

项目详情


发布历史 发布通知 | RSS源

下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

eventsourcing-9.3.2.tar.gz (140.6 kB 查看哈希值)

上传时间

构建分发

eventsourcing-9.3.2-py3-none-any.whl (197.4 kB 查看哈希值)

上传时间 Python 3

支持者