fix: Setting.set was incorrectly instanciating ValidationError.

This commit is contained in:
Romain Dorgueil
2018-08-11 07:26:14 +02:00
parent df84d917c3
commit 3ea0952bd3
2 changed files with 12 additions and 2 deletions

View File

@ -31,7 +31,7 @@ class Setting:
def __init__(self, name, default=None, validator=None, formatter=None):
self.name = name
if default:
if default is not None:
self.default = default if callable(default) else lambda: default
else:
self.default = lambda: None
@ -51,7 +51,7 @@ class Setting:
def set(self, value):
value = self.formatter(value) if self.formatter else value
if self.validator and not self.validator(value):
raise ValidationError('Invalid value {!r} for setting {}.'.format(value, self.name))
raise ValidationError(self, 'Invalid value {!r} for setting {}.'.format(value, self.name))
self.value = value
def set_if_true(self, value):

View File

@ -5,6 +5,7 @@ from unittest.mock import patch
import pytest
from bonobo import settings
from bonobo.errors import ValidationError
TEST_SETTING = 'TEST_SETTING'
@ -38,6 +39,15 @@ def test_setting():
s.clear()
assert s.get() == 'hello'
s = settings.Setting(TEST_SETTING, default=0, validator=lambda x: x == 42)
with pytest.raises(ValidationError):
assert s.get() is 0
s.set(42)
with pytest.raises(ValidationError):
s.set(21)
def test_default_settings():
settings.clear_all()