From d19c32a495d8e9d0123db3dbba03efb9cc8c73e9 Mon Sep 17 00:00:00 2001 From: xiehuanyi <74809554+xiehuanyi@users.noreply.github.com> Date: Mon, 12 Oct 2026 01:25:18 +0300 Subject: [PATCH] Respect false values for the validation error raise flag --- src/validators/utils.py | 5 +--- tests/test_validation_failure.py | 40 +++++++++++++++++++++++++++++++- 2 files changed, 40 insertions(+), 5 deletions(-) diff --git a/src/validators/utils.py b/src/validators/utils.py index 28d3c857..77937f68 100644 --- a/src/validators/utils.py +++ b/src/validators/utils.py @@ -72,10 +72,7 @@ def validator(func: Callable[..., Any]): @wraps(func) def wrapper(*args: Any, **kwargs: Any): - raise_validation_error = False - if "r_ve" in kwargs: - raise_validation_error = True - del kwargs["r_ve"] + raise_validation_error = bool(kwargs.pop("r_ve", False)) if environ.get("RAISE_VALIDATION_ERROR", "False") == "True": raise_validation_error = True diff --git a/tests/test_validation_failure.py b/tests/test_validation_failure.py index 67502000..df308410 100644 --- a/tests/test_validation_failure.py +++ b/tests/test_validation_failure.py @@ -1,7 +1,45 @@ """Test validation Failure.""" +# standard +from typing import Any, Callable + +# third-party +import pytest + # local -from validators import between +from validators import ValidationError, between, slug, uuid + + +@pytest.mark.parametrize("function,value", [(slug, "invalid_"), (uuid, "not-a-uuid")]) +def test_false_raise_validation_error_flag( + function: Callable[..., Any], value: str, monkeypatch: pytest.MonkeyPatch +) -> None: + """A false flag returns validation errors instead of raising them.""" + monkeypatch.delenv("RAISE_VALIDATION_ERROR", raising=False) + result = function(value, r_ve=False) + assert isinstance(result, ValidationError) + assert not result + + +@pytest.mark.parametrize("function,value", [(slug, "invalid_"), (uuid, "not-a-uuid")]) +def test_environment_still_enables_raise_validation_error( + function: Callable[..., Any], value: str, monkeypatch: pytest.MonkeyPatch +) -> None: + """The environment option enables raising even when the call flag is false.""" + monkeypatch.setenv("RAISE_VALIDATION_ERROR", "True") + with pytest.raises(ValidationError): + function(value, r_ve=False) + + +@pytest.mark.parametrize("function,value", [(slug, "invalid_"), (uuid, "not-a-uuid")]) +def test_true_raise_validation_error_flag( + function: Callable[..., Any], value: str, monkeypatch: pytest.MonkeyPatch +) -> None: + """A true call flag continues to raise validation errors.""" + monkeypatch.delenv("RAISE_VALIDATION_ERROR", raising=False) + with pytest.raises(ValidationError): + function(value, r_ve=True) + failed_obj_repr = "ValidationError(func=between"