reposync/issue_sync/common/github_api.py

66 lines
2.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import requests
class GithubAPI:
def __init__(self, owner, repo, token):
self.owner = owner
self.repo = repo
self.token = token
def fetch_issues(self):
url = f"https://api.github.com/repos/{self.owner}/{self.repo}/issues"
headers = {'Authorization': f'token {self.token}'}
resp = requests.get(url, headers=headers)
return resp.json() if resp.status_code == 200 else []
def create_issue(self, title, body):
url = f"https://api.github.com/repos/{self.owner}/{self.repo}/issues"
headers = {'Authorization': f'token {self.token}'}
data = {"title": title, "body": body}
resp = requests.post(url, headers=headers, json=data)
return resp.json() if resp.status_code in (200, 201) else None
def fetch_pull_requests(self):
url = f"https://api.github.com/repos/{self.owner}/{self.repo}/pulls"
headers = {'Authorization': f'token {self.token}'}
resp = requests.get(url, headers=headers)
return resp.json() if resp.status_code == 200 else []
def create_pull_request(self, title, head, base, body=""):
url = f"https://api.github.com/repos/{self.owner}/{self.repo}/pulls"
headers = {'Authorization': f'token {self.token}'}
data = {
"title": title,
"head": head, # 源分支
"base": base, # 目标分支
"body": body
}
resp = requests.post(url, headers=headers, json=data)
return resp.json() if resp.status_code in (200, 201) else None
# 新增PR评论相关方法
def fetch_pr_comments(self, pr_number):
"""获取PR的评论列表"""
url = f"https://api.github.com/repos/{self.owner}/{self.repo}/pulls/{pr_number}/comments"
headers = {'Authorization': f'token {self.token}'}
resp = requests.get(url, headers=headers)
return resp.json() if resp.status_code == 200 else []
def create_pr_comment(self, pr_number, body, commit_id=None, path=None, position=None):
"""创建PR评论支持代码行评论"""
url = f"https://api.github.com/repos/{self.owner}/{self.repo}/pulls/{pr_number}/comments"
headers = {'Authorization': f'token {self.token}'}
data = {"body": body}
# 如果提供了代码行信息,则创建代码行评论
if commit_id and path and position is not None:
data.update({
"commit_id": commit_id,
"path": path,
"position": position
})
resp = requests.post(url, headers=headers, json=data)
return resp.json() if resp.status_code in (200, 201) else None
# PR相关方法同理