56 lines
1.7 KiB
Python
56 lines
1.7 KiB
Python
import requests
|
|
from git_flow import GitFlowError
|
|
from git_flow.remote.base import RemoteAPI
|
|
|
|
|
|
class GiteaRemoteAPI(RemoteAPI):
|
|
def __init__(self, base_url: str, repository: str, token: str) -> None:
|
|
super().__init__(repository, token)
|
|
self.base_url = base_url
|
|
|
|
def create_pull_request(
|
|
self,
|
|
source: str,
|
|
destination: str,
|
|
title: str | None = None,
|
|
description: str | None = None,
|
|
close_source_branch: bool = True
|
|
) -> str:
|
|
response = requests.post(
|
|
self.get_endpoint("/pulls"),
|
|
headers=self.get_headers(),
|
|
json={
|
|
"title": title,
|
|
"body": description,
|
|
"head": source,
|
|
"base": destination,
|
|
},
|
|
)
|
|
|
|
if response.ok:
|
|
return "PR creado exitosamente: " + response.json()["html_url"]
|
|
else:
|
|
raise GitFlowError("Ocurrió un error al crear el PR: " + response.text)
|
|
|
|
def create_tag(self, tag: str, commit: str) -> str:
|
|
response = requests.post(
|
|
self.get_endpoint("/tags"),
|
|
headers=self.get_headers(),
|
|
json={"tag_name": tag, "target": commit},
|
|
)
|
|
|
|
if response.ok:
|
|
return "Tag creado exitosamente: " + tag
|
|
else:
|
|
raise GitFlowError("Ocurrió un error al crear el tag: " + response.text)
|
|
|
|
def get_endpoint(self, resource: str) -> str:
|
|
return f"{self.base_url}/api/v1/repos/{self.repository}{resource}"
|
|
|
|
def get_headers(self):
|
|
return {
|
|
"Accept": "application/json",
|
|
"Content-Type": "application/json",
|
|
"Authorization": "token " + self.token,
|
|
}
|