Update dev scripts

更新开发脚本:
- 增加对 poetry build 构建的异常处理;
- 修复路径常量中获取项目根路径的方法,排除运行脚本的工作目录不同带来的干扰;
- 添加两个关于构建 PySide 翻译工作流的函数 `gen_ts()` 与 `gen_qm()`;
- 将 RCC 资源编译函数 `compile_resources()` 重构至新的模块中;
This commit is contained in:
muzing 2024-01-04 14:47:15 +08:00
parent 5f3bc8b46f
commit b7e36c9960
3 changed files with 102 additions and 39 deletions

View File

@ -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__":

View File

@ -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",

View File

@ -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")