fix: Setting.set was incorrectly instanciating ValidationError.
This commit is contained in:
@ -31,7 +31,7 @@ class Setting:
|
|||||||
def __init__(self, name, default=None, validator=None, formatter=None):
|
def __init__(self, name, default=None, validator=None, formatter=None):
|
||||||
self.name = name
|
self.name = name
|
||||||
|
|
||||||
if default:
|
if default is not None:
|
||||||
self.default = default if callable(default) else lambda: default
|
self.default = default if callable(default) else lambda: default
|
||||||
else:
|
else:
|
||||||
self.default = lambda: None
|
self.default = lambda: None
|
||||||
@ -51,7 +51,7 @@ class Setting:
|
|||||||
def set(self, value):
|
def set(self, value):
|
||||||
value = self.formatter(value) if self.formatter else value
|
value = self.formatter(value) if self.formatter else value
|
||||||
if self.validator and not self.validator(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
|
self.value = value
|
||||||
|
|
||||||
def set_if_true(self, value):
|
def set_if_true(self, value):
|
||||||
|
|||||||
@ -5,6 +5,7 @@ from unittest.mock import patch
|
|||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from bonobo import settings
|
from bonobo import settings
|
||||||
|
from bonobo.errors import ValidationError
|
||||||
|
|
||||||
TEST_SETTING = 'TEST_SETTING'
|
TEST_SETTING = 'TEST_SETTING'
|
||||||
|
|
||||||
@ -38,6 +39,15 @@ def test_setting():
|
|||||||
s.clear()
|
s.clear()
|
||||||
assert s.get() == 'hello'
|
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():
|
def test_default_settings():
|
||||||
settings.clear_all()
|
settings.clear_all()
|
||||||
|
|||||||
Reference in New Issue
Block a user