Skip to content

Commit 32160e9

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

File tree

1 file changed

+63
-7
lines changed

1 file changed

+63
-7
lines changed

rule_generator.py

Lines changed: 63 additions & 7 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,17 @@ 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):
135-
info_rules = list(info_rules)
136-
rule_list = rule_list + info_rules
137-
return rule_list
139+
if not isinstance(info_rules, list) or not isinstance(label_bot_rules, list):
140+
# info_rules = list(info_rules)
141+
label_bot_rules = list(label_bot_rules)
142+
# rule_list = rule_list + info_rules
143+
rule_list = rule_list + info_rules + label_bot_rules
144+
# return rule_list
145+
return 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.
138146

139147
def label_handler(labels):
140148
isContainUser = False
@@ -145,6 +153,56 @@ def label_handler(labels):
145153
break
146154
return isContainUser
147155

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

149207

150208
if __name__ == "__main__":
@@ -158,8 +216,6 @@ def label_handler(labels):
158216
'"issueLabel":["SIG/XX", "kind/bug"]}'
159217
test_issue = json.loads(issue_str)
160218

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

0 commit comments

Comments
 (0)