224 lines
7.5 KiB
Python
224 lines
7.5 KiB
Python
# Copyright 2017 The Abseil Authors.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
"""This package is used to define and parse command line flags.
|
|
|
|
This package defines a *distributed* flag-definition policy: rather than
|
|
an application having to define all flags in or near main(), each Python
|
|
module defines flags that are useful to it. When one Python module
|
|
imports another, it gains access to the other's flags. (This is
|
|
implemented by having all modules share a common, global registry object
|
|
containing all the flag information.)
|
|
|
|
Flags are defined through the use of one of the DEFINE_xxx functions.
|
|
The specific function used determines how the flag is parsed, checked,
|
|
and optionally type-converted, when it's seen on the command line.
|
|
"""
|
|
|
|
import getopt
|
|
import os
|
|
import re
|
|
import sys
|
|
import types
|
|
import warnings
|
|
|
|
from absl.flags import _argument_parser
|
|
from absl.flags import _defines
|
|
from absl.flags import _exceptions
|
|
from absl.flags import _flag
|
|
from absl.flags import _flagvalues
|
|
from absl.flags import _helpers
|
|
from absl.flags import _validators
|
|
|
|
__all__ = (
|
|
'DEFINE',
|
|
'DEFINE_flag',
|
|
'DEFINE_string',
|
|
'DEFINE_boolean',
|
|
'DEFINE_bool',
|
|
'DEFINE_float',
|
|
'DEFINE_integer',
|
|
'DEFINE_enum',
|
|
'DEFINE_enum_class',
|
|
'DEFINE_list',
|
|
'DEFINE_spaceseplist',
|
|
'DEFINE_multi',
|
|
'DEFINE_multi_string',
|
|
'DEFINE_multi_integer',
|
|
'DEFINE_multi_float',
|
|
'DEFINE_multi_enum',
|
|
'DEFINE_multi_enum_class',
|
|
'DEFINE_alias',
|
|
# Flag validators.
|
|
'register_validator',
|
|
'validator',
|
|
'register_multi_flags_validator',
|
|
'multi_flags_validator',
|
|
'mark_flag_as_required',
|
|
'mark_flags_as_required',
|
|
'mark_flags_as_mutual_exclusive',
|
|
'mark_bool_flags_as_mutual_exclusive',
|
|
# Flag modifiers.
|
|
'set_default',
|
|
# Key flag related functions.
|
|
'declare_key_flag',
|
|
'adopt_module_key_flags',
|
|
'disclaim_key_flags',
|
|
# Module exceptions.
|
|
'Error',
|
|
'CantOpenFlagFileError',
|
|
'DuplicateFlagError',
|
|
'IllegalFlagValueError',
|
|
'UnrecognizedFlagError',
|
|
'UnparsedFlagAccessError',
|
|
'ValidationError',
|
|
'FlagNameConflictsWithMethodError',
|
|
# Public classes.
|
|
'Flag',
|
|
'BooleanFlag',
|
|
'EnumFlag',
|
|
'EnumClassFlag',
|
|
'MultiFlag',
|
|
'MultiEnumClassFlag',
|
|
'FlagHolder',
|
|
'FlagValues',
|
|
'ArgumentParser',
|
|
'BooleanParser',
|
|
'EnumParser',
|
|
'EnumClassParser',
|
|
'ArgumentSerializer',
|
|
'FloatParser',
|
|
'IntegerParser',
|
|
'BaseListParser',
|
|
'ListParser',
|
|
'ListSerializer',
|
|
'EnumClassListSerializer',
|
|
'CsvListSerializer',
|
|
'WhitespaceSeparatedListParser',
|
|
'EnumClassSerializer',
|
|
# Helper functions.
|
|
'get_help_width',
|
|
'text_wrap',
|
|
'flag_dict_to_args',
|
|
'doc_to_help',
|
|
# The global FlagValues instance.
|
|
'FLAGS',
|
|
)
|
|
|
|
# Initialize the FLAGS_MODULE as early as possible.
|
|
# It's only used by adopt_module_key_flags to take SPECIAL_FLAGS into account.
|
|
_helpers.FLAGS_MODULE = sys.modules[__name__]
|
|
|
|
# Add current module to disclaimed module ids.
|
|
_helpers.disclaim_module_ids.add(id(sys.modules[__name__]))
|
|
|
|
# DEFINE functions. They are explained in more details in the module doc string.
|
|
# pylint: disable=invalid-name
|
|
DEFINE = _defines.DEFINE
|
|
DEFINE_flag = _defines.DEFINE_flag
|
|
DEFINE_string = _defines.DEFINE_string
|
|
DEFINE_boolean = _defines.DEFINE_boolean
|
|
DEFINE_bool = DEFINE_boolean # Match C++ API.
|
|
DEFINE_float = _defines.DEFINE_float
|
|
DEFINE_integer = _defines.DEFINE_integer
|
|
DEFINE_enum = _defines.DEFINE_enum
|
|
DEFINE_enum_class = _defines.DEFINE_enum_class
|
|
DEFINE_list = _defines.DEFINE_list
|
|
DEFINE_spaceseplist = _defines.DEFINE_spaceseplist
|
|
DEFINE_multi = _defines.DEFINE_multi
|
|
DEFINE_multi_string = _defines.DEFINE_multi_string
|
|
DEFINE_multi_integer = _defines.DEFINE_multi_integer
|
|
DEFINE_multi_float = _defines.DEFINE_multi_float
|
|
DEFINE_multi_enum = _defines.DEFINE_multi_enum
|
|
DEFINE_multi_enum_class = _defines.DEFINE_multi_enum_class
|
|
DEFINE_alias = _defines.DEFINE_alias
|
|
# pylint: enable=invalid-name
|
|
|
|
# Flag validators.
|
|
register_validator = _validators.register_validator
|
|
validator = _validators.validator
|
|
register_multi_flags_validator = _validators.register_multi_flags_validator
|
|
multi_flags_validator = _validators.multi_flags_validator
|
|
mark_flag_as_required = _validators.mark_flag_as_required
|
|
mark_flags_as_required = _validators.mark_flags_as_required
|
|
mark_flags_as_mutual_exclusive = _validators.mark_flags_as_mutual_exclusive
|
|
mark_bool_flags_as_mutual_exclusive = _validators.mark_bool_flags_as_mutual_exclusive
|
|
|
|
# Flag modifiers.
|
|
set_default = _defines.set_default
|
|
|
|
# Key flag related functions.
|
|
declare_key_flag = _defines.declare_key_flag
|
|
adopt_module_key_flags = _defines.adopt_module_key_flags
|
|
disclaim_key_flags = _defines.disclaim_key_flags
|
|
|
|
# Module exceptions.
|
|
# pylint: disable=invalid-name
|
|
Error = _exceptions.Error
|
|
CantOpenFlagFileError = _exceptions.CantOpenFlagFileError
|
|
DuplicateFlagError = _exceptions.DuplicateFlagError
|
|
IllegalFlagValueError = _exceptions.IllegalFlagValueError
|
|
UnrecognizedFlagError = _exceptions.UnrecognizedFlagError
|
|
UnparsedFlagAccessError = _exceptions.UnparsedFlagAccessError
|
|
ValidationError = _exceptions.ValidationError
|
|
FlagNameConflictsWithMethodError = _exceptions.FlagNameConflictsWithMethodError
|
|
|
|
# Public classes.
|
|
Flag = _flag.Flag
|
|
BooleanFlag = _flag.BooleanFlag
|
|
EnumFlag = _flag.EnumFlag
|
|
EnumClassFlag = _flag.EnumClassFlag
|
|
MultiFlag = _flag.MultiFlag
|
|
MultiEnumClassFlag = _flag.MultiEnumClassFlag
|
|
FlagHolder = _flagvalues.FlagHolder
|
|
FlagValues = _flagvalues.FlagValues
|
|
ArgumentParser = _argument_parser.ArgumentParser
|
|
BooleanParser = _argument_parser.BooleanParser
|
|
EnumParser = _argument_parser.EnumParser
|
|
EnumClassParser = _argument_parser.EnumClassParser
|
|
ArgumentSerializer = _argument_parser.ArgumentSerializer
|
|
FloatParser = _argument_parser.FloatParser
|
|
IntegerParser = _argument_parser.IntegerParser
|
|
BaseListParser = _argument_parser.BaseListParser
|
|
ListParser = _argument_parser.ListParser
|
|
ListSerializer = _argument_parser.ListSerializer
|
|
EnumClassListSerializer = _argument_parser.EnumClassListSerializer
|
|
CsvListSerializer = _argument_parser.CsvListSerializer
|
|
WhitespaceSeparatedListParser = _argument_parser.WhitespaceSeparatedListParser
|
|
EnumClassSerializer = _argument_parser.EnumClassSerializer
|
|
# pylint: enable=invalid-name
|
|
|
|
# Helper functions.
|
|
get_help_width = _helpers.get_help_width
|
|
text_wrap = _helpers.text_wrap
|
|
flag_dict_to_args = _helpers.flag_dict_to_args
|
|
doc_to_help = _helpers.doc_to_help
|
|
|
|
# Special flags.
|
|
_helpers.SPECIAL_FLAGS = FlagValues()
|
|
|
|
DEFINE_string(
|
|
'flagfile', '',
|
|
'Insert flag definitions from the given file into the command line.',
|
|
_helpers.SPECIAL_FLAGS) # pytype: disable=wrong-arg-types
|
|
|
|
DEFINE_string('undefok', '',
|
|
'comma-separated list of flag names that it is okay to specify '
|
|
'on the command line even if the program does not define a flag '
|
|
'with that name. IMPORTANT: flags in this list that have '
|
|
'arguments MUST use the --flag=value format.',
|
|
_helpers.SPECIAL_FLAGS) # pytype: disable=wrong-arg-types
|
|
|
|
#: The global FlagValues instance.
|
|
FLAGS = _flagvalues.FLAGS
|