diff options
| author | 2023-12-14 18:05:23 +0800 | |
|---|---|---|
| committer | 2023-12-14 18:05:23 +0800 | |
| commit | aa81ffa1770ee32103769c598531b21692985fb5 (patch) | |
| tree | a62988224d4fbb4896573ee5db83889675638884 /src | |
| parent | 1dbdbc7e84a7d107e35c507ee439075d6e469ea6 (diff) | |
| download | infini-aa81ffa1770ee32103769c598531b21692985fb5.tar.gz infini-aa81ffa1770ee32103769c598531b21692985fb5.zip | |
:recycle: 使用子命令实现命令行
Diffstat (limited to 'src')
| -rw-r--r-- | src/infini/__main__.py | 38 | ||||
| -rw-r--r-- | src/infini/utils/cli.py | 19 |
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 |
