import requests from git_flow import GitFlowError from git_flow.remote.base import RemoteAPI class GithubRemoteAPI(RemoteAPI): API_ENDPOINT = "https://api.github.com/repos" 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("/git/refs"), headers=self.get_headers(), json={"ref": f"refs/tags/{tag}", "sha": 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"{GithubRemoteAPI.API_ENDPOINT}/{self.repository}{resource}"