diff options
author | Aldo Cortesi <aldo@nullcube.com> | 2017-03-06 13:17:53 +1300 |
---|---|---|
committer | Aldo Cortesi <aldo@nullcube.com> | 2017-03-06 13:20:17 +1300 |
commit | 71a830c83668aaabf182a03bec0194bde1a36665 (patch) | |
tree | bea060ad2ef52983467b620079618b58992d0fd9 /mitmproxy/optmanager.py | |
parent | e70b46672c9bc7a1923d121f954224930bb8af7f (diff) | |
download | mitmproxy-71a830c83668aaabf182a03bec0194bde1a36665.tar.gz mitmproxy-71a830c83668aaabf182a03bec0194bde1a36665.tar.bz2 mitmproxy-71a830c83668aaabf182a03bec0194bde1a36665.zip |
Options unification: string choices
Diffstat (limited to 'mitmproxy/optmanager.py')
-rw-r--r-- | mitmproxy/optmanager.py | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/mitmproxy/optmanager.py b/mitmproxy/optmanager.py index 24ef8f0c..21e366c3 100644 --- a/mitmproxy/optmanager.py +++ b/mitmproxy/optmanager.py @@ -20,14 +20,15 @@ unset = object() class _Option: - __slots__ = ("name", "typespec", "value", "_default", "help") + __slots__ = ("name", "typespec", "value", "_default", "choices", "help") def __init__( self, name: str, default: typing.Any, typespec: typing.Type, - help: typing.Optional[str] + help: typing.Optional[str], + choices: typing.Optional[typing.Sequence[str]] ) -> None: typecheck.check_type(name, default, typespec) self.name = name @@ -35,6 +36,7 @@ class _Option: self.typespec = typespec self.value = unset self.help = help + self.choices = choices def __repr__(self): return "{value} [{type}]".format(value=self.current(), type=self.typespec) @@ -67,7 +69,9 @@ class _Option: return True def __deepcopy__(self, _): - o = _Option(self.name, self.default, self.typespec, self.help) + o = _Option( + self.name, self.default, self.typespec, self.help, self.choices + ) if self.has_changed(): o.value = self.current() return o @@ -98,11 +102,12 @@ class OptManager: name: str, default: typing.Any, typespec: typing.Type, - help: str = None + help: typing.Optional[str] = None, + choices: typing.Optional[typing.Sequence[str]] = None ) -> None: if name in self._options: raise ValueError("Option %s already exists" % name) - self._options[name] = _Option(name, default, typespec, help) + self._options[name] = _Option(name, default, typespec, help, choices) @contextlib.contextmanager def rollback(self, updated): @@ -337,7 +342,7 @@ class OptManager: type=int, dest=option, help=o.help, - metavar=metavar + metavar=metavar, ) elif o.typespec in (str, typing.Optional[str]): parser.add_argument( @@ -346,7 +351,8 @@ class OptManager: type=str, dest=option, help=o.help, - metavar=metavar + metavar=metavar, + choices=o.choices ) elif o.typespec == typing.Sequence[str]: parser.add_argument( @@ -355,7 +361,8 @@ class OptManager: type=str, dest=option, help=o.help, - metavar=metavar + metavar=metavar, + choices=o.choices, ) else: raise ValueError("Unsupported option type: %s", o.typespec) |