From 7583a906bbed3477fac399a310aa62e655de18ef Mon Sep 17 00:00:00 2001 From: Saramanda9988 <2074730050@qq.com> Date: Wed, 31 Dec 2025 14:15:59 +0800 Subject: [PATCH] fix: fix pre-commit --- scripts/debug_render.py | 128 +++++++++++++++++++++++++++++----------- 1 file changed, 95 insertions(+), 33 deletions(-) diff --git a/scripts/debug_render.py b/scripts/debug_render.py index 1cc0998..e3ba590 100644 --- a/scripts/debug_render.py +++ b/scripts/debug_render.py @@ -2,7 +2,6 @@ import os import sys import asyncio import argparse -from datetime import datetime from pathlib import Path # Add src to path so we can import our modules @@ -10,6 +9,7 @@ sys.path.append(os.path.join(os.path.dirname(__file__), "..")) # Mock astrbot.api before importing our modules import types + astrbot_api = types.ModuleType("astrbot.api") astrbot_api.logger = types.ModuleType("logger") astrbot_api.logger.info = lambda x, *args, **kwargs: print(f"[INFO] {x}") @@ -18,41 +18,51 @@ astrbot_api.logger.warning = lambda x, *args, **kwargs: print(f"[WARN] {x}") astrbot_api.AstrBotConfig = dict sys.modules["astrbot.api"] = astrbot_api -from src.reports.templates import HTMLTemplates -from src.reports.generators import ReportGenerator -from src.models.data_models import ( - GroupStatistics, SummaryTopic, UserTitle, GoldenQuote, - TokenUsage, EmojiStatistics, ActivityVisualization +from src.reports.templates import HTMLTemplates # noqa: E402 +from src.reports.generators import ReportGenerator # noqa: E402 +from src.models.data_models import ( # noqa: E402 + GroupStatistics, + SummaryTopic, + UserTitle, + GoldenQuote, + TokenUsage, + EmojiStatistics, + ActivityVisualization, ) + class MockConfigManager: - def __init__(self, template_name="format"): + def __init__(self, template_name: str = "format") -> None: self.template_name = template_name - def get_report_template(self): + def get_report_template(self) -> str: return self.template_name - def get_max_topics(self): + def get_max_topics(self) -> int: return 5 - def get_max_user_titles(self): + def get_max_user_titles(self) -> int: return 8 - def get_max_golden_quotes(self): + def get_max_golden_quotes(self) -> int: return 5 - def get_pdf_output_dir(self): + def get_pdf_output_dir(self) -> str: return "data/pdf" - def get_pdf_filename_format(self): + def get_pdf_filename_format(self) -> str: return "report_{group_id}_{date}.pdf" -async def mock_get_user_avatar(user_id): + +async def mock_get_user_avatar(user_id: int) -> str: # Return a placeholder or a real base64 if needed # For debugging, a simple colored square or a known avatar is fine return "https://q4.qlogo.cn/headimg_dl?dst_uin=123456789&spec=640" -async def debug_render(template_name: str, output_file: str = "debug_output.html"): + +async def debug_render( + template_name: str, output_file: str = "debug_output.html" +) -> None: # 1. Setup Mock Data config_manager = MockConfigManager(template_name) @@ -63,34 +73,80 @@ async def debug_render(template_name: str, output_file: str = "debug_output.html participant_count=42, most_active_period="20:00 - 22:00", golden_quotes=[ - GoldenQuote(content="代码写得好,下班走得早。", sender="张三", reason="深刻揭示了程序员的生存法则"), - GoldenQuote(content="这个Bug我不修,它就是个Feature。", sender="李四", reason="经典的开发辩解"), - GoldenQuote(content="PHP是世界上最好的语言!", sender="王五", reason="引发了长达3小时的群聊大讨论") + GoldenQuote( + content="代码写得好,下班走得早。", + sender="张三", + reason="深刻揭示了程序员的生存法则", + ), + GoldenQuote( + content="这个Bug我不修,它就是个Feature。", + sender="李四", + reason="经典的开发辩解", + ), + GoldenQuote( + content="PHP是世界上最好的语言!", + sender="王五", + reason="引发了长达3小时的群聊大讨论", + ), ], emoji_count=156, emoji_statistics=EmojiStatistics(face_count=100, mface_count=56), activity_visualization=ActivityVisualization( - hourly_activity={i: (10 + i*5 if i < 12 else 100 - i*2) for i in range(24)} + hourly_activity={ + i: (10 + i * 5 if i < 12 else 100 - i * 2) for i in range(24) + } + ), + token_usage=TokenUsage( + prompt_tokens=1500, completion_tokens=800, total_tokens=2300 ), - token_usage=TokenUsage(prompt_tokens=1500, completion_tokens=800, total_tokens=2300) ) topics = [ - SummaryTopic(topic="关于AstrBot插件开发的讨论", contributors=["张三", "李四", "王五"], detail="大家深入探讨了如何利用Jinja2模板渲染出精美的分析报告,并分享了调试技巧。"), - SummaryTopic(topic="午餐吃什么的终极哲学问题", contributors=["赵六", "孙七"], detail="群友们就黄焖鸡米饭和螺蛳粉的优劣进行了长达一小时的辩论,最终未能达成共识。"), - SummaryTopic(topic="新出的3A大作测评", contributors=["周八", "吴九"], detail="分享了最新游戏的通关体验,讨论了画面表现和剧情走向。") + SummaryTopic( + topic="关于AstrBot插件开发的讨论", + contributors=["张三", "李四", "王五"], + detail="大家深入探讨了如何利用Jinja2模板渲染出精美的分析报告,并分享了调试技巧。", + ), + SummaryTopic( + topic="午餐吃什么的终极哲学问题", + contributors=["赵六", "孙七"], + detail="群友们就黄焖鸡米饭和螺蛳粉的优劣进行了长达一小时的辩论,最终未能达成共识。", + ), + SummaryTopic( + topic="新出的3A大作测评", + contributors=["周八", "吴九"], + detail="分享了最新游戏的通关体验,讨论了画面表现和剧情走向。", + ), ] user_titles = [ - UserTitle(name="张三", qq=123456789, title="代码收割机", mbti="INTJ", reason="在短短一小时内提交了10个PR,效率惊人。"), - UserTitle(name="李四", qq=987654321, title="群聊气氛组", mbti="ENFP", reason="总能精准接住每一个冷笑话,让群里充满快活的气息。"), - UserTitle(name="王五", qq=112233445, title="深夜潜水员", mbti="INFP", reason="总是在凌晨三点出没,留下几句深奥的话语后消失。") + UserTitle( + name="张三", + qq=123456789, + title="代码收割机", + mbti="INTJ", + reason="在短短一小时内提交了10个PR,效率惊人。", + ), + UserTitle( + name="李四", + qq=987654321, + title="群聊气氛组", + mbti="ENFP", + reason="总能精准接住每一个冷笑话,让群里充满快活的气息。", + ), + UserTitle( + name="王五", + qq=112233445, + title="深夜潜水员", + mbti="INFP", + reason="总是在凌晨三点出没,留下几句深奥的话语后消失。", + ), ] analysis_result = { "statistics": stats, "topics": topics, - "user_titles": user_titles + "user_titles": user_titles, } # 2. Initialize Generator @@ -114,28 +170,34 @@ async def debug_render(template_name: str, output_file: str = "debug_output.html output_path = Path(output_file) output_path.write_text(final_html, encoding="utf-8") - print(f"Successfully rendered template '{template_name}' to {output_path.absolute()}") + print( + f"Successfully rendered template '{template_name}' to {output_path.absolute()}" + ) print("You can now open this file with VS Code Live Server to debug your HTML/CSS.") -def main(): + +def main() -> None: parser = argparse.ArgumentParser( description="Debug render tool for astrbot-qq-group-daily-analysis report templates." ) parser.add_argument( - "-t", "--template", + "-t", + "--template", type=str, default="retro_futurism", - help="Template name to render (default: retro_futurism)" + help="Template name to render (default: retro_futurism)", ) parser.add_argument( - "-o", "--output", + "-o", + "--output", type=str, default="debug_output.html", - help="Output HTML file path (default: debug_output.html)" + help="Output HTML file path (default: debug_output.html)", ) args = parser.parse_args() asyncio.run(debug_render(args.template, args.output)) + if __name__ == "__main__": main()