Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F28422076
raw.txt
No One
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Authored By
thcipriani
Mar 19 2019, 9:08 PM
2019-03-19 21:08:37 (UTC+0)
Size
2 KB
Referenced Files
None
Subscribers
None
raw.txt
View Options
#!/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=self.active[-1])
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()
File Metadata
Details
Attached
Mime Type
text/plain; charset=utf-8
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
7200242
Default Alt Text
raw.txt (2 KB)
Attached To
Mode
P8234 (An Untitled Masterwork)
Attached
Detach File
Event Timeline
Log In to Comment