用于EventStoreDB的事件源Python包
项目描述
使用EventStoreDB的Python事件源
这是Python eventsourcing库的一个扩展包,它提供了一个用于EventStoreDB的持久化模块。它使用esdbclient包通过其gRPC接口与EventStoreDB进行通信。
安装
使用pip从Python包索引安装稳定发行版。
$ pip install eventsourcing-eventstoredb
请注意,建议将Python包安装到Python虚拟环境中。
入门
按照常规方式定义聚合和应用程序。请注意,EventStoreDB中的“流”被限制为从位置0
开始,此包期望聚合序列中的第一个事件的originator_version
为0
,因此您必须将聚合类的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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ac5831ab61a4f6e9e1dae2662375730e932bb3437d295c2e30af8d412031b7b0 |
|
MD5 | f1dd6972864d52e3a6dd176efeac0e6d |
|
BLAKE2b-256 | 44304bc0ad74bd931bb85d1c41d11cc6433d744d02b701f541f612a202c08d11 |
eventsourcing_eventstoredb-1.1.1-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e57e51987f9bb591c802ed3e51697498d66ecf003c7790878e0306057d6c69c4 |
|
MD5 | a0b7442a36f121c2011204c7baa82945 |
|
BLAKE2b-256 | 2a15b6771e4303e75f1f155b971cc798e3d9dd5a25990633d9b416e14343408d |