From fc3fb934322600240852400ae84c7a561a75db8e Mon Sep 17 00:00:00 2001 From: holger krekel Date: Tue, 1 Apr 2025 21:42:44 +0200 Subject: [PATCH] use default config files for any missing ini setting --- chatmaild/src/chatmaild/config.py | 14 +++++++++++--- chatmaild/src/chatmaild/tests/test_config.py | 8 ++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/chatmaild/src/chatmaild/config.py b/chatmaild/src/chatmaild/config.py index e5e797a1..8edb1929 100644 --- a/chatmaild/src/chatmaild/config.py +++ b/chatmaild/src/chatmaild/config.py @@ -11,7 +11,11 @@ def read_config(inipath): assert Path(inipath).exists(), inipath cfg = iniconfig.IniConfig(inipath) params = cfg.sections["params"] - return Config(inipath, params=params) + default_config_content = get_default_config_content(params["mail_domain"]) + df_params = iniconfig.IniConfig("ini", data=default_config_content)["params"] + new_params = dict(df_params.items()) + new_params.update(params) + return Config(inipath, params=new_params) class Config: @@ -75,6 +79,11 @@ class Config: def write_initial_config(inipath, mail_domain, overrides): """Write out default config file, using the specified config value overrides.""" + content = get_default_config_content(mail_domain, **overrides) + inipath.write_text(content) + + +def get_default_config_content(mail_domain, **overrides): from importlib.resources import files inidir = files(__package__).joinpath("ini") @@ -119,5 +128,4 @@ def write_initial_config(inipath, mail_domain, overrides): else: lines.append(line) content = "\n".join(lines) - - inipath.write_text(content) + return content diff --git a/chatmaild/src/chatmaild/tests/test_config.py b/chatmaild/src/chatmaild/tests/test_config.py index 63d237cb..542084a9 100644 --- a/chatmaild/src/chatmaild/tests/test_config.py +++ b/chatmaild/src/chatmaild/tests/test_config.py @@ -15,6 +15,14 @@ def test_read_config_basic(example_config): assert example_config.mail_domain == "chat.example.org" +def test_read_config_basic_using_defaults(tmp_path, maildomain): + inipath = tmp_path.joinpath("chatmail.ini") + inipath.write_text(f"[params]\nmail_domain = {maildomain}") + example_config = read_config(inipath) + assert example_config.max_user_send_per_minute == 60 + assert example_config.filtermail_smtp_port_incoming == 10081 + + def test_read_config_testrun(make_config): config = make_config("something.testrun.org") assert config.mail_domain == "something.testrun.org"