Skip to content

Instantly share code, notes, and snippets.

@stefanv
Last active December 5, 2019 07:35
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save stefanv/eed25b296e18741aedae9238cfb24a61 to your computer and use it in GitHub Desktop.
NumPy: nr of PRs per contributor
#!/bin/bash
curl "https://api.github.com/repos/numpy/numpy/pulls?page=1&per_page=100" > prs0.json
curl "https://api.github.com/repos/numpy/numpy/pulls?page=2&per_page=100" > prs1.json
curl "https://api.github.com/repos/numpy/numpy/pulls?page=3&per_page=100" > prs2.json
import json
from collections import defaultdict
from operator import itemgetter
prs = []
for f in range(3):
prs.extend(json.load(open(f'prs{f}.json')))
h = defaultdict(lambda: 0)
for p in prs:
if 'WIP' in p['title']:
continue
username = p['user']['login']
h[username] += 1
pr_count_sorted = list(reversed(sorted(h.items(), key=itemgetter(1))))
top_logins = [(person, count) for (person, count) in pr_count_sorted if count >= 5]
print('Most PRs open per developer:')
print()
for i, (user, count) in enumerate(pr_count_sorted[:10]):
print(f'{i+1}. {user}: {count}')
for (login, _) in top_logins:
print()
print(f"PRs for {login}:")
print()
for p in prs:
if (not 'WIP' in p['title']) and p['user']['login'] == login:
print(f"- #{p['number']}: [{p['title']}]({p['html_url']})")
@mattip
Copy link

mattip commented Dec 5, 2019

using requests, instead of curl

import json
from collections import defaultdict
from operator import itemgetter
import requests

params = [
['page', '1'],
['per_page', '100'],
]

prs = []
for i in range(3):
params[0][1] = '%d' % i
response = requests.get('https://api.github.com/repos/numpy/numpy/pulls', params=params)
prs.extend(json.loads(response.text))

h = defaultdict(lambda: 0)
for p in prs:
if 'WIP' in p['title']:
continue
username = p['user']['login']
h[username] += 1

pr_count_sorted = list(reversed(sorted(h.items(), key=itemgetter(1))))
top_logins = [(person, count) for (person, count) in pr_count_sorted if count >= 5]

print('Most PRs open per developer:')
print()
for i, (user, count) in enumerate(pr_count_sorted[:10]):
print(f'{i+1}. {user}: {count}')

for (login, _) in top_logins:
print()
print(f"PRs for {login}:")
print()
for p in prs:
if (not 'WIP' in p['title']) and p['user']['login'] == login:
print(f"- #{p['number']}: {p['title']}")

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment