aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author苏向夜 <fu050409@163.com>2023-12-14 18:05:23 +0800
committer苏向夜 <fu050409@163.com>2023-12-14 18:05:23 +0800
commitaa81ffa1770ee32103769c598531b21692985fb5 (patch)
treea62988224d4fbb4896573ee5db83889675638884 /src
parent1dbdbc7e84a7d107e35c507ee439075d6e469ea6 (diff)
downloadinfini-aa81ffa1770ee32103769c598531b21692985fb5.tar.gz
infini-aa81ffa1770ee32103769c598531b21692985fb5.zip
:recycle: 使用子命令实现命令行
Diffstat (limited to 'src')
-rw-r--r--src/infini/__main__.py38
-rw-r--r--src/infini/utils/cli.py19
2 files changed, 35 insertions, 22 deletions
diff --git a/src/infini/__main__.py b/src/infini/__main__.py
index bd6a2b64..47c82b75 100644
--- a/src/infini/__main__.py
+++ b/src/infini/__main__.py
@@ -16,12 +16,9 @@ def main():
sys.exit(1)
path = Path(args.path).resolve() if args.path else Path(os.getcwd()).resolve()
- if args.new and args.test:
- logger.error("无法确定的指令要求: 你同时指定了new与test指令。")
- sys.exit(1)
- if args.new:
- if path.exists():
+ if args.operate == "new":
+ if path.exists() and not args.force:
logger.error("指定的文件夹已经存在!")
sys.exit(1)
@@ -32,20 +29,27 @@ def main():
logger.success("HydroRoll 规则包模板已创建!")
- 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)}...")
+ if args.operate == "test":
+ logger.info(f"开始测试规则包: {path.name}...")
sys.path.append(str(path))
- importlib.import_module("event")
- importlib.import_module("handler")
- tests = importlib.import_module("tests")
- tests.test()
+ logger.info(f"初始化规则包中...")
+ try:
+ importlib.import_module("event")
+ importlib.import_module("handler")
+ except Exception as error:
+ if args.verbose:
+ logger.exception(error)
+ logger.critical(f"初始化规则包时出现异常: {error}")
+ return
+ try:
+ errors = importlib.import_module("tests").test()
+ except Exception as error:
+ if args.verbose:
+ logger.exception(error)
+ logger.critical(f"测试规则包时出现异常: {error}")
+ return
sys.path.remove(str(path))
+ logger.info(f"测试规则包 {path.name} 出现 {len(errors)} 个异常, 测试完成.")
if __name__ == "__main__":
diff --git a/src/infini/utils/cli.py b/src/infini/utils/cli.py
index b594cdd8..cb794133 100644
--- a/src/infini/utils/cli.py
+++ b/src/infini/utils/cli.py
@@ -5,11 +5,20 @@ 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="创建一个 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="指定路径")
+ parser.add_argument("--gui", action="store_true", help="启用 GUI 模式")
+
+ subparsers = parser.add_subparsers(title="功能件", dest="operate")
+
+ # 子命令 `new`
+ new_parser = subparsers.add_parser("new", help="创建一个 Infini 规则包模板")
+ new_parser.add_argument("path", help="目标位置")
+ new_parser.add_argument("-v", "--verbose", action="store_true", help="异常追踪")
+ new_parser.add_argument("-f", "--force", action="store_true", help="强制创建")
+
+ # 子命令 `test`
+ test_parser = subparsers.add_parser("test", help="测试 Infini 规则包")
+ test_parser.add_argument("path", help="目标位置")
+ test_parser.add_argument("-v", "--verbose", action="store_true", help="异常追踪")
args = parser.parse_args(argv if argv else sys.argv[1:])
return args