Incorporate feedback

This commit is contained in:
David Montague
2019-07-25 00:15:54 -07:00
parent b960f71586
commit 8135f470e4
2 changed files with 26 additions and 6 deletions
+10 -6
View File
@@ -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
+16
View File
@@ -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)'
)