🔒 Ensure `skip_defaults` doesn't cause extra fields to be serialized (#485)

This commit is contained in:
dmontagu 2019-08-30 16:56:14 -07:00 committed by Sebastián Ramírez
parent f156f45193
commit 6c6bdb6233
2 changed files with 8 additions and 4 deletions

View File

@ -45,6 +45,8 @@ def serialize_response(
) -> Any:
if field:
errors = []
if skip_defaults and isinstance(response, BaseModel):
response = response.dict(skip_defaults=skip_defaults)
value, errors_ = field.validate(response, {}, loc=("response",))
if isinstance(errors_, ErrorWrapper):
errors.append(errors_)
@ -52,8 +54,6 @@ def serialize_response(
errors.extend(errors_)
if errors:
raise ValidationError(errors)
if skip_defaults and isinstance(response, BaseModel):
value = response.dict(skip_defaults=skip_defaults)
return jsonable_encoder(
value,
include=include,

View File

@ -16,9 +16,13 @@ class Model(BaseModel):
sub: SubModel
class ModelSubclass(Model):
y: int
@app.get("/", response_model=Model, response_model_skip_defaults=True)
def get() -> Model:
return Model(sub={})
def get() -> ModelSubclass:
return ModelSubclass(sub={}, y=1)
client = TestClient(app)