Skip to content

Updated code to handle limited value in config.yaml #257

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 15 commits into from
Mar 12, 2024
13 changes: 8 additions & 5 deletions pebblo/app/config/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,16 +55,19 @@ def load_config(path) -> dict:
return conf_obj.dict()

# If Path exist, set config value
con_file = path
try:
with open(con_file, "r") as output:
cred_json = yaml.safe_load(output)
parsed_config = Config.parse_obj(cred_json)
with open(path, "r") as output:
cred_yaml = yaml.safe_load(output)
# Replace missing fields with default values
for key in conf_obj.dict().keys():
if key not in cred_yaml:
cred_yaml[key] = conf_obj.dict()[key]
parsed_config = Config.parse_obj(cred_yaml)
config_dict = parsed_config.dict()
validate_config(config_dict)
return config_dict
except IOError as err:
print(f"no credentials file found at {con_file}. Error : {err}")
print(f"no credentials file found at {path}. Error : {err}")
return conf_obj.dict()

except Exception as err:
Expand Down
8 changes: 8 additions & 0 deletions pebblo/app/config/config_validation.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,11 +64,19 @@ def validate(self):
)


class ClassifierConfig(ConfigValidator):
def validate(self):
anonymize_all_entities = self.config.get("anonymizeAllEntities")
if not isinstance(anonymize_all_entities, bool):
self.errors.append(f"Error: Invalid anonymizeAllEntities '{anonymize_all_entities}'. AnonymizeAllEntities must be a boolean.")


def validate_config(config_dict):
validators = {
"daemon": DaemonConfig,
"logging": LoggingConfig,
"reports": ReportsConfig,
"classifier": ClassifierConfig,
}

validation_errors = []
Expand Down
37 changes: 37 additions & 0 deletions tests/app/config/test_config_validation.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
DaemonConfig,
LoggingConfig,
ReportsConfig,
ClassifierConfig,
)
import pytest
import os
Expand Down Expand Up @@ -112,6 +113,36 @@ def test_reports_config_validate(setup_and_teardown):
]


def test_classifier_config_validate():
# Test with True value
config = {"anonymizeAllEntities": True}
validator = ClassifierConfig(config)
validator.validate()
assert validator.errors == []

# Test with False value
config = {"anonymizeAllEntities": False}
validator = ClassifierConfig(config)
validator.validate()
assert validator.errors == []

# Test with invalid int
config = {"anonymizeAllEntities": 70000}
validator = ClassifierConfig(config)
validator.validate()
assert validator.errors == [
"Error: Invalid anonymizeAllEntities '70000'. AnonymizeAllEntities must be a boolean."
]

# Test with invalid str
config = {"anonymizeAllEntities": 'abc'}
validator = ClassifierConfig(config)
validator.validate()
assert validator.errors == [
"Error: Invalid anonymizeAllEntities 'abc'. AnonymizeAllEntities must be a boolean."
]


def test_validate_config(setup_and_teardown):
# Test with valid configuration
config = {
Expand All @@ -122,6 +153,9 @@ def test_validate_config(setup_and_teardown):
"renderer": "xhtml2pdf",
"outputDir": "~/.pebblo_test_",
},
"classifier":{
"anonymizeAllEntities": True,
},
}
validate_config(config)
# If the configuration is valid, validate_config should not raise any exceptions
Expand All @@ -135,6 +169,9 @@ def test_validate_config(setup_and_teardown):
"renderer": "xhtml2pdf",
"outputDir": "~/.pebblo_test_",
},
"classifier": {
"anonymizeAllEntities": "abc",
},
}
with pytest.raises(SystemExit):
validate_config(config)
Expand Down