aboutsummaryrefslogtreecommitdiff
path: root/absl/flags/_argument_parser.pyi
blob: db5f41bfb3b1e9d41de88d20a36ca3660a7ba5d9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# 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.

"""Contains type annotations for _argument_parser.py."""


from typing import Text, TypeVar, Generic, Iterable, Type, List, Optional, Sequence, Any

import enum

_T = TypeVar('_T')
_ET = TypeVar('_ET', bound=enum.Enum)


class ArgumentSerializer(Generic[_T]):
  def serialize(self, value: _T) -> Text: ...


# The metaclass of ArgumentParser is not reflected here, because it does not
# affect the provided API.
class ArgumentParser(Generic[_T]):
  def parse(self, argument: Text) -> Optional[_T]: ...

  def flag_type(self) -> Text: ...


# Using bound=numbers.Number results in an error: b/153268436
_N = TypeVar('_N', int, float)


class NumericParser(ArgumentParser[_N]):

  def is_outside_bounds(self, val: _N) -> bool: ...

  def parse(self, argument: Text) -> _N: ...

  def convert(self, argument: Text) -> _N: ...


class FloatParser(NumericParser[float]):

  def __init__(self, lower_bound:Optional[float]=None,
               upper_bound:Optional[float]=None) -> None:
    ...


class IntegerParser(NumericParser[int]):

  def __init__(self, lower_bound:Optional[int]=None,
               upper_bound:Optional[int]=None) -> None:
    ...


class BooleanParser(ArgumentParser[bool]):
  ...


class EnumParser(ArgumentParser[Text]):
  def __init__(self, enum_values: Sequence[Text], case_sensitive: bool=...) -> None:
    ...



class EnumClassParser(ArgumentParser[_ET]):

  def __init__(self, enum_class: Type[_ET], case_sensitive: bool=...) -> None:
    ...

  @property
  def member_names(self) -> Sequence[Text]: ...


class BaseListParser(ArgumentParser[List[Text]]):
  def __init__(self, token: Text, name:Text) -> None: ...

  # Unlike baseclass BaseListParser never returns None.
  def parse(self, argument: Text) -> List[Text]: ...



class ListParser(BaseListParser):
  def __init__(self) -> None:
    ...



class WhitespaceSeparatedListParser(BaseListParser):
  def __init__(self, comma_compat: bool=False) -> None:
    ...



class ListSerializer(ArgumentSerializer[List[Text]]):
  list_sep = ... # type: Text

  def __init__(self, list_sep: Text) -> None:
    ...


class EnumClassListSerializer(ArgumentSerializer[List[Text]]):
  def __init__(self, list_sep: Text, **kwargs: Any) -> None:
    ...


class CsvListSerializer(ArgumentSerializer[List[Any]]):

  def __init__(self, list_sep: Text) -> None:
    ...


class EnumClassSerializer(ArgumentSerializer[_ET]):
  def __init__(self, lowercase: bool) -> None:
    ...