import json import os from esphome.core import CORE from esphome.helpers import read_file def read_config_file(path: str) -> str: if CORE.vscode and ( not CORE.ace or os.path.abspath(path) == os.path.abspath(CORE.config_path) ): print( json.dumps( { "type": "read_file", "path": path, } ) ) data = json.loads(input()) assert data["type"] == "file_response" return data["content"] return read_file(path) def merge_config(full_old, full_new): def merge(old, new): if isinstance(new, dict): if not isinstance(old, dict): return new res = old.copy() for k, v in new.items(): res[k] = merge(old[k], v) if k in old else v return res if isinstance(new, list): if not isinstance(old, list): return new return old + new if new is None: return old return new return merge(full_old, full_new)