from urllib.parse import urlparse from tools.utils import get_installation_id, get_installation_token, github_request def fetch_github_issue(issue_url): parsed = urlparse(issue_url) path_parts = parsed.path.strip('/').split('/') if len(path_parts) >= 4 and path_parts[2] == 'issues': owner = path_parts[0] repo = path_parts[1] issue_num = path_parts[3] return owner, repo, issue_num else: raise ValueError("Invalid GitHub Issue URL. Please provide a valid URL and try again.") def get_issue_details(owner, repo, issue_num): installation_id = get_installation_id(owner, repo) token = get_installation_token(installation_id) url = f"https://api.github.com/repos/{owner}/{repo}/issues/{issue_num}" headers = { "Authorization": f"Bearer {token}", "Accept": "application/vnd.github.v3+json" } response = github_request("GET", url, headers=headers) if response.status_code == 200: return response.json().get("body") else: raise Exception(f"Failed to fetch issue: {response.status_code}. The issue either doesn't exist or the URL is incorrect.") def post_comment(owner, repo, issue_num, comment_body): installation_id = get_installation_id(owner, repo) token = get_installation_token(installation_id) url = f"https://api.github.com/repos/{owner}/{repo}/issues/{issue_num}/comments" headers = { "Authorization": f"Bearer {token}", "Accept": "application/vnd.github.v3+json" } data = {"body": comment_body} response = github_request("POST", url, headers=headers, json=data) if response.status_code == 201: return response.json() else: raise Exception(f"Failed to post comment: {response.status_code}. The issue either doesn't exist or the URL is incorrect.")