Skip to content

Commit 5f02c1b

Browse files
committed
Merge branch 'feature/i18n'
# Conflicts: # .github/workflows/build_image.yml # api.py # biz/entity/review_entity.py # biz/event/event_manager.py # biz/utils/im/dingtalk.py # locales/en_US/LC_MESSAGES/messages.mo # locales/en_US/LC_MESSAGES/messages.po # locales/zh_CN/LC_MESSAGES/messages.po
2 parents 316444b + b994113 commit 5f02c1b

File tree

12 files changed

+264
-234
lines changed

12 files changed

+264
-234
lines changed

api.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -144,15 +144,19 @@ def handle_webhook():
144144
# 创建一个新进程进行异步处理
145145
handle_queue(handle_merge_request_event, data, gitlab_token, gitlab_url, gitlab_domain_slug)
146146
# 立马返回响应
147-
return jsonify({'message': _('Request received(object_kind={}), will process asynchronously.').format(object_kind)}), 200
147+
return jsonify({'message': _('Request received(object_kind={}), will process asynchronously.').format(
148+
object_kind)}), 200
148149
elif object_kind == "push":
149150
# 创建一个新进程进行异步处理
150151
# TODO check if PUSH_REVIEW_ENABLED is needed here
151152
handle_queue(handle_push_event, data, gitlab_token, gitlab_url, gitlab_domain_slug)
152153
# 立马返回响应
153-
return jsonify({'message': _('Request received(object_kind={}), will process asynchronously.').format(object_kind)}), 200
154+
return jsonify({'message': _('Request received(object_kind={}), will process asynchronously.').format(
155+
object_kind)}), 200
154156
else:
155-
error_message = _('Only merge_request and push events are supported (both Webhook and System Hook), but received: {}.').format(object_kind)
157+
error_message = _(
158+
'Only merge_request and push events are supported (both Webhook and System Hook), but received: {}.').format(
159+
object_kind)
156160
logger.error(error_message)
157161
return jsonify(error_message), 400
158162
else:

biz/entity/review_entity.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
class MergeRequestReviewEntity:
22
def __init__(self, project_name: str, author: str, source_branch: str, target_branch: str, updated_at: int,
3-
commits: list, score: float, url: str, review_result: str, gitlab_domain_slug: str):
3+
commits: list, score: float, url: str, review_result: str, gitlab_url_slug: str):
44
self.project_name = project_name
55
self.author = author
66
self.source_branch = source_branch
@@ -10,7 +10,7 @@ def __init__(self, project_name: str, author: str, source_branch: str, target_br
1010
self.score = score
1111
self.url = url
1212
self.review_result = review_result
13-
self.gitlab_domain_slug = gitlab_domain_slug
13+
self.gitlab_url_slug = gitlab_url_slug
1414

1515
@property
1616
def commit_messages(self):
@@ -20,15 +20,15 @@ def commit_messages(self):
2020

2121
class PushReviewEntity:
2222
def __init__(self, project_name: str, author: str, branch: str, updated_at: int, commits: list, score: float,
23-
review_result: str, gitlab_domain_slug: str):
23+
review_result: str, gitlab_url_slug: str):
2424
self.project_name = project_name
2525
self.author = author
2626
self.branch = branch
2727
self.updated_at = updated_at
2828
self.commits = commits
2929
self.score = score
3030
self.review_result = review_result
31-
self.gitlab_domain_slug = gitlab_domain_slug
31+
self.gitlab_url_slug = gitlab_url_slug
3232

3333
@property
3434
def commit_messages(self):

biz/event/event_manager.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ def on_merge_request_reviewed(mr_review_entity: MergeRequestReviewEntity):
4444
review_result=mr_review_entity.review_result
4545
)
4646
im_notifier.send_notification(content=im_msg, msg_type='markdown', title=_('Merge Request Review'),
47-
project_name=mr_review_entity.project_name, url_base=mr_review_entity.gitlab_domain_slug)
47+
project_name=mr_review_entity.project_name,
48+
gitlab_url_slug=mr_review_entity.gitlab_url_slug)
4849

4950
# 记录到数据库
5051
ReviewService().insert_mr_review_log(mr_review_entity)
@@ -77,7 +78,7 @@ def on_push_reviewed(entity: PushReviewEntity):
7778
im_notifier.send_notification(content=im_msg, msg_type='markdown',
7879
title=_("{project_name} Push Event").format(project_name=entity.project_name),
7980
project_name=entity.project_name,
80-
url_base=entity.gitlab_domain_slug)
81+
gitlab_url_slug=entity.gitlab_url_slug)
8182

8283
# 记录到数据库
8384
ReviewService().insert_push_review_log(entity)

biz/queue/worker.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
from biz.utils.i18n import get_translator
1818
_ = get_translator()
1919

