A high-performance, simple-structured event system, relies on asyncio
Project description
Letoderea
一个高性能,结构简洁,依赖于 Python内置库asyncio
的事件系统, 设计灵感来自Graia BroadcastControl
。
项目仍处于开发阶段,部分内容可能会有较大改变
安装
从 PyPI 安装
pip install arclet-letoderea
样例
from arclet.letoderea import EventSystem, Contexts
es = EventSystem()
class TestEvent:
async def gather(self, context: Contexts):
context["name"] = "Letoderea"
@es.on(TestEvent)
async def test_subscriber(name: str):
print(name)
es.loop.run_until_complete(es.publish(TestEvent()))
特性
事件
- 事件可以是任何对象,只要实现了
gather
异步方法 gather
方法的参数为Contexts
类型,用于传递上下文信息- 事件可以通过
gather
方法将自身想要传递的信息整合进Contexts
中 - 事件系统支持直接查找属性, 例如
Event.name
可以直接注入进foo(name: str)
的参数中 - 事件可以携带
Provider
与Auxiliary
,它们会在事件被订阅时注入到订阅者中
订阅
- 通过
EventSystem.on
或subscribe
装饰器可以将一个函数注册为事件的订阅者 - 订阅者的参数可以是任何类型,事件系统会尝试从
Contexts
中查找对应的值并注入 - 订阅者的参数可以是
Contexts
类型,用于获取事件的上下文信息 - 默认情况下
event
为名字的参数会被注入为事件的实例
上下文
Contexts
类型是一个dict
的子类,用于传递上下文信息Contexts
默认包含event
键,其值为事件的实例Contexts
默认包含$subscriber
键,其值为订阅者的实例
发布
- 通过
EventSystem.publish
方法可以发布一个事件 Publisher
负责管理订阅者与事件的交互Publisher.validate
方法用于验证该事件是否为该发布者的订阅者所关注的事件Publisher.publish
方法用于将事件主动分发给订阅者Publisher.supply
方法用于给事件系统提供可能的事件EventSystem.on
与EventSystem.publish
可以指定Publisher
,默认为事件系统内的全局Publisher
参数
Provider[T]
负责管理参数的注入, 其会尝试从Contexts
中选择需求的参数返回Provider.validate
方法用于验证订阅函数的参数是否为该Provider
所关注的参数Provider.__call__
方法用于从Contexts
中获取参数
辅助
Auxiliary
提供了一系列辅助方法,方便事件的处理Auxiliary
分为Judge
,Supply
与Depend
三类:Judge
: 用于判断此时是否应该处理事件Supply
: 用于为Contexts
提供额外的信息Depend
: 用于依赖注入
Auxiliary.scopes
声明了Auxiliary
的作用域:prepare
: 表示该Auxiliary
会在依赖注入之前执行parsing
: 表示该Auxiliary
会在依赖注入解析时执行complete
: 表示该Auxiliary
会在依赖注入完成后执行cleanup
: 表示该Auxiliary
会在事件处理完成后执行
Auxiliary
可以设置CombineMode
, 用来设置多个Auxiliary
的组合方式:single
: 表示该Auxiliary
独立执行and
: 表示该Auxiliary
的执行结果应该与其他Auxiliary
的执行结果都为有效值or
: 表示该Auxiliary
的执行结果应该与其他Auxiliary
的执行结果至少有一个为有效值
开源协议
本实现以 MIT 为开源协议。
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
arclet-letoderea-0.6.0.tar.gz
(19.6 kB
view details)
Built Distribution
File details
Details for the file arclet-letoderea-0.6.0.tar.gz
.
File metadata
- Download URL: arclet-letoderea-0.6.0.tar.gz
- Upload date:
- Size: 19.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: pdm/2.5.2 CPython/3.9.13
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0ca742931ccfc18924ffc3a125803c82f12be0113d0af32b7abbc25d2bf6e9a8 |
|
MD5 | c26e0f468b86357da30cec90d0524468 |
|
BLAKE2b-256 | f964733c7c014295faff7eefb802dcd3d947b3c22f074ccdf4911efe888246c1 |
Provenance
File details
Details for the file arclet_letoderea-0.6.0-py3-none-any.whl
.
File metadata
- Download URL: arclet_letoderea-0.6.0-py3-none-any.whl
- Upload date:
- Size: 19.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: pdm/2.5.2 CPython/3.9.13
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 804a9d6a9703f7d1a86d4f090d339b4b611ca212d9c41c38bd3a2976ad33dda0 |
|
MD5 | 25ac5bc191ca8ba7d899b8fdc32e4b10 |
|
BLAKE2b-256 | 82dd5625bd2fc348abeba673941a7ab67ff0dfae47a4d2250462b84ba0b321f9 |