# Pastebin Rrnxda31 import requests import json after = None APITOKEN = "" while True: data = {"queryKey": "gPlI0Z9TBWkj", "order":"size", "attachments[metrics]": "true","api.token": APITOKEN, "after": after} req1 = requests.post("https://phabricator.wikimedia.org/api/diffusion.repository.search", params=data) repodata = json.loads(req1.text) after = repodata['result']['cursor']['after'] for repo in repodata['result']['data']: policyphid = repo["fields"]["policy"]["diffusion.push"] policydata = {"phids[0]": policyphid, "api.token": APITOKEN} policyreq = requests.post('https://phabricator.wikimedia.org/api/policy.query', params=policydata) preqdata = json.loads(policyreq.text) try: rules = preqdata['result'][policyphid]['rules'] for rule in rules: if rule['action'] == 'allow' and rule['rule'] == 'PhabricatorUsersPolicyRule': userlist = [] pushusers = rule['value'] for pu in pushusers: userdata = {'constraints[phids][0]': pu, "api.token": APITOKEN} usereq = requests.post('https://phabricator.wikimedia.org/api/user.search', params=userdata) users = json.loads(usereq.text) for uresult in users['result']['data']: userlist.append(uresult['fields']['username']) except KeyError: userlist = [] print(f'{repo["fields"]["name"]} | {repo["attachments"]["metrics"]["commitCount"]} | {userlist}') if after == None: break