diff options
author | Aldo Cortesi <aldo@corte.si> | 2018-05-27 10:12:24 +1200 |
---|---|---|
committer | Aldo Cortesi <aldo@corte.si> | 2018-05-27 10:12:24 +1200 |
commit | e59ba1341775eb6eb169a0884b09f18997dd5792 (patch) | |
tree | 875b5c72236f4df41859176466cac336662c0567 /mitmproxy/optmanager.py | |
parent | d1e3968fa887f601339ac158e4c0f5fff4b18a49 (diff) | |
download | mitmproxy-e59ba1341775eb6eb169a0884b09f18997dd5792.tar.gz mitmproxy-e59ba1341775eb6eb169a0884b09f18997dd5792.tar.bz2 mitmproxy-e59ba1341775eb6eb169a0884b09f18997dd5792.zip |
Use deferral mechanism for cfg file options
Fixes #3162
Diffstat (limited to 'mitmproxy/optmanager.py')
-rw-r--r-- | mitmproxy/optmanager.py | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/mitmproxy/optmanager.py b/mitmproxy/optmanager.py index 2a4beba9..7d8ca914 100644 --- a/mitmproxy/optmanager.py +++ b/mitmproxy/optmanager.py @@ -217,6 +217,10 @@ class OptManager: self.changed.send(self, updated=updated) return unknown + def update_defer(self, **kwargs): + unknown = self.update_known(**kwargs) + self._deferred.update(unknown) + def update(self, **kwargs): u = self.update_known(**kwargs) if u: @@ -494,26 +498,21 @@ def parse(text): return data -def load(opts, text): +def load(opts: OptManager, text: str) -> None: """ Load configuration from text, over-writing options already set in this object. May raise OptionsError if the config file is invalid. - - Returns a dictionary of all unknown options. """ data = parse(text) - return opts.update_known(**data) + opts.update_defer(**data) -def load_paths(opts, *paths): +def load_paths(opts: OptManager, *paths: str) -> None: """ Load paths in order. Each path takes precedence over the previous path. Paths that don't exist are ignored, errors raise an OptionsError. - - Returns a dictionary of unknown options. """ - ret = {} for p in paths: p = os.path.expanduser(p) if os.path.exists(p) and os.path.isfile(p): @@ -525,15 +524,14 @@ def load_paths(opts, *paths): "Error reading %s: %s" % (p, e) ) try: - ret.update(load(opts, txt)) + load(opts, txt) except exceptions.OptionsError as e: raise exceptions.OptionsError( "Error reading %s: %s" % (p, e) ) - return ret -def serialize(opts, text, defaults=False): +def serialize(opts: OptManager, text: str, defaults: bool = False) -> str: """ Performs a round-trip serialization. If text is not None, it is treated as a previous serialization that should be modified @@ -554,7 +552,7 @@ def serialize(opts, text, defaults=False): return ruamel.yaml.round_trip_dump(data) -def save(opts, path, defaults=False): +def save(opts: OptManager, path: str, defaults: bool =False) -> None: """ Save to path. If the destination file exists, modify it in-place. |