import requests from datetime import datetime, timedelta def fetch_pull_requests(repo_name, auth_token): base_url = f"https://api.github.com/repos/{repo_name}/pulls" # Get the date one month ago from today one_month_ago = datetime.now() - timedelta(days=90) since_date = one_month_ago.strftime("%Y-%m-%dT%H:%M:%SZ") headers = { "Authorization": f"token {auth_token}" } params = { "state": "all", "since": since_date } response = requests.get(base_url, headers=headers, params=params) if response.status_code == 200: prs = response.json() print(prs) return prs else: print(f"Failed to fetch pull requests: {response.status_code}") return None def fetch_reviewers(pr_url, auth_token, reviews): headers = { "Authorization": f"token {auth_token}" } response = requests.get(f"{pr_url}/reviews", headers=headers) if response.status_code == 200: pr_data = response.json() # Get the list of reviewers for reviewer in pr_data: login = reviewer["user"]["login"] if reviews.get(login): reviews[login] += 1 else: reviews[login] = 1 return None else: print(f"Failed to fetch reviewers for PR {pr_url}: {response.status_code}") return None def count_reviewers(repo_name, auth_token): pull_requests = fetch_pull_requests(repo_name, auth_token) if pull_requests: total_reviewers = {} for pr in pull_requests: pr_url = pr["url"] print(f"checking {pr_url}") fetch_reviewers(pr_url, auth_token, total_reviewers) return [pull_requests, total_reviewers] else: return [None, None] if __name__ == "__main__": # Replace these with your repository name and GitHub token repository_name = "owner/repo" github_token = "yourtokenhere" prs, total_reviewers = count_reviewers(repository_name, github_token) print(f"Unique reviewers across all pull requests: {total_reviewers}") print(f"Total number of unique reviewers across all pull requests: {len(total_reviewers)}")