67 lines
2.2 KiB
Python
67 lines
2.2 KiB
Python
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)}")
|
|
|