Recommit github_tool.py with all function calls and missing pieces added back
This commit is contained in:
+121
-14
@@ -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
|
||||
Reference in New Issue
Block a user