diff --git a/decouple.py b/decouple.py index 847b530..b2876c1 100644 --- a/decouple.py +++ b/decouple.py @@ -26,15 +26,19 @@ DEFAULT_ENCODING = 'UTF-8' +# Python 3.10 don't have strtobool anymore. So we move it here. +TRUE_VALUES = {"y", "yes", "t", "true", "on", "1"} +FALSE_VALUES = {"n", "no", "f", "false", "off", "0"} + def strtobool(value): - _value = value.lower() - if _value in {"y", "yes", "t", "true", "on", "1"}: - result = True - elif _value in {"n", "no", "f", "false", "off", "0"}: - result = False - else: - raise ValueError(" ".join(("invalid truth value", value))) - return result + value = value.lower() + + if value in TRUE_VALUES: + return True + elif value in FALSE_VALUES: + return False + + raise ValueError("Invalid truth value: " + value) class UndefinedValueError(Exception): diff --git a/tests/test_strtobool.py b/tests/test_strtobool.py index cfe4bf0..d910d86 100644 --- a/tests/test_strtobool.py +++ b/tests/test_strtobool.py @@ -3,26 +3,16 @@ def test_true_values(): - true_list = ["y", "yes", "t", "true", "on", "1"] - for item in true_list: - assert strtobool(item) == 1 + for item in ("Y", "YES", "T", "TRUE", "ON", "1"): + assert strtobool(item) def test_false_values(): - false_list = ["n", "no", "f", "false", "off", "0"] - for item in false_list: - assert strtobool(item) == 0 + for item in ("N", "NO", "F", "FALSE", "OFF", "0"): + assert strtobool(item) is False -@pytest.mark.parametrize( - "test_input,expected", - [ - ("Invalid_Value_1", "invalid truth value Invalid_Value_1"), - ("1nv4l1d_V4lu3_2", "invalid truth value 1nv4l1d_V4lu3_2"), - ("invalid_value_3", "invalid truth value invalid_value_3"), - ], -) -def test_eval(test_input, expected): - with pytest.raises(ValueError) as execinfo: - strtobool(test_input) - assert str(execinfo.value) == expected +def test_invalid(): + with pytest.raises(ValueError, match="Invalid truth value"): + strtobool("MAYBE") +