diff --git a/tools/github_tool_functions/get_issue_details.py b/tools/github_tool_functions/get_issue_details.py new file mode 100644 index 0000000..3ae6d3d --- /dev/null +++ b/tools/github_tool_functions/get_issue_details.py @@ -0,0 +1,72 @@ +import requests +import logging + +class GetIssueDetails: + def __init__(self, base_url, token, repo): + self.base_url = base_url + self.headers = { + "Authorization": f"token {token}", + "Accept": "application/vnd.github.v3+json" + } + self.repo = repo + + # Set up logging + self.logger = logging.getLogger(__name__) + self.logger.setLevel(logging.INFO) + + # Create a file handler + file_handler = logging.FileHandler('get_issue_details.log') + file_handler.setLevel(logging.INFO) + + # Create a console handler + console_handler = logging.StreamHandler() + console_handler.setLevel(logging.INFO) + + # Create a formatting for the logs + formatter = logging.Formatter('%(asctime)s - %(name)s - %(levellevel)s - %(message)s') + file_handler.setFormatter(formatter) + console_handler.setFormatter(formatter) + + # Add the handlers to the logger + self.logger.addHandler(file_handler) + self.logger.addHandler(console_handler) + + def __call__(self, issue_number): + self.logger.info(f"Getting details for issue: {issue_number}") + url = f"{self.base_url}/repos/{self.repo}/issues/{issue_number}" + response = requests.get(url, headers=self.headers) + if response.status_code == 200: + issue_data = response.json() + issue_details = { + "number": issue_data["number"], + "title": issue_data["title"], + "state": issue_data["state"], + "body": issue_data["body"], + "created_at": issue_data["created_at"], + "updated_at": issue_data["updated_at"], + "labels": [label["name"] for label in issue_data["labels"]], + "assignees": [assignee["login"] for assignee in issue_data["assignees"]], + "comments": issue_data["comments"] + } + self.logger.info(f"Successfully retrieved details for issue {issue_number}") + return issue_details + else: + error_message = f"Error getting issue details: {response.status_code}\nResponse: {response.text}" + self.logger.error(error_message) + return error_message + +# JSON definition for the get_issue_details function +get_issue_details_definition = { + "name": "get_issue_details", + "description": "Get details of a specific issue", + "parameters": { + "type": "object", + "properties": { + "issue_number": { + "type": "integer", + "description": "The number of the issue" + } + }, + "required": ["issue_number"] + } +} \ No newline at end of file