diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/infini/__main__.py | 20 | ||||
| -rw-r--r-- | src/infini/consts/templates.py | 11 | ||||
| -rw-r--r-- | src/infini/handler.py | 13 | ||||
| -rw-r--r-- | src/infini/matcher.py | 12 | ||||
| -rw-r--r-- | src/infini/utils/cli.py | 5 |
5 files changed, 42 insertions, 19 deletions
diff --git a/src/infini/__main__.py b/src/infini/__main__.py index f8f74457..bd6a2b64 100644 --- a/src/infini/__main__.py +++ b/src/infini/__main__.py @@ -16,8 +16,8 @@ def main(): sys.exit(1) path = Path(args.path).resolve() if args.path else Path(os.getcwd()).resolve() - if args.new and args.run: - logger.error("无法确定的指令要求: 你同时指定了new与run指令。") + if args.new and args.test: + logger.error("无法确定的指令要求: 你同时指定了new与test指令。") sys.exit(1) if args.new: @@ -26,14 +26,26 @@ def main(): sys.exit(1) path.mkdir(parents=True, exist_ok=True) - (path / "rule.py").write_text(templates.RULE, encoding="utf-8") + (path / "handler.py").write_text(templates.RULE, encoding="utf-8") (path / "event.py").write_text(templates.EVENT, encoding="utf-8") + (path / "tests.py").write_text(templates.TEST, encoding="utf-8") logger.success("HydroRoll 规则包模板已创建!") - if args.run: + if args.load: sys.path.append(str(path)) importlib.import_module("event") + importlib.import_module("handler") + sys.path.remove(str(path)) + + if args.test: + logger.info(f"开始测试规则包: {str(path)}...") + sys.path.append(str(path)) + importlib.import_module("event") + importlib.import_module("handler") + tests = importlib.import_module("tests") + tests.test() + sys.path.remove(str(path)) if __name__ == "__main__": diff --git a/src/infini/consts/templates.py b/src/infini/consts/templates.py index d3176468..10ec12b4 100644 --- a/src/infini/consts/templates.py +++ b/src/infini/consts/templates.py @@ -10,9 +10,9 @@ class HandlerRule(Handler): def __init__(self) -> None: \"\"\"初始化你的规则包\"\"\" - def check(self) -> Result: + def process(self) -> Result: \"\"\"声明规则包检定方式\"\"\" - return Result("myevent.event1", True) + return Result("event1", True) """ EVENT = """from infini import MessageEvent @@ -24,3 +24,10 @@ class MyEvent(MessageEvent): name = "event1" output = "检定成功!" """ + +TEST = """from infini.matcher import matcher, MatcherEvent + +def test(): + event = MatcherEvent("event1") + print(matcher.run(event)) +""" diff --git a/src/infini/handler.py b/src/infini/handler.py index 30eac0ab..922023e7 100644 --- a/src/infini/handler.py +++ b/src/infini/handler.py @@ -1,7 +1,6 @@ from abc import ABCMeta, abstractmethod from .exceptions import HydroError -from .typing import Dict, Callable - +from .typing import Dict __all__ = ["Result", "Handler"] @@ -25,14 +24,14 @@ class Result(metaclass=ABCMeta): return isinstance(self.exception, HydroError) -class Handler(metaclass=ABCMeta): +class Handler: """规则包业务基类""" name: str priority: int = 0 def __init_subclass__(cls) -> None: - handlers.regist(cls.name, cls.process) + handlers.regist(cls.name, cls()) @abstractmethod def process(self) -> Result: @@ -42,12 +41,12 @@ class Handler(metaclass=ABCMeta): class Handlers: """规则包业务集合""" - _handlers: Dict[str, Callable] = {} + _handlers: Dict[str, Handler] = {} - def regist(self, name: str, handler: Callable) -> None: + def regist(self, name: str, handler: Handler) -> None: self._handlers[name.lower()] = handler - def match(self, name: str) -> Callable | None: + def match(self, name: str) -> Handler | None: return self._handlers.get(name.lower()) diff --git a/src/infini/matcher.py b/src/infini/matcher.py index 5fde8445..078a39e8 100644 --- a/src/infini/matcher.py +++ b/src/infini/matcher.py @@ -1,7 +1,8 @@ from .event import Events, events -from .handler import Handlers, Result, handlers +from .handler import Handlers, Handler, Result, handlers from .exceptions import UnknownMatcherEvent from .typing import Callable +from .logging import logger class MatcherEvent: @@ -24,18 +25,21 @@ class Matcher: events: Events handlers: Handlers - def __init__(self, _events: Events | None = None, _handlers: Handlers | None = None) -> None: + 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 match(self, name: str) -> Callable: + def match(self, name: str) -> Handler: if handler := self.handlers.match(name): return handler else: raise UnknownMatcherEvent(f"未知的规则包: {name}") def run(self, event: MatcherEvent) -> str: - result: Result = self.match(event.name)() + logger.debug(f"开始处理事件: {event.name}...") + result = self.match(event.name).process() return self.events.process(result.event, **event.kwargs) diff --git a/src/infini/utils/cli.py b/src/infini/utils/cli.py index 8e510a35..b594cdd8 100644 --- a/src/infini/utils/cli.py +++ b/src/infini/utils/cli.py @@ -5,8 +5,9 @@ import sys def parse_args(argv: list[str] | None = None) -> argparse.Namespace: parser = argparse.ArgumentParser(prog="Infini CLI", description="Infini 命令行工具") - parser.add_argument("--new", action="store_true", help="创建一个 HydroRoll 规则包模板") - parser.add_argument("--run", action="store_true", help="运行 HydroRoll 规则包") + parser.add_argument("--new", action="store_true", help="创建一个 Infini 规则包模板") + parser.add_argument("--load", action="store_true", help="导入 Infini 规则包") + parser.add_argument("--test", action="store_true", help="运行 Infini 规则包测试") parser.add_argument("--gui", action="store_true", help="显示弹窗") parser.add_argument("--path", help="指定路径") |
