diff options
author | Aldo Cortesi <aldo@corte.si> | 2017-03-17 14:11:33 +1300 |
---|---|---|
committer | Aldo Cortesi <aldo@corte.si> | 2017-03-19 10:32:22 +1300 |
commit | fea08ef9197bf9f1c92efa3b6e5668dc6b192bd7 (patch) | |
tree | c9409cf3e86ff13832aff76861e5052eef5a687b /mitmproxy/optmanager.py | |
parent | 3a949f35f83f94e55083d552f33b9ed21c6df84d (diff) | |
download | mitmproxy-fea08ef9197bf9f1c92efa3b6e5668dc6b192bd7.tar.gz mitmproxy-fea08ef9197bf9f1c92efa3b6e5668dc6b192bd7.tar.bz2 mitmproxy-fea08ef9197bf9f1c92efa3b6e5668dc6b192bd7.zip |
console options: in-place editor for simple strings and ints
Diffstat (limited to 'mitmproxy/optmanager.py')
-rw-r--r-- | mitmproxy/optmanager.py | 52 |
1 files changed, 29 insertions, 23 deletions
diff --git a/mitmproxy/optmanager.py b/mitmproxy/optmanager.py index c878528c..77990306 100644 --- a/mitmproxy/optmanager.py +++ b/mitmproxy/optmanager.py @@ -265,44 +265,50 @@ class OptManager: vals.update(self._setspec(i)) self.update(**vals) - def _setspec(self, spec): - d = {} - - parts = spec.split("=", maxsplit=1) - if len(parts) == 1: - optname, optval = parts[0], None - else: - optname, optval = parts[0], parts[1] + def parse_setval(self, optname: str, optstr: typing.Optional[str]) -> typing.Any: + """ + Convert a string to a value appropriate for the option type. + """ if optname not in self._options: raise exceptions.OptionsError("No such option %s" % optname) o = self._options[optname] if o.typespec in (str, typing.Optional[str]): - d[optname] = optval + return optstr elif o.typespec in (int, typing.Optional[int]): - if optval: + if optstr: try: - optval = int(optval) + return int(optstr) except ValueError: - raise exceptions.OptionsError("Not an integer: %s" % optval) - d[optname] = optval + raise exceptions.OptionsError("Not an integer: %s" % optstr) + elif o.typespec == int: + raise exceptions.OptionsError("Option is required: %s" % optname) + else: + return None elif o.typespec == bool: - if not optval or optval == "true": - v = True - elif optval == "false": - v = False + if not optstr or optstr == "true": + return True + elif optstr == "false": + return False else: raise exceptions.OptionsError( "Boolean must be \"true\", \"false\", or have the value " "omitted (a synonym for \"true\")." ) - d[optname] = v elif o.typespec == typing.Sequence[str]: - if not optval: - d[optname] = [] + if not optstr: + return [] else: - d[optname] = getattr(self, optname) + [optval] - else: # pragma: no cover - raise NotImplementedError("Unsupported option type: %s", o.typespec) + return getattr(self, optname) + [optstr] + raise NotImplementedError("Unsupported option type: %s", o.typespec) + + def _setspec(self, spec): + d = {} + parts = spec.split("=", maxsplit=1) + if len(parts) == 1: + optname, optval = parts[0], None + else: + optname, optval = parts[0], parts[1] + d[optname] = self.parse_setval(optname, optval) return d def make_parser(self, parser, optname, metavar=None, short=None): |