From c74334d56f92aec84d07daa4fb5e775c89381617 Mon Sep 17 00:00:00 2001 From: poiigzhao Date: Fri, 25 Apr 2025 10:58:54 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=9C=A8PushReviewEntity=E4=B8=AD?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0user=5Fusername=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在PushReviewEntity中新增user_username字段,以便在推送事件处理中记录用户信息。同时优化了WeComNotifier的HTML标签处理逻辑,保留企业微信的@消息格式,并增加了日志记录。此外,改进了时间戳的格式化处理,使其更易读。 --- biz/entity/review_entity.py | 3 ++- biz/event/event_manager.py | 12 +++++++++++- biz/queue/worker.py | 2 ++ biz/utils/im/wecom.py | 6 ++++-- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/biz/entity/review_entity.py b/biz/entity/review_entity.py index 13984a1b3..2c759b1f7 100644 --- a/biz/entity/review_entity.py +++ b/biz/entity/review_entity.py @@ -20,7 +20,7 @@ def commit_messages(self): class PushReviewEntity: def __init__(self, project_name: str, author: str, branch: str, updated_at: int, commits: list, score: float, - review_result: str, url_slug: str): + review_result: str, url_slug: str, user_username: str): self.project_name = project_name self.author = author self.branch = branch @@ -29,6 +29,7 @@ def __init__(self, project_name: str, author: str, branch: str, updated_at: int, self.score = score self.review_result = review_result self.url_slug = url_slug + self.user_username = user_username @property def commit_messages(self): diff --git a/biz/event/event_manager.py b/biz/event/event_manager.py index 26e316c9d..a52dcff5b 100644 --- a/biz/event/event_manager.py +++ b/biz/event/event_manager.py @@ -1,9 +1,19 @@ from blinker import Signal +from datetime import datetime from biz.entity.review_entity import MergeRequestReviewEntity, PushReviewEntity from biz.service.review_service import ReviewService from biz.utils.im import notifier + +def format_timestamp(timestamp_str: str) -> str: + """将ISO 8601格式的时间字符串转换为更易读的格式""" + try: + dt = datetime.fromisoformat(timestamp_str) + return dt.strftime('%Y-%m-%d %H:%M:%S') + except (ValueError, TypeError): + return timestamp_str + # 定义全局事件管理器(事件信号) event_manager = { "merge_request_reviewed": Signal(), @@ -47,7 +57,7 @@ def on_push_reviewed(entity: PushReviewEntity): for commit in entity.commits: message = commit.get('message', '').strip() author = commit.get('author', 'Unknown Author') - timestamp = commit.get('timestamp', '') + timestamp = format_timestamp(commit.get('timestamp', '')) url = commit.get('url', '#') im_msg += ( f"- **提交信息**: {message}\n" diff --git a/biz/queue/worker.py b/biz/queue/worker.py index 94b05754f..5ad2c4685 100644 --- a/biz/queue/worker.py +++ b/biz/queue/worker.py @@ -49,6 +49,7 @@ def handle_push_event(webhook_data: dict, gitlab_token: str, gitlab_url: str, gi score=score, review_result=review_result, url_slug=gitlab_url_slug, + user_username=webhook_data['user_username'] )) except Exception as e: @@ -155,6 +156,7 @@ def handle_github_push_event(webhook_data: dict, github_token: str, github_url: score=score, review_result=review_result, url_slug=github_url_slug, + user_username=webhook_data['user_username'] )) except Exception as e: diff --git a/biz/utils/im/wecom.py b/biz/utils/im/wecom.py index 2fbf46778..9fb88218e 100644 --- a/biz/utils/im/wecom.py +++ b/biz/utils/im/wecom.py @@ -60,8 +60,8 @@ def format_markdown_content(self, content, title=None): # 处理链接格式 content = re.sub(r'\[(.*?)\]\((.*?)\)', r'[链接]\2', content) - # 移除HTML标签 - content = re.sub(r'<[^>]+>', '', content) + # 移除HTML标签,但保留企业微信的@消息格式 + content = re.sub(r'<(?!@)[^>]+>', '', content) formatted_content += content return formatted_content @@ -191,6 +191,8 @@ def _build_text_message(self, content, is_at_all): def _build_markdown_message(self, content, title): """ 构造 Markdown 消息 """ formatted_content = self.format_markdown_content(content, title) + # 增加日志 + logger.info(formatted_content) return { "msgtype": "markdown", "markdown": {