Page MenuHomePhabricator
Paste P8234

(An Untitled Masterwork)
ActivePublic

Authored by thcipriani on Mar 19 2019, 9:08 PM.
Tags
None
Referenced Files
F28422230: raw.txt
Mar 19 2019, 9:32 PM
F28422076: raw.txt
Mar 19 2019, 9:08 PM
Subscribers
None
#!/usr/bin/env python
import itertools
import subprocess
import requests
import json
import sys
def ssh_cmd(extra):
cmd = ['ssh', '-p', '29418', 'gerrit.wikimedia.org', '--', 'gerrit']
return subprocess.check_output(cmd + extra)
def chunks(l, n=100):
"""Yield successive n-sized chunks from l."""
for i in range(0, len(l), n):
yield l[i:i + n]
def trust_accounts(accounts):
accounts_cmd = ['set-members']
accounts_cmd += [
str(item) for sublist in
list(zip(itertools.repeat('--add'), accounts))
for item in sublist
]
accounts_cmd += ['Trusted-Users']
return ssh_cmd(accounts_cmd)
class GerritActiveAccounts(object):
_gerrit_shit = ")]}'"
gerrit = 'https://gerrit.wikimedia.org/r'
def __init__(self):
self.url_fmt = '/accounts/?q=is:active&start={}'
self.active = []
def make_url(self, start=0):
base = self.gerrit + self.url_fmt
return base.format(start)
def get_json(self, start=0):
r = requests.get(self.make_url(start))
r.raise_for_status()
return json.loads(r.text[len(self._gerrit_shit):])
def get_users(self, start=0):
for entry in self.get_json(start):
for k, v in entry.items():
if k == '_account_id':
self.active.append(int(v))
if k == '_more_accounts':
return self.get_users(start=len(self.active))
return set(self.active)
class GerritTrustedAccounts(object):
TRUSTED_USERS = 'Trusted-Users'
def __init__(self):
self.users = []
def get_users(self):
for row in ssh_cmd(['ls-members', self.TRUSTED_USERS]).splitlines():
if row.strip().startswith(b'id'):
continue
self.users.append(int(row.split(b'\t')[0]))
return set(self.users)
def main():
ga = GerritActiveAccounts()
active_accounts = ga.get_users()
ta = GerritTrustedAccounts()
trusted_accounts = ta.get_users()
accounts_to_add = active_accounts - trusted_accounts
for chunk in chunks(list(accounts_to_add)):
print(trust_accounts(chunk))
if __name__ == '__main__':
main()