From 0ca941a3cb76f02f93f9c56f9318cc97dc5b4d91 Mon Sep 17 00:00:00 2001 From: Tony Breeds Date: Thu, 12 Apr 2018 12:30:13 +1000 Subject: [PATCH] Fix PEP8 errors Mostly these should be obvious whitespace only changes. The change to owners.py (at approximately line 350 is mod complex as it switches from an explicit if/elif/else construct to using the .get() method on a dictionary Change-Id: I34a56f48a92bf838299dd1026ad43423031012aa --- doc/source/_exts/candidates.py | 2 +- openstack_election/cmds/generate_rolls.py | 3 - openstack_election/cmds/template_emails.py | 519 +++++++++++---------- openstack_election/owners.py | 51 +- 4 files changed, 305 insertions(+), 270 deletions(-) diff --git a/doc/source/_exts/candidates.py b/doc/source/_exts/candidates.py index 08286ee2..2a355da8 100644 --- a/doc/source/_exts/candidates.py +++ b/doc/source/_exts/candidates.py @@ -21,8 +21,8 @@ import yaml from docutils import nodes from docutils.parsers.rst import Directive from docutils.statemachine import ViewList -from sphinx.util.nodes import nested_parse_with_titles from openstack_election import utils +from sphinx.util.nodes import nested_parse_with_titles def render_template(template, data, **kwargs): diff --git a/openstack_election/cmds/generate_rolls.py b/openstack_election/cmds/generate_rolls.py index 3bf1e0c0..95c7c005 100755 --- a/openstack_election/cmds/generate_rolls.py +++ b/openstack_election/cmds/generate_rolls.py @@ -19,12 +19,9 @@ import glob import hashlib import os import shutil -import sys import tempfile import time -from six.moves.urllib.request import urlopen - from openstack_election import owners from openstack_election import utils diff --git a/openstack_election/cmds/template_emails.py b/openstack_election/cmds/template_emails.py index dfcb93f2..5e8fab42 100644 --- a/openstack_election/cmds/template_emails.py +++ b/openstack_election/cmds/template_emails.py @@ -1,165 +1,186 @@ +from __future__ import print_function +from __future__ import unicode_literals + +from openstack_elections import config +from openstack_elections import utils + +conf = config.load_config() + +REFERENCE_URL = '%s?id=%s' (utils.PROJECTS_URL, conf['tag']) +LEADERLESS_URL = ('http://governance.openstack.org/resolutions/' + '20141128-elections-process-for-leaderless-programs.html') def ptl_election_season(): - email_text= """ - Election details: https://governance.openstack.org/election/ + email_text = """ +Election details: https://governance.openstack.org/election/ - Please read the stipulations and timelines for candidates and - electorate contained in this governance documentation. +Please read the stipulations and timelines for candidates and +electorate contained in this governance documentation. - Please note, if only one candidate is nominated as PTL for a program - during the PTL nomination period, that candidate will win by acclaim, - and there will be no poll. There will only be a poll if there is more - than one candidate stepping forward for a program's PTL position. +Please note, if only one candidate is nominated as PTL for a program +during the PTL nomination period, that candidate will win by acclaim, +and there will be no poll. There will only be a poll if there is more +than one candidate stepping forward for a program's PTL position. - There will be further announcements posted to the mailing list as - action is required from the electorate or candidates. This email - is for information purposes only. +There will be further announcements posted to the mailing list as +action is required from the electorate or candidates. This email +is for information purposes only. - If you have any questions which you feel affect others please reply - to this email thread. +If you have any questions which you feel affect others please reply +to this email thread. - If you have any questions that you which to discuss in private please - email any of the election officials[1] so that we may address your - concerns. +If you have any questions that you which to discuss in private please +email any of the election officials[1] so that we may address your +concerns. - Thank you, - - [1] https://governance.openstack.org/election/#election-officials""" +Thank you, +[1] https://governance.openstack.org/election/#election-officials""" print(email_text) -def ptl_nominations_kickoff(nom_end_date, time_frame, starting_release, ending_release, future_release, email_deadline): - email_text= """ - Nominations for OpenStack PTLs (Program Team Leads) are now open - and will remain open until %s. - All nominations must be submitted as a text file to the - openstack/election repository as explained at - http://governance.openstack.org/election/#how-to-submit-your-candidacy +def ptl_nominations_kickoff(nom_end_date, time_frame, starting_release, + ending_release, future_release, email_deadline): + email_text = """ +Nominations for OpenStack PTLs (Program Team Leads) are now open +and will remain open until %s. - Please make sure to follow the new candidacy file naming - convention: $cycle_name/$project_name/$ircname.txt. +All nominations must be submitted as a text file to the +openstack/election repository as explained at +http://governance.openstack.org/election/#how-to-submit-your-candidacy - In order to be an eligible candidate (and be allowed to vote) in - a given PTL election, you need to have contributed to the corresponding - team[0] during the %s timeframe (%s to %s). You must also be an OpenStack - Foundation Individual Member in good standing. To check if your membership - is up to date, go to https://www.openstack.org/community/members and - search for your name. +Please make sure to follow the new candidacy file naming +convention: $cycle_name/$project_name/$ircname.txt. - Additional information about the nomination process can be found here: - https://governance.openstack.org/election/ +In order to be an eligible candidate (and be allowed to vote) in +a given PTL election, you need to have contributed to the corresponding +team[0] during the %s timeframe (%s to %s). You must also be an OpenStack +Foundation Individual Member in good standing. To check if your membership +is up to date, go to https://www.openstack.org/community/members and +search for your name. - Shortly after election officials approve candidates, they will be listed here: - https://governance.openstack.org/election/#%s-ptl-candidates +Additional information about the nomination process can be found here: +https://governance.openstack.org/election/ - The electorate is requested to confirm their email address in gerrit[1], - prior to %s so that the emailed ballots are mailed to the correct email - address. This email address should match that which was provided in your - foundation member profile[2] as well. +Shortly after election officials approve candidates, they will be listed here: +https://governance.openstack.org/election/#%s-ptl-candidates - Happy running, +The electorate is requested to confirm their email address in gerrit[1], +prior to %s so that the emailed ballots are mailed to the correct email +address. This email address should match that which was provided in your +foundation member profile[2] as well. - [0] https://governance.openstack.org/tc/reference/projects/ - [1] https://review.openstack.org/#/settings/contact - [2] https://www.openstack.org/profile/""" +Happy running, - print(email_text % (nom_end_date, time_frame, starting_release, ending_release, future_release, email_deadline)) +[0] https://governance.openstack.org/tc/reference/projects/ +[1] https://review.openstack.org/#/settings/contact +[2] https://www.openstack.org/profile/""" + + print(email_text % (nom_end_date, + time_frame, + starting_release, + ending_release, + future_release, + email_deadline)) def ptl_nominations_last_days(num_projects_without_candidates): - email_text= """ - A quick reminder that we are in the last hours for PTL candidate - nominations. + email_text = """ +A quick reminder that we are in the last hours for PTL candidate +nominations. - If you want to stand for PTL, don't delay, follow the instructions - at [1] to make sure the community knows your intentions. +If you want to stand for PTL, don't delay, follow the instructions +at [1] to make sure the community knows your intentions. - Make sure your nomination has been submitted to the openstack/election - repository and approved by election officials. +Make sure your nomination has been submitted to the openstack/election +repository and approved by election officials. - Election statistics[2]: +Election statistics[2]: - This means that with approximately 2 days left, %s projects will - be deemed leaderless. In this case the TC will oversee PTL selection as - described by [3]. +This means that with approximately 2 days left, %s projects will +be deemed leaderless. In this case the TC will oversee PTL selection as +described by [3]. - Thank you, +Thank you, - [1] http://governance.openstack.org/election/#how-to-submit-your-candidacy - [2] Assuming the open reviews below are validated - https://review.openstack.org/#/q/is:open+project:openstack/election - [3] http://governance.openstack.org/resolutions/20141128-elections-process-for-leaderless-programs.html""" +[1] http://governance.openstack.org/election/#how-to-submit-your-candidacy +[2] Assuming the open reviews below are validated + https://review.openstack.org/#/q/is:open+project:openstack/election +[3] %s""" + + print(email_text % (num_projects_without_candidates, LEADERLESS_URL)) - print(email_text % (num_projects_without_candidates)) def ptl_end_nominations(projects_no_candidates, list_projects_no_candidates, projects_polling, list_projects_polling, future_release): - email_text= """ - The PTL Nomination period is now over. The official candidate list - is available on the election website[0]. + email_text = """ +The PTL Nomination period is now over. The official candidate list +is available on the election website[0]. - There are %s projects without candidates, so according to this - resolution[1], the TC will have to decide how the following - projects will proceed: %s +There are %s projects without candidates, so according to this +resolution[1], the TC will have to decide how the following +projects will proceed: %s - There are %s projects that will have elections: %s. The details - for those will be posted shortly after we setup the CIVS system. +There are %s projects that will have elections: %s. The details +for those will be posted shortly after we setup the CIVS system. - Thank you, +Thank you, - [0] http://governance.openstack.org/election/#%s-ptl-candidates - [1] http://governance.openstack.org/resolutions/20141128-elections-process-for-leaderless-programs.html""" +[0] http://governance.openstack.org/election/#%s-ptl-candidates +[1] %s""" print(email_text % (projects_no_candidates, list_projects_no_candidates, projects_polling, - list_projects_polling, future_release)) + list_projects_polling, + future_release, + LEADERLESS_URL)) -def ptl_voting_kickoff(election_end, list_of_elections, time_frame, starting_release, ending_release, future_release, repo_tag): - email_text= """ - Polls for PTL elections are now open and will remain open for you to - cast your vote until %s. - We are having elections for %s. +def ptl_voting_kickoff(election_end, list_of_elections, time_frame, + starting_release, ending_release, future_release): + email_text = """ +Polls for PTL elections are now open and will remain open for you to +cast your vote until %s. - If you are a Foundation individual member and had a commit in - one of the program's projects[0] over the %s timeframe - (%s to %s) then you are eligible to vote. You should find your - email with a link to the Condorcet page to cast your vote in the - inbox of your gerrit preferred email[1]. +We are having elections for %s. - What to do if you don't see the email and have a commit in at - least one of the programs having an election: - * check the trash or spam folders of your gerrit Preferred - Email address, in case it went into trash or spam - * wait a bit and check again, in case your email server is a bit slow - * find the sha of at least one commit from the program - project repos[0] and email the election officials. +If you are a Foundation individual member and had a commit in +one of the program's projects[0] over the %s timeframe +(%s to %s) then you are eligible to vote. You should find your +email with a link to the Condorcet page to cast your vote in the +inbox of your gerrit preferred email[1]. - If we can confirm that you are entitled to vote, we will add you - to the voters list for the appropriate election. +What to do if you don't see the email and have a commit in at +least one of the programs having an election: +* check the trash or spam folders of your gerrit Preferred + Email address, in case it went into trash or spam +* wait a bit and check again, in case your email server is a bit slow +* find the sha of at least one commit from the program + project repos[0] and email the election officials. - Our democratic process is important to the health of OpenStack, - please exercise your right to vote! +If we can confirm that you are entitled to vote, we will add you +to the voters list for the appropriate election. - Candidate statements/platforms can be found linked to Candidate - names on this page: - http://governance.openstack.org/election/#%s-ptl-candidates +Our democratic process is important to the health of OpenStack, +please exercise your right to vote! - Happy voting, +Candidate statements/platforms can be found linked to Candidate +names on this page: +http://governance.openstack.org/election/#%s-ptl-candidates - [0] The list of the program projects eligible for electoral status: - https://git.openstack.org/cgit/openstack/governance/tree/reference/projects.yaml?id=%s +Happy voting, - [1] Sign into review.openstack.org: - Go to Settings > Contact Information. - Look at the email listed as your Preferred Email. - That is where the ballot has been sent.""" +[0] The list of the program projects eligible for electoral status: + %s +[1] Sign into review.openstack.org: + Go to Settings > Contact Information. + Look at the email listed as your Preferred Email. + That is where the ballot has been sent.""" print(email_text % (election_end, list_of_elections, @@ -167,95 +188,99 @@ def ptl_voting_kickoff(election_end, list_of_elections, time_frame, starting_rel starting_release, ending_release, future_release, - repo_tag)) + REFERENCE_URL)) + def ptl_voting_last_days(list_of_elections, election_end): - email_text= """ - Hello %s contributors, + email_text = """ +Hello %s contributors, - Just a quick reminder that elections are closing soon, if you haven't - already you should use your right to vote and pick your favourite - candidate! +Just a quick reminder that elections are closing soon, if you haven't +already you should use your right to vote and pick your favourite +candidate! - You have until %s. +You have until %s. + +Thanks for your time!""" + + print(email_text % (list_of_elections, + election_end)) - Thanks for your time!""" - print (email_text % (list_of_elections, - election_end)) def tc_election_season(): - email_text= """ - Election details: https://governance.openstack.org/election/ + email_text = """ +Election details: https://governance.openstack.org/election/ - Please read the stipulations and timelines for candidates and - electorate contained in this governance documentation. +Please read the stipulations and timelines for candidates and +electorate contained in this governance documentation. - There will be further announcements posted to the mailing list as - action is required from the electorate or candidates. This email - is for information purposes only. +There will be further announcements posted to the mailing list as +action is required from the electorate or candidates. This email +is for information purposes only. - If you have any questions which you feel affect others please reply - to this email thread. +If you have any questions which you feel affect others please reply +to this email thread. - If you have any questions that you which to discuss in private please - email any of the election officials[1] so that we may address your - concerns. +If you have any questions that you which to discuss in private please +email any of the election officials[1] so that we may address your +concerns. - Thank you, - - [1] https://governance.openstack.org/election/#election-officials""" +Thank you, +[1] https://governance.openstack.org/election/#election-officials""" print(email_text) + + def tc_nominations_kickoff(seats, end_nominations, voting_start, voting_end, time_frame, start_release, end_release, start_nominations, end_nomination, campaign_start, campaign_end, election_start, election_end, future_release): - email_text=""" - Nominations for the Technical Committee positions (%s positions) - are now open and will remain open until %s. + email_text = """ +Nominations for the Technical Committee positions (%s positions) +are now open and will remain open until %s. - All nominations must be submitted as a text file to the - openstack/election repository as explained on the election website[1]. +All nominations must be submitted as a text file to the +openstack/election repository as explained on the election website[1]. - Please note that the name of the file should match an email - address in the foundation member profile of the candidate. +Please note that the name of the file should match an email +address in the foundation member profile of the candidate. - Also for TC candidates election officials refer to the community - member profiles at [2] please take this opportunity to ensure that - your profile contains current information. +Also for TC candidates election officials refer to the community +member profiles at [2] please take this opportunity to ensure that +your profile contains current information. - Candidates for the Technical Committee Positions: Any Foundation - individual member can propose their candidacy for an available, - directly-elected TC seat. +Candidates for the Technical Committee Positions: Any Foundation +individual member can propose their candidacy for an available, +directly-elected TC seat. - The election will be held from %s through to %s. The electorate - are the Foundation individual members that are also committers - for one of the official teams[3] over the %s timeframe (%s to - %s, as well as the extra-ATCs who are acknowledged by the TC[4]. +The election will be held from %s through to %s. The electorate +are the Foundation individual members that are also committers +for one of the official teams[3] over the %s timeframe (%s to +%s, as well as the extra-ATCs who are acknowledged by the TC[4]. - Please see the website[5] for additional details about this election. - Please find below the timeline: +Please see the website[5] for additional details about this election. +Please find below the timeline: - TC nomination starts @ %s - TC nomination ends @ %s - TC campaigning starts @ %s - TC campaigning ends @ %s - TC elections starts @ %s - TC elections ends @ %s +TC nomination starts @ %s +TC nomination ends @ %s +TC campaigning starts @ %s +TC campaigning ends @ %s +TC elections starts @ %s +TC elections ends @ %s - If you have any questions please be sure to either ask them on the - mailing list or to the elections officials[6]. +If you have any questions please be sure to either ask them on the +mailing list or to the elections officials[6]. - Thank you, +Thank you, - [1] http://governance.openstack.org/election/#how-to-submit-your-candidacy - [2] http://www.openstack.org/community/members/ - [3] https://governance.openstack.org/tc/reference/projects/ - [4] https://releases.openstack.org/%s/schedule.html#p-extra-atcs - [5] https://governance.openstack.org/election/ - [6] http://governance.openstack.org/election/#election-officials""" +[1] http://governance.openstack.org/election/#how-to-submit-your-candidacy +[2] http://www.openstack.org/community/members/ +[3] https://governance.openstack.org/tc/reference/projects/ +[4] https://releases.openstack.org/%s/schedule.html#p-extra-atcs +[5] https://governance.openstack.org/election/ +[6] http://governance.openstack.org/election/#election-officials""" print(email_text % (seats, end_nominations, @@ -272,124 +297,130 @@ def tc_nominations_kickoff(seats, end_nominations, voting_start, election_end, future_release)) + def tc_nominations_last_days(end_nominations): - email_text= """ - A quick reminder that we are in the last hours for TC - candidate announcements. Nominations are open until %s. + email_text = """ +A quick reminder that we are in the last hours for TC +candidate announcements. Nominations are open until %s. - If you want to stand for TC, don't delay, follow the - instructions at [1] to make sure the community knows your - intentions. +If you want to stand for TC, don't delay, follow the +instructions at [1] to make sure the community knows your +intentions. - Make sure your nomination has been submitted to the - openstack/election repository and approved by election officials. +Make sure your nomination has been submitted to the +openstack/election repository and approved by election officials. - Thank you, +Thank you, - [1] http://governance.openstack.org/election/#how-to-submit-your-candidacy""" +[1] http://governance.openstack.org/election/#how-to-submit-your-candidacy""" print(email_text % (end_nominations)) + def tc_end_nominations(future_release, election_start_day): - email_text= """ - TC Nomination period is now over. The official candidate list is - available on the election website[0]. + email_text = """ +TC Nomination period is now over. The official candidate list is +available on the election website[0]. - Now begins the campaigning period where candidates and - electorate may debate their statements. +Now begins the campaigning period where candidates and +electorate may debate their statements. - Polling will start %s. +Polling will start %s. - Thank you, +Thank you, - [0] http://governance.openstack.org/election/#%s-tc-candidates""" +[0] http://governance.openstack.org/election/#%s-tc-candidates""" print(email_text % (future_release, election_start_day)) + def tc_voting_kickoff(poll_end, seats, time_frame, start_release, - end_release, repo_tag, future_release): - email_text= """ - The poll for the TC Election is now open and will remain open until %s. + end_release, future_release): + email_text = """ +The poll for the TC Election is now open and will remain open until %s. - We are selecting %s TC members, please rank all candidates in - your order of preference. +We are selecting %s TC members, please rank all candidates in +your order of preference. - You are eligible to vote if you are a Foundation individual member[1] - that also has committed to one of the official programs projects[2] - over the %s timeframe (%s to %s) or if you are one of the - extra-atcs.[3] +You are eligible to vote if you are a Foundation individual member[1] +that also has committed to one of the official programs projects[2] +over the %s timeframe (%s to %s) or if you are one of the +extra-atcs.[3] - What to do if you don't see the email and have a commit in at least - one of the official programs projects[2]: - * check the trash or spam folder of your gerrit Preferred Email - address[4], in case it went into trash or spam - * wait a bit and check again, in case your email server is a bit slow - * find the sha of at least one commit from the program project - repos[2] and email the election officials[1]. +What to do if you don't see the email and have a commit in at least +one of the official programs projects[2]: +* check the trash or spam folder of your gerrit Preferred Email +address[4], in case it went into trash or spam +* wait a bit and check again, in case your email server is a bit slow +* find the sha of at least one commit from the program project +repos[2] and email the election officials[1]. - If we can confirm that you are entitled to vote, we will - add you to the voters list and you will be emailed a ballot. +If we can confirm that you are entitled to vote, we will +add you to the voters list and you will be emailed a ballot. - Our democratic process is important to the health of OpenStack, - please exercise your right to vote. +Our democratic process is important to the health of OpenStack, +please exercise your right to vote. - Candidate statements/platforms can be found linked to Candidate - names[6]. +Candidate statements/platforms can be found linked to Candidate +names[6]. - Happy voting! +Happy voting! - Thank you, +Thank you, - [1] http://www.openstack.org/community/members/ - [2] https://git.openstack.org/cgit/openstack/governance/tree/reference/projects.yaml?id=%s - [3] Look for the extra-atcs element in [2] - [4] Sign into review.openstack.org: Go to Settings > Contact Information. Look at the email listed as your - Preferred Email. That is where the ballot has been sent. - [5] http://governance.openstack.org/election/#election-officials - [6] http://governance.openstack.org/election/#%s-tc-candidates""" +[1] http://www.openstack.org/community/members/ +[2] %s +[3] Look for the extra-atcs element in [2] +[4] Sign into review.openstack.org: Go to Settings > Contact Information. Look + at the email listed as your preferred email. That is where the ballot has + been sent. +[5] http://governance.openstack.org/election/#election-officials +[6] http://governance.openstack.org/election/#%s-tc-candidates""" print(email_text % (poll_end, seats, time_frame, start_release, end_release, - repo_tag, + REFERENCE_URL, future_release)) -def tc_voting_last_days(poll_end, poll_name, future_release, repo_tag): - email_text= """ - We are coming down to the last hours for voting in the TC - election. Voting ends %s. +def tc_voting_last_days(poll_end, poll_name, future_release): - Search your gerrit preferred email address[0] for the following subject: - Poll: %s + email_text = """ +We are coming down to the last hours for voting in the TC +election. Voting ends %s. - That is your ballot and links you to the voting application. Please - vote. If you have voted, please encourage your colleagues to vote. +Search your gerrit preferred email address[0] for the following subject: + Poll: %s - Candidate statements are linked to the names of all confirmed - candidates: - http://governance.openstack.org/election/#%s-tc-candidates +That is your ballot and links you to the voting application. Please +vote. If you have voted, please encourage your colleagues to vote. - What to do if you don't see the email and have a commit in at least - one of the official programs projects[1]: - * check the trash of your gerrit Preferred Email address[0], in - case it went into trash or spam - * wait a bit and check again, in case your email server is a bit slow - * find the sha of at least one commit from the program project - repos[1] and email the election officials[2]. +Candidate statements are linked to the names of all confirmed +candidates: +http://governance.openstack.org/election/#%s-tc-candidates - If we can confirm that you are entitled to vote, we will add you - to the voters list and you will be emailed a ballot. +What to do if you don't see the email and have a commit in at least +one of the official programs projects[1]: +* check the trash of your gerrit Preferred Email address[0], in + case it went into trash or spam +* wait a bit and check again, in case your email server is a bit slow +* find the sha of at least one commit from the program project + repos[1] and email the election officials[2]. - Please vote! +If we can confirm that you are entitled to vote, we will add you +to the voters list and you will be emailed a ballot. - Thank you, +Please vote! - [0] Sign into review.openstack.org: Go to Settings > Contact - Information. Look at the email listed as your Preferred Email. - That is where the ballot has been sent. - [1] https://git.openstack.org/cgit/openstack/governance/tree/reference/projects.yaml?id=%s - [2] http://governance.openstack.org/election/#election-officials""" - print(email_text % (poll_end, poll_name, future_release, repo_tag)) +Thank you, + +[0] Sign into review.openstack.org: Go to Settings > Contact + Information. Look at the email listed as your Preferred Email. + That is where the ballot has been sent. +[1] %s +[2] http://governance.openstack.org/election/#election-officials""" + + print(email_text % (poll_end, poll_name, future_release, REFERENCE_URL)) diff --git a/openstack_election/owners.py b/openstack_election/owners.py index 88ba8e36..bd7ea79b 100644 --- a/openstack_election/owners.py +++ b/openstack_election/owners.py @@ -112,17 +112,23 @@ def dumper(data, stream): def normalize_email(email): - """Lower-case the domain part of E-mail addresses to better spot + """Normalize email addresses to make it easier to spot duplicates + + Lower-case the domain part of E-mail addresses to better spot duplicate entries, since the domain part is case-insensitive - courtesy of DNS while the local part is not necessarily""" + courtesy of DNS while the local part is not necessarily + """ local, domain = email.split('@') domain = domain.lower() return '%s@%s' % (local, domain) def normalize_project(project): - """Replace spaces and hyphens with underscores in project teams - and then lower-case them, for more convenient filenames""" + """Normalize project names for consistent failnames + + Replace spaces and hyphens with underscores in project teams + and then lower-case them, for more convenient filenames + """ return project.translate(maketrans(' -', '__')).lower() @@ -177,7 +183,7 @@ def decode_json(raw): # Try to decode and bail with much detail if it fails try: decoded = json.loads(trimmed) - except: + except Exception: print('\nrequest returned %s error to query:\n\n %s\n' '\nwith detail:\n\n %s\n' % (raw, raw.url, trimmed), file=sys.stderr) @@ -212,14 +218,13 @@ def lookup_member(email): 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'}, - ) + 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) @@ -344,12 +349,10 @@ def main(argv=sys.argv): {'h': ref}) for project in old_projects: for deliverable in old_projects[project]['deliverables']: - if 'retired-on' in old_projects[project]['deliverables'][deliverable]: - retired = old_projects[project]['deliverables'][deliverable]['retired-on'] - elif 'retired-on' in old_projects[project]: - retired = old_projects[project]['retired-on'] - else: - retired = None + retired = old_projects[project]['deliverables'][deliverable].get( + 'retired-on', + old_projects[project].get('retired-on') + ) if retired: retired = retired.isoformat() if after and after > retired: @@ -357,9 +360,12 @@ def main(argv=sys.argv): if project not in gov_projects: gov_projects[project] = {'deliverables': {}} if deliverable in gov_projects[project]['deliverables']: - print('Skipping duplicate/partially retired deliverable: %s' % deliverable, file=sys.stderr) + print(('Skipping duplicate/partially retired deliverable:' + ' %s') % (deliverable), + file=sys.stderr) continue - gov_projects[project]['deliverables'][deliverable] = old_projects[project]['deliverables'][deliverable] + gov_projects[project]['deliverables'][deliverable] = \ + old_projects[project]['deliverables'][deliverable] # A mapping of short (no prefix) to full repo names existing in # Gerrit, used to handle repos which have a different namespace @@ -645,7 +651,7 @@ def main(argv=sys.argv): if member['data']: owners[owner]['member'] = member['data'][0]['id'] continue - invite = [owners[owner].get('member','0')] + invite = [owners[owner].get('member', '0')] invite.append(owners[owner]['name'].encode('utf-8')) invite.append(owners[owner]['preferred']) invite += owners[owner]['extra'] @@ -714,5 +720,6 @@ def main(argv=sys.argv): fd.writelines(electorate) fd.close() + if __name__ == "__main__": main()