Skip to main content

A high-performance, simple-structured event system, relies on asyncio

Project description

Letoderea

Licence PyPI PyPI - Python Version

一个高性能,结构简洁,依赖于 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) 的参数中
  • 事件可以携带 ProviderAuxiliary,它们会在事件被订阅时注入到订阅者中

订阅

  • 通过 EventSystem.onsubscribe 装饰器可以将一个函数注册为事件的订阅者
  • 订阅者的参数可以是任何类型,事件系统会尝试从 Contexts 中查找对应的值并注入
  • 订阅者的参数可以是 Contexts 类型,用于获取事件的上下文信息
  • 默认情况下 event 为名字的参数会被注入为事件的实例

上下文

  • Contexts 类型是一个 dict 的子类,用于传递上下文信息
  • Contexts 默认包含 event 键,其值为事件的实例
  • Contexts 默认包含 $subscriber 键,其值为订阅者的实例

发布

  • 通过 EventSystem.publish 方法可以发布一个事件
  • Publisher 负责管理订阅者与事件的交互
  • Publisher.validate 方法用于验证该事件是否为该发布者的订阅者所关注的事件
  • Publisher.publish 方法用于将事件主动分发给订阅者
  • Publisher.supply 方法用于给事件系统提供可能的事件
  • EventSystem.onEventSystem.publish 可以指定 Publisher,默认为事件系统内的全局 Publisher

参数

  • Provider[T] 负责管理参数的注入, 其会尝试从 Contexts 中选择需求的参数返回
  • Provider.validate 方法用于验证订阅函数的参数是否为该 Provider 所关注的参数
  • Provider.__call__ 方法用于从 Contexts 中获取参数

辅助

  • Auxiliary 提供了一系列辅助方法,方便事件的处理
  • Auxiliary 分为 Judge, SupplyDepend 三类:
    • 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


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)

Uploaded Source

Built Distribution

arclet_letoderea-0.6.0-py3-none-any.whl (19.1 kB view details)

Uploaded Python 3

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

Hashes for arclet-letoderea-0.6.0.tar.gz
Algorithm Hash digest
SHA256 0ca742931ccfc18924ffc3a125803c82f12be0113d0af32b7abbc25d2bf6e9a8
MD5 c26e0f468b86357da30cec90d0524468
BLAKE2b-256 f964733c7c014295faff7eefb802dcd3d947b3c22f074ccdf4911efe888246c1

See more details on using hashes here.

Provenance

File details

Details for the file arclet_letoderea-0.6.0-py3-none-any.whl.

File metadata

File hashes

Hashes for arclet_letoderea-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 804a9d6a9703f7d1a86d4f090d339b4b611ca212d9c41c38bd3a2976ad33dda0
MD5 25ac5bc191ca8ba7d899b8fdc32e4b10
BLAKE2b-256 82dd5625bd2fc348abeba673941a7ab67ff0dfae47a4d2250462b84ba0b321f9

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page