From cc5386e1ab2006eddc030d3d41e3bc661f1cc83f Mon Sep 17 00:00:00 2001 From: Anton Stakhouski Date: Thu, 4 Apr 2024 12:21:38 +0200 Subject: [PATCH] Make Optional check on field.data instead of field.raw_data --- src/wtforms/validators.py | 6 +++--- tests/validators/test_optional.py | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/wtforms/validators.py b/src/wtforms/validators.py index d5b3c39a9..cc2284b82 100644 --- a/src/wtforms/validators.py +++ b/src/wtforms/validators.py @@ -248,9 +248,9 @@ def __init__(self, strip_whitespace=True): def __call__(self, form, field): if ( - not field.raw_data - or isinstance(field.raw_data[0], str) - and not self.string_check(field.raw_data[0]) + not field.data + or isinstance(field.data, str) + and not self.string_check(field.data) ): field.errors[:] = [] raise StopValidation() diff --git a/tests/validators/test_optional.py b/tests/validators/test_optional.py index 7ccd27239..6b948ed7b 100644 --- a/tests/validators/test_optional.py +++ b/tests/validators/test_optional.py @@ -37,3 +37,19 @@ def test_input_optional_raises(data_v, raw_data_v, dummy_form, dummy_field): validator(dummy_form, dummy_field) assert len(dummy_field.errors) == 0 + + +def test_input_optional_raises_with_empty_formdata(dummy_form, dummy_field): + """ + optional should not stop the validation chain if field.data is not empty + """ + validator = optional() + dummy_field.data = "abc" + dummy_field.raw_data = None + + dummy_field.errors = ["Invalid Integer Value"] + assert len(dummy_field.errors) == 1 + + validator(dummy_form, dummy_field) + + assert len(dummy_field.errors) == 1