def parse_args()

in tools/domspurge/purge.py [0:0]


def parse_args():
    parser = argparse.ArgumentParser(description='Purge DOMS data from Cassandra')

    cassandra_args = parser.add_argument_group('Cassandra args')
    purge_options = parser.add_argument_group('Purge options')

    cassandra_args.add_argument('--cassandra', help='The hostname(s) or IP(s) of the Cassandra server(s).',
                                required=False,
                                default=['localhost'],
                                dest='hosts',
                                nargs='+',
                                metavar=('localhost', '127.0.0.101'))

    cassandra_args.add_argument('-k', '--cassandraKeyspace',
                                help='The Cassandra keyspace for DOMS data.',
                                default='doms',
                                dest='keyspace',
                                required=False,
                                metavar='DOMS_KEYSPACE')

    cassandra_args.add_argument('--cassandraPort',
                                help='The port used to connect to Cassandra.',
                                dest='port',
                                required=False,
                                default='9042')

    cassandra_args.add_argument('-u', '--cassandra-username',
                                dest='username', help='The username used to connect to Cassandra.',
                                required=True, metavar='USERNAME')

    cassandra_args.add_argument('-p', '--cassandra-password',
                                dest='password', help='The password used to connect to Cassandra.',
                                required=True, metavar='PASSWORD')

    cassandra_args.add_argument('--cassandraProtocolVersion',
                                help='The version of the Cassandra protocol the driver should use.',
                                required=False,
                                dest='pv',
                                choices=['1', '2', '3', '4', '5'],
                                default='4')

    time_before = purge_options.add_mutually_exclusive_group(required=True)

    time_before.add_argument('--before',
                             help='Date & time before which data will be purged. Time entered should be UTC. Do not '
                                  'specify timezone.',
                             type=du_parser.parse,
                             dest='before_dt',
                             metavar='DATETIME',
                             default=None)

    def num_months(s):
        v = int(s)

        if v <= 0:
            raise ValueError('--before-months must be >= 1')

        return v

    time_before.add_argument('--before-months',
                             help='Drop all data before n months ago',
                             type=num_months,
                             dest='before_mo',
                             metavar='MONTHS',
                             default=None)

    time_before.add_argument('--keep-completed',
                             help='Keep all completed executions (only purge failed executions)',
                             action='store_true',
                             dest='keep')

    time_before.add_argument('--all',
                             help='Purge ALL data (drops and re-creates keyspace)',
                             action='store_true',
                             dest='all')

    time_before.add_argument('--recreate-ks',
                             help=argparse.SUPPRESS,
                             action='store_true',
                             dest='recreate')

    purge_options.add_argument('--keep-failed',
                               help='Keep failed executions.',
                               action='store_true',
                               dest='keep_failed')

    parser.add_argument('--dry-run',
                        help='Only print the execution ids to be deleted / DB operations to be performed. Do not '
                             'actually alter the DB',
                        action='store_true',
                        dest='dry_run')

    parser.add_argument('-y', '--yes',
                        help='Do not ask for confirmation.',
                        action='store_true',
                        dest='yes')

    args = parser.parse_args()

    global dry_run
    global non_interactive
    dry_run = args.dry_run
    non_interactive = args.yes

    if args.recreate:
        return args, None, False, False, False, True

    if args.all:
        if args.keep_failed:
            raise ValueError('Mutually exclusive options (purge all & keep) selected')

        return args, None, False, False, True, False

    if args.keep and args.keep_failed:
        raise ValueError('--keep-completed and --keep-failed are set; this will have no effect')

    if args.keep:
        before = None
    elif args.before_dt:
        before = args.before_dt
    else:
        now = datetime.utcnow()
        delta = relativedelta(months=-args.before_mo)
        before = now + delta

    return args, before, args.keep, args.keep_failed, False, False