From 4dafa6704d8c8e2f8f71ada4c8b1919004230f16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Thu, 23 Jun 2016 16:14:28 +0200 Subject: [PATCH] Fix processing of overlays with plugin defaults --- src/octoprint/settings.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/octoprint/settings.py b/src/octoprint/settings.py index 148ac28b..0fc7b37d 100644 --- a/src/octoprint/settings.py +++ b/src/octoprint/settings.py @@ -706,6 +706,17 @@ class Settings(object): def _config(self, value): self._map.maps[0] = value + @property + def _overlay_maps(self): + if len(self._map.maps) > 2: + return self._map.maps[1:-1] + else: + return {} + + @property + def _default_map(self): + return self._map.maps[-1] + #~~ load and save def load(self, migrate=False): @@ -725,7 +736,7 @@ class Settings(object): if callable(overlay): try: - overlay = overlay() + overlay = overlay(self) except: self._logger.exception("Error loading overlay from callable") return @@ -1018,7 +1029,9 @@ class Settings(object): if defaults is None: defaults = dict(self._map.parents) - chain = HierarchicalChainMap(config, defaults) + # mappings: provided config + any intermediary parents + provided defaults + regular defaults + mappings = [config] + self._overlay_maps + [defaults, self._default_map] + chain = HierarchicalChainMap(*mappings) else: chain = self._map