From 5011c3e21c836c05d4df1824f7002a91f10d82f7 Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Fri, 25 May 2018 21:18:08 +0300 Subject: [PATCH] API to update BoardConfig manifest --- platformio/managers/platform.py | 9 +++++++++ platformio/util.py | 12 ++++++++++++ 2 files changed, 21 insertions(+) diff --git a/platformio/managers/platform.py b/platformio/managers/platform.py index 7bb450af..03010fdc 100644 --- a/platformio/managers/platform.py +++ b/platformio/managers/platform.py @@ -665,6 +665,15 @@ class PlatformBoardConfig(object): else: raise KeyError("Invalid board option '%s'" % path) + def update(self, path, value): + newdict = None + for key in path.split(".")[::-1]: + if newdict is None: + newdict = {key: value} + else: + newdict = {key: newdict} + util.merge_dicts(self._manifest, newdict) + def __contains__(self, key): try: self.get(key) diff --git a/platformio/util.py b/platformio/util.py index ca081c22..e37660e2 100644 --- a/platformio/util.py +++ b/platformio/util.py @@ -754,6 +754,18 @@ def format_filesize(filesize): return "%d%sB" % ((base * filesize / unit), suffix) +def merge_dicts(d1, d2, path=None): + if path is None: + path = [] + for key in d2: + if (key in d1 and isinstance(d1[key], dict) + and isinstance(d2[key], dict)): + merge_dicts(d1[key], d2[key], path + [str(key)]) + else: + d1[key] = d2[key] + return d1 + + def rmtree_(path): def _onerror(_, name, __):