From 602007ab8843abe8f5bdc58aa5ec762b8d7774ab Mon Sep 17 00:00:00 2001 From: Maxim Kulkin Date: Thu, 7 Nov 2013 17:52:36 +0400 Subject: [PATCH] Fixed handling of unknown params in Configuration --- rubick/config_model.py | 14 +++++++++----- rubick/test_configuration.py | 18 ++++++++++++++++++ 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/rubick/config_model.py b/rubick/config_model.py index e5b5fa8..9996ed9 100644 --- a/rubick/config_model.py +++ b/rubick/config_model.py @@ -129,11 +129,12 @@ class Configuration(object): if self.schema: param_schema = self.schema.get_parameter(name, section=section) - type_validator = TypeValidatorRegistry.get_validator( - param_schema.type) - type_validation_result = type_validator.validate(value) - if not isinstance(type_validation_result, InvalidValueError): - value = type_validation_result + if param_schema: + type_validator = TypeValidatorRegistry.get_validator( + param_schema.type) + type_validation_result = type_validator.validate(value) + if not isinstance(type_validation_result, InvalidValueError): + value = type_validation_result self._cache[fullname] = value @@ -153,6 +154,9 @@ class Configuration(object): param_schema = self.schema.get_parameter(name, section=section) + if not param_schema: + return None + type_validator = TypeValidatorRegistry.get_validator( param_schema.type) type_validation_result = type_validator.validate(value) diff --git a/rubick/test_configuration.py b/rubick/test_configuration.py index e8db72a..4946a31 100644 --- a/rubick/test_configuration.py +++ b/rubick/test_configuration.py @@ -239,6 +239,15 @@ class ConfigurationTests(unittest.TestCase): self.assertEqual(456, c.get('param1')) + def test_type_for_unknown_param(self): + schema = ConfigSchema('test', '1.0', 'ini', []) + + c = Configuration(schema) + + c.set('param1', '123') + + self.assertEqual('123', c.get('param1')) + def test_typed_param_with_invalid_value_returns_string_value(self): schema = ConfigSchema('test', '1.0', 'ini', [ ConfigParameterSchema('param1', type='integer', section='DEFAULT') @@ -282,3 +291,12 @@ class ConfigurationTests(unittest.TestCase): c.set('param1', 'abc') self.assertTrue(isinstance(c.validate('param1'), InvalidValueError)) + + def test_validate_returns_none_for_unknown_param(self): + schema = ConfigSchema('test', '1.0', 'ini', []) + + c = Configuration(schema) + + c.set('param1', '123') + + self.assertIsNone(c.validate('param1'))