semantics
This commit is contained in:
@@ -50,47 +50,8 @@ class GitServiceGithubMixin:
|
||||
pass
|
||||
raise HTTPException(status_code=response.status_code, detail=f"GitHub API error: {detail}")
|
||||
return response.json()
|
||||
# endregion create_github_repository
|
||||
|
||||
# region create_github_pull_request [TYPE Function]
|
||||
# @PURPOSE: Create pull request in GitHub or GitHub Enterprise.
|
||||
# @PRE: Config and remote URL are valid.
|
||||
# @POST: Returns normalized PR metadata.
|
||||
# @RETURN: Dict[str, Any]
|
||||
async def create_github_pull_request(
|
||||
self, server_url: str, pat: str, remote_url: str, from_branch: str, to_branch: str,
|
||||
title: str, description: str | None = None, draft: bool = False,
|
||||
) -> dict[str, Any]:
|
||||
identity = self._parse_remote_repo_identity(remote_url)
|
||||
base_url = self._normalize_git_server_url(server_url)
|
||||
if "github.com" in base_url:
|
||||
api_url = f"https://api.github.com/repos/{identity['namespace']}/{identity['repo']}/pulls"
|
||||
else:
|
||||
api_url = f"{base_url}/api/v3/repos/{identity['namespace']}/{identity['repo']}/pulls"
|
||||
headers = {
|
||||
"Authorization": f"token {pat.strip()}",
|
||||
"Content-Type": "application/json",
|
||||
"Accept": "application/vnd.github+json",
|
||||
}
|
||||
payload = {
|
||||
"title": title, "head": from_branch, "base": to_branch,
|
||||
"body": description or "", "draft": bool(draft),
|
||||
}
|
||||
try:
|
||||
response = await self._http_client.post(api_url, headers=headers, json=payload)
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=503, detail=f"GitHub API is unavailable: {e!s}")
|
||||
if response.status_code >= 400:
|
||||
detail = response.text
|
||||
try:
|
||||
detail = response.json().get("message") or detail
|
||||
except Exception:
|
||||
pass
|
||||
raise HTTPException(status_code=response.status_code, detail=f"GitHub API error: {detail}")
|
||||
data = response.json()
|
||||
return {"id": data.get("number") or data.get("id"), "url": data.get("html_url") or data.get("url"), "status": data.get("state") or "open"}
|
||||
# endregion create_github_pull_request
|
||||
|
||||
# #endregion GitServiceGithubMixin
|
||||
|
||||
# #region GitServiceGitlabMixin [C:3] [TYPE Class]
|
||||
# @BRIEF Mixin providing GitLab API operations for GitService.
|
||||
@@ -176,4 +137,3 @@ class GitServiceGitlabMixin:
|
||||
# endregion create_gitlab_merge_request
|
||||
# #endregion GitServiceGitlabMixin
|
||||
# #endregion GitServiceRemoteMixin
|
||||
# #endregion GitServiceRemoteMixin
|
||||
|
||||
Reference in New Issue
Block a user