示例#1
0
def main():
    description = ('Check thath the email address is a valid candidate for '
                   ' the specified project')
    parser = argparse.ArgumentParser(description)
    parser.add_argument(dest='project_name',
                        help=('The Project the candidate is applying for'))
    parser.add_argument(dest='email',
                        help=('An email address registered to the candidate'))
    parser.add_argument('--limit', dest='limit', type=int, default=1,
                        help=('How many validating changes to report.  '
                              'A negative value means report many.  '
                              'Default: %(default)s'))
    parser.add_argument('--tag', dest='tag', default=utils.conf['tag'],
                        help=('The governance tag to validate against.  '
                              'Default: %(default)s'))

    args = parser.parse_args()
    if args.limit < 0:
        args.limit = 100

    projects = utils.get_projects(tag=args.tag)
    if args.project_name not in projects.keys():
        print('[E]: %s not found in: %s' %
              (args.project_name, ','.join(projects.keys())))
        return 1

    if check_candidacy.check_candidate(args.project_name, args.email,
                                       projects, limit=args.limit):
        print('SUCESS: %s is a valid candidate\n\n' % (args.email))
        return 0
    else:
        print('[E]: %s is not a valid candidate\n\n' % (args.email))
        return 1
def main():
    if not os.path.isdir("candidates"):
        print("candidates directory not found")
        exit(1)

    base_dir = "candidates/%s" % utils.conf['release']
    projects = utils.get_projects()
    project_list = list(projects.keys())
    project_list.sort()
    for project in project_list + ["TC"]:
        dpath = "%s/%s" % (base_dir, utils.name2dir(project))
        if not os.path.exists(dpath):
            os.makedirs(dpath)
            open("%s/.placeholder" % dpath, "w").close()
            print("[+] Created %s" % (dpath))
示例#3
0
def main():
    description = ('Check thath the email address is a valid candidate for '
                   ' the specified project')
    parser = argparse.ArgumentParser(description)
    parser.add_argument(dest='project_name',
                        help=('The Project the candidate is applying for'))
    parser.add_argument(dest='email',
                        help=('An email address registered to the candidate'))
    parser.add_argument('--limit',
                        dest='limit',
                        type=int,
                        default=1,
                        help=('How many validating changes to report.  '
                              'A negative value means report many.  '
                              'Default: %(default)s'))
    parser.add_argument('--tag',
                        dest='tag',
                        default=utils.conf['tag'],
                        help=('The governance tag to validate against.  '
                              'Default: %(default)s'))
    parser.add_argument('-v',
                        '--verbose',
                        action="count",
                        default=0,
                        help='Increase program verbosity')

    args = parser.parse_args()
    if args.limit < 0:
        args.limit = 100

    projects = utils.get_projects(tag=args.tag)
    projects_list = list(projects.keys())
    if args.project_name not in projects_list:
        print('[E]: %s not found in: %s' %
              (args.project_name, ','.join(projects_list)))
        return 1

    if check_candidacy.check_candidate(args.project_name,
                                       args.email,
                                       projects,
                                       limit=args.limit,
                                       verbose=args.verbose):
        print('SUCCESS: %s is a valid candidate\n\n' % (args.email))
        return 0
    else:
        print('[E]: %s is not a valid candidate\n\n' % (args.email))
        return 1
示例#4
0
def main():
    if not os.path.isdir("candidates"):
        print("candidates directory not found")
        exit(1)

    base_dir = "candidates/%s" % utils.conf['release']
    if os.path.exists(base_dir):
        print("%s: directory already exists" % base_dir)
        exit(1)

    projects = utils.get_projects()
    project_list = projects.keys()
    project_list.sort()
    for project in project_list + ["TC"]:
        dpath = "%s/%s" % (base_dir, utils.name2dir(project))
        os.makedirs(dpath)
        open("%s/.placeholder" % dpath, "w").close()
        print("[+] Created %s" % (dpath))
示例#5
0
def check_candidacy_review(change_id, limit=1, tag=utils.conf['tag'],
                           review=None):
    projects = utils.get_projects(tag=tag)
    # If there is more than one review that matches this change_id then all
    # bets are off
    review = review or utils.get_reviews(change_id)[0]
    email = review.get('owner', {}).get('email')
    found = 0

    for filename in utils.candidate_files(review):
        _, series, project_name, candidate_file = filename.split(os.sep)
        if project_name != 'TC':
            project_name = utils.dir2name(project_name, projects)

        found += check_candidate(project_name, email, projects,
                                 limit=(limit-found))
        if found >= limit:
            return True

    return found > 0
示例#6
0
def check_candidacy_review(change_id,
                           limit=1,
                           tag=utils.PROJECTS_TAG,
                           review=None):
    projects = utils.get_projects(tag=tag)
    # If there is more than one review that matches this change_id then all
    # bets are off
    review = review or utils.get_reviews(change_id)[0]
    email = review.get('owner', {}).get('email')
    found = 0

    for filename in utils.candidate_files(review):
        _, series, project_name, candidate_file = filename.split(os.sep)
        if project_name != 'TC':
            project_name = utils.dir2name(project_name, projects)

        found += check_candidate(project_name,
                                 email,
                                 projects,
                                 limit=(limit - found))
        if found >= limit:
            return True

    return found > 0
