157 lines
4.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
任务二主程序入口
TAPD状态实时同步至腾讯智能表格
功能:
1. 命令行参数解析
2. 单次执行模式
3. 执行结果统计
"""
import sys
import argparse
from pathlib import Path
from datetime import datetime
# 将项目根目录添加到 Python 路径
project_root = Path(__file__).parent.parent
sys.path.insert(0, str(project_root))
from src.token_manager import TokenManager
from src2.config import Task2ConfigManager
from src2.sync_service import run_once
def parse_arguments():
"""解析命令行参数"""
parser = argparse.ArgumentParser(
description='TAPD状态同步工具 - 将TAPD需求状态同步到腾讯智能表格',
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog="""
示例用法:
# 执行一次同步
python src2/main.py
# 指定配置文件
python src2/main.py --config /path/to/config.ini
# 测试模式(显示详细信息)
python src2/main.py --test
# 手动传入access_token
python src2/main.py --token YOUR_ACCESS_TOKEN
"""
)
parser.add_argument(
'-c', '--config',
default=None,
help='配置文件路径(默认: config/config_task2.ini'
)
parser.add_argument(
'-t', '--token',
default=None,
help='手动传入access_token默认自动获取'
)
parser.add_argument(
'--test',
action='store_true',
help='启用测试模式显示详细的API调用信息'
)
return parser.parse_args()
def print_result_summary(result: dict):
"""打印执行结果摘要"""
print("\n" + "=" * 60)
print("执行结果摘要")
print("=" * 60)
if result["success"]:
print("状态: ✓ 成功")
else:
print("状态: ✗ 失败")
if result.get("error_message"):
print(f"错误: {result['error_message']}")
print(f"\n子表统计:")
print(f" 处理子表: {result['sheets_processed']}")
print(f" 跳过子表: {result['sheets_skipped']}")
print(f"\n记录统计:")
print(f" 包含链接: {result['records_with_link']}")
print(f" 同步成功: {result['records_synced']}")
print(f" 需要更新: {result['records_updated']}")
print(f" 同步失败: {result['records_failed']}")
# 显示各子表详情
if result.get("sheet_results"):
print(f"\n子表详情:")
for sheet in result["sheet_results"]:
status = "跳过" if sheet["skipped"] else "完成"
print(f" - {sheet['sheet_title']}: {status}")
if sheet["skipped"]:
print(f" 原因: {sheet['skip_reason']}")
else:
print(f" 链接: {sheet['records_with_link']} | "
f"更新: {sheet['records_updated']} | "
f"失败: {sheet['records_failed']}")
print("=" * 60)
def main():
"""主函数"""
print("\n" + "=" * 60)
print("TAPD状态同步工具 (任务二)")
print(f"执行时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
print("=" * 60)
try:
# 解析命令行参数
args = parse_arguments()
# 初始化配置管理器
print("\n正在加载配置...")
config_manager = Task2ConfigManager(config_path=args.config)
config_manager.print_config()
# 获取access_token
access_token = args.token
if access_token is None:
print("正在获取access_token...")
token_manager = TokenManager()
access_token = token_manager.get_token()
print(f" ✓ access_token获取成功")
# 执行同步
print("\n开始执行同步...")
result = run_once(
config_manager=config_manager,
access_token=access_token,
test_mode=args.test
)
# 打印结果摘要
print_result_summary(result)
# 返回状态码
return 0 if result["success"] else 1
except KeyboardInterrupt:
print("\n\n用户中断执行")
return 130
except Exception as e:
print(f"\n✗ 执行失败: {e}")
import traceback
traceback.print_exc()
return 1
if __name__ == "__main__":
sys.exit(main())