blob: 9bc8067a90c512a5acd7eb7404647facfe22fe67 [file] [log] [blame] [edit]
# Copyright 2020 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 modules contains type annotated stubs for DEFINE functions."""
from absl.flags import _argument_parser
from absl.flags import _flag
from absl.flags import _flagvalues
import enum
from typing import Text, List, Any, TypeVar, Optional, Union, Type, Iterable, overload, Literal
_T = TypeVar('_T')
_ET = TypeVar('_ET', bound=enum.Enum)
@overload
def DEFINE(
parser: _argument_parser.ArgumentParser[_T],
name: Text,
default: Any,
help: Optional[Text],
flag_values : _flagvalues.FlagValues = ...,
serializer: Optional[_argument_parser.ArgumentSerializer[_T]] = ...,
module_name: Optional[Text] = ...,
required: Literal[True] = ...,
**args: Any) -> _flagvalues.FlagHolder[_T]:
...
@overload
def DEFINE(
parser: _argument_parser.ArgumentParser[_T],
name: Text,
default: Any,
help: Optional[Text],
flag_values : _flagvalues.FlagValues = ...,
serializer: Optional[_argument_parser.ArgumentSerializer[_T]] = ...,
module_name: Optional[Text] = ...,
required: bool = ...,
**args: Any) -> _flagvalues.FlagHolder[Optional[_T]]:
...
@overload
def DEFINE_flag(
flag: _flag.Flag[_T],
flag_values: _flagvalues.FlagValues = ...,
module_name: Optional[Text] = ...,
required: Literal[True] = ...
) -> _flagvalues.FlagHolder[_T]:
...
@overload
def DEFINE_flag(
flag: _flag.Flag[_T],
flag_values: _flagvalues.FlagValues = ...,
module_name: Optional[Text] = ...,
required: bool = ...) -> _flagvalues.FlagHolder[Optional[_T]]:
...
# typing overloads for DEFINE_* methods...
#
# - DEFINE_* method return FlagHolder[Optional[T]] or FlagHolder[T] depending
# on the arguments.
# - If the flag value is guaranteed to be not None, the return type is
# FlagHolder[T].
# - If the flag is required OR has a non-None default, the flag value i
# guaranteed to be not None after flag parsing has finished.
# The information above is captured with three overloads as follows.
#
# (if required=True and passed in as a keyword argument,
# return type is FlagHolder[Y])
# @overload
# def DEFINE_xxx(
# ... arguments...
# default: Union[None, X] = ...,
# *,
# required: Literal[True]) -> _flagvalues.FlagHolder[Y]:
# ...
#
# (if default=None, return type is FlagHolder[Optional[Y]])
# @overload
# def DEFINE_xxx(
# ... arguments...
# default: None,
# required: bool = ...) -> _flagvalues.FlagHolder[Optional[Y]]:
# ...
#
# (if default!=None, return type is FlagHolder[Y]):
# @overload
# def DEFINE_xxx(
# ... arguments...
# default: X,
# required: bool = ...) -> _flagvalues.FlagHolder[Y]:
# ...
#
# where X = type of non-None default values for the flag
# and Y = non-None type for flag value
@overload
def DEFINE_string(
name: Text,
default: Optional[Text],
help: Optional[Text],
flag_values: _flagvalues.FlagValues = ...,
*,
required: Literal[True],
**args: Any) -> _flagvalues.FlagHolder[Text]:
...
@overload
def DEFINE_string(
name: Text,
default: None,
help: Optional[Text],
flag_values: _flagvalues.FlagValues = ...,
required: bool = ...,
**args: Any) -> _flagvalues.FlagHolder[Optional[Text]]:
...
@overload
def DEFINE_string(
name: Text,
default: Text,
help: Optional[Text],
flag_values: _flagvalues.FlagValues = ...,
required: bool = ...,
**args: Any) -> _flagvalues.FlagHolder[Text]:
...
@overload
def DEFINE_boolean(
name : Text,
default: Union[None, Text, bool, int],
help: Optional[Text],
flag_values: _flagvalues.FlagValues = ...,
module_name: Optional[Text] = ...,
*,
required: Literal[True],
**args: Any) -> _flagvalues.FlagHolder[bool]:
...
@overload
def DEFINE_boolean(
name : Text,
default: None,
help: Optional[Text],
flag_values: _flagvalues.FlagValues = ...,
module_name: Optional[Text] = ...,
required: bool = ...,
**args: Any) -> _flagvalues.FlagHolder[Optional[bool]]:
...
@overload
def DEFINE_boolean(
name : Text,
default: Union[Text, bool, int],
help: Optional[Text],
flag_values: _flagvalues.FlagValues = ...,
module_name: Optional[Text] = ...,
required: bool = ...,
**args: Any) -> _flagvalues.FlagHolder[bool]:
...
@overload
def DEFINE_float(
name: Text,
default: Union[None, float, Text],
help: Optional[Text],
lower_bound: Optional[float] = ...,
upper_bound: Optional[float] = ...,
flag_values: _flagvalues.FlagValues = ...,
*,
required: Literal[True],
**args: Any) -> _flagvalues.FlagHolder[float]:
...
@overload
def DEFINE_float(
name: Text,
default: None,
help: Optional[Text],
lower_bound: Optional[float] = ...,
upper_bound: Optional[float] = ...,
flag_values: _flagvalues.FlagValues = ...,
required: bool = ...,
**args: Any) -> _flagvalues.FlagHolder[Optional[float]]:
...
@overload
def DEFINE_float(
name: Text,
default: Union[float, Text],
help: Optional[Text],
lower_bound: Optional[float] = ...,
upper_bound: Optional[float] = ...,
flag_values: _flagvalues.FlagValues = ...,
required: bool = ...,
**args: Any) -> _flagvalues.FlagHolder[float]:
...
@overload
def DEFINE_integer(
name: Text,
default: Union[None, int, Text],
help: Optional[Text],
lower_bound: Optional[int] = ...,
upper_bound: Optional[int] = ...,
flag_values: _flagvalues.FlagValues = ...,
*,
required: Literal[True],
**args: Any) -> _flagvalues.FlagHolder[int]:
...
@overload
def DEFINE_integer(
name: Text,
default: None,
help: Optional[Text],
lower_bound: Optional[int] = ...,
upper_bound: Optional[int] = ...,
flag_values: _flagvalues.FlagValues = ...,
required: bool = ...,
**args: Any) -> _flagvalues.FlagHolder[Optional[int]]:
...
@overload
def DEFINE_integer(
name: Text,
default: Union[int, Text],
help: Optional[Text],
lower_bound: Optional[int] = ...,
upper_bound: Optional[int] = ...,
flag_values: _flagvalues.FlagValues = ...,
required: bool = ...,
**args: Any) -> _flagvalues.FlagHolder[int]:
...
@overload
def DEFINE_enum(
name : Text,
default: Optional[Text],
enum_values: Iterable[Text],
help: Optional[Text],
flag_values: _flagvalues.FlagValues = ...,
module_name: Optional[Text] = ...,
*,
required: Literal[True],
**args: Any) -> _flagvalues.FlagHolder[Text]:
...
@overload
def DEFINE_enum(
name : Text,
default: None,
enum_values: Iterable[Text],
help: Optional[Text],
flag_values: _flagvalues.FlagValues = ...,
module_name: Optional[Text] = ...,
required: bool = ...,
**args: Any) -> _flagvalues.FlagHolder[Optional[Text]]:
...
@overload
def DEFINE_enum(
name : Text,
default: Text,
enum_values: Iterable[Text],
help: Optional[Text],
flag_values: _flagvalues.FlagValues = ...,
module_name: Optional[Text] = ...,
required: bool = ...,
**args: Any) -> _flagvalues.FlagHolder[Text]:
...
@overload
def DEFINE_enum_class(
name: Text,
default: Union[None, _ET, Text],
enum_class: Type[_ET],
help: Optional[Text],
flag_values: _flagvalues.FlagValues = ...,
module_name: Optional[Text] = ...,
case_sensitive: bool = ...,
*,
required: Literal[True],
**args: Any) -> _flagvalues.FlagHolder[_ET]:
...
@overload
def DEFINE_enum_class(
name: Text,
default: None,
enum_class: Type[_ET],
help: Optional[Text],
flag_values: _flagvalues.FlagValues = ...,
module_name: Optional[Text] = ...,
case_sensitive: bool = ...,
required: bool = ...,
**args: Any) -> _flagvalues.FlagHolder[Optional[_ET]]:
...
@overload
def DEFINE_enum_class(
name: Text,
default: Union[_ET, Text],
enum_class: Type[_ET],
help: Optional[Text],
flag_values: _flagvalues.FlagValues = ...,
module_name: Optional[Text] = ...,
case_sensitive: bool = ...,
required: bool = ...,
**args: Any) -> _flagvalues.FlagHolder[_ET]:
...
@overload
def DEFINE_list(
name: Text,
default: Union[None, Iterable[Text], Text],
help: Text,
flag_values: _flagvalues.FlagValues = ...,
*,
required: Literal[True],
**args: Any) -> _flagvalues.FlagHolder[List[Text]]:
...
@overload
def DEFINE_list(
name: Text,
default: None,
help: Text,
flag_values: _flagvalues.FlagValues = ...,
required: bool = ...,
**args: Any) -> _flagvalues.FlagHolder[Optional[List[Text]]]:
...
@overload
def DEFINE_list(
name: Text,
default: Union[Iterable[Text], Text],
help: Text,
flag_values: _flagvalues.FlagValues = ...,
required: bool = ...,
**args: Any) -> _flagvalues.FlagHolder[List[Text]]:
...
@overload
def DEFINE_spaceseplist(
name: Text,
default: Union[None, Iterable[Text], Text],
help: Text,
comma_compat: bool = ...,
flag_values: _flagvalues.FlagValues = ...,
*,
required: Literal[True],
**args: Any) -> _flagvalues.FlagHolder[List[Text]]:
...
@overload
def DEFINE_spaceseplist(
name: Text,
default: None,
help: Text,
comma_compat: bool = ...,
flag_values: _flagvalues.FlagValues = ...,
required: bool = ...,
**args: Any) -> _flagvalues.FlagHolder[Optional[List[Text]]]:
...
@overload
def DEFINE_spaceseplist(
name: Text,
default: Union[Iterable[Text], Text],
help: Text,
comma_compat: bool = ...,
flag_values: _flagvalues.FlagValues = ...,
required: bool = ...,
**args: Any) -> _flagvalues.FlagHolder[List[Text]]:
...
@overload
def DEFINE_multi(
parser : _argument_parser.ArgumentParser[_T],
serializer: _argument_parser.ArgumentSerializer[_T],
name: Text,
default: Union[None, Iterable[_T], _T, Text],
help: Text,
flag_values:_flagvalues.FlagValues = ...,
module_name: Optional[Text] = ...,
*,
required: Literal[True],
**args: Any) -> _flagvalues.FlagHolder[List[_T]]:
...
@overload
def DEFINE_multi(
parser : _argument_parser.ArgumentParser[_T],
serializer: _argument_parser.ArgumentSerializer[_T],
name: Text,
default: None,
help: Text,
flag_values:_flagvalues.FlagValues = ...,
module_name: Optional[Text] = ...,
required: bool = ...,
**args: Any) -> _flagvalues.FlagHolder[Optional[List[_T]]]:
...
@overload
def DEFINE_multi(
parser : _argument_parser.ArgumentParser[_T],
serializer: _argument_parser.ArgumentSerializer[_T],
name: Text,
default: Union[Iterable[_T], _T, Text],
help: Text,
flag_values:_flagvalues.FlagValues = ...,
module_name: Optional[Text] = ...,
required: bool = ...,
**args: Any) -> _flagvalues.FlagHolder[List[_T]]:
...
@overload
def DEFINE_multi_string(
name: Text,
default: Union[None, Iterable[Text], Text],
help: Text,
flag_values: _flagvalues.FlagValues = ...,
*,
required: Literal[True],
**args: Any) -> _flagvalues.FlagHolder[List[Text]]:
...
@overload
def DEFINE_multi_string(
name: Text,
default: None,
help: Text,
flag_values: _flagvalues.FlagValues = ...,
required: bool = ...,
**args: Any) -> _flagvalues.FlagHolder[Optional[List[Text]]]:
...
@overload
def DEFINE_multi_string(
name: Text,
default: Union[Iterable[Text], Text],
help: Text,
flag_values: _flagvalues.FlagValues = ...,
required: bool = ...,
**args: Any) -> _flagvalues.FlagHolder[List[Text]]:
...
@overload
def DEFINE_multi_integer(
name: Text,
default: Union[None, Iterable[int], int, Text],
help: Text,
lower_bound: Optional[int] = ...,
upper_bound: Optional[int] = ...,
flag_values: _flagvalues.FlagValues = ...,
*,
required: Literal[True],
**args: Any) -> _flagvalues.FlagHolder[List[int]]:
...
@overload
def DEFINE_multi_integer(
name: Text,
default: None,
help: Text,
lower_bound: Optional[int] = ...,
upper_bound: Optional[int] = ...,
flag_values: _flagvalues.FlagValues = ...,
required: bool = ...,
**args: Any) -> _flagvalues.FlagHolder[Optional[List[int]]]:
...
@overload
def DEFINE_multi_integer(
name: Text,
default: Union[Iterable[int], int, Text],
help: Text,
lower_bound: Optional[int] = ...,
upper_bound: Optional[int] = ...,
flag_values: _flagvalues.FlagValues = ...,
required: bool = ...,
**args: Any) -> _flagvalues.FlagHolder[List[int]]:
...
@overload
def DEFINE_multi_float(
name: Text,
default: Union[None, Iterable[float], float, Text],
help: Text,
lower_bound: Optional[float] = ...,
upper_bound: Optional[float] = ...,
flag_values: _flagvalues.FlagValues = ...,
*,
required: Literal[True],
**args: Any) -> _flagvalues.FlagHolder[List[float]]:
...
@overload
def DEFINE_multi_float(
name: Text,
default: None,
help: Text,
lower_bound: Optional[float] = ...,
upper_bound: Optional[float] = ...,
flag_values: _flagvalues.FlagValues = ...,
required: bool = ...,
**args: Any) -> _flagvalues.FlagHolder[Optional[List[float]]]:
...
@overload
def DEFINE_multi_float(
name: Text,
default: Union[Iterable[float], float, Text],
help: Text,
lower_bound: Optional[float] = ...,
upper_bound: Optional[float] = ...,
flag_values: _flagvalues.FlagValues = ...,
required: bool = ...,
**args: Any) -> _flagvalues.FlagHolder[List[float]]:
...
@overload
def DEFINE_multi_enum(
name: Text,
default: Union[None, Iterable[Text], Text],
enum_values: Iterable[Text],
help: Text,
flag_values: _flagvalues.FlagValues = ...,
*,
required: Literal[True],
**args: Any) -> _flagvalues.FlagHolder[List[Text]]:
...
@overload
def DEFINE_multi_enum(
name: Text,
default: None,
enum_values: Iterable[Text],
help: Text,
flag_values: _flagvalues.FlagValues = ...,
required: bool = ...,
**args: Any) -> _flagvalues.FlagHolder[Optional[List[Text]]]:
...
@overload
def DEFINE_multi_enum(
name: Text,
default: Union[Iterable[Text], Text],
enum_values: Iterable[Text],
help: Text,
flag_values: _flagvalues.FlagValues = ...,
required: bool = ...,
**args: Any) -> _flagvalues.FlagHolder[List[Text]]:
...
@overload
def DEFINE_multi_enum_class(
name: Text,
# This is separate from `Union[None, _ET, Text]` to avoid a Pytype issue
# inferring the return value to FlagHolder[List[Union[_ET, enum.Enum]]]
# when an iterable of concrete enum subclasses are used.
default: Iterable[_ET],
enum_class: Type[_ET],
help: Text,
flag_values: _flagvalues.FlagValues = ...,
module_name: Optional[Text] = ...,
*,
required: Literal[True],
**args: Any) -> _flagvalues.FlagHolder[List[_ET]]:
...
@overload
def DEFINE_multi_enum_class(
name: Text,
default: Union[None, _ET, Text],
enum_class: Type[_ET],
help: Text,
flag_values: _flagvalues.FlagValues = ...,
module_name: Optional[Text] = ...,
*,
required: Literal[True],
**args: Any) -> _flagvalues.FlagHolder[List[_ET]]:
...
@overload
def DEFINE_multi_enum_class(
name: Text,
default: None,
enum_class: Type[_ET],
help: Text,
flag_values: _flagvalues.FlagValues = ...,
module_name: Optional[Text] = ...,
required: bool = ...,
**args: Any) -> _flagvalues.FlagHolder[Optional[List[_ET]]]:
...
@overload
def DEFINE_multi_enum_class(
name: Text,
# This is separate from `Union[None, _ET, Text]` to avoid a Pytype issue
# inferring the return value to FlagHolder[List[Union[_ET, enum.Enum]]]
# when an iterable of concrete enum subclasses are used.
default: Iterable[_ET],
enum_class: Type[_ET],
help: Text,
flag_values: _flagvalues.FlagValues = ...,
module_name: Optional[Text] = ...,
required: bool = ...,
**args: Any) -> _flagvalues.FlagHolder[List[_ET]]:
...
@overload
def DEFINE_multi_enum_class(
name: Text,
default: Union[_ET, Text],
enum_class: Type[_ET],
help: Text,
flag_values: _flagvalues.FlagValues = ...,
module_name: Optional[Text] = ...,
required: bool = ...,
**args: Any) -> _flagvalues.FlagHolder[List[_ET]]:
...
def DEFINE_alias(
name: Text,
original_name: Text,
flag_values: _flagvalues.FlagValues = ...,
module_name: Optional[Text] = ...) -> _flagvalues.FlagHolder[Any]:
...
def set_default(flag_holder: _flagvalues.FlagHolder[_T], value: _T) -> None:
...
def declare_key_flag(flag_name: Union[Text, _flagvalues.FlagHolder],
flag_values: _flagvalues.FlagValues = ...) -> None:
...
def adopt_module_key_flags(module: Any,
flag_values: _flagvalues.FlagValues = ...) -> None:
...
def disclaim_key_flags() -> None:
...