Check change owners against OSF Individual Members
According to the Bylaws of the OpenStack Foundation Appendix 4 Technical Committee Member Policy §3.b[1] along with the OpenStack Technical Committee Charter definitions for APC[2] and ATC[3], we limit the voter rolls for technical elections to Foundation Individual Members. Use the OpenStack Foundation's member directory lookup API to record the member ID of each change owner. If an owner does not have any E-mail address in Gerrit which matches at least one E-mail address of an OSF Individual Membership record, then exclude them from CIVS ballots and event discount invitations. [1] https://www.openstack.org/legal/technical-committee-member-policy/ [2] https://governance.openstack.org/tc/reference/charter.html#voters-for-ptl-seats-apc [3] https://governance.openstack.org/tc/reference/charter.html#voters-for-tc-seats-atc Change-Id: I920e1bc134d1283e2019f4389a5491e9b746cca0 Story: #2001094 Task: #4813
This commit is contained in:
parent
5b8df42959
commit
fb3e76576b
@ -204,6 +204,25 @@ def query_gerrit(method, params={}):
|
||||
return decode_json(raw)
|
||||
|
||||
|
||||
def lookup_member(email):
|
||||
"""A requests wrapper to querying the OSF member directory API"""
|
||||
|
||||
# The OpenStack foundation member directory lookup API endpoint
|
||||
MEMBER_LOOKUP_URL = 'https://openstackid-resources.openstack.org/'
|
||||
|
||||
# URL pattern for querying foundation members by E-mail address
|
||||
raw = requester(
|
||||
MEMBER_LOOKUP_URL + '/api/public/v1/members',
|
||||
params={'filter[]': [
|
||||
'group_slug==foundation-members',
|
||||
'email==' + email,
|
||||
]},
|
||||
headers={'Accept': 'application/json'},
|
||||
)
|
||||
|
||||
return decode_json(raw)
|
||||
|
||||
|
||||
def usage(argv):
|
||||
"""Parse command line argument"""
|
||||
parser = argparse.ArgumentParser(
|
||||
@ -606,12 +625,18 @@ def main(argv=sys.argv):
|
||||
'SKIPPING MALFORMED OWNER: no preferred or extra '
|
||||
'addresses found for account %s' % owner, file=sys.stderr)
|
||||
continue
|
||||
for email in [owners[owner]['preferred']] + owners[owner]['extra']:
|
||||
member = lookup_member(email)
|
||||
if member['data']:
|
||||
owners[owner]['member'] = member['data'][0]['id']
|
||||
continue
|
||||
invite.append(owners[owner]['preferred'])
|
||||
invite += owners[owner]['extra']
|
||||
invites.append(invite)
|
||||
|
||||
# Append preferred addresses to the TC electorate
|
||||
electorate.append(owners[owner]['preferred'] + '\n')
|
||||
# Append preferred addresses to the TC electorate for members only
|
||||
if 'member' in owners[owner]:
|
||||
electorate.append(owners[owner]['preferred'] + '\n')
|
||||
|
||||
# Write out a YAML file covering all change owners
|
||||
fd = open(os.path.join(outdir, '_all_owners.yaml'), 'w')
|
||||
|
Loading…
x
Reference in New Issue
Block a user