Skip to content

Commit 5cf5f06

Browse files
committed
feat: impl issue page node handle
1 parent 7ff1878 commit 5cf5f06

File tree

1 file changed

+42
-4
lines changed

1 file changed

+42
-4
lines changed

petercat_utils/rag_helper/git_issue_task.py

Lines changed: 42 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ def handle(self):
6666
self.update_status(TaskStatus.IN_PROGRESS)
6767
if self.node_type == GitIssueTaskNodeType.REPO:
6868
return self.handle_repo_node()
69+
elif self.node_type == GitIssueTaskNodeType.ISSUE_PAGE:
70+
return self.handle_issue_page_node()
6971
elif self.node_type == GitIssueTaskNodeType.ISSUE:
7072
return self.handle_issue_node()
7173
else:
@@ -84,6 +86,7 @@ def handle_repo_node(self):
8486

8587
slice_page_index = latest_page[0]["page_index"] if len(latest_page) > 0 else 0
8688

89+
# The latest page might have a new issue.
8790
if len(latest_page) > 0:
8891
create_rag_git_issue_task(latest_page[0]).send()
8992

@@ -109,10 +112,45 @@ def handle_repo_node(self):
109112
issue_task = create_rag_git_issue_task(record)
110113
issue_task.send()
111114

112-
return (self.get_table().update(
113-
{"status": TaskStatus.COMPLETED.value})
114-
.eq("id", self.id)
115-
.execute())
115+
return self.update_status(TaskStatus.COMPLETED)
116+
117+
def handle_issue_page_node(self):
118+
repo = g.get_repo(self.repo_name)
119+
issues = repo.get_issues(state='all').get_page(self.page_index)
120+
121+
task_list = list(
122+
map(
123+
lambda item: {
124+
"repo_name": self.repo_name,
125+
"issue_id": item.number,
126+
"status": TaskStatus.NOT_STARTED.value,
127+
"node_type": GitIssueTaskNodeType.ISSUE.value,
128+
"from_task_id": self.id,
129+
"bot_id": self.bot_id,
130+
},
131+
issues,
132+
),
133+
)
134+
if len(task_list) > 0:
135+
existing_issues = (self.get_table()
136+
.select('*')
137+
.in_('issue_id', [item['issue_id'] for item in task_list])
138+
.eq('repo_name', self.repo_name)
139+
.eq('node_type', GitIssueTaskNodeType.ISSUE.value)
140+
.execute()
141+
)
142+
143+
existing_issue_ids = {int(issue['issue_id']) for issue in existing_issues.data}
144+
145+
new_task_list = [item for item in task_list if item['issue_id'] not in existing_issue_ids]
146+
if len(new_task_list) > 0:
147+
result = self.get_table().insert(new_task_list).execute()
148+
for record in result.data:
149+
issue_task = create_rag_git_issue_task(record)
150+
issue_task.send()
151+
152+
return self.update_status(TaskStatus.COMPLETED)
153+
116154

117155
def handle_issue_node(self):
118156
issue_retrieval.add_knowledge_by_issue(

0 commit comments

Comments
 (0)