Skip to content

Commit 7ff1878

Browse files
committed
feat: impl issue page type
1 parent 495df6d commit 7ff1878

File tree

2 files changed

+53
-38
lines changed

2 files changed

+53
-38
lines changed

petercat_utils/data_class.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,3 +110,4 @@ class GitDocTaskNodeType(AutoNameEnum):
110110
class GitIssueTaskNodeType(AutoNameEnum):
111111
REPO = auto()
112112
ISSUE = auto()
113+
ISSUE_PAGE = auto()

petercat_utils/rag_helper/git_issue_task.py

Lines changed: 52 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
from ..data_class import GitIssueTaskNodeType, TaskStatus, TaskType, RAGGitIssueConfig
55
from ..rag_helper import issue_retrieval
66

7-
g = Github()
7+
GITHUB_PER_PAGE = 30
8+
g = Github(per_page=GITHUB_PER_PAGE)
89

910

1011
def add_rag_git_issue_task(config: RAGGitIssueConfig):
@@ -24,16 +25,19 @@ def add_rag_git_issue_task(config: RAGGitIssueConfig):
2425

2526
def create_rag_git_issue_task(record):
2627
return GitIssueTask(id=record["id"],
27-
issue_id=record["issue_id"],
28-
repo_name=record["repo_name"],
29-
node_type=record["node_type"],
30-
bot_id=record["bot_id"],
31-
status=record["status"],
32-
from_id=record["from_task_id"],
33-
page_index=record["page_index"]
34-
)
28+
issue_id=record["issue_id"],
29+
repo_name=record["repo_name"],
30+
node_type=record["node_type"],
31+
bot_id=record["bot_id"],
32+
status=record["status"],
33+
from_id=record["from_task_id"],
34+
page_index=record["page_index"]
35+
)
36+
37+
3538
class GitIssueTask(GitTask):
36-
issue_id: str
39+
issue_id: int
40+
page_index: int
3741
node_type: GitIssueTaskNodeType
3842

3943
def __init__(self,
@@ -43,11 +47,13 @@ def __init__(self,
4347
repo_name,
4448
status=TaskStatus.NOT_STARTED,
4549
from_id=None,
46-
id=None
50+
id=None,
51+
page_index=None
4752
):
4853
super().__init__(bot_id=bot_id, type=TaskType.GIT_ISSUE, from_id=from_id, id=id, status=status,
4954
repo_name=repo_name)
5055
self.issue_id = issue_id
56+
self.page_index = page_index
5157
self.node_type = GitIssueTaskNodeType(node_type)
5258

5359
def extra_save_data(self):
@@ -67,33 +73,41 @@ def handle(self):
6773

6874
def handle_repo_node(self):
6975
repo = g.get_repo(self.repo_name)
70-
repo.get_issues()
71-
issues = [issue for issue in repo.get_issues()]
72-
task_list = list(
73-
map(
74-
lambda item: {
75-
"repo_name": self.repo_name,
76-
"issue_id": str(item.number),
77-
"status": TaskStatus.NOT_STARTED.value,
78-
"node_type": GitIssueTaskNodeType.ISSUE.value,
79-
"from_task_id": self.id,
80-
"bot_id": self.bot_id,
81-
},
82-
issues,
83-
),
84-
)
85-
if len(task_list) > 0:
86-
result = self.get_table().insert(task_list).execute()
87-
for record in result.data:
88-
issue_task = GitIssueTask(id=record["id"],
89-
issue_id=record["issue_id"],
90-
repo_name=record["repo_name"],
91-
node_type=record["node_type"],
92-
bot_id=record["bot_id"],
93-
status=record["status"],
94-
from_id=record["from_task_id"]
95-
)
96-
issue_task.send()
76+
issues = repo.get_issues(state='all')
77+
latest_page = (self.get_table()
78+
.select('*')
79+
.eq('repo_name', self.repo_name)
80+
.eq('node_type', GitIssueTaskNodeType.ISSUE_PAGE.value)
81+
.order('page_index', desc=True)
82+
.limit(1)
83+
.execute()).data
84+
85+
slice_page_index = latest_page[0]["page_index"] if len(latest_page) > 0 else 0
86+
87+
if len(latest_page) > 0:
88+
create_rag_git_issue_task(latest_page[0]).send()
89+
90+
if issues.totalCount > 0:
91+
pages = issues.totalCount // GITHUB_PER_PAGE + (1 if issues.totalCount % GITHUB_PER_PAGE != 0 else 0)
92+
pages_array = list(range(1, pages + 1))[slice_page_index:]
93+
task_list = list(
94+
map(
95+
lambda item: {
96+
"repo_name": self.repo_name,
97+
"status": TaskStatus.NOT_STARTED.value,
98+
"node_type": GitIssueTaskNodeType.ISSUE_PAGE.value,
99+
"from_task_id": self.id,
100+
"bot_id": self.bot_id,
101+
"page_index": item
102+
},
103+
pages_array,
104+
),
105+
)
106+
if len(task_list) > 0:
107+
result = self.get_table().insert(task_list).execute()
108+
for record in result.data:
109+
issue_task = create_rag_git_issue_task(record)
110+
issue_task.send()
97111

98112
return (self.get_table().update(
99113
{"status": TaskStatus.COMPLETED.value})

0 commit comments

Comments
 (0)