From b79504a43b2c1057a0c0d566f3e25d088cd8e168 Mon Sep 17 00:00:00 2001 From: Itamar Turner-Trauring Date: Tue, 27 Oct 2020 13:59:45 -0400 Subject: [PATCH] Refactor to unify different code paths. --- src/allmydata/node.py | 8 ++++---- src/allmydata/util/configutil.py | 24 +++++++++++++----------- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/src/allmydata/node.py b/src/allmydata/node.py index 2d58ea4fa..1574577d9 100644 --- a/src/allmydata/node.py +++ b/src/allmydata/node.py @@ -190,7 +190,7 @@ def read_config(basedir, portnumfile, generated_files=[], _valid_config=None): if e.errno != errno.ENOENT: raise # The file is missing, just create empty ConfigParser. - parser = configutil.create_parser() + parser = configutil.get_config_from_string(u"") configutil.validate_config(config_fname, parser, _valid_config) @@ -207,11 +207,11 @@ def config_from_string(basedir, portnumfile, config_str, _valid_config=None): if _valid_config is None: _valid_config = _common_valid_config() - # load configuration from in-memory string - parser = configutil.create_parser() if isinstance(config_str, bytes): config_str = config_str.decode("utf-8") - parser.read_string(config_str) + + # load configuration from in-memory string + parser = configutil.get_config_from_string(config_str) fname = "" configutil.validate_config(fname, parser, _valid_config) diff --git a/src/allmydata/util/configutil.py b/src/allmydata/util/configutil.py index 898f05862..4bee7d043 100644 --- a/src/allmydata/util/configutil.py +++ b/src/allmydata/util/configutil.py @@ -29,26 +29,28 @@ class UnknownConfigError(Exception): """ -def create_parser(): - """ - Create a ConfigParser pre-configured the way we want it, for consistency - across different code paths. - """ - return ConfigParser(strict=False) - - def get_config(tahoe_cfg): """Load the config, returning a ConfigParser. Configuration is returned as Unicode strings. """ - config = create_parser() # Byte Order Mark is an optional garbage code point you sometimes get at # the start of UTF-8 encoded files. Especially on Windows. Skip it by using # utf-8-sig. https://en.wikipedia.org/wiki/Byte_order_mark with open(tahoe_cfg, "r", encoding="utf-8-sig") as f: - config.read_file(f) - return config + cfg_string = f.read() + return get_config_from_string(cfg_string) + + +def get_config_from_string(tahoe_cfg_string): + """Load the config from a string, return the ConfigParser. + + Configuration is returned as Unicode strings. + """ + parser = ConfigParser(strict=False) + parser.read_string(tahoe_cfg_string) + return parser + def set_config(config, section, option, value): if not config.has_section(section):