Releases: ArcletProject/Letoderea
Releases · ArcletProject/Letoderea
Letoderea 0.6.0
- 订阅者函数的参数类型现在支持使用
Annotated
来便捷注入 provider:async def _( a: int, # Need Provider b: Annotated[str, "index"], # will generate provider which fetch "index" from ctx c: Annotated[float, lambda ctx: ctx["foo"]] # will generate provider which fetch "foo" from ctx ): ...
- 增加
bypass_if
便捷装饰器, 用来注入一条件判断的辅助器:from arclet.letoderea import bypass_if .... @bypass_if(lambda ctx: not isinstance(ctx["event"], A)) # subscriber will pass when event is not A async def _(): ...
- 增加
deref
函数, 用来生成获取事件属性,或比较事件属性是否符号条件的 predicate, 并给如bypass_if
,Annotated
,provide
使用from arclet.letoderea.ref import deref, generate ... @dataclass class A: text: str print(deref(A).text) # {'text': None} print(deref(A).text == "123") # {'text': <function Deref.__eq__.<locals>.<lambda>>} print( generate(deref(A).text == "123")( # True {"event": A(text="123")} ) )
- 增加
make_event
装饰器, 用来自动注入gather
方法 - 依赖注入可以根据参数名直接从事件中尝试获取对应参数
Publisher.publish
现在不经过事件系统,直接分发给自身的订阅者depend_handler
的第二个参数现在可以接受已存在的 contexts
Letoderea 0.5.0
es.register
->es.on
StepOut
增加泛型支持StepOut
支持 async iter, 使用方式如下:
async for res in StepOut([Event], handler):
...
等价于
while True:
res = await break_point(StepOut([Event], handler))
...
- 事件发布时,全局 publisher 现在总是会加入待检查队列中
Full Changelog: v0.4.1...0.5.0
Letoderea 0.4.0
What's Changed
- 重构了整个 Letoderea。现今的依赖注入基于静态编译后的
Provider
+ 动态的类型推断 - 引入
Provider
,并在Subscriber
注册时确定每个参数可分配的Provider
。当事件传递时每个参数上的Provider
将依次执行。 - 重做
Auxiliary
,并引入Combine
机制,即允许多个Auxiliary
组合,类似A -- AND --> B -- AND --> [C or D or E] -- AND --> F
- 重做
Event
, 现在Event
属于一类协议,仅要求实现一个async def gather
函数,其接受一个context: Contexts
参数,负责将事件参数传入 Contexts 中。例:
class ExampleEvent:
foo: int
bar: str
async def gather(self, context: Contexts):
context["foo"] = self.foo
context["bar"] = self.bar
Provider
与Event
可以 配合使用:
class ExampleProvider(Provider[int]):
async def __call__(self, context: Contexts):
return context["foo"]
class ExampleEvent:
foo: int
bar: str
async def gather(self, context: Contexts):
context["foo"] = self.foo
context["bar"] = self.bar
class BarProvider(Provider[str]):
async def __call__(self, context: Contexts):
return context["bar"]
Full Changelog: 0.3.0...0.4.0
Letoderea 0.3.0~0.3.3
1.结构更改, publisher仅作为存储delegate的容器, 下一步预计进一步弱化其作用
2. condition与decorator合并为auxiliary, 并增加两类生命周期
3. 让event数据变得更"合理“
Letoderea 0.2.7
1.加入Depend, 即依赖注入
2.修改parser_handler逻辑,使其支持:
- 以None为默认值的参数(必须是在anno后面注明了为None), 如
(test: str = None)
- 仅以类型注解来分配参数(不推荐)
Letoderea 0.2.1 ~ 0.2.3
加入中断功能 Breakpoint
与 StepOut
Letoderea 0.1.3
Change
Letoderea 0.1.2
修改了Decorator的接口
Letoderea 0.1.1
Hello World!
该事件系统基于asyncio与dict,拥有比bcc更快的处理速度(截止至bcc 0.13.1)
目前事件系统提供有conditions、inserter、decorator三大特性