2024-01-06 12:00:00 +08:00
|
|
|
|
"""各类检查函数
|
2023-12-04 21:54:06 +08:00
|
|
|
|
"""
|
2024-01-06 12:00:00 +08:00
|
|
|
|
|
|
|
|
|
__all__ = [
|
|
|
|
|
"check_license_statement",
|
|
|
|
|
"check_version_num",
|
|
|
|
|
"check_pre_commit",
|
|
|
|
|
"check_mypy",
|
|
|
|
|
]
|
2023-12-04 21:54:06 +08:00
|
|
|
|
|
|
|
|
|
import subprocess
|
|
|
|
|
import tomllib
|
|
|
|
|
import warnings
|
|
|
|
|
|
2023-12-09 16:57:12 +08:00
|
|
|
|
from dev_scripts.path_constants import (
|
|
|
|
|
COMPILED_RESOURCES,
|
|
|
|
|
PROJECT_ROOT,
|
|
|
|
|
SRC_PATH,
|
|
|
|
|
SRC_PKG_PATH,
|
|
|
|
|
)
|
2023-12-04 21:54:06 +08:00
|
|
|
|
from py2exe_gui import Constants as py2exe_gui_Constants
|
2023-12-19 20:24:35 +08:00
|
|
|
|
from py2exe_gui import __version__ as py2exe_gui__version__
|
2023-12-04 21:54:06 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def check_license_statement() -> int:
|
2024-01-06 12:00:00 +08:00
|
|
|
|
"""检查源代码文件中是否都包含了许可声明
|
|
|
|
|
|
2023-12-04 21:54:06 +08:00
|
|
|
|
:return: 0-所有源文件都包含许可声明;1-存在缺失许可声明的源文件
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
license_statement = "# Licensed under the GPLv3 License: https://www.gnu.org/licenses/gpl-3.0.html\n"
|
|
|
|
|
source_file_list = list(SRC_PATH.glob("**/*.py"))
|
|
|
|
|
source_file_list.remove(COMPILED_RESOURCES) # 排除RCC编译工具自动生成的.py文件
|
|
|
|
|
check_pass = 0
|
|
|
|
|
|
|
|
|
|
print("开始检查源码中许可声明情况...")
|
|
|
|
|
|
|
|
|
|
for file in source_file_list:
|
|
|
|
|
with open(file, encoding="utf-8") as f:
|
|
|
|
|
if license_statement not in f.read():
|
|
|
|
|
warning_mes = f"Source code file {file} lacks a license statement."
|
2023-12-19 20:24:35 +08:00
|
|
|
|
warnings.warn(warning_mes, Warning, stacklevel=2)
|
2023-12-04 21:54:06 +08:00
|
|
|
|
else:
|
|
|
|
|
check_pass += 1
|
|
|
|
|
|
|
|
|
|
if check_pass == len(source_file_list):
|
|
|
|
|
print("许可声明检查完毕,所有源码文件都包含许可声明。")
|
|
|
|
|
return 0
|
|
|
|
|
else:
|
|
|
|
|
print("许可声明检查完毕,部分源码文件缺失许可声明,请检查。")
|
|
|
|
|
return 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def check_version_num() -> int:
|
2024-01-06 12:00:00 +08:00
|
|
|
|
"""检查各部分声明的版本号是否一致
|
|
|
|
|
|
2023-12-04 21:54:06 +08:00
|
|
|
|
:return: 0-各处版本一致;1-存在版本不一致情况
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
print("正在检查各处版本号是否一致...")
|
|
|
|
|
|
|
|
|
|
app_constant_version = py2exe_gui_Constants.app_constants.AppConstant.VERSION
|
2023-12-19 20:24:35 +08:00
|
|
|
|
package_version = py2exe_gui__version__
|
2023-12-04 21:54:06 +08:00
|
|
|
|
with open(PROJECT_ROOT / "pyproject.toml", "rb") as ppj_toml_file:
|
|
|
|
|
ppj_dict = tomllib.load(ppj_toml_file)
|
|
|
|
|
ppj_version = ppj_dict["tool"]["poetry"]["version"]
|
|
|
|
|
|
2023-12-19 20:24:35 +08:00
|
|
|
|
if ppj_version == app_constant_version == package_version:
|
2023-12-04 21:54:06 +08:00
|
|
|
|
print(f"版本号检查完毕,均为 {ppj_version}。")
|
|
|
|
|
return 0
|
|
|
|
|
else:
|
|
|
|
|
warning_mes = (
|
|
|
|
|
"""版本号不一致!\n"""
|
|
|
|
|
+ f"""pyproject.toml................{ppj_version}\n"""
|
2023-12-19 20:24:35 +08:00
|
|
|
|
+ f"""__version__...................{package_version}\n"""
|
2023-12-04 21:54:06 +08:00
|
|
|
|
+ f"""Constants.AppConstant.........{app_constant_version}\n"""
|
|
|
|
|
)
|
|
|
|
|
warnings.warn(warning_mes, stacklevel=1)
|
|
|
|
|
return 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def check_pre_commit() -> int:
|
2024-01-06 12:00:00 +08:00
|
|
|
|
"""调用已有的 pre-commit 检查工具进行检查
|
|
|
|
|
|
|
|
|
|
如果首次调用返回值不为0,可能已经进行了一定的自动修复,需要再运行第二次检查返回值
|
|
|
|
|
|
2023-12-04 21:54:06 +08:00
|
|
|
|
:return: pre-commit 进程返回码
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
pre_commit_run_cmd = ["pre-commit", "run", "--all-files"]
|
|
|
|
|
print("开始进行第一次 pre-commit 检查...")
|
|
|
|
|
result_1 = subprocess.run(pre_commit_run_cmd)
|
|
|
|
|
if result_1.returncode != 0:
|
|
|
|
|
print("开始进行第二次 pre-commit 检查...")
|
|
|
|
|
result_2 = subprocess.run(pre_commit_run_cmd)
|
|
|
|
|
if result_2.returncode != 0:
|
2024-01-06 12:00:00 +08:00
|
|
|
|
warnings.warn("pre-commit 进程返回码非 0,建议检查", stacklevel=1)
|
2023-12-04 21:54:06 +08:00
|
|
|
|
return result_2.returncode
|
|
|
|
|
else:
|
|
|
|
|
print("pre-commit 检查完成,所有项目通过。")
|
|
|
|
|
return 0
|
|
|
|
|
|
|
|
|
|
|
2023-12-09 16:57:12 +08:00
|
|
|
|
def check_mypy() -> int:
|
2024-01-06 12:00:00 +08:00
|
|
|
|
"""调用mypy进行静态代码分析"""
|
2023-12-09 16:57:12 +08:00
|
|
|
|
|
|
|
|
|
mypy_cmd = ["mypy", SRC_PKG_PATH, "--config-file", PROJECT_ROOT / "pyproject.toml"]
|
|
|
|
|
print("开始运行 mypy 检查...")
|
2024-01-06 12:00:00 +08:00
|
|
|
|
try:
|
|
|
|
|
result = subprocess.run(mypy_cmd)
|
|
|
|
|
except subprocess.CalledProcessError as e:
|
|
|
|
|
warnings.warn(f"mypy 检查失败,错误信息:{e}", stacklevel=1)
|
|
|
|
|
return e.returncode
|
|
|
|
|
else:
|
|
|
|
|
print("mypy 检查运行完毕。")
|
|
|
|
|
return result.returncode
|
2023-12-09 16:57:12 +08:00
|
|
|
|
|
|
|
|
|
|
2023-12-04 21:54:06 +08:00
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
check_license_statement()
|
|
|
|
|
check_version_num()
|
|
|
|
|
check_pre_commit()
|
2023-12-09 16:57:12 +08:00
|
|
|
|
check_mypy()
|