in tools/changelog.py [0:0]
def get_pulls(token, date_from, date_to, merged_to, exclude_pulls=None):
'Get and normalize pull requests from the Github API.'
exclude_pulls = exclude_pulls
url = 'pulls?state=closed&sort=updated&direction=desc&per_page=100'
page = 1
lookbehinds = 0
while True:
pulls = fetch(token, f'{url}&page={page}')
excluded, unmerged = 0, 0
for r in pulls:
pull_id = r['number']
merged_at = r['merged_at']
body = r['body']
upgrade_notes = get_upgrade_notes(r['body'])
if merged_at is None:
unmerged += 1
continue
pull = PullRequest(pull_id, r['base']['ref'], r['user']['login'],
r['title'], iso8601.parse_date(merged_at),
[l['name'].lower() for l in r['labels']],
upgrade_notes)
if pull.id in exclude_pulls:
excluded += 1
continue
if pull.base not in merged_to or pull.merged_at <= date_from:
unmerged += 1
continue
if date_to and pull.merged_at >= date_to:
continue
yield pull
if (len(pulls) + excluded) < 100:
break
elif unmerged == 100:
if lookbehinds >= 1:
break
lookbehinds += 1
page += 1