def build_parser()

in source/cli/scheduler_cli/scheduler_cli.py [0:0]


def build_parser():
    def add_common_arguments(parser):
        parser.add_argument(PARAM_QUERY, PARAM_QUERY[1:3], help=HELP_QUERY)
        parser.add_argument(PARAM_REGION, PARAM_REGION[1:3], help=HELP_REGION)
        parser.add_argument(PARAM_STACK, PARAM_STACK[1:3], required=True, help=HELP_STACK)
        parser.add_argument(PARAM_PROFILE_NAME, PARAM_PROFILE_NAME[1:3], required=False, help=HELP_PROFILE_NAME)

    def add_period_arguments(period_parser):
        period_parser.add_argument(PARAM_BEGINTIME, help=HELP_PERIOD_BEGINTIME)
        period_parser.add_argument(PARAM_DESCRIPTION, help=HELP_PERIOD_DESCRIPTION)
        period_parser.add_argument(PARAM_ENDTIME, help=HELP_PERIOD_ENDTIME)
        period_parser.add_argument(PARAM_MONTHDAYS, help=HELP_PERIOD_MONTH_DAYS)
        period_parser.add_argument(PARAM_MONTHS, help=HELP_PERIOD_MONTHS)
        period_parser.add_argument(PARAM_NAME, required=True, help=HELP_PERIOD_NAME)
        period_parser.add_argument(PARAM_WEEKDAYS, help=HELP_PERIOD_WEEKDAYS)

    def add_schedule_arguments(schedule_parser):
        schedule_parser.add_argument(PARAM_DESCRIPTION, help=HELP_SCHEDULE_DESCRIPTION)
        schedule_parser.add_argument(PARAM_TIMEZONE, help=HELP_PARAM_TIMEZONE)
        schedule_parser.add_argument(PARAM_NAME, required=True, help=HELP_SCHEDULE_NAME)
        schedule_parser.add_argument(PARAM_OVERRIDE, choices=VALUES_OVERRIDE_STATUS, help=HELP_SCHEDULE_OVERRIDE_STATUS)
        schedule_parser.add_argument(PARAM_PERIODS, type=str, help=HELP_SCHEDULE_PERIODS)

        schedule_parser.add_argument(PARAM_KEEP_NEW,
                                     dest='stop_new_instances',
                                     action='store_false',
                                     help=HELP_SCHEDULE_KEEP_NEW)

        schedule_parser.add_argument(PARAM_USE_MAIN,
                                     default=False,
                                     dest='use_maintenance_window',
                                     action='store_true',
                                     help=HELP_SCHEDULE_USE_MAIN)

        schedule_parser.add_argument(PARAM_SSM_MAINTENCE_WINDOW,
                                     help=HELP_SCHEDULE_SSM_MAINTENANCE_WINDOW,
                                     type=str)

        schedule_parser.add_argument(PARAM_RETAINED_RUNNING,
                                     default=False,
                                     dest='retain_running',
                                     action='store_true',
                                     help=HELP_SCHEDULE_RETAIN_RUNNING)

        schedule_parser.add_argument(PARAM_ENFORCED,
                                     default=False,
                                     dest='enforced',
                                     action='store_true',
                                     help=HELP_SCHEDULE_ENFORCED)

        schedule_parser.add_argument(PARAM_HIBERNATE,
                                     default=False,
                                     dest='hibernate',
                                     action='store_true',
                                     help=HELP_SCHEDULE_HIBERNATE)

        schedule_parser.add_argument(PARAM_METRICS,
                                     default=False,
                                     dest='use-metrics',
                                     action='store_true',
                                     help=HELP_SCHEDULE_CLOUDWATCH_METRICS)

    def build_describe_schedules_parser():
        sub_parser = subparsers.add_parser(CMD_DESCRIBE_SCHEDULES, help=HELP_CMD_DESCRIBE_SCHEDULES)
        sub_parser.add_argument(PARAM_NAME, help=HELP_NAME_SCHEDULE)
        add_common_arguments(sub_parser)
        sub_parser.set_defaults(func=handle_command, command=CMD_DESCRIBE_SCHEDULES)

    def build_describe_periods_parser():
        sub_parser = subparsers.add_parser(CMD_DESCRIBE_PERIODS, help=HELP_CMD_DESCRIBE_PERIODS)
        sub_parser.add_argument(PARAM_NAME, help=HELP_PERIOD_NAME)
        add_common_arguments(sub_parser)
        sub_parser.set_defaults(func=handle_command, command=CMD_DESCRIBE_PERIODS)

    def build_create_period_parser():
        sub_parser = subparsers.add_parser(CMD_CREATE_PERIOD, help=HELP_CMD_CREATE_PERIOD)
        add_period_arguments(sub_parser)
        add_common_arguments(sub_parser)
        sub_parser.set_defaults(func=handle_command, command=CMD_CREATE_PERIOD)

    def build_create_schedule_parser():
        sub_parser = subparsers.add_parser(CMD_CREATE_SCHEDULE, help=HELP_CMD_CREATE_SCHEDULE)
        add_schedule_arguments(sub_parser)
        add_common_arguments(sub_parser)
        sub_parser.set_defaults(func=handle_command, command=CMD_CREATE_SCHEDULE)

    def build_update_period_parser():
        sub_parser = subparsers.add_parser(CMD_UPDATE_PERIOD, help=HELP_CMD_UPDATE_PERIOD)
        add_period_arguments(sub_parser)
        add_common_arguments(sub_parser)
        sub_parser.set_defaults(func=handle_command, command=CMD_UPDATE_PERIOD)

    def build_update_schedule_parser():
        sub_parser = subparsers.add_parser(CMD_UPDATE_SCHEDULE, help=HELP_CMD_UPDATE_SCHEDULE)
        add_schedule_arguments(sub_parser)
        add_common_arguments(sub_parser)
        sub_parser.set_defaults(func=handle_command, command=CMD_UPDATE_SCHEDULE)

    def build_delete_period_parser():
        sub_parser = subparsers.add_parser(CMD_DELETE_PERIOD, help=HELP_CMD_DELETE_PERIOD)
        sub_parser.add_argument(PARAM_NAME, help=HELP_PERIOD_NAME)
        add_common_arguments(sub_parser)
        sub_parser.set_defaults(func=handle_command, command=CMD_DELETE_PERIOD)

    def build_delete_schedule_parser():
        sub_parser = subparsers.add_parser(CMD_DELETE_SCHEDULE, help=HELP_CMD_DELETE_SCHEDULE)
        sub_parser.add_argument(PARAM_NAME, PARAM_NAME[1:3], help=HELP_SCHEDULE_NAME)
        add_common_arguments(sub_parser)
        sub_parser.set_defaults(func=handle_command, command=CMD_DELETE_SCHEDULE)

    def build_describe_schedule_usage_parser():
        sub_parser = subparsers.add_parser(CMD_DESCRIBE_SCHEDULE_USAGE, help=HELP_CMD_SCHEDULE_DESCRIBE_USAGE)
        sub_parser.add_argument(PARAM_ENDDATE, help=HELP_ENDDATE)
        sub_parser.add_argument(PARAM_NAME, required=True, help=HELP_SCHEDULE_NAME)
        sub_parser.add_argument(PARAM_STARTDATE, help=HELP_STARTDATE)
        add_common_arguments(sub_parser)
        sub_parser.set_defaults(func=handle_command, command=CMD_DESCRIBE_SCHEDULE_USAGE)

    new_parser = argparse.ArgumentParser(prog=PROG_NAME)
    new_parser.add_argument(CMD_VERSION, action='version', version='%(prog)s #version#')
    subparsers = new_parser.add_subparsers(help=HELP_SUB_COMMANDS, description=HELP_VALID_COMMANDS)

    build_create_period_parser()
    build_create_schedule_parser()
    build_delete_period_parser()
    build_delete_schedule_parser()
    build_describe_periods_parser()
    build_describe_schedule_usage_parser()
    build_describe_schedules_parser()
    build_update_period_parser()
    build_update_schedule_parser()

    return new_parser