Files
dify-docs/plugin_dev_zh/sync/view_file_mappings.py
Alter-xyz 072c505155 chore: sync
complete doc match and mapping init done
2025-05-17 03:13:36 +08:00

120 lines
3.8 KiB
Python

#!/usr/bin/env python3
"""
简单的插件映射查看器
快速查看文件映射关系,支持在 VS Code 中点击打开
"""
import json
import os
from pathlib import Path
# ANSI 颜色代码
GREEN = '\033[92m'
YELLOW = '\033[93m'
RED = '\033[91m'
BLUE = '\033[94m'
RESET = '\033[0m'
# 新增符号常量
CHECK_MARK = f"{GREEN}{RESET}"
CROSS_MARK = f"{RED}{RESET}"
EMPTY_MARK = f"{YELLOW}{RESET}"
def load_mappings(json_file="plugin_mappings.json"):
"""加载映射文件"""
base_dir = Path(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))) # 修改 base_dir 指向项目根目录
json_path = base_dir / "plugin_dev_zh" / "sync" / json_file # 修正 json_path
try:
with open(json_path, 'r', encoding='utf-8') as f:
return json.load(f)
except FileNotFoundError:
print(f"{RED}错误: 找不到文件 {json_path}{RESET}")
return None
except json.JSONDecodeError:
print(f"{RED}错误: JSON 文件格式错误{RESET}")
return None
def calculate_statistics(mappings):
"""动态计算统计信息"""
total = len(mappings)
verified = sum(1 for m in mappings if m.get('verified', False))
pending = total - verified
# 额外统计
plugin_only = sum(1 for m in mappings if m.get('plugin_path') and not m.get('dev_path'))
dev_only = sum(1 for m in mappings if m.get('dev_path') and not m.get('plugin_path'))
complete = sum(1 for m in mappings if m.get('plugin_path') and m.get('dev_path'))
return {
'total_mappings': total,
'verified_count': verified,
'pending_verification': pending,
'plugin_only': plugin_only,
'dev_only': dev_only,
'complete_mappings': complete
}
def show_mappings():
"""显示所有映射关系"""
data = load_mappings()
if not data:
return
mappings = data.get('mappings', [])
stats = calculate_statistics(mappings)
print(f"\n{BLUE}插件文档映射关系{RESET}")
print(f"总计: {stats['total_mappings']} | "
f"已验证: {GREEN}{stats['verified_count']}{RESET} | "
f"待验证: {YELLOW}{stats['pending_verification']}{RESET}")
print(f"完整映射: {stats['complete_mappings']} | "
f"仅插件: {stats['plugin_only']} | "
f"仅开发: {stats['dev_only']}") # Removed trailing \n here
print("\n路径 | 验证 | 同步细节\n") # Added newlines for spacing
separator_line1 = "-" * 56
separator_line2 = "*" * 56
for idx, mapping in enumerate(mappings, 1):
plugin_path = mapping.get('plugin_path')
dev_path = mapping.get('dev_path')
verified = mapping.get('verified', False)
sync_info = mapping.get('sync', '').strip()
# 打印分隔符
print(separator_line1)
print(separator_line2)
print(separator_line1)
print() # 在分隔符后添加空行
# 显示 Help 路径
if plugin_path:
print(f"Help: {plugin_path}")
else:
print(f"Help: {EMPTY_MARK}")
# 显示 Dev 路径
if dev_path:
print(f"Dev: {dev_path}")
else:
print(f"Dev: {EMPTY_MARK}")
# 显示 Verify 状态和 sync_info
verify_symbol = CHECK_MARK if verified else CROSS_MARK
print(f"Verify: {verify_symbol}")
if sync_info:
print(sync_info)
# No "else" needed here as per example, empty sync_info means just the symbol
def main():
"""主函数"""
show_mappings()
print(f"\n{BLUE}提示:{RESET} 在 VS Code 中,你可以使用 Cmd+点击 路径来快速打开文件")
print(f"{BLUE}命令:{RESET} python view_file_mappings.py")
if __name__ == "__main__":
main()