跳转到主要内容

用于EventStoreDB的事件源Python包

项目描述

使用EventStoreDB的Python事件源

这是Python eventsourcing库的一个扩展包,它提供了一个用于EventStoreDB的持久化模块。它使用esdbclient包通过其gRPC接口与EventStoreDB进行通信。

安装

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

$ pip install eventsourcing-eventstoredb

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

入门

按照常规方式定义聚合和应用程序。请注意,EventStoreDB中的“流”被限制为从位置0开始,此包期望聚合序列中的第一个事件的originator_version0,因此您必须将聚合类的INITIAL_VERSION设置为0

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  # for EventStoreDB

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

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

通过设置应用程序环境变量PERSISTENCE_MODULE'eventsourcing_eventstoredb'来配置应用程序以使用EventStoreDB。您可以在实际环境变量中这样做,通过在构建应用程序对象时传递env参数,或者在应用程序类上设置env

import os

os.environ['PERSISTENCE_MODULE'] = 'eventsourcing_eventstoredb'

还设置环境变量EVENTSTOREDB_URI并为其提供一个EventStoreDB连接字符串URI。此值将用作此包构建ESDBClient类时的uri参数。

os.environ['EVENTSTOREDB_URI'] = 'esdb://localhost:2113?Tls=false'

如果您正在连接到一个“安全”的EventStoreDB服务器,除非用于生成服务器证书的证书颁发机构的根证书已安装在本地,否则还需要设置环境变量EVENTSTOREDB_ROOT_CERTIFICATES为适用于与EventStoreDB服务器(们)建立安全gRPC连接的SSL/TLS证书。此值将在使用此包构建ESDBClient类时用作root_certificates参数。

os.environ['EVENTSTOREDB_ROOT_CERTIFICATES'] = '<PEM encoded SSL/TLS root certificates>'

有关启动“安全”或“非安全”EventStoreDB服务器、esdb和esdb+discover EventStoreDB连接字符串URI方案以及如何获取用于连接到“安全”EventStoreDB服务器的客户端的合适SSL/TLS证书的详细信息,请参阅esdbclient文档。

构建应用程序。

school = TrainingSchool()

从测试和用户界面调用应用程序方法。

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']

为了查看事件是否已保存,我们可以重新构建应用程序并再次获取Fido的详细信息。

school = TrainingSchool()

dog_details = school.get_dog(dog_id)

assert dog_details['name'] == 'Fido'
assert dog_details['tricks'] == ['roll over', 'play dead']

有关更多信息,请参阅Python的eventsourcing库、Python的esdbclient包以及EventStoreDB项目。

贡献者

安装Poetry

首先要确认您已安装Poetry。

$ poetry --version

如果没有,请安装Poetry

这有助于确保Poetry的bin目录在您的PATH环境变量中。

但无论如何,确保您知道poetry可执行文件的位置。Poetry安装程序会告诉您它已安装的位置以及如何配置您的shell。

请参阅Poetry文档以获取有关使用Poetry的指导。

PyCharm用户设置

您可以使用PyCharm轻松获取项目文件(菜单“Git > Clone...”)。然后,PyCharm通常会提示您打开项目。

在新窗口中打开项目。PyCharm通常会提示您创建新的虚拟环境。

为项目创建新的Poetry虚拟环境。如果PyCharm不知道您的poetry可执行文件的位置,请在“新建Poetry环境”表单中,将“Poetry可执行文件”标签下的路径设置为您的poetry可执行文件路径。在“新建Poetry环境”表单中,您还可以选择虚拟环境将使用的Python可执行文件。

PyCharm将为项目创建一个新的Poetry虚拟环境,使用特定的Python版本,并在此虚拟环境中根据pyproject.toml文件或项目中存在的poetry.lock文件安装项目的包依赖项。

您可以为不同的Python版本添加不同的Poetry环境,并使用PyCharm的“Python解释器”设置在它们之间切换。如果您想使用未安装的Python版本,请使用您喜欢的包管理器,或者直接从Python网站下载Python安装程序的最新版本进行安装。

一旦安装了项目依赖项,您应该能够在PyCharm中运行测试(在tests文件夹上右键单击并选择“运行”选项)。

由于pytest与PyCharm的调试器和覆盖率工具之间存在冲突,您可能需要在测试运行器模板中添加--no-cov选项。或者,只需使用Python标准库的unittest模块。

您还应该在PyCharm中打开一个终端窗口,并从命令行运行项目的Makefile命令(见下文)。

命令行设置

使用Git或合适的替代方案获取项目文件。

在终端应用程序中,将当前工作目录更改为项目文件根目录。该目录中应有一个Makefile。

使用Makefile创建一个新的Poetry虚拟环境,并将项目的包依赖项安装到其中,可以使用以下命令。

$ make install-packages

也可以以“可编辑模式”安装项目。

$ make install

请注意,如果您以这种方式创建虚拟环境,然后尝试在PyCharm中打开项目并将项目配置为使用此虚拟环境作为“现有Poetry环境”,PyCharm有时会出现一些问题(不知道为什么),这可能会引起问题。如果您遇到此类问题,可以通过删除虚拟环境并使用PyCharm(见上文)创建Poetry虚拟环境来解决这些问题。

项目Makefile命令

您可以使用以下命令启动EventStoreDB。

$ make start-eventstoredb

您可以使用以下命令运行测试(需要EventStoreDB正在运行)。

$ make test

您可以使用以下命令停止EventStoreDB。

$ make stop-eventstoredb

您可以使用以下命令检查代码格式。

$ make lint

您可以使用以下命令重新格式化代码。

$ make fmt

测试属于./tests。待测试代码属于./eventsourcing_eventstoredb

pyproject.toml中编辑包依赖项。使用以下命令更新已安装的包(以及poetry.lock文件)。

$ make update-packages

项目详情


下载文件

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

源分布

eventsourcing_eventstoredb-1.1.1.tar.gz (10.9 kB 查看哈希值)

上传时间

构建分布

eventsourcing_eventstoredb-1.1.1-py3-none-any.whl (9.0 kB 查看哈希值)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页