def main():
    description = ('Check all files under the current open election are valid')
    parser = argparse.ArgumentParser(description)

    parser.add_argument('--limit', dest='limit', type=int, default=1,
                        help=('How many validating changes to report.  '
                              'A negative value means report many.  '
                              'Default: %(default)s'))
    parser.add_argument('--tag', dest='tag', default=utils.conf['tag'],
                        help=('The governance tag to validate against.  '
                              'Default: %(default)s'))
    parser.add_argument('--release', dest='release',
                        default=utils.conf['release'],
                        help=('The relase to validate candidates against.  '
                              'Default: %(default)s'))
    parser.add_argument('--HEAD',
                        dest='head_only',
                        action='store_true',
                        default=False,
                        help='Validate all candidates.')
    parser.add_argument('files',
                        nargs='*',
                        help='Candidate files to validate.')
    parser.add_argument('-v', '--verbose', action="count", default=0,
                        help='Increase program verbosity')

    args = parser.parse_args()
    errors = False

    if not utils.election_is_running():
        print('no current active election')
        return 0

    if not validate_release(args.release):
        return 1

    projects = utils.get_projects(tag=args.tag, fallback_to_master=True)
    election_type = utils.conf.get('election_type', '').lower()

    if args.files:
        to_process = args.files
    elif args.head_only:
        to_process = find_modified_candidate_files()
    else:
        to_process = utils.find_candidate_files(election=args.release)

    for filepath in to_process:
        email = utils.get_email(filepath)
        team = os.path.basename(os.path.dirname(filepath))

        # Some kind souls remove the .placeholder file when they upload
        # a candidacy
        if email == '.placeholder':
            continue

        candidate_ok = True

        candidate_ok &= validate_filename(filepath)
        candidate_ok &= validate_member(filepath, verbose=args.verbose)

        if candidate_ok:
            if (election_type == 'ptl'
                    or (election_type == 'combined' and team != 'TC')):
                candidate_ok &= check_for_changes(projects, filepath,
                                                  args.limit,
                                                  verbose=args.verbose)

        errors |= not candidate_ok

    return 1 if errors else 0
def main():
    description = ('Check all open reviews for candidacies')
    parser = argparse.ArgumentParser(description)
    parser.add_argument('--limit', dest='limit', type=int, default=1,
                        help=('How many validating changes to report.  '
                              'A negative value means report many.  '
                              'Default: %(default)s'))
    parser.add_argument('--tag', dest='tag', default=utils.conf['tag'],
                        help=('The governance tag to validate against.  '
                              'Default: %(default)s'))
    parser.add_argument('--interactive', dest='interactive', default=False,
                        action='store_true',
                        help=('Pause after each review to manually post '
                              'results'))
    parser.add_argument('-v', '--verbose', action="count", default=0,
                        help='Increase program verbosity')

    args = parser.parse_args()
    projects = utils.get_projects(tag=args.tag, fallback_to_master=True)
    election_type = utils.conf.get('election_type', '').lower()

    for review in get_reviews(verbose=args.verbose):
        if review['status'] != 'NEW':
            continue

        review_url = '%s/%d' % (utils.GERRIT_BASE, review['_number'])
        print('\n\nChecking %s' % (review_url))

        for filepath in utils.candidate_files(review):
            email = utils.get_email(filepath)
            team = os.path.basename(os.path.dirname(filepath))

            # Some kind souls remove the .placeholder file when they upload
            # a candidacy
            if email == '.placeholder':
                continue

            candiate_ok = checks.validate_filename(filepath)
            if candiate_ok:
                candiate_ok = checks.validate_member(filepath,
                                                     verbose=args.verbose)

            if candiate_ok:
                # If we're a PTL election OR if the team is not TC we need
                # to check for validating changes
                if (election_type == 'ptl'
                        or (election_type == 'combined' and team != 'TC')):
                    if args.interactive:
                        print('The following commit and profile validate this '
                              'candidate:')
                    candiate_ok = checks.check_for_changes(
                        projects, filepath, args.limit,
                        verbose=args.verbose)
                    print_member(filepath, verbose=args.verbose)
                else:
                    print('Not checking for changes as this is a TC election')
            else:
                print('Not checking for changes as %s doesn\'t seem to '
                      'describe a valid candidacy' % (filepath))

            if args.interactive:
                try:
                    input('Next review?')
                except KeyboardInterrupt:
                    print('')
                    return 0

            results.append((review_url, email, team, candiate_ok))

    print('\n\n\n')
    print('*' * 80)
    for result in results:
        (review_url, email, team, candiate_ok) = result
        print(review_url)
        if candiate_ok:
            print(' SUCCESS: %s is a valid candidate for %s' % (email, team))
        else:
            print(' ERROR: Candidate %s is not valid, please review '
                  'previous messages for details.' % (email))
    print('*' * 80)
    return 0
示例#9
0
import argparse
import os

from openstack_election import utils

parser = argparse.ArgumentParser()
parser.add_argument('name', help='The release cycle name')
parser.add_argument("--root", help='Election directory', default='.')
options = parser.parse_args()

os.chdir(options.root)
if not os.path.isdir("candidates"):
    print("candidates directory not found")
    exit(1)

if os.path.exists("candidates/%s" % options.name):
    print("candidates/%s: directory already exists" % (options.name))
    exit(1)

projects = utils.get_projects()
project_list = projects.keys()
project_list.sort()
for project in project_list + ["TC"]:
    dpath = "candidates/%s/%s" % (options.name, utils.name2dir(project))
    os.makedirs(dpath)
    open("%s/.placeholder" % dpath, "w").close()
    print("[+] Created %s" % (dpath))

print("Done. Now please manually update events.yaml and "
      "doc/source/index.rst substitutions")