Skip to content

Instantly share code, notes, and snippets.

@filipefigcorreia
Created November 7, 2022 15:08
Show Gist options
  • Save filipefigcorreia/14ffa2caace1be4d89af83d93450faf1 to your computer and use it in GitHub Desktop.
Save filipefigcorreia/14ffa2caace1be4d89af83d93450faf1 to your computer and use it in GitHub Desktop.
Gets some PR info for specified repositories
# based on https://stackoverflow.com/a/73978756/684253
import requests
from datetime import datetime
import csv
token = "<a personal token>"
def export_projects(base_urls, token, out_filename):
final_dataset = []
fmt = "%Y-%m-%dT%H:%M:%SZ"
auth_header = 'Bearer ' + token
repos = []
for base_url in base_urls:
page = 1
url = (base_url + "/pulls?state=closed&per_page=100&page=%d" % page)
res=requests.get(url,headers={"Authorization": auth_header})
res_repos=res.json()
while res.json() != []:
page= page + 1
url = (base_url + "/pulls?state=closed&per_page=100&page=%d" % page)
res=requests.get(url,headers={"Authorization": auth_header})
res_repos.extend(res.json())
repos.extend(res_repos)
print("Fetching PRs, Please Wait")
for data in repos:
result = {}
created_at = datetime.strptime(data['created_at'], fmt)
closed_at = datetime.strptime(data['closed_at'], fmt)
result['hours_to_review'] = round((closed_at - created_at).total_seconds() / 3600, 2)
#url_for_pr = (base_url + "/pulls/%d" % data['number'])
url_for_pr = data['url']
res=requests.get(url_for_pr,headers={"Authorization": auth_header})
pr_data = res.json()
result['commits'] = pr_data['commits']
result['additions'] = pr_data['additions']
result['deletions'] = pr_data['deletions']
result['changed_files'] = pr_data['changed_files']
result['comments'] = pr_data['comments']
result['review_comments'] = pr_data['review_comments']
result['user_name'] = pr_data['user']['login']
result['pr_number'] = data['number']
result['pr_url'] = data['url']
result['created_at'] = data['created_at']
result['closed_at'] = data['closed_at']
result['count_requested_reviewers'] = len(pr_data['requested_reviewers'])
final_dataset.append(result)
print("Writing to csv, Please Wait")
keys = final_dataset[0].keys()
with open(out_filename, 'w', newline='') as output_file:
dict_writer = csv.DictWriter(output_file, keys)
dict_writer.writeheader()
dict_writer.writerows(final_dataset)
print(("************* DONE (%s) *****************" % out_filename))
base_urls = [
"https://api.github.com/repos/<org>/<repo>"
]
export_projects(base_urls, token, 'output.csv')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment