aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author苏向夜 <fu050409@163.com>2023-12-18 01:13:19 +0800
committer苏向夜 <fu050409@163.com>2023-12-18 01:13:19 +0800
commit31b0e745ab9688c3c760130ded3e0ea645902b15 (patch)
tree074a58a5233d918773460d305e3f5a0220f49551
parentbf95e7c63aceb7b64d718dc16f007fc78c37d2a7 (diff)
downloadinfini-31b0e745ab9688c3c760130ded3e0ea645902b15.tar.gz
infini-31b0e745ab9688c3c760130ded3e0ea645902b15.zip
:bug: 允许Handler实例化
-rw-r--r--src/infini/handler.py5
-rw-r--r--src/infini/matcher.py21
-rw-r--r--src/infini/typing.py1
3 files changed, 15 insertions, 12 deletions
diff --git a/src/infini/handler.py b/src/infini/handler.py
index 32ab7465..7c0ee73d 100644
--- a/src/infini/handler.py
+++ b/src/infini/handler.py
@@ -4,12 +4,15 @@ from .event import MatcherEvent, InfiniEvent
__all__ = ["Handler"]
-class Handler(metaclass=ABCMeta):
+class Handler:
"""规则包业务基类"""
name: str
priority: int = 0
+ def __init__(self) -> None:
+ pass
+
@abstractmethod
def process(self, event: MatcherEvent) -> InfiniEvent:
raise NotImplementedError
diff --git a/src/infini/matcher.py b/src/infini/matcher.py
index 94bb6645..364bc5ea 100644
--- a/src/infini/matcher.py
+++ b/src/infini/matcher.py
@@ -1,4 +1,4 @@
-from .register import Events, Handlers, events, handlers
+from .register import Register, register
from .event import MatcherEvent
from .handler import Handler
from .exceptions import UnknownMatcherEvent
@@ -7,24 +7,23 @@ from .exceptions import UnknownMatcherEvent
class Matcher:
"""事件处理单元"""
- events: Events
- handlers: Handlers
+ register: Register
- def __init__(
- self, _events: Events | None = None, _handlers: Handlers | None = None
- ) -> None:
- self.events = _events if _events else events
- self.handlers = _handlers if _handlers else handlers
+ def __init__(self, _register: Register | None = None) -> None:
+ self.register = _register if _register else register
def match(self, name: str) -> Handler:
- if handler := self.handlers.match(name):
- return handler
+ if handler := self.register.handlers.match(name):
+ if isinstance(handler, Handler):
+ return handler
+ else:
+ return handler()
else:
raise UnknownMatcherEvent(f"未知的规则包: {name}")
def run(self, event: MatcherEvent) -> str:
callback_event = self.match(event.name).process(event)
- return self.events.process(
+ return self.register.events.process(
callback_event.name,
**callback_event.kwargs if callback_event.kwargs else callback_event.kwargs,
)
diff --git a/src/infini/typing.py b/src/infini/typing.py
index 0055d816..9af61569 100644
--- a/src/infini/typing.py
+++ b/src/infini/typing.py
@@ -1,6 +1,7 @@
from typing import (
Dict as Dict,
Any as Any,
+ Type as Type,
TYPE_CHECKING as TYPE_CHECKING,
TypeVar as TypeVar,
Callable as Callable,