Created
November 7, 2022 15:08
-
-
Save filipefigcorreia/14ffa2caace1be4d89af83d93450faf1 to your computer and use it in GitHub Desktop.
Gets some PR info for specified repositories
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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