From e3fd071dc211ed65cb882fbb71dcf287672e8f6d Mon Sep 17 00:00:00 2001 From: bucolucas Date: Tue, 20 Aug 2024 19:09:19 -0500 Subject: [PATCH] Recommit github_tool.py with all function calls and missing pieces added back --- tools/github_tool.py | 135 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 121 insertions(+), 14 deletions(-) diff --git a/tools/github_tool.py b/tools/github_tool.py index 1b07ce5..b9d14d7 100644 --- a/tools/github_tool.py +++ b/tools/github_tool.py @@ -530,16 +530,31 @@ class GitHubTool(BaseTool): return self._get_current_branch() elif function_name == "set_current_branch": return self._set_current_branch(kwargs["branch_name"]) - elif function_name == "create_project_board": - return self._create_project_board(kwargs["name"], kwargs.get("body")) - elif function_name == "create_project_column": - return self._create_project_column(kwargs["project_id"], kwargs["column_name"]) - elif function_name == "create_project_card": - return self._create_project_card(kwargs["column_id"], kwargs["note"]) - elif function_name == "move_project_card": - return self._move_project_card(kwargs["card_id"], kwargs["position"], kwargs["column_id"]) - elif function_name == "link_issue_to_project_card": - return self._link_issue_to_project_card(kwargs["card_id"], kwargs["content_id"], kwargs["content_type"]) + elif function_name == "get_file_at_commit": + return self._get_file_at_commit(kwargs["file_path"], kwargs["commit_sha"]) + elif function_name == "list_branches": + return self._list_branches(kwargs.get("per_page", 100), kwargs.get("all_pages", True)) + elif function_name == "get_branch_sha": + return self._get_branch_sha(kwargs["branch"]) + elif function_name == "approve_pull_request": + return self._approve_pull_request(kwargs["pull_number"]) + elif function_name == "close_pull_request": + return self._close_pull_request(kwargs["pull_number"]) + elif function_name == "merge_pull_request": + return self._merge_pull_request(kwargs["pull_number"], kwargs.get("commit_title", "Merge pull request"), + kwargs.get("commit_message", ""), kwargs.get("merge_method", "merge")) + elif function_name == "delete_branch": + return self._delete_branch(kwargs["branch_name"]) + elif function_name == "get_issue_details": + return self._get_issue_details(kwargs["issue_number"]) + elif function_name == "create_issue": + return self._create_issue(kwargs["title"], kwargs["body"], kwargs.get("labels", [])) + elif function_name == "list_issues": + return self._list_issues(kwargs.get("state", "open"), kwargs.get("per_page", 30), kwargs.get("page", 1)) + elif function_name == "add_issue_comment": + return self._add_issue_comment(kwargs["issue_number"], kwargs["comment"]) + elif function_name == "get_issue_comments": + return self._get_issue_comments(kwargs["issue_number"]) else: error_message = f"Unknown function: {function_name}" self.logger.error(error_message) @@ -846,7 +861,10 @@ class GitHubTool(BaseTool): def _create_issue(self, title, body, labels=None): self.logger.info(f"Creating issue: {title}") url = f"{self.base_url}/repos/{self.repo}/issues" - data = {"title": title, "body": body} + data = { + "title": title, + "body": body + } if labels: data["labels"] = labels response = requests.post(url, headers=self.headers, json=data) @@ -864,10 +882,20 @@ class GitHubTool(BaseTool): def _list_issues(self, state="open", per_page=30, page=1): self.logger.info(f"Listing issues. State: {state}, Per page: {per_page}, Page: {page}") url = f"{self.base_url}/repos/{self.repo}/issues" - params = {"state": state, "per_page": per_page, "page": page} + params = { + "state": state, + "per_page": per_page, + "page": page + } response = requests.get(url, headers=self.headers, params=params) if response.status_code == 200: - issues = [{"number": issue["number"], "title": issue["title"], "state": issue["state"], "created_at": issue["created_at"], "url": issue["html_url"]} for issue in response.json()] + issues = [{ + "number": issue["number"], + "title": issue["title"], + "state": issue["state"], + "created_at": issue["created_at"], + "url": issue["html_url"] + } for issue in response.json()] self.logger.info(f"Successfully listed issues. Found {len(issues)} issues.") return issues else: @@ -897,10 +925,89 @@ class GitHubTool(BaseTool): url = f"{self.base_url}/repos/{self.repo}/issues/{issue_number}/comments" response = requests.get(url, headers=self.headers) if response.status_code == 200: - comments = [{"id": comment["id"], "user": comment["user"]["login"], "body": comment["body"], "created_at": comment["created_at"], "updated_at": comment["updated_at"]} for comment in response.json()] + comments = [{ + "id": comment["id"], + "user": comment["user"]["login"], + "body": comment["body"], + "created_at": comment["created_at"], + "updated_at": comment["updated_at"] + } for comment in response.json()] self.logger.info(f"Successfully retrieved comments for issue {issue_number}. Found {len(comments)} comments.") return comments else: error_message = f"Error getting issue comments: {response.status_code}\nResponse: {response.text}" self.logger.error(error_message) + return error_message + + @metrics.measure + def _create_project_board(self, name, body=None): + url = f"{self.base_url}/repos/{self.repo}/projects" + data = {"name": name, "body": body} + response = requests.post(url, headers=self.headers, json=data) + if response.status_code == 201: + project = response.json() + success_message = f"Project board '{name}' created successfully." + self.logger.info(success_message) + return success_message + else: + error_message = f"Error creating project board: {response.status_code}" + self.logger.error(error_message) + return error_message + + @metrics.measure + def _create_project_column(self, project_id, column_name): + url = f"{self.base_url}/projects/{project_id}/columns" + data = {"name": column_name} + response = requests.post(url, headers=self.headers, json=data) + if response.status_code == 201: + column = response.json() + success_message = f"Column '{column_name}' created successfully in project {project_id}." + self.logger.info(success_message) + return success_message + else: + error_message = f"Error creating project column: {response.status_code}" + self.logger.error(error_message) + return error_message + + @metrics.measure + def _create_project_card(self, column_id, note): + url = f"{self.base_url}/projects/columns/{column_id}/cards" + data = {"note": note} + response = requests.post(url, headers=self.headers, json=data) + if response.status_code == 201: + card = response.json() + success_message = f"Card created successfully in column {column_id}." + self.logger.info(success_message) + return success_message + else: + error_message = f"Error creating project card: {response.status_code}" + self.logger.error(error_message) + return error_message + + @metrics.measure + def _move_project_card(self, card_id, position, column_id): + url = f"{self.base_url}/projects/columns/cards/{card_id}/moves" + data = {"position": position, "column_id": column_id} + response = requests.post(url, headers=self.headers, json=data) + if response.status_code == 201: + success_message = f"Card {card_id} moved successfully." + self.logger.info(success_message) + return success_message + else: + error_message = f"Error moving project card: {response.status_code}" + self.logger.error(error_message) + return error_message + + @metrics.measure + def _link_issue_to_project_card(self, card_id, content_id, content_type): + url = f"{self.base_url}/projects/columns/cards/{card_id}" + data = {"content_id": content_id, "content_type": content_type} + response = requests.patch(url, headers=self.headers, json=data) + if response.status_code == 200: + success_message = f"Issue/PR linked to card {card_id} successfully." + self.logger.info(success_message) + return success_message + else: + error_message = f"Error linking issue/PR to project card: {response.status_code}" + self.logger.error(error_message) return error_message \ No newline at end of file