diff options
Diffstat (limited to 'third_party/py/gflags/gflags/__init__.py')
-rw-r--r-- | third_party/py/gflags/gflags/__init__.py | 891 |
1 files changed, 0 insertions, 891 deletions
diff --git a/third_party/py/gflags/gflags/__init__.py b/third_party/py/gflags/gflags/__init__.py deleted file mode 100644 index b0025eaa39..0000000000 --- a/third_party/py/gflags/gflags/__init__.py +++ /dev/null @@ -1,891 +0,0 @@ -#!/usr/bin/env python -# Copyright 2002 Google Inc. All Rights Reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following disclaimer -# in the documentation and/or other materials provided with the -# distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# --- -# Author: Chad Lester -# Contributions by: -# Amit Patel, Bogdan Cocosel, Daniel Dulitz, Eric Tiedemann, -# Eric Veach, Laurence Gonsalves, Matthew Springer, Craig Silverstein, -# Vladimir Rusinov - -"""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 - -import six - -import _helpers -import argument_parser -import exceptions -# _flag alias is to avoid 'redefined outer name' warnings. -import flag as _flag -import flagvalues -import validators as gflags_validators - - -# Add current module to disclaimed module ids. -_helpers.disclaim_module_ids.add(id(sys.modules[__name__])) - -# Function/class aliases. Lint complains about invalid-name for many of them, -# suppress warning for whole block: -# pylint: disable=invalid-name - -# Module exceptions: -# TODO(vrusinov): these should all be renamed to *Error, e.g. IllegalFlagValue -# should be removed in favour of IllegalFlagValueError. -FlagsError = exceptions.Error -Error = exceptions.Error -CantOpenFlagFileError = exceptions.CantOpenFlagFileError -DuplicateFlagError = exceptions.DuplicateFlagError -DuplicateFlagCannotPropagateNoneToSwig = ( - exceptions.DuplicateFlagCannotPropagateNoneToSwig) -IllegalFlagValue = exceptions.IllegalFlagValueError -IllegalFlagValueError = exceptions.IllegalFlagValueError -UnrecognizedFlagError = exceptions.UnrecognizedFlagError -ValidationError = exceptions.ValidationError - -# Public functions: -GetHelpWidth = _helpers.GetHelpWidth -TextWrap = _helpers.TextWrap -FlagDictToArgs = _helpers.FlagDictToArgs -DocToHelp = _helpers.DocToHelp - -# Public classes: -Flag = _flag.Flag -BooleanFlag = _flag.BooleanFlag -EnumFlag = _flag.EnumFlag -MultiFlag = _flag.MultiFlag - -FlagValues = flagvalues.FlagValues -ArgumentParser = argument_parser.ArgumentParser -BooleanParser = argument_parser.BooleanParser -EnumParser = argument_parser.EnumParser -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 - - - - -# The global FlagValues instance -FLAGS = FlagValues() - - -# Flags validators - - -def register_validator(flag_name, - checker, - message='Flag validation failed', - flag_values=FLAGS): - """Adds a constraint, which will be enforced during program execution. - - The constraint is validated when flags are initially parsed, and after each - change of the corresponding flag's value. - Args: - flag_name: str, Name of the flag to be checked. - checker: callable, A function to validate the flag. - input - A single positional argument: The value of the corresponding - flag (string, boolean, etc. This value will be passed to checker - by the library). - output - Boolean. - Must return True if validator constraint is satisfied. - If constraint is not satisfied, it should either return False or - raise gflags.ValidationError(desired_error_message). - message: Error text to be shown to the user if checker returns False. - If checker raises gflags.ValidationError, message from the raised - Error will be shown. - flag_values: An optional FlagValues instance to validate against. - Raises: - AttributeError: If flag_name is not registered as a valid flag name. - """ - v = gflags_validators.SingleFlagValidator(flag_name, checker, message) - _add_validator(flag_values, v) - - -def validator(flag_name, message='Flag validation failed', flag_values=FLAGS): - """A function decorator for defining a flag validator. - - Registers the decorated function as a validator for flag_name, e.g. - - @gflags.validator('foo') - def _CheckFoo(foo): - ... - - See register_validator() for the specification of checker function. - - Args: - flag_name: string, name of the flag to be checked. - message: error text to be shown to the user if checker returns False. - If checker raises gflags.ValidationError, message from the raised - Error will be shown. - flag_values: FlagValues - Returns: - A function decorator that registers its function argument as a validator. - Raises: - AttributeError: if flag_name is not registered as a valid flag name. - """ - - def decorate(function): - register_validator(flag_name, function, - message=message, - flag_values=flag_values) - return function - return decorate - - -def register_multi_flags_validator(flag_names, - multi_flags_checker, - message='Flags validation failed', - flag_values=FLAGS): - """Adds a constraint to multiple flags. - - The constraint is validated when flags are initially parsed, and after each - change of the corresponding flag's value. - - Args: - flag_names: [str], a list of the flag names to be checked. - multi_flags_checker: callable, a function to validate the flag. - input - dictionary, with keys() being flag_names, and value for each key - being the value of the corresponding flag (string, boolean, etc). - output - Boolean. Must return True if validator constraint is satisfied. - If constraint is not satisfied, it should either return False or - raise gflags.ValidationError. - message: Error text to be shown to the user if checker returns False. - If checker raises gflags.ValidationError, message from the raised error - will be shown. - flag_values: An optional FlagValues instance to validate against. - - Raises: - AttributeError: If a flag is not registered as a valid flag name. - """ - v = gflags_validators.MultiFlagsValidator( - flag_names, multi_flags_checker, message) - _add_validator(flag_values, v) - - -def multi_flags_validator(flag_names, - message='Flag validation failed', - flag_values=FLAGS): - """A function decorator for defining a multi-flag validator. - - Registers the decorated function as a validator for flag_names, e.g. - - @gflags.multi_flags_validator(['foo', 'bar']) - def _CheckFooBar(flags_dict): - ... - - See register_multi_flags_validator() for the specification of checker - function. - - Args: - flag_names: [str], a list of the flag names to be checked. - message: error text to be shown to the user if checker returns False. - If checker raises ValidationError, message from the raised - error will be shown. - flag_values: An optional FlagValues instance to validate against. - - Returns: - A function decorator that registers its function argument as a validator. - - Raises: - AttributeError: If a flag is not registered as a valid flag name. - """ - - def decorate(function): - register_multi_flags_validator(flag_names, - function, - message=message, - flag_values=flag_values) - return function - - return decorate - - -def mark_flag_as_required(flag_name, flag_values=FLAGS): - """Ensures that flag is not None during program execution. - - Registers a flag validator, which will follow usual validator rules. - Important note: validator will pass for any non-None value, such as False, - 0 (zero), '' (empty string) and so on. - - It is recommended to call this method like this: - - if __name__ == '__main__': - gflags.mark_flag_as_required('your_flag_name') - app.run() - - Because validation happens at app.run() we want to ensure required-ness - is enforced at that time. However, you generally do not want to force - users who import your code to have additional required flags for their - own binaries or tests. - - Args: - flag_name: string, name of the flag - flag_values: FlagValues - Raises: - AttributeError: if flag_name is not registered as a valid flag name. - """ - if flag_values[flag_name].default is not None: - # TODO(vrusinov): Turn this warning into an exception. - warnings.warn( - 'Flag %s has a non-None default value; therefore, ' - 'mark_flag_as_required will pass even if flag is not specified in the ' - 'command line!' % flag_name) - register_validator(flag_name, - lambda value: value is not None, - message='Flag --%s must be specified.' % flag_name, - flag_values=flag_values) - - -def mark_flags_as_required(flag_names, flag_values=FLAGS): - """Ensures that flags are not None during program execution. - - Recommended usage: - - if __name__ == '__main__': - gflags.mark_flags_as_required(['flag1', 'flag2', 'flag3']) - app.run() - - Args: - flag_names: list/tuple, names of the flags. - flag_values: FlagValues - Raises: - AttributeError: If any of flag name has not already been defined as a flag. - """ - for flag_name in flag_names: - mark_flag_as_required(flag_name, flag_values) - - -def mark_flags_as_mutual_exclusive(flag_names, required=False, - flag_values=FLAGS): - """Ensures that only one flag among flag_names is set. - - Args: - flag_names: [str], a list of the flag names to be checked. - required: Boolean, if set, exactly one of the flags must be set. - Otherwise, it is also valid for none of the flags to be set. - flag_values: An optional FlagValues instance to validate against. - """ - - def validate_mutual_exclusion(flags_dict): - flag_count = sum(1 for val in flags_dict.values() if val is not None) - if flag_count == 1 or (not required and flag_count == 0): - return True - message = ('%s one of (%s) must be specified.' % - ('Exactly' if required else 'At most', ', '.join(flag_names))) - raise ValidationError(message) - - register_multi_flags_validator( - flag_names, validate_mutual_exclusion, flag_values=flag_values) - - -def _add_validator(fv, validator_instance): - """Register new flags validator to be checked. - - Args: - fv: flagvalues.FlagValues - validator_instance: validators.Validator - Raises: - KeyError: if validators work with a non-existing flag. - """ - for flag_name in validator_instance.get_flags_names(): - fv[flag_name].validators.append(validator_instance) - - -def _register_bounds_validator_if_needed(parser, name, flag_values): - """Enforces lower and upper bounds for numeric flags. - - Args: - parser: NumericParser (either FloatParser or IntegerParser). Provides lower - and upper bounds, and help text to display. - name: string, name of the flag - flag_values: FlagValues - """ - if parser.lower_bound is not None or parser.upper_bound is not None: - - def checker(value): - if value is not None and parser.is_outside_bounds(value): - message = '%s is not %s' % (value, parser.syntactic_help) - raise ValidationError(message) - return True - - register_validator(name, checker, flag_values=flag_values) - - -# The DEFINE functions are explained in more details in the module doc string. - - -def DEFINE(parser, name, default, help, flag_values=FLAGS, serializer=None, # pylint: disable=redefined-builtin,invalid-name - module_name=None, **args): - """Registers a generic Flag object. - - NOTE: in the docstrings of all DEFINE* functions, "registers" is short - for "creates a new flag and registers it". - - Auxiliary function: clients should use the specialized DEFINE_<type> - function instead. - - Args: - parser: ArgumentParser that is used to parse the flag arguments. - name: A string, the flag name. - default: The default value of the flag. - help: A help string. - flag_values: FlagValues object with which the flag will be registered. - serializer: ArgumentSerializer that serializes the flag value. - module_name: A string, the name of the Python module declaring this flag. - If not provided, it will be computed using the stack trace of this call. - **args: Dictionary with extra keyword args that are passed to the - Flag __init__. - """ - DEFINE_flag(Flag(parser, serializer, name, default, help, **args), - flag_values, module_name) - - -def DEFINE_flag(flag, flag_values=FLAGS, module_name=None): # pylint: disable=g-bad-name - """Registers a 'Flag' object with a 'FlagValues' object. - - By default, the global FLAGS 'FlagValue' object is used. - - Typical users will use one of the more specialized DEFINE_xxx - functions, such as DEFINE_string or DEFINE_integer. But developers - who need to create Flag objects themselves should use this function - to register their flags. - - Args: - flag: A Flag object, a flag that is key to the module. - flag_values: FlagValues object with which the flag will be registered. - module_name: A string, the name of the Python module declaring this flag. - If not provided, it will be computed using the stack trace of this call. - """ - # copying the reference to flag_values prevents pychecker warnings - fv = flag_values - fv[flag.name] = flag - # Tell flag_values who's defining the flag. - if isinstance(flag_values, FlagValues): - # Regarding the above isinstance test: some users pass funny - # values of flag_values (e.g., {}) in order to avoid the flag - # registration (in the past, there used to be a flag_values == - # FLAGS test here) and redefine flags with the same name (e.g., - # debug). To avoid breaking their code, we perform the - # registration only if flag_values is a real FlagValues object. - if module_name: - module = sys.modules.get(module_name) - else: - module, module_name = _helpers.GetCallingModuleObjectAndName() - # TODO(vrusinov): _RegisterFlagByModule* should be public. - # pylint: disable=protected-access - flag_values._RegisterFlagByModule(module_name, flag) - flag_values._RegisterFlagByModuleId(id(module), flag) - # pylint: enable=protected-access - - -def _internal_declare_key_flags(flag_names, - flag_values=FLAGS, key_flag_values=None): - """Declares a flag as key for the calling module. - - Internal function. User code should call DECLARE_key_flag or - ADOPT_module_key_flags instead. - - Args: - flag_names: A list of strings that are names of already-registered - Flag objects. - flag_values: A FlagValues object that the flags listed in - flag_names have registered with (the value of the flag_values - argument from the DEFINE_* calls that defined those flags). - This should almost never need to be overridden. - key_flag_values: A FlagValues object that (among possibly many - other things) keeps track of the key flags for each module. - Default None means "same as flag_values". This should almost - never need to be overridden. - - Raises: - UnrecognizedFlagError: when we refer to a flag that was not - defined yet. - """ - key_flag_values = key_flag_values or flag_values - - module = _helpers.GetCallingModule() - - for flag_name in flag_names: - flag = flag_values.GetFlag(flag_name) - # TODO(vrusinov): _RegisterKeyFlagForModule should be public. - key_flag_values._RegisterKeyFlagForModule(module, flag) # pylint: disable=protected-access - - -def DECLARE_key_flag( # pylint: disable=g-bad-name - flag_name, flag_values=FLAGS): - """Declares one flag as key to the current module. - - Key flags are flags that are deemed really important for a module. - They are important when listing help messages; e.g., if the - --helpshort command-line flag is used, then only the key flags of the - main module are listed (instead of all flags, as in the case of - --helpfull). - - Sample usage: - - gflags.DECLARE_key_flag('flag_1') - - Args: - flag_name: A string, the name of an already declared flag. - (Redeclaring flags as key, including flags implicitly key - because they were declared in this module, is a no-op.) - flag_values: A FlagValues object. This should almost never - need to be overridden. - """ - if flag_name in _helpers.SPECIAL_FLAGS: - # Take care of the special flags, e.g., --flagfile, --undefok. - # These flags are defined in _SPECIAL_FLAGS, and are treated - # specially during flag parsing, taking precedence over the - # user-defined flags. - _internal_declare_key_flags([flag_name], - flag_values=_helpers.SPECIAL_FLAGS, - key_flag_values=flag_values) - return - _internal_declare_key_flags([flag_name], flag_values=flag_values) - - -def ADOPT_module_key_flags( # pylint: disable=g-bad-name - module, flag_values=FLAGS): - """Declares that all flags key to a module are key to the current module. - - Args: - module: A module object. - flag_values: A FlagValues object. This should almost never need - to be overridden. - - Raises: - Error: When given an argument that is a module name (a - string), instead of a module object. - """ - if not isinstance(module, types.ModuleType): - raise Error('Expected a module object, not %r.' % (module,)) - # TODO(vrusinov): _GetKeyFlagsForModule should be public. - _internal_declare_key_flags( - [f.name for f in flag_values._GetKeyFlagsForModule(module.__name__)], # pylint: disable=protected-access - flag_values=flag_values) - # If module is this flag module, take _helpers._SPECIAL_FLAGS into account. - if module == _helpers.GetModuleObjectAndName(globals())[0]: - _internal_declare_key_flags( - # As we associate flags with _GetCallingModuleObjectAndName(), the - # special flags defined in this module are incorrectly registered with - # a different module. So, we can't use _GetKeyFlagsForModule. - # Instead, we take all flags from _helpers._SPECIAL_FLAGS (a private - # FlagValues, where no other module should register flags). - [f.name for f in six.itervalues(_helpers.SPECIAL_FLAGS.FlagDict())], - flag_values=_helpers.SPECIAL_FLAGS, - key_flag_values=flag_values) - - -def DISCLAIM_key_flags(): # pylint: disable=g-bad-name - """Declares that the current module will not define any more key flags. - - Normally, the module that calls the DEFINE_xxx functions claims the - flag to be its key flag. This is undesirable for modules that - define additional DEFINE_yyy functions with its own flag parsers and - serializers, since that module will accidentally claim flags defined - by DEFINE_yyy as its key flags. After calling this function, the - module disclaims flag definitions thereafter, so the key flags will - be correctly attributed to the caller of DEFINE_yyy. - - After calling this function, the module will not be able to define - any more flags. This function will affect all FlagValues objects. - """ - globals_for_caller = sys._getframe(1).f_globals # pylint: disable=protected-access - module, _ = _helpers.GetModuleObjectAndName(globals_for_caller) - _helpers.disclaim_module_ids.add(id(module)) - - -# -# STRING FLAGS -# - - -def DEFINE_string( # pylint: disable=g-bad-name,redefined-builtin - name, default, help, flag_values=FLAGS, **args): - """Registers a flag whose value can be any string.""" - parser = ArgumentParser() - serializer = ArgumentSerializer() - DEFINE(parser, name, default, help, flag_values, serializer, **args) - - -def DEFINE_boolean( # pylint: disable=g-bad-name,redefined-builtin - name, default, help, flag_values=FLAGS, module_name=None, **args): - """Registers a boolean flag. - - Such a boolean flag does not take an argument. If a user wants to - specify a false value explicitly, the long option beginning with 'no' - must be used: i.e. --noflag - - This flag will have a value of None, True or False. None is possible - if default=None and the user does not specify the flag on the command - line. - - Args: - name: A string, the flag name. - default: The default value of the flag. - help: A help string. - flag_values: FlagValues object with which the flag will be registered. - module_name: A string, the name of the Python module declaring this flag. - If not provided, it will be computed using the stack trace of this call. - **args: Dictionary with extra keyword args that are passed to the - Flag __init__. - """ - DEFINE_flag(BooleanFlag(name, default, help, **args), - flag_values, module_name) - - -# Match C++ API to unconfuse C++ people. -DEFINE_bool = DEFINE_boolean # pylint: disable=g-bad-name - - -def DEFINE_float( # pylint: disable=g-bad-name,redefined-builtin - name, default, help, lower_bound=None, upper_bound=None, - flag_values=FLAGS, **args): # pylint: disable=g-bad-name - """Registers a flag whose value must be a float. - - If lower_bound or upper_bound are set, then this flag must be - within the given range. - - Args: - name: str, flag name. - default: float, default flag value. - help: str, help message. - lower_bound: float, min value of the flag. - upper_bound: float, max value of the flag. - flag_values: FlagValues object with which the flag will be registered. - **args: additional arguments to pass to DEFINE. - """ - parser = FloatParser(lower_bound, upper_bound) - serializer = ArgumentSerializer() - DEFINE(parser, name, default, help, flag_values, serializer, **args) - _register_bounds_validator_if_needed(parser, name, flag_values=flag_values) - - -def DEFINE_integer( # pylint: disable=g-bad-name,redefined-builtin - name, default, help, lower_bound=None, upper_bound=None, - flag_values=FLAGS, **args): - """Registers a flag whose value must be an integer. - - If lower_bound, or upper_bound are set, then this flag must be - within the given range. - - Args: - name: str, flag name. - default: int, default flag value. - help: str, help message. - lower_bound: int, min value of the flag. - upper_bound: int, max value of the flag. - flag_values: FlagValues object with which the flag will be registered. - **args: additional arguments to pass to DEFINE. - """ - parser = IntegerParser(lower_bound, upper_bound) - serializer = ArgumentSerializer() - DEFINE(parser, name, default, help, flag_values, serializer, **args) - _register_bounds_validator_if_needed(parser, name, flag_values=flag_values) - - -def DEFINE_enum( # pylint: disable=g-bad-name,redefined-builtin - name, default, enum_values, help, flag_values=FLAGS, module_name=None, - **args): - """Registers a flag whose value can be any string from enum_values. - - Args: - name: A string, the flag name. - default: The default value of the flag. - enum_values: A list of strings with the possible values for the flag. - help: A help string. - flag_values: FlagValues object with which the flag will be registered. - module_name: A string, the name of the Python module declaring this flag. - If not provided, it will be computed using the stack trace of this call. - **args: Dictionary with extra keyword args that are passed to the - Flag __init__. - """ - DEFINE_flag(EnumFlag(name, default, help, enum_values, ** args), - flag_values, module_name) - - -def DEFINE_list( # pylint: disable=g-bad-name,redefined-builtin - name, default, help, flag_values=FLAGS, **args): - """Registers a flag whose value is a comma-separated list of strings. - - The flag value is parsed with a CSV parser. - - Args: - name: A string, the flag name. - default: The default value of the flag. - help: A help string. - flag_values: FlagValues object with which the flag will be registered. - **args: Dictionary with extra keyword args that are passed to the - Flag __init__. - """ - parser = ListParser() - serializer = CsvListSerializer(',') - DEFINE(parser, name, default, help, flag_values, serializer, **args) - - -def DEFINE_spaceseplist( # pylint: disable=g-bad-name,redefined-builtin - name, default, help, comma_compat=False, flag_values=FLAGS, **args): - """Registers a flag whose value is a whitespace-separated list of strings. - - Any whitespace can be used as a separator. - - Args: - name: A string, the flag name. - default: The default value of the flag. - help: A help string. - comma_compat: bool - Whether to support comma as an additional separator. - If false then only whitespace is supported. This is intended only for - backwards compatibility with flags that used to be comma-separated. - flag_values: FlagValues object with which the flag will be registered. - **args: Dictionary with extra keyword args that are passed to the - Flag __init__. - """ - parser = WhitespaceSeparatedListParser(comma_compat=comma_compat) - serializer = ListSerializer(' ') - DEFINE(parser, name, default, help, flag_values, serializer, **args) - - -def DEFINE_multi( # pylint: disable=g-bad-name,redefined-builtin - parser, serializer, name, default, help, flag_values=FLAGS, - module_name=None, **args): - """Registers a generic MultiFlag that parses its args with a given parser. - - Auxiliary function. Normal users should NOT use it directly. - - Developers who need to create their own 'Parser' classes for options - which can appear multiple times can call this module function to - register their flags. - - Args: - parser: ArgumentParser that is used to parse the flag arguments. - serializer: ArgumentSerializer that serializes the flag value. - name: A string, the flag name. - default: The default value of the flag. - help: A help string. - flag_values: FlagValues object with which the flag will be registered. - module_name: A string, the name of the Python module declaring this flag. - If not provided, it will be computed using the stack trace of this call. - **args: Dictionary with extra keyword args that are passed to the - Flag __init__. - """ - DEFINE_flag(MultiFlag(parser, serializer, name, default, help, **args), - flag_values, module_name) - - -def DEFINE_multistring( # pylint: disable=g-bad-name,redefined-builtin - name, default, help, flag_values=FLAGS, **args): - """Registers a flag whose value can be a list of any strings. - - Use the flag on the command line multiple times to place multiple - string values into the list. The 'default' may be a single string - (which will be converted into a single-element list) or a list of - strings. - - - Args: - name: A string, the flag name. - default: The default value of the flag. - help: A help string. - flag_values: FlagValues object with which the flag will be registered. - **args: Dictionary with extra keyword args that are passed to the - Flag __init__. - """ - parser = ArgumentParser() - serializer = ArgumentSerializer() - DEFINE_multi(parser, serializer, name, default, help, flag_values, **args) - - -def DEFINE_multi_int( # pylint: disable=g-bad-name,redefined-builtin - name, default, help, lower_bound=None, upper_bound=None, - flag_values=FLAGS, **args): - """Registers a flag whose value can be a list of arbitrary integers. - - Use the flag on the command line multiple times to place multiple - integer values into the list. The 'default' may be a single integer - (which will be converted into a single-element list) or a list of - integers. - - Args: - name: A string, the flag name. - default: The default value of the flag. - help: A help string. - lower_bound: int, min values of the flag. - upper_bound: int, max values of the flag. - flag_values: FlagValues object with which the flag will be registered. - **args: Dictionary with extra keyword args that are passed to the - Flag __init__. - """ - parser = IntegerParser(lower_bound, upper_bound) - serializer = ArgumentSerializer() - DEFINE_multi(parser, serializer, name, default, help, flag_values, **args) - - -def DEFINE_multi_float( # pylint: disable=g-bad-name,redefined-builtin - name, default, help, lower_bound=None, upper_bound=None, - flag_values=FLAGS, **args): - """Registers a flag whose value can be a list of arbitrary floats. - - Use the flag on the command line multiple times to place multiple - float values into the list. The 'default' may be a single float - (which will be converted into a single-element list) or a list of - floats. - - Args: - name: A string, the flag name. - default: The default value of the flag. - help: A help string. - lower_bound: float, min values of the flag. - upper_bound: float, max values of the flag. - flag_values: FlagValues object with which the flag will be registered. - **args: Dictionary with extra keyword args that are passed to the - Flag __init__. - """ - parser = FloatParser(lower_bound, upper_bound) - serializer = ArgumentSerializer() - DEFINE_multi(parser, serializer, name, default, help, flag_values, **args) - - -def DEFINE_multi_enum( # pylint: disable=g-bad-name,redefined-builtin - name, default, enum_values, help, flag_values=FLAGS, case_sensitive=True, - **args): - """Registers a flag whose value can be a list strings from enum_values. - - Use the flag on the command line multiple times to place multiple - enum values into the list. The 'default' may be a single string - (which will be converted into a single-element list) or a list of - strings. - - Args: - name: A string, the flag name. - default: The default value of the flag. - enum_values: A list of strings with the possible values for the flag. - help: A help string. - flag_values: FlagValues object with which the flag will be registered. - case_sensitive: Whether or not the enum is to be case-sensitive. - **args: Dictionary with extra keyword args that are passed to the - Flag __init__. - """ - parser = EnumParser(enum_values, case_sensitive) - serializer = ArgumentSerializer() - DEFINE_multi(parser, serializer, name, default, help, flag_values, **args) - - -def DEFINE_alias(name, original_name, flag_values=FLAGS, module_name=None): # pylint: disable=g-bad-name - """Defines an alias flag for an existing one. - - Args: - name: A string, name of the alias flag. - original_name: A string, name of the original flag. - flag_values: FlagValues object with which the flag will be registered. - module_name: A string, the name of the module that defines this flag. - - Raises: - gflags.FlagError: - UnrecognizedFlagError: if the referenced flag doesn't exist. - DuplicateFlagError: if the alias name has been used by some existing flag. - """ - if original_name not in flag_values: - raise UnrecognizedFlagError(original_name) - flag = flag_values[original_name] - - class _Parser(ArgumentParser): - """The parser for the alias flag calls the original flag parser.""" - - def parse(self, argument): - flag.parse(argument) - return flag.value - - class _FlagAlias(Flag): - """Overrides Flag class so alias value is copy of original flag value.""" - - @property - def value(self): - return flag.value - - @value.setter - def value(self, value): - flag.value = value - - help_msg = 'Alias for --%s.' % flag.name - # If alias_name has been used, gflags.DuplicatedFlag will be raised. - DEFINE_flag(_FlagAlias(_Parser(), flag.serializer, name, flag.default, - help_msg, boolean=flag.boolean), - flag_values, module_name) - - -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) - - -# Old CamelCase functions. It's OK to use them, but those use cases will be -# migrated to PEP8 style functions in the future. -# pylint: disable=invalid-name -RegisterValidator = register_validator -Validator = validator -RegisterMultiFlagsValidator = register_multi_flags_validator -MultiFlagsValidator = multi_flags_validator -MarkFlagAsRequired = mark_flag_as_required -MarkFlagsAsRequired = mark_flags_as_required -MarkFlagsAsMutualExclusive = mark_flags_as_mutual_exclusive -# pylint: enable=invalid-name |