20-
def handle_push_event(webhook_data: dict, gitlab_token: str, gitlab_url: str, gitlab_domain_slug: str):
20+
def handle_push_event(webhook_data: dict, gitlab_token: str, gitlab_url: str, gitlab_url_slug: str):
2121
try:
2222
handler = PushHandler(webhook_data, gitlab_token, gitlab_url)
2323
logger.info('Push Hook event received')
@@ -53,7 +53,7 @@ def handle_push_event(webhook_data: dict, gitlab_token: str, gitlab_url: str, gi
5353
commits=commits,
5454
score=score,
5555
review_result=review_result,
56-
gitlab_domain_slug=gitlab_domain_slug
56+
gitlab_url_slug=gitlab_url_slug
5757
))
5858

5959
except Exception as e:
@@ -62,13 +62,13 @@ def handle_push_event(webhook_data: dict, gitlab_token: str, gitlab_url: str, gi
6262
logger.error(_('出现未知错误: {}').format(error_message))
6363

6464

65-
def handle_merge_request_event(webhook_data: dict, gitlab_token: str, gitlab_url: str, gitlab_domain_slug: str):
65+
def handle_merge_request_event(webhook_data: dict, gitlab_token: str, gitlab_url: str, gitlab_url_slug: str):
6666
'''
6767
处理Merge Request Hook事件
6868
:param webhook_data:
6969
:param gitlab_token:
7070
:param gitlab_url:
71-
:param gitlab_domain_slug:
71+
:param gitlab_url_slug:
7272
:return:
7373
'''
7474
try:
@@ -112,7 +112,7 @@ def handle_merge_request_event(webhook_data: dict, gitlab_token: str, gitlab_url
112112
score=CodeReviewer.parse_review_score(review_text=review_result),
113113
url=webhook_data['object_attributes']['url'],
114114
review_result=review_result,
115-
gitlab_domain_slug= gitlab_domain_slug,
115+
gitlab_url_slug= gitlab_url_slug,
116116
)
117117
)
118118

biz/utils/im/dingtalk.py

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,11 @@ def __init__(self, webhook_url=None):
1414
self.enabled = os.environ.get('DINGTALK_ENABLED', '0') == '1'
1515
self.default_webhook_url = webhook_url or os.environ.get('DINGTALK_WEBHOOK_URL')
1616

17-
def _get_webhook_url(self, project_name=None, url_base=None):
17+
def _get_webhook_url(self, project_name=None, gitlab_url_slug=None):
1818
"""
1919
获取项目对应的 Webhook URL
2020
:param project_name: 项目名称
21+
:param gitlab_url_slug: 由 gitlab 项目的 url 转换而来的 slug
2122
:return: Webhook URL
2223
:raises ValueError: 如果未找到 Webhook URL
2324
"""
@@ -28,17 +29,17 @@ def _get_webhook_url(self, project_name=None, url_base=None):
2829
else:
2930
raise ValueError(_("未提供项目名称,且未设置默认的钉钉 Webhook URL。"))
3031

31-
# 遍历所有环境变量(忽略大小写),找到项目对应的 Webhook URL
32-
target_key = f"DINGTALK_WEBHOOK_URL_{project_name.upper()}"
33-
for env_key, env_value in os.environ.items():
34-
if env_key.upper() == target_key:
35-
return env_value # 找到匹配项,直接返回
32+
# 构造目标键
33+
target_key_project = f"DINGTALK_WEBHOOK_URL_{project_name.upper()}"
34+
target_key_url_slug = f"DINGTALK_WEBHOOK_URL_{gitlab_url_slug.upper()}"
3635

37-
# url_base 优先级次之
38-
target_key_url_base = f"WECOM_WEBHOOK_URL_{url_base.upper()}"
36+
# 遍历环境变量
3937
for env_key, env_value in os.environ.items():
40-
if target_key_url_base != None and env_key.upper() == target_key_url_base:
41-
return env_value # 找到匹配项,直接返回
38+
env_key_upper = env_key.upper()
39+
if env_key_upper == target_key_project:
40+
return env_value # 找到项目名称对应的 Webhook URL,直接返回
41+
if env_key_upper == target_key_url_slug:
42+
return env_value # 找到 GitLab URL 对应的 Webhook URL,直接返回
4243

4344
# 如果未找到匹配的环境变量,降级使用全局的 Webhook URL
4445
if self.default_webhook_url:
@@ -47,13 +48,13 @@ def _get_webhook_url(self, project_name=None, url_base=None):
4748
# 如果既未找到匹配项,也没有默认值,抛出异常
4849
raise ValueError(_("未找到项目 '{}' 对应的钉钉Webhook URL,且未设置默认的 Webhook URL。").format(project_name))
4950

50-
def send_message(self, content: str, msg_type='text', title=_('通知'), is_at_all=False, project_name=None, url_base=None):
51+
def send_message(self, content: str, msg_type='text', title='通知', is_at_all=False, project_name=None, gitlab_url_slug = None):
5152
if not self.enabled:
5253
logger.info(_("钉钉推送未启用"))
5354
return
5455

