diff options
| -rw-r--r-- | src/infini/handler.py | 29 | ||||
| -rw-r--r-- | src/infini/register.py | 11 | ||||
| -rw-r--r-- | src/infini/typing.py | 2 |
3 files changed, 12 insertions, 30 deletions
diff --git a/src/infini/handler.py b/src/infini/handler.py index da4f84b8..0f72eccf 100644 --- a/src/infini/handler.py +++ b/src/infini/handler.py @@ -5,13 +5,10 @@ 此外,每个规则包业务类还可以定义一个名为 priority 的类属性,用于指定该业务类的优先级。优先级越高,该业务类处理事件的顺序越靠前。 """ -from abc import ABC, ABCMeta, abstractmethod +from abc import ABC, abstractmethod from enum import Enum -from typing import ClassVar, Generic, NoReturn, Optional, final - -from infini.exceptions import SkipException, StopException -from infini.typing import StateT -from infini.event import MatcherEvent, InfiniEvent +from .typing import StateT, ClassVar, Generic +from .event import MatcherEvent, InfiniEvent __all__ = ["Handler", "HandlerLoadType"] @@ -28,28 +25,10 @@ class HandlerLoadType(Enum): class Handler(ABC, Generic[StateT]): """规则包业务基类""" + name: str priority: ClassVar[int] = 0 block: ClassVar[bool] = False - def __init_state__(self) -> Optional[StateT]: - """初始化规则包状态。""" - - @final - @property - def name(self) -> str: - """规则包名称。""" - return self.__class__.__name__ - - @final - def stop(self) -> NoReturn: - """停止当前事件传播。""" - raise StopException - - @final - def skip(self) -> NoReturn: - """跳过自身继续当前事件传播。""" - raise SkipException - @abstractmethod def process(self, event: MatcherEvent) -> InfiniEvent: raise NotImplementedError diff --git a/src/infini/register.py b/src/infini/register.py index 4596b930..55677152 100644 --- a/src/infini/register.py +++ b/src/infini/register.py @@ -8,7 +8,7 @@ from .exceptions import UnknownMatcherEvent, UnsupportedError from .handler import Handler from .event import InfiniEvent, MessageEvent, WorkflowEvent from .typing import Dict, Type -from .exceptions import LoadError, EventLoadError, HandlerLoadError, UnknownException +from .exceptions import LoadError, EventLoadError, HandlerLoadError import re import sys @@ -70,8 +70,7 @@ class Loader: for handler in handlers: self.handlers[f"{self.name}.{handler.__dict__['name']}"] = handler except Exception as error: - raise HandlerLoadError( - f"规则包[{self.name}]业务函数导入失败: {error}") from error + raise HandlerLoadError(f"规则包[{self.name}]业务函数导入失败: {error}") from error sys.path.remove(str(self.meta_path)) @@ -152,8 +151,10 @@ class Register: self.events = Events() self.handlers = Handlers() - def register(self, meta_path: Path | str | None = None): - _loader = Loader(meta_path or ".") + def register( + self, meta_path: Path | str | None = None, loader: Type[Loader] | None = None + ): + _loader = Loader(meta_path or ".") if not loader else loader(meta_path or ".") _loader.load() self.events.update(_loader.events) self.handlers.update(_loader.handlers) diff --git a/src/infini/typing.py b/src/infini/typing.py index 58d2b80d..0da72385 100644 --- a/src/infini/typing.py +++ b/src/infini/typing.py @@ -7,6 +7,8 @@ from typing import ( Dict as Dict, Any as Any, Type as Type, + ClassVar as ClassVar, + Generic as Generic, TYPE_CHECKING as TYPE_CHECKING, TypeVar as TypeVar, Callable as Callable, |
