diff --git a/dev_scripts/build.py b/dev_scripts/build.py index 85c1231..65831f1 100644 --- a/dev_scripts/build.py +++ b/dev_scripts/build.py @@ -11,12 +11,7 @@ from dev_scripts.check_funcs import ( check_version_num, ) from dev_scripts.clear_cache import clear_pycache, clear_pyinstaller_dist -from dev_scripts.path_constants import ( - PROJECT_ROOT, - README_FILE_LIST, - RESOURCES_PATH, - SRC_PATH, -) +from dev_scripts.path_constants import PROJECT_ROOT, README_FILE_LIST, SRC_PATH def process_md_images(md_file_list: list[Path]) -> None: @@ -46,30 +41,6 @@ def process_md_images(md_file_list: list[Path]) -> None: # FIXME 会在文件尾部多出来莫名其妙的行 -def compile_resources() -> int: - """调用 RCC 工具编译静态资源 - - :return: rcc 进程返回码 - """ - - compiled_file_path = RESOURCES_PATH / "COMPILED_RESOURCES.py" - qrc_file_path = RESOURCES_PATH / "resources.qrc" - cmd = [ - "pyside6-rcc", - "-o", - str(compiled_file_path.absolute()), - str(qrc_file_path.absolute()), - ] - try: - result = subprocess.run(cmd) - except subprocess.SubprocessError as e: - print(f"RCC编译进程错误:{e}") - raise e - else: - print(f"已完成静态资源文件编译,RCC返回码:{result.returncode}。") - return result.returncode - - def export_requirements() -> int: """将项目依赖项导出至 requirements.txt 中 @@ -109,12 +80,18 @@ def build_py2exe_gui() -> None: print(f"mypy 检查完毕,返回码:{check_mypy()}。") # 正式构建 - subprocess.run(["poetry", "build"]) # TODO 处理异常与返回值 - - # 清理 - process_md_images(README_FILE_LIST) + try: + result = subprocess.run(["poetry", "build"], check=True) + except subprocess.SubprocessError as e: + print(f"Poetry build 失败:{e}") + raise + else: + print(f"Poetry build 完毕,返回码:{result.returncode}。") + finally: + # 清理 + process_md_images(README_FILE_LIST) else: - print("构建失败,有未通过的检查项") + print("有未通过的检查项,不进行构建") if __name__ == "__main__": diff --git a/dev_scripts/path_constants.py b/dev_scripts/path_constants.py index 3a50770..891b3b5 100644 --- a/dev_scripts/path_constants.py +++ b/dev_scripts/path_constants.py @@ -1,15 +1,16 @@ -""" -开发脚本中使用的相对路径常量 +"""开发脚本中使用的相对路径常量 + 所有脚本应以项目根目录为工作目录运行 """ from pathlib import Path -PROJECT_ROOT = Path("../") # 项目根目录 +PROJECT_ROOT = Path(__file__).parent.parent # 项目根目录 SRC_PATH = PROJECT_ROOT / "src" # 源码目录 -SRC_PKG_PATH = SRC_PATH / "py2exe_gui" +SRC_PKG_PATH = SRC_PATH / "py2exe_gui" # 包目录 RESOURCES_PATH = SRC_PKG_PATH / "Resources" # 静态资源文件目录 COMPILED_RESOURCES = RESOURCES_PATH / "COMPILED_RESOURCES.py" # 编译静态资源文件 +WIDGETS_PATH = SRC_PKG_PATH / "Widgets" # 控件目录 README_FILE_LIST = [ PROJECT_ROOT / "README.md", PROJECT_ROOT / "README_zh.md", diff --git a/dev_scripts/pyside6_tools_script.py b/dev_scripts/pyside6_tools_script.py new file mode 100644 index 0000000..df4bdbe --- /dev/null +++ b/dev_scripts/pyside6_tools_script.py @@ -0,0 +1,85 @@ +"""开发脚本,便于调用 PySide6 提供的各种工具程序 +""" + +import subprocess + +from dev_scripts.path_constants import ( + COMPILED_RESOURCES, + PROJECT_ROOT, + RESOURCES_PATH, + SRC_PKG_PATH, + WIDGETS_PATH, +) + + +def compile_resources() -> int: + """调用 RCC 工具编译静态资源 + + :return: rcc 进程返回码 + """ + + compiled_file_path = COMPILED_RESOURCES + qrc_file_path = RESOURCES_PATH / "resources.qrc" + cmd = [ + "pyside6-rcc", + "-o", + compiled_file_path, + qrc_file_path, + ] + + try: + result = subprocess.run(cmd, cwd=PROJECT_ROOT, check=True) + except subprocess.SubprocessError as e: + print(f"RCC 编译进程错误:{e}") + raise e + else: + print(f"已完成静态资源文件编译,RCC 返回码:{result.returncode}。") + return result.returncode + + +def gen_ts(lang: str = "zh_CN") -> int: + """调用 lupdate 工具分析源码,生成 .ts 文本翻译文件 + + :param lang: 目标翻译语言代码 + :return: lupdate 返回码 + """ + + source = [*list(WIDGETS_PATH.glob("**/*.py")), SRC_PKG_PATH / "__main__.py"] + target = RESOURCES_PATH / "i18n" / f"{lang.replace('-', '_')}.ts" + cmd = ["pyside6-lupdate", *source, "-ts", target] + + try: + result = subprocess.run(cmd, cwd=PROJECT_ROOT, check=True) + except subprocess.SubprocessError as e: + print(f"lupdate 进程错误:{e}") + raise + else: + print(f"已完成文本翻译文件生成,lupdate 返回码:{result.returncode}。") + return result.returncode + + +def gen_qm(lang: str = "zh_CN") -> int: + """调用 lrelease 工具编译.ts 文本翻译文件 + + :param lang: 目标翻译语言代码 + :return: lrelease 返回码 + """ + + source = RESOURCES_PATH / "i18n" / f"{lang.replace('-', '_')}.ts" + target = RESOURCES_PATH / "i18n" / f"{lang.replace('-', '_')}.qm" + cmd = ["pyside6-lrelease", source, "-qm", target] + + try: + result = subprocess.run(cmd, cwd=PROJECT_ROOT, check=True) + except subprocess.SubprocessError as e: + print(f"lrelease 进程错误:{e}") + raise + else: + print(f"已完成文本翻译文件编译,lrelease 返回码:{result.returncode}。") + return result.returncode + + +if __name__ == "__main__": + # compile_resources() + gen_ts("zh_CN") + # gen_qm("zh_CN")