5556
try:
56-
post_url = self._get_webhook_url(project_name=project_name, url_base=url_base)
57+
post_url = self._get_webhook_url(project_name=project_name, gitlab_url_slug=gitlab_url_slug)
5758
headers = {
5859
"Content-Type": "application/json",
5960
"Charset": "UTF-8"

biz/utils/im/feishu.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ def __init__(self, webhook_url=None):
1313
self.default_webhook_url = webhook_url or os.environ.get('FEISHU_WEBHOOK_URL', '')
1414
self.enabled = os.environ.get('FEISHU_ENABLED', '0') == '1'
1515

16-
def _get_webhook_url(self, project_name=None, url_base=None):
16+
def _get_webhook_url(self, project_name=None, gitlab_url_slug=None):
1717
"""
1818
获取项目对应的 Webhook URL
1919
:param project_name: 项目名称
@@ -27,17 +27,17 @@ def _get_webhook_url(self, project_name=None, url_base=None):
2727
else:
2828
raise ValueError(_("未提供项目名称,且未设置默认的 飞书 Webhook URL。"))
2929

30-
# 遍历所有环境变量(忽略大小写),找到项目对应的 Webhook URL
31-
target_key = f"FEISHU_WEBHOOK_URL_{project_name.upper()}"
32-
for env_key, env_value in os.environ.items():
33-
if env_key.upper() == target_key:
34-
return env_value # 找到匹配项,直接返回
35-
36-
# url_base 优先级次之
37-
target_key_url_base = f"WECOM_WEBHOOK_URL_{url_base.upper()}"
30+
# 构造目标键
31+
target_key_project = f"FEISHU_WEBHOOK_URL_{project_name.upper()}"
32+
target_key_url_slug = f"FEISHU_WEBHOOK_URL_{gitlab_url_slug.upper()}"
33+
34+
# 遍历环境变量
3835
for env_key, env_value in os.environ.items():
39-
if target_key_url_base !=None and env_key.upper() == target_key_url_base:
40-
return env_value # 找到匹配项,直接返回
36+
env_key_upper = env_key.upper()
37+
if env_key_upper == target_key_project:
38+
return env_value # 找到项目名称对应的 Webhook URL,直接返回
39+
if env_key_upper == target_key_url_slug:
40+
return env_value # 找到 GitLab URL 对应的 Webhook URL,直接返回
4141

4242
# 如果未找到匹配的环境变量,降级使用全局的 Webhook URL
4343
if self.default_webhook_url:
@@ -46,7 +46,7 @@ def _get_webhook_url(self, project_name=None, url_base=None):
4646
# 如果既未找到匹配项,也没有默认值,抛出异常
4747
raise ValueError(_("未找到项目 '{project_name}' 对应的 Feishu Webhook URL,且未设置默认的 Webhook URL。"))
4848

49-
def send_message(self, content, msg_type='text', title=None, is_at_all=False, project_name=None, url_base=None):
49+
def send_message(self, content, msg_type='text', title=None, is_at_all=False, project_name=None, gitlab_url_slug=None):
5050
"""
5151
发送飞书消息
5252
:param content: 消息内容
@@ -60,7 +60,7 @@ def send_message(self, content, msg_type='text', title=None, is_at_all=False, pr
6060
return
6161

6262
try:
63-
post_url = self._get_webhook_url(project_name=project_name, url_base=url_base)
63+
post_url = self._get_webhook_url(project_name=project_name, gitlab_url_slug=gitlab_url_slug)
6464
if msg_type == 'markdown':
6565
data = {
6666
"msg_type": "interactive",

biz/utils/im/im_notifier.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,26 +6,26 @@
66
_ = get_translator()
77

88

9-
def send_notification(content, msg_type='text', title=_("通知"), is_at_all=False, project_name=None, url_base=None):
9+
def send_notification(content, msg_type='text', title=_("通知"), is_at_all=False, project_name=None, gitlab_url_slug=None):
1010
"""
1111
发送通知消息到配置的平台(钉钉和企业微信)
1212
:param content: 消息内容
1313
:param msg_type: 消息类型,支持text和markdown
1414
:param title: 消息标题(markdown类型时使用)
1515
:param is_at_all: 是否@所有人
16-
:param url_base: gitlab服务器的url地址 http://www.gitlab.com 传递进来自动移除http和https,转换成 www_gitlab_com
16+
:param gitlab_url_slug: 由gitlab服务器的url地址(如:http://www.gitlab.com)转换成的slug格式,如: www_gitlab_com
1717
"""
1818
# 钉钉推送
1919
notifier = DingTalkNotifier()
2020
notifier.send_message(content=content, msg_type=msg_type, title=title, is_at_all=is_at_all,
21-
project_name=project_name, url_base=url_base)
21+
project_name=project_name, gitlab_url_slug=gitlab_url_slug)
2222

2323
# 企业微信推送
2424
wecom_notifier = WeComNotifier()
2525
wecom_notifier.send_message(content=content, msg_type=msg_type, title=title, is_at_all=is_at_all,
26-
project_name=project_name, url_base=url_base)
26+
project_name=project_name, gitlab_url_slug=gitlab_url_slug)
2727

2828
# 飞书推送
2929
feishu_notifier = FeishuNotifier()
3030
feishu_notifier.send_message(content=content, msg_type=msg_type, title=title, is_at_all=is_at_all,
31-
project_name=project_name, url_base=url_base)
31+
project_name=project_name, gitlab_url_slug=gitlab_url_slug)

0 commit comments

Comments
 (0)