From 95aba150b2e0d7fef844f1eaed31753161245a07 Mon Sep 17 00:00:00 2001 From: Samuel Colvin Date: Sat, 2 Jun 2018 20:53:10 +0100 Subject: [PATCH] gt, lt, (#188) * gt, lt, fix #176 * change test names --- pydantic/errors.py | 8 ++++---- pydantic/validators.py | 8 ++++---- tests/test_error_wrappers.py | 10 ++++----- tests/test_types.py | 40 ++++++++++++++++++++++++++++-------- 4 files changed, 45 insertions(+), 21 deletions(-) diff --git a/pydantic/errors.py b/pydantic/errors.py index e1365b2..629ad7b 100644 --- a/pydantic/errors.py +++ b/pydantic/errors.py @@ -120,16 +120,16 @@ class StrRegexError(PydanticValueError): super().__init__(pattern=pattern) -class NumberMinSizeError(PydanticValueError): - code = 'number.min_size' +class NumberGtError(PydanticValueError): + code = 'number.gt' msg_template = 'ensure this value is greater than {limit_value}' def __init__(self, *, limit_value: Union[int, float, Decimal]) -> None: super().__init__(limit_value=limit_value) -class NumberMaxSizeError(PydanticValueError): - code = 'number.max_size' +class NumberLtError(PydanticValueError): + code = 'number.lt' msg_template = 'ensure this value is less than {limit_value}' def __init__(self, *, limit_value: Union[int, float, Decimal]) -> None: diff --git a/pydantic/validators.py b/pydantic/validators.py index b9716d8..29efaae 100644 --- a/pydantic/validators.py +++ b/pydantic/validators.py @@ -79,11 +79,11 @@ def float_validator(v) -> float: def number_size_validator(v, field, config, **kwargs): - if field.type_.gt is not None and v < field.type_.gt: - raise errors.NumberMinSizeError(limit_value=field.type_.gt) + if field.type_.gt is not None and v <= field.type_.gt: + raise errors.NumberGtError(limit_value=field.type_.gt) - if field.type_.lt is not None and v > field.type_.lt: - raise errors.NumberMaxSizeError(limit_value=field.type_.lt) + if field.type_.lt is not None and v >= field.type_.lt: + raise errors.NumberLtError(limit_value=field.type_.lt) return v diff --git a/tests/test_error_wrappers.py b/tests/test_error_wrappers.py index 2c100d4..d6b05aa 100644 --- a/tests/test_error_wrappers.py +++ b/tests/test_error_wrappers.py @@ -32,7 +32,7 @@ f -> 0 g uuid version 1 expected (type=value_error.uuid.version; required_version=1) h - yet another error message template 42 (type=value_error.number.min_size; limit_value=42)""", + yet another error message template 42 (type=value_error.number.gt; limit_value=42)""", ), ( 'flatten_errors', @@ -122,7 +122,7 @@ h 'h', ), 'msg': 'yet another error message template 42', - 'type': 'value_error.number.min_size', + 'type': 'value_error.number.gt', 'ctx': { 'limit_value': 42, }, @@ -221,7 +221,7 @@ h "h" ], "msg": "yet another error message template 42", - "type": "value_error.number.min_size" + "type": "value_error.number.gt" } ]""" ), @@ -250,7 +250,7 @@ f -> 0 g uuid version 1 expected (type=value_error.uuid.version; required_version=1) h - yet another error message template 42 (type=value_error.number.min_size; limit_value=42)""" + yet another error message template 42 (type=value_error.number.gt; limit_value=42)""" ), )) def test_validation_error(result, expected): @@ -271,7 +271,7 @@ def test_validation_error(result, expected): class Config: error_msg_templates = { - 'value_error.number.min_size': 'yet another error message template {limit_value}', + 'value_error.number.gt': 'yet another error message template {limit_value}', } with pytest.raises(ValidationError) as exc_info: diff --git a/tests/test_types.py b/tests/test_types.py index facb431..b354445 100644 --- a/tests/test_types.py +++ b/tests/test_types.py @@ -519,7 +519,7 @@ def test_int_validation(): { 'loc': ('a',), 'msg': 'ensure this value is greater than 0', - 'type': 'value_error.number.min_size', + 'type': 'value_error.number.gt', 'ctx': { 'limit_value': 0, }, @@ -527,7 +527,7 @@ def test_int_validation(): { 'loc': ('b',), 'msg': 'ensure this value is less than 0', - 'type': 'value_error.number.max_size', + 'type': 'value_error.number.lt', 'ctx': { 'limit_value': 0, }, @@ -535,7 +535,7 @@ def test_int_validation(): { 'loc': ('c',), 'msg': 'ensure this value is greater than 4', - 'type': 'value_error.number.min_size', + 'type': 'value_error.number.gt', 'ctx': { 'limit_value': 4, }, @@ -558,7 +558,7 @@ def test_float_validation(): { 'loc': ('a',), 'msg': 'ensure this value is greater than 0', - 'type': 'value_error.number.min_size', + 'type': 'value_error.number.gt', 'ctx': { 'limit_value': 0, }, @@ -566,7 +566,7 @@ def test_float_validation(): { 'loc': ('b',), 'msg': 'ensure this value is less than 0', - 'type': 'value_error.number.max_size', + 'type': 'value_error.number.lt', 'ctx': { 'limit_value': 0, }, @@ -574,7 +574,7 @@ def test_float_validation(): { 'loc': ('c',), 'msg': 'ensure this value is greater than 4', - 'type': 'value_error.number.min_size', + 'type': 'value_error.number.gt', 'ctx': { 'limit_value': 4, }, @@ -704,7 +704,7 @@ def test_anystr_strip_whitespace_disabled(): { 'loc': ('foo',), 'msg': 'ensure this value is greater than 42.24', - 'type': 'value_error.number.min_size', + 'type': 'value_error.number.gt', 'ctx': { 'limit_value': Decimal('42.24'), }, @@ -715,7 +715,7 @@ def test_anystr_strip_whitespace_disabled(): { 'loc': ('foo',), 'msg': 'ensure this value is less than 42.24', - 'type': 'value_error.number.max_size', + 'type': 'value_error.number.lt', 'ctx': { 'limit_value': Decimal('42.24'), }, @@ -836,3 +836,27 @@ def test_path_validation(value, result): assert exc_info.value.flatten_errors() == result else: assert Model(foo=value).foo == result + + +def test_number_gt(): + class Model(BaseModel): + a: conint(gt=-1) = 0 + + assert Model(a=0).dict() == {'a': 0} + with pytest.raises(ValidationError) as exc_info: + Model(a=-1) + assert ( + 'ensure this value is greater than -1 (type=value_error.number.gt; limit_value=-1)' + ) in str(exc_info.value) + + +def test_number_lt(): + class Model(BaseModel): + a: conint(lt=5) = 0 + + assert Model(a=4).dict() == {'a': 4} + with pytest.raises(ValidationError) as exc_info: + Model(a=5) + assert ( + 'ensure this value is less than 5 (type=value_error.number.lt; limit_value=5)' + ) in str(exc_info.value)