153 lines
5.4 KiB
Python
153 lines
5.4 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.
|
||
|
"""
|
||
|
|
||
|
from __future__ import absolute_import
|
||
|
from __future__ import division
|
||
|
from __future__ import print_function
|
||
|
|
||
|
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
|
||
|
import six
|
||
|
|
||
|
# 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_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
|
||
|
|
||
|
|
||
|
# 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
|
||
|
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
|
||
|
CsvListSerializer = _argument_parser.CsvListSerializer
|
||
|
WhitespaceSeparatedListParser = _argument_parser.WhitespaceSeparatedListParser
|
||
|
# 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)
|
||
|
|
||
|
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)
|
||
|
|
||
|
# The global FlagValues instance.
|
||
|
FLAGS = _flagvalues.FLAGS
|
||
|
|