dd8dca09f8
This makes it easier to track progress. Change-Id: Iaa1a9f2006bead7d400e8c21931d8768bb4ec3a0
75 lines
2.4 KiB
Python
75 lines
2.4 KiB
Python
# This script reads a file with this format:
|
|
#
|
|
# email_addr account_id
|
|
#
|
|
# It will then remove all external ids with that email addr
|
|
# in them from the account specified.
|
|
# Note the account_ids and emails both may be non unique depending
|
|
# on the gerrit account situation. We iterate over each line in this
|
|
# file one at a time to avoid problems with deduping in datastructures.
|
|
#
|
|
# Consider running this with python3 -u to get unbuffered stdout. This
|
|
# will help you better track progress.
|
|
|
|
import getpass
|
|
import json
|
|
import requests
|
|
|
|
def get_external_ids(account_id, auth):
|
|
r = requests.get('https://review.opendev.org'
|
|
'/a/accounts/%s/external.ids' % account_id,
|
|
auth=auth)
|
|
# Strip off the gerrit json prefix
|
|
j = json.loads(r.text[5:])
|
|
return j
|
|
|
|
|
|
def is_active(account_id, auth):
|
|
r = requests.get('https://review.opendev.org'
|
|
'/a/accounts/%s/detail' % account_id,
|
|
auth=auth)
|
|
# Strip off the gerrit json prefix
|
|
j = json.loads(r.text[5:])
|
|
if 'inactive' in j and j['inactive']:
|
|
return False
|
|
else:
|
|
return True
|
|
|
|
|
|
if __name__ == '__main__':
|
|
query_user = input('Username: ')
|
|
query_pass = getpass.getpass('Password: ')
|
|
if query_user and query_pass:
|
|
auth = (query_user, query_pass)
|
|
else:
|
|
print("This script requires authentication")
|
|
exit(1)
|
|
|
|
with open('external_id_cleanups.txt') as f:
|
|
for line in f:
|
|
(email, account_id) = line.strip().split()
|
|
print(email + ' ' + account_id)
|
|
|
|
if is_active(account_id, auth):
|
|
print('This account is active. Skipping.')
|
|
continue
|
|
|
|
j = get_external_ids(account_id, auth)
|
|
print('external IDs: ' + str(j))
|
|
|
|
eids_to_remove = []
|
|
for eid in j:
|
|
if 'email_address' in eid and eid['email_address'] == email:
|
|
eids_to_remove.append(eid['identity'])
|
|
|
|
if eids_to_remove:
|
|
print('Removing these external IDs: ' + str(eids_to_remove))
|
|
url = 'https://review.opendev.org' \
|
|
'/a/accounts/%s/external.ids:delete' % account_id
|
|
print(url)
|
|
r = requests.post(url, json=eids_to_remove, auth=auth)
|
|
print(r.status_code)
|
|
print(r.text)
|
|
else:
|
|
print('No matching external ids')
|