Skip to content

Commit ae2d0c9

Browse files
committed
Import label-bot in rule-handler
Import label-bot in rule-handler
1 parent c6398b9 commit ae2d0c9

File tree

1 file changed

+61
-6
lines changed

1 file changed

+61
-6
lines changed

rule_generator.py

Lines changed: 61 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import json
22
import pandas as pd
3+
import requests
4+
import os
35

6+
LABEL_BOT_URL = os.environ.get('LABEL_BOT_URL', 'http://127.0.0.1:8008')
47

58
# Step 1: Multi-dimension developer portrait
69
def label_developer_portrait(user, user_profile):
@@ -129,12 +132,16 @@ def rule_generator(issue, user_profile, bot_conf):
129132
issue_owner_portrait = label_developer_portrait(issue['issueUser']['issueUserID'], user_profile)
130133
# Step 2: Generate the rules
131134
info_rules = info_rule_generator(issue, issue_owner_portrait, bot_conf)
132-
# Step 3: Finish the complete rule list
135+
# Step 3: Import rules from label-bot [https://github.com/TECH4DX/label-bot.git]
136+
label_bot_rules = get_label_bot_rules("Issue Hook", issue)
137+
# Step 4: Finish the complete rule list
133138
rule_list = []
134-
if not isinstance(info_rules, list):
139+
if not isinstance(info_rules, list) or not isinstance(label_bot_rules, list):
135140
info_rules = list(info_rules)
136-
rule_list = rule_list + info_rules
137-
return rule_list
141+
label_bot_rules = list(label_bot_rules)
142+
rule_list = rule_list + info_rules + label_bot_rules
143+
rules = list(filter(lambda x: rule_list.count(x) == 1, rule_list)) # Currently rule-handler and label-bot generate some same rules when creating an issue, so de-duplicated them here.
144+
return rules
138145

139146
def label_handler(labels):
140147
isContainUser = False
@@ -145,6 +152,56 @@ def label_handler(labels):
145152
break
146153
return isContainUser
147154

155+
def convert_payload(issue):
156+
payload = dict()
157+
payload["action"] = issue["issueAction"]
158+
payload["enterprise"] = issue["repoInfo"]["ent"] if issue["repoInfo"]["ent"] != "" else None
159+
payload["iid"] = issue["issueID"]
160+
161+
payload_issue = dict()
162+
# payload_issue["assignee"] = issue["issueAssignee"] # Do not use this field, because label-bot will not unmarshal this one.
163+
payload_issue["body"] = issue["issueContent"]
164+
payload_issue["created_at"] = issue["issueTime"]
165+
166+
# payload_issue_labels = [{"name": labels["labelName"]} for labels in issue["issueLabel"]] if len(issue["issueLabel"]) != 0 else []
167+
payload_issue_labels = [{"name": labels["labelName"]} for labels in issue["issueLabel"]] if issue["issueLabel"] is not None else [] # issue["issueLabel"] should be empty, but the retriever didn't pass it when empty.
168+
payload_issue["labels"] = payload_issue_labels
169+
170+
payload_issue["number"] = issue["issueID"]
171+
payload_issue["title"] = issue["issueTitle"]
172+
payload_issue["updated_at"] = issue["issueUpdateTime"]
173+
174+
payload_issue_user = dict()
175+
payload_issue_user["login"] = issue["issueUser"]["issueUserID"]
176+
payload_issue_user["name"] = issue["issueUser"]["issueUserName"]
177+
payload_issue["user"] = payload_issue_user
178+
179+
payload_repository = dict()
180+
payload_repository["name"] = issue["repoInfo"]["repo"]
181+
payload_repository["namespace"] = issue["repoInfo"]["org"]
182+
183+
payload["issue"] = payload_issue
184+
payload["repository"] = payload_repository
185+
186+
return payload
187+
188+
def get_label_bot_rules(event_type, issue):
189+
# Label-bot needs the format of payload from Gitee, not customized structure ISSUE posted from data-cache
190+
payload = convert_payload(issue)
191+
192+
try:
193+
resp = requests.post(LABEL_BOT_URL, headers= {"event_type": event_type}, json = payload)
194+
resp.encoding = 'utf-8'
195+
except:
196+
print("Requests err when posting to LABEL_BOT_URL [{}]".format(LABEL_BOT_URL))
197+
return []
198+
else:
199+
if resp.status_code == 200:
200+
hash_map = json.loads(resp.content)
201+
rules = [content for content in hash_map.values()]
202+
return rules
203+
else:
204+
return []
148205

149206

150207
if __name__ == "__main__":
@@ -158,8 +215,6 @@ def label_handler(labels):
158215
'"issueLabel":["SIG/XX", "kind/bug"]}'
159216
test_issue = json.loads(issue_str)
160217

161-
# Loading user_profile data
162-
# Loading data
163218
label_user_profile = pd.read_csv('config/developer_portrait/issue_label_user_profile.csv').set_index('owner_login')
164219
label_bot_reaction = pd.read_csv('config/bot_reaction/issue_label_rule_generator.csv').set_index('user_habit')
165220
community_assignee_list = ['lizi', 'mfl'] # Community Maintainer

0 commit comments

Comments
 (0)