mirror of
https://github.com/kennethreitz/pydantic.git
synced 2026-06-05 23:00:18 +00:00
Incorporate feedback
This commit is contained in:
+10
-6
@@ -293,7 +293,7 @@ class BaseModel(metaclass=MetaModel):
|
||||
elif self.__config__.validate_assignment:
|
||||
value_, error_ = self.fields[name].validate(value, self.dict(exclude={name}), loc=name)
|
||||
if error_:
|
||||
raise ValidationError([error_], self)
|
||||
raise ValidationError([error_], type(self))
|
||||
else:
|
||||
self.__values__[name] = value_
|
||||
self.__fields_set__.add(name)
|
||||
@@ -783,11 +783,15 @@ def validate_model( # noqa: C901 (ignore complexity)
|
||||
for f in sorted(extra):
|
||||
errors.append(ErrorWrapper(ExtraError(), loc=f, config=config))
|
||||
|
||||
if not raise_exc:
|
||||
model_type = model if isinstance(model, type) else type(model)
|
||||
return values, fields_set, ValidationError(errors, model_type) if errors else None
|
||||
|
||||
err = None
|
||||
if errors:
|
||||
model_type = model if isinstance(model, type) else type(model)
|
||||
raise ValidationError(errors, model_type)
|
||||
err = ValidationError(errors, model_type)
|
||||
|
||||
if not raise_exc:
|
||||
return values, fields_set, err
|
||||
|
||||
if err:
|
||||
raise err
|
||||
|
||||
return values, fields_set, None
|
||||
|
||||
@@ -261,3 +261,19 @@ def test_nested_error():
|
||||
expected = [{'loc': ('data1', 0, 'data2', 0, 'x'), 'msg': 'field required', 'type': 'value_error.missing'}]
|
||||
|
||||
assert exc_info.value.errors() == expected
|
||||
|
||||
|
||||
def test_validate_assignment_error():
|
||||
class Model(BaseModel):
|
||||
x: int
|
||||
|
||||
class Config:
|
||||
validate_assignment = True
|
||||
|
||||
model = Model(x=1)
|
||||
with pytest.raises(ValidationError) as exc_info:
|
||||
model.x = 'a'
|
||||
assert (
|
||||
str(exc_info.value)
|
||||
== '1 validation error for Model\nx\n value is not a valid integer (type=type_error.integer)'
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user