aboutsummaryrefslogtreecommitdiffstats
path: root/mitmproxy/optmanager.py
diff options
context:
space:
mode:
authorAldo Cortesi <aldo@corte.si>2017-03-17 14:11:33 +1300
committerAldo Cortesi <aldo@corte.si>2017-03-19 10:32:22 +1300
commitfea08ef9197bf9f1c92efa3b6e5668dc6b192bd7 (patch)
treec9409cf3e86ff13832aff76861e5052eef5a687b /mitmproxy/optmanager.py
parent3a949f35f83f94e55083d552f33b9ed21c6df84d (diff)
downloadmitmproxy-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.py52
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):