def run_server(kconfig, sdkconfig): config = kconfiglib.Kconfig(kconfig) config.load_config(sdkconfig) config_dict = confgen.get_json_values(config) ranges_dict = get_ranges(config) json.dump({ "version": 1, "values": config_dict, "ranges": ranges_dict }, sys.stdout) print("\n") while True: line = sys.stdin.readline() if not line: break req = json.loads(line) before = confgen.get_json_values(config) before_ranges = get_ranges(config) if "load" in req: # if we're loading a different sdkconfig, response should have all items in it before = {} before_ranges = {} # if no new filename is supplied, use existing sdkconfig path, otherwise update the path if req["load"] is None: req["load"] = sdkconfig else: sdkconfig = req["load"] if "save" in req: if req["save"] is None: req["save"] = sdkconfig else: sdkconfig = req["save"] error = handle_request(config, req) after = confgen.get_json_values(config) after_ranges = get_ranges(config) values_diff = diff(before, after) ranges_diff = diff(before_ranges, after_ranges) response = {"version": 1, "values": values_diff, "ranges": ranges_diff} if error: for e in error: print("Error: %s" % e, file=sys.stderr) response["error"] = error json.dump(response, sys.stdout) print("\n")
def run_server(kconfig, sdkconfig, sdkconfig_rename, default_version=MAX_PROTOCOL_VERSION): config = kconfiglib.Kconfig(kconfig) sdkconfig_renames = [sdkconfig_rename] if sdkconfig_rename else [] sdkconfig_renames += os.environ.get("COMPONENT_SDKCONFIG_RENAMES", "").split() deprecated_options = confgen.DeprecatedOptions( config.config_prefix, path_rename_files=sdkconfig_renames) f_o = tempfile.NamedTemporaryFile(mode='w+b', delete=False) try: with open(sdkconfig, mode='rb') as f_i: f_o.write(f_i.read()) f_o.close( ) # need to close as DeprecatedOptions will reopen, and Windows only allows one open file deprecated_options.replace(sdkconfig_in=f_o.name, sdkconfig_out=sdkconfig) finally: os.unlink(f_o.name) config.load_config(sdkconfig) print("Server running, waiting for requests on stdin...", file=sys.stderr) config_dict = confgen.get_json_values(config) ranges_dict = get_ranges(config) visible_dict = get_visible(config) if default_version == 1: # V1: no 'visibility' key, send value None for any invisible item values_dict = dict((k, v if visible_dict[k] else False) for (k, v) in config_dict.items()) json.dump({ "version": 1, "values": values_dict, "ranges": ranges_dict }, sys.stdout) else: # V2 onwards: separate visibility from version json.dump( { "version": default_version, "values": config_dict, "ranges": ranges_dict, "visible": visible_dict }, sys.stdout) print("\n") sys.stdout.flush() while True: line = sys.stdin.readline() if not line: break try: req = json.loads(line) except ValueError as e: # json module throws JSONDecodeError (sublcass of ValueError) on Py3 but ValueError on Py2 response = { "version": default_version, "error": ["JSON formatting error: %s" % e] } json.dump(response, sys.stdout) print("\n") sys.stdout.flush() continue before = confgen.get_json_values(config) before_ranges = get_ranges(config) before_visible = get_visible(config) if "load" in req: # load a new sdkconfig if req.get("version", default_version) == 1: # for V1 protocol, send all items when loading new sdkconfig. # (V2+ will only send changes, same as when setting an item) before = {} before_ranges = {} before_visible = {} # if no new filename is supplied, use existing sdkconfig path, otherwise update the path if req["load"] is None: req["load"] = sdkconfig else: sdkconfig = req["load"] if "save" in req: if req["save"] is None: req["save"] = sdkconfig else: sdkconfig = req["save"] error = handle_request(deprecated_options, config, req) after = confgen.get_json_values(config) after_ranges = get_ranges(config) after_visible = get_visible(config) values_diff = diff(before, after) ranges_diff = diff(before_ranges, after_ranges) visible_diff = diff(before_visible, after_visible) if req["version"] == 1: # V1 response, invisible items have value None for k in (k for (k, v) in visible_diff.items() if not v): values_diff[k] = None response = { "version": 1, "values": values_diff, "ranges": ranges_diff } else: # V2+ response, separate visibility values response = { "version": req["version"], "values": values_diff, "ranges": ranges_diff, "visible": visible_diff } if error: for e in error: print("Error: %s" % e, file=sys.stderr) response["error"] = error json.dump(response, sys.stdout) print("\n") sys.stdout.flush()
def run_server(kconfig, sdkconfig, default_version=MAX_PROTOCOL_VERSION): config = kconfiglib.Kconfig(kconfig) config.load_config(sdkconfig) print("Server running, waiting for requests on stdin...", file=sys.stderr) config_dict = confgen.get_json_values(config) ranges_dict = get_ranges(config) visible_dict = get_visible(config) if default_version == 1: # V1: no 'visibility' key, send value None for any invisible item values_dict = dict((k, v if visible_dict[k] else False) for (k, v) in config_dict.items()) json.dump({ "version": 1, "values": values_dict, "ranges": ranges_dict }, sys.stdout) else: # V2 onwards: separate visibility from version json.dump( { "version": default_version, "values": config_dict, "ranges": ranges_dict, "visible": visible_dict }, sys.stdout) print("\n") while True: line = sys.stdin.readline() if not line: break try: req = json.loads(line) except ValueError as e: # json module throws JSONDecodeError (sublcass of ValueError) on Py3 but ValueError on Py2 response = { "version": default_version, "error": ["JSON formatting error: %s" % e] } json.dump(response, sys.stdout) print("\n") continue before = confgen.get_json_values(config) before_ranges = get_ranges(config) before_visible = get_visible(config) if "load" in req: # load a new sdkconfig if req.get("version", default_version) == 1: # for V1 protocol, send all items when loading new sdkconfig. # (V2+ will only send changes, same as when setting an item) before = {} before_ranges = {} before_visible = {} # if no new filename is supplied, use existing sdkconfig path, otherwise update the path if req["load"] is None: req["load"] = sdkconfig else: sdkconfig = req["load"] if "save" in req: if req["save"] is None: req["save"] = sdkconfig else: sdkconfig = req["save"] error = handle_request(config, req) after = confgen.get_json_values(config) after_ranges = get_ranges(config) after_visible = get_visible(config) values_diff = diff(before, after) ranges_diff = diff(before_ranges, after_ranges) visible_diff = diff(before_visible, after_visible) if req["version"] == 1: # V1 response, invisible items have value None for k in (k for (k, v) in visible_diff.items() if not v): values_diff[k] = None response = { "version": 1, "values": values_diff, "ranges": ranges_diff } else: # V2+ response, separate visibility values response = { "version": req["version"], "values": values_diff, "ranges": ranges_diff, "visible": visible_diff } if error: for e in error: print("Error: %s" % e, file=sys.stderr) response["error"] = error json.dump(response, sys.stdout) print("\n")
def run_server(kconfig, sdkconfig, default_version=MAX_PROTOCOL_VERSION): config = kconfiglib.Kconfig(kconfig) config.load_config(sdkconfig) print("Server running, waiting for requests on stdin...", file=sys.stderr) config_dict = confgen.get_json_values(config) ranges_dict = get_ranges(config) visible_dict = get_visible(config) if default_version == 1: # V1: no 'visibility' key, send value None for any invisible item values_dict = dict((k, v if visible_dict[k] else False) for (k,v) in config_dict.items()) json.dump({"version": 1, "values": values_dict, "ranges": ranges_dict}, sys.stdout) else: # V2 onwards: separate visibility from version json.dump({"version": default_version, "values": config_dict, "ranges": ranges_dict, "visible": visible_dict}, sys.stdout) print("\n") while True: line = sys.stdin.readline() if not line: break try: req = json.loads(line) except ValueError as e: # json module throws JSONDecodeError (sublcass of ValueError) on Py3 but ValueError on Py2 response = {"version": default_version, "error": ["JSON formatting error: %s" % e]} json.dump(response, sys.stdout) print("\n") continue before = confgen.get_json_values(config) before_ranges = get_ranges(config) before_visible = get_visible(config) if "load" in req: # load a new sdkconfig if req.get("version", default_version) == 1: # for V1 protocol, send all items when loading new sdkconfig. # (V2+ will only send changes, same as when setting an item) before = {} before_ranges = {} before_visible = {} # if no new filename is supplied, use existing sdkconfig path, otherwise update the path if req["load"] is None: req["load"] = sdkconfig else: sdkconfig = req["load"] if "save" in req: if req["save"] is None: req["save"] = sdkconfig else: sdkconfig = req["save"] error = handle_request(config, req) after = confgen.get_json_values(config) after_ranges = get_ranges(config) after_visible = get_visible(config) values_diff = diff(before, after) ranges_diff = diff(before_ranges, after_ranges) visible_diff = diff(before_visible, after_visible) if req["version"] == 1: # V1 response, invisible items have value None for k in (k for (k,v) in visible_diff.items() if not v): values_diff[k] = None response = {"version": 1, "values": values_diff, "ranges": ranges_diff} else: # V2+ response, separate visibility values response = {"version": req["version"], "values": values_diff, "ranges": ranges_diff, "visible": visible_diff} if error: for e in error: print("Error: %s" % e, file=sys.stderr) response["error"] = error json.dump(response, sys.stdout) print("\n")