diff options
author | Abseil Team <absl-team@google.com> | 2020-06-09 11:09:35 -0700 |
---|---|---|
committer | Copybara-Service <copybara-worker@google.com> | 2020-06-09 11:10:29 -0700 |
commit | 5617b310c61fbb91fab90c9eb3529aa20e728fd4 (patch) | |
tree | 76d3118f05952693c5fe44a9669ee41bb34145d5 /absl/flags/_defines.pyi | |
parent | 154871c8a0b97ba1dcc86686a45e718a38bc4747 (diff) | |
download | absl-py-5617b310c61fbb91fab90c9eb3529aa20e728fd4.tar.gz |
The generic parameter of FlagHolder now represents the type of value().
(a) For a flag with default None, define_* will return a FlagHolder[Optional[T]]
(b) For a flag with default != None, define_* will return a FlagHolder[T]
When we are unable to express "default != None", we always return FlagHolder[Optional[T]]
This assumes that the type of default() and value() will be the same.
This assumption holds, till we want the type system to understand that a "required" flag with a None default cannot return a None value.
Changes:
- When exact types for default is known, add @overloads for the DEFINE_* methods for the None case and remaining cases.
- When exact types for default is now known, change return type to FlagHolder[Optional[T]] -- which has same semantics of what FlagHolder[T] used to have.
PiperOrigin-RevId: 315519341
Change-Id: I88dc63b3c5271e12f3274b7246eb602b91b84caf
Diffstat (limited to 'absl/flags/_defines.pyi')
-rw-r--r-- | absl/flags/_defines.pyi | 183 |
1 files changed, 164 insertions, 19 deletions
diff --git a/absl/flags/_defines.pyi b/absl/flags/_defines.pyi index 674ed78..8607835 100644 --- a/absl/flags/_defines.pyi +++ b/absl/flags/_defines.pyi @@ -20,7 +20,7 @@ from absl.flags import _flagvalues import enum -from typing import Text, List, Any, TypeVar, Optional, Union, Type, Iterable +from typing import Text, List, Any, TypeVar, Optional, Union, Type, Iterable, overload _T = TypeVar('_T') _ET = TypeVar('_ET', bound=enum.Enum) @@ -36,7 +36,7 @@ def DEFINE( flag_values : _flagvalues.FlagValues = ..., serializer: Optional[_argument_parser.ArgumentSerializer[_T]] = None, module_name: Optional[Text] = None, - **args: Any) -> _flagvalues.FlagHolder[_T]: + **args: Any) -> _flagvalues.FlagHolder[Optional[_T]]: ... @@ -44,32 +44,62 @@ def DEFINE( def DEFINE_flag( flag: _flag.Flag[_T], flag_values: _flagvalues.FlagValues = ..., - module_name: Optional[Text] = None) -> _flagvalues.FlagHolder[_T]: + module_name: Optional[Text] = None) -> _flagvalues.FlagHolder[Optional[_T]]: ... +@overload +def DEFINE_string( + name: Text, + default: None, + help: Optional[Text], + flag_values: _flagvalues.FlagValues = ..., + **args: Any) -> _flagvalues.FlagHolder[Optional[Text]]: + ... +@overload def DEFINE_string( name: Text, - default: Optional[Text], + default: Text, help: Optional[Text], flag_values: _flagvalues.FlagValues = ..., **args: Any) -> _flagvalues.FlagHolder[Text]: ... +@overload +def DEFINE_boolean( + name : Text, + default: None, + help: Optional[Text], + flag_values: _flagvalues.FlagValues = ..., + module_name: Optional[Text] = None, + **args: Any) -> _flagvalues.FlagHolder[Optional[bool]]: + ... +@overload def DEFINE_boolean( name : Text, - default: Union[None, Text, bool, int], + default: Union[Text, bool, int], help: Optional[Text], flag_values: _flagvalues.FlagValues = ..., module_name: Optional[Text] = None, **args: Any) -> _flagvalues.FlagHolder[bool]: ... +@overload +def DEFINE_float( + name: Text, + default: None, + help: Optional[Text], + lower_bound: Optional[float] = None, + upper_bound: Optional[float] = None, + flag_values: _flagvalues.FlagValues = ..., + **args: Any) -> _flagvalues.FlagHolder[Optional[float]]: + ... +@overload def DEFINE_float( name: Text, - default: Union[float, Text, None], + default: Union[float, Text], help: Optional[Text], lower_bound: Optional[float] = None, upper_bound: Optional[float] = None, @@ -78,10 +108,21 @@ def DEFINE_float( ... +@overload +def DEFINE_integer( + name: Text, + default: None, + help: Optional[Text], + lower_bound: Optional[int] = None, + upper_bound: Optional[int] = None, + flag_values: _flagvalues.FlagValues = ..., + **args: Any) -> _flagvalues.FlagHolder[Optional[int]]: + ... +@overload def DEFINE_integer( name: Text, - default: Union[int, Text, None], + default: Union[int, Text], help: Optional[Text], lower_bound: Optional[int] = None, upper_bound: Optional[int] = None, @@ -89,10 +130,21 @@ def DEFINE_integer( **args: Any) -> _flagvalues.FlagHolder[int]: ... +@overload +def DEFINE_enum( + name : Text, + default: None, + enum_values: Iterable[Text], + help: Optional[Text], + flag_values: _flagvalues.FlagValues = ..., + module_name: Optional[Text] = None, + **args: Any) -> _flagvalues.FlagHolder[Optional[Text]]: + ... +@overload def DEFINE_enum( name : Text, - default: Optional[Text], + default: Text, enum_values: Iterable[Text], help: Optional[Text], flag_values: _flagvalues.FlagValues = ..., @@ -100,10 +152,21 @@ def DEFINE_enum( **args: Any) -> _flagvalues.FlagHolder[Text]: ... +@overload +def DEFINE_enum_class( + name: Text, + default: None, + enum_class: Type[_ET], + help: Optional[Text], + flag_values: _flagvalues.FlagValues = ..., + module_name: Optional[Text] = None, + **args: Any) -> _flagvalues.FlagHolder[Optional[_ET]]: + ... +@overload def DEFINE_enum_class( name: Text, - default: Union[_ET, Text, None], + default: Union[_ET, Text], enum_class: Type[_ET], help: Optional[Text], flag_values: _flagvalues.FlagValues = ..., @@ -112,52 +175,101 @@ def DEFINE_enum_class( ... +@overload +def DEFINE_list( + name: Text, + default: None, + help: Text, + flag_values: _flagvalues.FlagValues = ..., + **args: Any) -> _flagvalues.FlagHolder[Optional[List[Text]]]: + ... +@overload def DEFINE_list( name: Text, - default: Union[Iterable[Text], Text, None], + default: Union[Iterable[Text], Text], help: Text, flag_values: _flagvalues.FlagValues = ..., **args: Any) -> _flagvalues.FlagHolder[List[Text]]: ... +@overload +def DEFINE_spaceseplist( + name: Text, + default: None, + help: Text, + comma_compat: bool = False, + flag_values: _flagvalues.FlagValues = ..., + **args: Any) -> _flagvalues.FlagHolder[Optional[List[Text]]]: + ... +@overload def DEFINE_spaceseplist( name: Text, - default: Union[Iterable[Text], Text, None], + default: Union[Iterable[Text], Text], help: Text, comma_compat: bool = False, flag_values: _flagvalues.FlagValues = ..., **args: Any) -> _flagvalues.FlagHolder[List[Text]]: ... +@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] = None, + **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, None], + default: Union[Iterable[_T], _T, Text], help: Text, flag_values:_flagvalues.FlagValues = ..., module_name: Optional[Text] = None, **args: Any) -> _flagvalues.FlagHolder[List[_T]]: ... +@overload +def DEFINE_multi_string( + name: Text, + default: None, + help: Text, + flag_values: _flagvalues.FlagValues = ..., + **args: Any) -> _flagvalues.FlagHolder[Optional[List[Text]]]: + ... - +@overload def DEFINE_multi_string( name: Text, - default: Union[Iterable[Text], Text, None], + default: Union[Iterable[Text], Text], help: Text, flag_values: _flagvalues.FlagValues = ..., **args: Any) -> _flagvalues.FlagHolder[List[Text]]: ... +@overload +def DEFINE_multi_integer( + name: Text, + default: None, + help: Text, + lower_bound: Optional[int] = None, + upper_bound: Optional[int] = None, + flag_values: _flagvalues.FlagValues = ..., + **args: Any) -> _flagvalues.FlagHolder[Optional[List[int]]]: + ... - +@overload def DEFINE_multi_integer( name: Text, - default: Union[Iterable[int], int, Text, None], + default: Union[Iterable[int], int, Text], help: Text, lower_bound: Optional[int] = None, upper_bound: Optional[int] = None, @@ -165,10 +277,21 @@ def DEFINE_multi_integer( **args: Any) -> _flagvalues.FlagHolder[List[int]]: ... +@overload +def DEFINE_multi_float( + name: Text, + default: None, + help: Text, + lower_bound: Optional[float] = None, + upper_bound: Optional[float] = None, + flag_values: _flagvalues.FlagValues = ..., + **args: Any) -> _flagvalues.FlagHolder[Optional[List[float]]]: + ... +@overload def DEFINE_multi_float( name: Text, - default: Union[Iterable[float], float, Text, None], + default: Union[Iterable[float], float, Text], help: Text, lower_bound: Optional[float] = None, upper_bound: Optional[float] = None, @@ -177,19 +300,41 @@ def DEFINE_multi_float( ... +@overload def DEFINE_multi_enum( name: Text, - default: Union[Iterable[Text], Text, None], + default: None, + enum_values: Iterable[Text], + help: Text, + flag_values: _flagvalues.FlagValues = ..., + **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 = ..., **args: Any) -> _flagvalues.FlagHolder[List[Text]]: ... +@overload +def DEFINE_multi_enum_class( + name: Text, + default: None, + enum_class: Type[_ET], + help: Text, + flag_values: _flagvalues.FlagValues = ..., + module_name: Optional[Text] = None, + **args: Any) -> _flagvalues.FlagHolder[Optional[List[_ET]]]: + ... +@overload def DEFINE_multi_enum_class( name: Text, - default: Union[Iterable[_ET], _ET, Text, None], + default: Union[Iterable[_ET], _ET, Text], enum_class: Type[_ET], help: Text, flag_values: _flagvalues.FlagValues = ..., |