mirror of
https://github.com/langgenius/dify-docs.git
synced 2026-03-27 13:28:32 +07:00
120 lines
3.8 KiB
Python
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()
|