Fix API compatibility and add user/role/permission and asset import/export

This commit is contained in:
2026-01-25 23:36:23 +08:00
commit 501d11e14e
371 changed files with 68853 additions and 0 deletions

View File

@@ -0,0 +1,176 @@
"""
Phase 7 代码质量验证脚本
"""
import os
import re
from pathlib import Path
def check_file_exists(filepath):
"""检查文件是否存在"""
if os.path.exists(filepath):
print(f"[OK] {filepath}")
return True
else:
print(f"[FAIL] {filepath} - 文件不存在")
return False
def check_file_syntax(filepath):
"""检查文件语法"""
try:
with open(filepath, 'r', encoding='utf-8') as f:
code = f.read()
compile(code, filepath, 'exec')
print(f"[OK] {filepath} - 语法检查通过")
return True
except Exception as e:
print(f"[FAIL] {filepath} - 语法错误: {e}")
return False
def check_docstring(filepath):
"""检查文件是否有docstring"""
try:
with open(filepath, 'r', encoding='utf-8') as f:
content = f.read()
# 检查模块docstring
has_module_docstring = '"""' in content[:500]
# 统计函数docstring
function_pattern = r'def\s+\w+\([^)]*\):[^)]*"""'
function_docstrings = len(re.findall(function_pattern, content))
# 统计类docstring
class_pattern = r'class\s+\w+.*?:[^)]*"""'
class_docstrings = len(re.findall(class_pattern, content))
print(f"[OK] {filepath} - 模块文档: {has_module_docstring}, 函数文档: {function_docstrings}, 类文档: {class_docstrings}")
return True
except Exception as e:
print(f"[WARN] {filepath} - 无法检查文档: {e}")
return False
def check_type_hints(filepath):
"""检查类型注解"""
try:
with open(filepath, 'r', encoding='utf-8') as f:
content = f.read()
# 统计函数定义
def_count = len(re.findall(r'def\s+\w+', content))
# 统计类型注解
param_hints = len(re.findall(r'def\s+\w+\([^)]*:\s*\w+', content))
return_hints = len(re.findall(r'->\s*\w+', content))
coverage = (param_hints + return_hints) / (2 * def_count) * 100 if def_count > 0 else 0
print(f"[OK] {filepath} - 类型注解覆盖率: {coverage:.1f}%")
return True
except Exception as e:
print(f"[WARN] {filepath} - 无法检查类型注解: {e}")
return False
def main():
"""主验证函数"""
print("=" * 60)
print("Phase 7 代码质量验证")
print("=" * 60)
base_path = Path("C:/Users/Administrator/asset_management_backend")
# 需要检查的文件列表
files_to_check = [
# 模型层
"app/models/system_config.py",
"app/models/operation_log.py",
"app/models/notification.py",
# Schema层
"app/schemas/system_config.py",
"app/schemas/operation_log.py",
"app/schemas/notification.py",
"app/schemas/statistics.py",
# CRUD层
"app/crud/system_config.py",
"app/crud/operation_log.py",
"app/crud/notification.py",
# 服务层
"app/services/system_config_service.py",
"app/services/operation_log_service.py",
"app/services/notification_service.py",
"app/services/statistics_service.py",
# API层
"app/api/v1/statistics.py",
"app/api/v1/system_config.py",
"app/api/v1/operation_logs.py",
"app/api/v1/notifications.py",
# 中间件
"app/middleware/operation_log.py",
# 工具
"app/utils/redis_client.py",
]
print("\n1. 检查文件是否存在")
print("-" * 60)
exist_results = []
for filepath in files_to_check:
full_path = base_path / filepath
exist_results.append(check_file_exists(str(full_path)))
print("\n2. 检查文件语法")
print("-" * 60)
syntax_results = []
for filepath in files_to_check:
full_path = base_path / filepath
if os.path.exists(str(full_path)):
syntax_results.append(check_file_syntax(str(full_path)))
print("\n3. 检查文档注释")
print("-" * 60)
doc_results = []
for filepath in files_to_check:
full_path = base_path / filepath
if os.path.exists(str(full_path)):
doc_results.append(check_docstring(str(full_path)))
print("\n4. 检查类型注解")
print("-" * 60)
type_results = []
for filepath in files_to_check:
full_path = base_path / filepath
if os.path.exists(str(full_path)):
type_results.append(check_type_hints(str(full_path)))
# 统计结果
print("\n" + "=" * 60)
print("验证结果汇总")
print("=" * 60)
total_files = len(files_to_check)
existing_files = sum(exist_results)
syntax_passed = sum(syntax_results)
print(f"总文件数: {total_files}")
print(f"文件存在: {existing_files}/{total_files} ({existing_files/total_files*100:.1f}%)")
print(f"语法检查: {syntax_passed}/{existing_files} ({syntax_passed/existing_files*100 if existing_files > 0 else 0:.1f}%)")
if existing_files == total_files and syntax_passed == existing_files:
print("\n[SUCCESS] 所有检查通过Phase 7 开发完成!")
return 0
else:
print("\n[FAIL] 部分检查未通过,请查看详情")
return 1
if __name__ == "__main__":
exit(main())