From 58c8447531c00a06c80d0990fbd52b5f12270d80 Mon Sep 17 00:00:00 2001 From: Clemens Schwaighofer Date: Mon, 14 Jul 2025 16:23:55 +0900 Subject: [PATCH] Settings loader mandatory fixes - mandatory empty check if empty list (['']) - skip regex check if replace value is None -> allowed empty as empty if not mandatory --- src/corelibs/config_handling/settings_loader.py | 7 +++++-- test-run/config_handling/config/settings.ini | 6 ++++-- test-run/config_handling/settings_loader.py | 6 ++++++ uv.lock | 2 +- 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/corelibs/config_handling/settings_loader.py b/src/corelibs/config_handling/settings_loader.py index 65befed..856b46e 100644 --- a/src/corelibs/config_handling/settings_loader.py +++ b/src/corelibs/config_handling/settings_loader.py @@ -175,7 +175,9 @@ class SettingsLoader: # - length: for string length # - range: for int/float range check # mandatory check - if check == "mandatory:yes" and not settings[config_id].get(entry): + if check == "mandatory:yes" and ( + not settings[config_id].get(entry) or settings[config_id].get(entry) == [''] + ): error = True self.__print(f"[!] Missing content entry for: {entry}", 'ERROR') # skip if empty none @@ -392,7 +394,8 @@ class SettingsLoader: clean: re.Pattern[str] | None = None if regex_clean is not None: clean = re.compile(regex_clean, re.VERBOSE) - if not check.search(value): + # value must be set if clean is None, else empty value is allowed and will fail + if (clean is None and value or clean) and not check.search(value): self.__print( f"[!] Invalid content for '{entry}' with check '{validate}' and data: {value}", 'ERROR', print_error diff --git a/test-run/config_handling/config/settings.ini b/test-run/config_handling/config/settings.ini index 6558bb9..63d97f1 100644 --- a/test-run/config_handling/config/settings.ini +++ b/test-run/config_handling/config/settings.ini @@ -1,6 +1,7 @@ [TestA] foo=bar foobar=1 +bar=st some_match=foo some_match_list=foo,bar test_list=a,b,c,d f, g h @@ -21,5 +22,6 @@ match_source_list=foo,bar element_a=Static energy element_b=123.5 element_c=True -email=foo@bar.com,other+bar-fee@domain-com.cp -email_bad=@bar.com +email=foo@bar.com,other+bar-fee@domain-com.cp, +email_not_mandatory= +email_bad=gii@bar.com diff --git a/test-run/config_handling/settings_loader.py b/test-run/config_handling/settings_loader.py index a3e927b..03a9879 100644 --- a/test-run/config_handling/settings_loader.py +++ b/test-run/config_handling/settings_loader.py @@ -44,6 +44,7 @@ def main(): { "foo": ["mandatory:yes"], "foobar": ["check:int"], + "bar": ["mandatory:yes"], "some_match": ["matching:foo|bar"], "some_match_list": ["split:,", "matching:foo|bar"], "test_list": [ @@ -82,6 +83,11 @@ def main(): "mandatory:yes", "check:string.email.basic" ], + "email_not_mandatory": [ + "split:,", + # "mandatory:yes", + "check:string.email.basic" + ], "email_bad": [ "split:,", "mandatory:yes", diff --git a/uv.lock b/uv.lock index 982f73d..6eca2e6 100644 --- a/uv.lock +++ b/uv.lock @@ -44,7 +44,7 @@ wheels = [ [[package]] name = "corelibs" -version = "0.12.0" +version = "0.12.1" source = { editable = "." } dependencies = [ { name = "jmespath" },