mirror of
https://github.com/kennethreitz/pydantic.git
synced 2026-06-05 23:00:18 +00:00
+4
-4
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
+32
-8
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user