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" },