From 90b0bb8849131e782525602128aaf3a53379cc3d Mon Sep 17 00:00:00 2001 From: Zandor Sabino Date: Mon, 29 Nov 2021 11:34:03 -0300 Subject: [PATCH 1/2] fix: replace strtobool for local function --- decouple.py | 2 +- tests/test_util.py | 21 +++++++++++++++++++++ util.py | 9 +++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 tests/test_util.py create mode 100644 util.py diff --git a/decouple.py b/decouple.py index 302b864..8f42287 100644 --- a/decouple.py +++ b/decouple.py @@ -5,7 +5,7 @@ from shlex import shlex from io import open from collections import OrderedDict -from distutils.util import strtobool +from util import strtobool # Useful for very coarse version differentiation. PYVERSION = sys.version_info diff --git a/tests/test_util.py b/tests/test_util.py new file mode 100644 index 0000000..b774555 --- /dev/null +++ b/tests/test_util.py @@ -0,0 +1,21 @@ +import pytest +from util import strtobool + + +def test_true_values(): + true_list = ["y", "yes", "t", "true", "on", "1"] + for item in true_list: + assert strtobool(item) == 1 + + +def test_false_values(): + false_list = ["n", "no", "f", "false", "off", "0"] + for item in false_list: + assert strtobool(item) == 0 + + +def test_invalid_value_text(): + invalid_list = ["Invalid_Value_1", "1nv4l1d_V4lu3_2", "Invalid_Value_3"] + for value in invalid_list: + with pytest.raises(ValueError, match="invalid truth value '%s'".format(value)): + strtobool(value) diff --git a/util.py b/util.py new file mode 100644 index 0000000..7551a7c --- /dev/null +++ b/util.py @@ -0,0 +1,9 @@ +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("invalid truth value '%s'".format(value)) + return result From 7e90cd38a3e2693412674a96e2e2ceb95c3dbe71 Mon Sep 17 00:00:00 2001 From: Zandor Sabino Date: Sat, 11 Dec 2021 22:36:48 -0300 Subject: [PATCH 2/2] join utils in decouple --- decouple.py | 14 ++++++++++++-- tests/test_strtobool.py | 28 ++++++++++++++++++++++++++++ tests/test_util.py | 21 --------------------- util.py | 9 --------- 4 files changed, 40 insertions(+), 32 deletions(-) create mode 100644 tests/test_strtobool.py delete mode 100644 tests/test_util.py delete mode 100644 util.py diff --git a/decouple.py b/decouple.py index 8f42287..847b530 100644 --- a/decouple.py +++ b/decouple.py @@ -5,7 +5,6 @@ from shlex import shlex from io import open from collections import OrderedDict -from util import strtobool # Useful for very coarse version differentiation. PYVERSION = sys.version_info @@ -26,6 +25,18 @@ DEFAULT_ENCODING = 'UTF-8' + +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 + + class UndefinedValueError(Exception): pass @@ -261,7 +272,6 @@ def __init__(self, flat=None, cast=text_type, choices=None): self._valid_values.extend(self.flat) self._valid_values.extend([value for value, _ in self.choices]) - def __call__(self, value): transform = self.cast(value) if transform not in self._valid_values: diff --git a/tests/test_strtobool.py b/tests/test_strtobool.py new file mode 100644 index 0000000..cfe4bf0 --- /dev/null +++ b/tests/test_strtobool.py @@ -0,0 +1,28 @@ +import pytest +from decouple import strtobool + + +def test_true_values(): + true_list = ["y", "yes", "t", "true", "on", "1"] + for item in true_list: + assert strtobool(item) == 1 + + +def test_false_values(): + false_list = ["n", "no", "f", "false", "off", "0"] + for item in false_list: + assert strtobool(item) == 0 + + +@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 diff --git a/tests/test_util.py b/tests/test_util.py deleted file mode 100644 index b774555..0000000 --- a/tests/test_util.py +++ /dev/null @@ -1,21 +0,0 @@ -import pytest -from util import strtobool - - -def test_true_values(): - true_list = ["y", "yes", "t", "true", "on", "1"] - for item in true_list: - assert strtobool(item) == 1 - - -def test_false_values(): - false_list = ["n", "no", "f", "false", "off", "0"] - for item in false_list: - assert strtobool(item) == 0 - - -def test_invalid_value_text(): - invalid_list = ["Invalid_Value_1", "1nv4l1d_V4lu3_2", "Invalid_Value_3"] - for value in invalid_list: - with pytest.raises(ValueError, match="invalid truth value '%s'".format(value)): - strtobool(value) diff --git a/util.py b/util.py deleted file mode 100644 index 7551a7c..0000000 --- a/util.py +++ /dev/null @@ -1,9 +0,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("invalid truth value '%s'".format(value)) - return result