77 lines
2.9 KiB
Python
77 lines
2.9 KiB
Python
from gitlink_api.project_api import ProjectApi
|
||
import math
|
||
from loguru import logger
|
||
from common.baseapi import BaseRequest
|
||
|
||
|
||
def get_issue_ids(host, project):
|
||
"""
|
||
获取源仓库所有的issue_ids
|
||
:return:
|
||
"""
|
||
issue_ids = []
|
||
page = 1
|
||
limit = 15
|
||
project_api = ProjectApi(host, project)
|
||
# 获取仓库所有issue数量
|
||
issue_count = project_api.get_issue_list(limit=limit, page=page).get("total_issues_count", 0)
|
||
logger.debug(f"总共有{issue_count}个issue")
|
||
# 判断当前共有多少页
|
||
total_page = math.ceil(int(issue_count) / limit)
|
||
# 循环请求获取所有的issue_id
|
||
while page <= total_page:
|
||
issues = project_api.get_issue_list(page=page, limit=limit).get("issues", "")
|
||
if issues and len(issues) > 0:
|
||
for issue in issues:
|
||
issue_ids.append(issue.get("project_issues_index"))
|
||
page += 1
|
||
logger.info(f"获取到所有issue_ids: {sorted(issue_ids)}")
|
||
|
||
return sorted(issue_ids)[:100]
|
||
|
||
|
||
def get_issues_and_journals(host, project):
|
||
project_api = ProjectApi(host, project)
|
||
issue_ids = get_issue_ids(host, project)
|
||
issues_and_journals = []
|
||
for issue_id in issue_ids:
|
||
# 获取源仓库的某一个issue详情及评论
|
||
issue_detail = project_api.get_issue_detail(issue_id=issue_id)
|
||
# 获取源仓库的某一个issue评论数量
|
||
issue_journals = []
|
||
page = 1
|
||
limit = 50
|
||
comment_journals_count = project_api.get_issue_journals_detail(issue_id=issue_id, page=page, limit=limit).get(
|
||
"total_comment_journals_count", 0)
|
||
# 当issue评论数量大于0时,去获取评论
|
||
if comment_journals_count > 0:
|
||
# 判断当前共有多少页
|
||
total_page = math.ceil(int(comment_journals_count) / limit)
|
||
# 循环请求获取所有的issue评论
|
||
while page <= total_page:
|
||
journals = project_api.get_issue_journals_detail(issue_id=issue_id, page=page,
|
||
limit=limit).get("journals", "")
|
||
if journals and len(journals) > 0:
|
||
for journal in journals:
|
||
issue_journals.append(journal)
|
||
page += 1
|
||
|
||
issues_and_journals.append(
|
||
{
|
||
"issue_id": issue_id,
|
||
"issue_detail": issue_detail,
|
||
"issue_journals": issue_journals
|
||
}
|
||
)
|
||
# logger.info(f"获取所有的疑修和评论如下:{issues_and_journals}")
|
||
# # 根据疑修ID进行排序, 按照从小到大排序返回
|
||
# sorted_issues_and_journals = sorted(issues_and_journals, key=lambda k: k['issue_id'])
|
||
# return sorted_issues_and_journals
|
||
return issues_and_journals
|
||
|
||
|
||
if __name__ == '__main__':
|
||
from config import source_host, source_project
|
||
|
||
get_issues_and_journals(source_host, source_project)
|