Skip to content

Releases: ArcletProject/Letoderea

Letoderea 0.6.0

27 May 06:53
Compare
Choose a tag to compare
  1. 订阅者函数的参数类型现在支持使用 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
    ): ...
  2. 增加 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 _(): ...
  3. 增加 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")}
        )
    )
  4. 增加 make_event 装饰器, 用来自动注入 gather 方法
  5. 依赖注入可以根据参数名直接从事件中尝试获取对应参数
  6. Publisher.publish 现在不经过事件系统,直接分发给自身的订阅者
  7. depend_handler 的第二个参数现在可以接受已存在的 contexts

Letoderea 0.5.0

23 Apr 14:12
Compare
Choose a tag to compare
  1. es.register -> es.on
  2. StepOut 增加泛型支持
  3. StepOut 支持 async iter, 使用方式如下:
async for res in StepOut([Event], handler):
   ...

等价于

while True:
    res = await break_point(StepOut([Event], handler))
    ...
  1. 事件发布时,全局 publisher 现在总是会加入待检查队列中

Full Changelog: v0.4.1...0.5.0

Letoderea 0.4.0

23 Mar 06:10
Compare
Choose a tag to compare

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
  • ProviderEvent 可以 配合使用:
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

20 Feb 03:29
Compare
Choose a tag to compare

1.结构更改, publisher仅作为存储delegate的容器, 下一步预计进一步弱化其作用
2. condition与decorator合并为auxiliary, 并增加两类生命周期
3. 让event数据变得更"合理“

Letoderea 0.2.7

10 Feb 09:49
Compare
Choose a tag to compare

1.加入Depend, 即依赖注入
2.修改parser_handler逻辑,使其支持:

  • 以None为默认值的参数(必须是在anno后面注明了为None), 如(test: str = None)
  • 仅以类型注解来分配参数(不推荐)

Letoderea 0.2.1 ~ 0.2.3

07 Dec 15:25
89b6ccb
Compare
Choose a tag to compare

加入中断功能 BreakpointStepOut

Letoderea 0.1.3

25 Nov 09:32
87acd92
Compare
Choose a tag to compare

Letoderea 0.1.2

21 Nov 09:13
433a7af
Compare
Choose a tag to compare

修改了Decorator的接口

Letoderea 0.1.1

20 Nov 03:43
66c6ea1
Compare
Choose a tag to compare

Hello World!
该事件系统基于asyncio与dict,拥有比bcc更快的处理速度(截止至bcc 0.13.1)
目前事件系统提供有conditions、inserter、decorator三大特性