summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author苏向夜 <fu050409@163.com>2023-12-18 20:29:48 +0800
committer苏向夜 <fu050409@163.com>2023-12-18 20:29:48 +0800
commite0fab4d50a1cd779f6763b08c3e2d3e6378fcf57 (patch)
treee526791e4cc5d1cc4e76523912caf81ef89701c9
parent15dd70c33e86d4138b47d217a2dd2f467ffd7a9b (diff)
downloadinfini-e0fab4d50a1cd779f6763b08c3e2d3e6378fcf57.tar.gz
infini-e0fab4d50a1cd779f6763b08c3e2d3e6378fcf57.zip
:bug: 修订注释及导入路径
-rw-r--r--src/infini/handler.py29
-rw-r--r--src/infini/register.py11
-rw-r--r--src/infini/typing.py2
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,