From 02c9af4bb8d3215b7dab399ea02665d1ebf23267 Mon Sep 17 00:00:00 2001 From: sydney-runkle Date: Tue, 13 Aug 2024 12:17:23 -0400 Subject: [PATCH 1/2] don't count on exclude --- src/serializers/fields.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/serializers/fields.rs b/src/serializers/fields.rs index 87c34d364..16c3f2d55 100644 --- a/src/serializers/fields.rs +++ b/src/serializers/fields.rs @@ -206,7 +206,7 @@ impl GeneralFieldsSerializer { if extra.check.enabled() // If any of these are true we can't count fields - && !(extra.exclude_defaults || extra.exclude_unset || extra.exclude_none) + && !(extra.exclude_defaults || extra.exclude_unset || extra.exclude_none || exclude.is_some()) // Check for missing fields, we can't have extra fields here && self.required_fields > used_req_fields { From 128795c008a442388879740c476b06894d5bfa64 Mon Sep 17 00:00:00 2001 From: sydney-runkle Date: Tue, 13 Aug 2024 14:18:17 -0400 Subject: [PATCH 2/2] add test --- tests/serializers/test_model.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/tests/serializers/test_model.py b/tests/serializers/test_model.py index 207354946..abb32af3c 100644 --- a/tests/serializers/test_model.py +++ b/tests/serializers/test_model.py @@ -1,6 +1,7 @@ import dataclasses import json import platform +import warnings from random import randint from typing import Any, ClassVar, Dict @@ -1080,3 +1081,23 @@ class Model: m.__pydantic_extra__ = {'extra': 'extra'} assert s.to_python(m) == {'extra': 'extra bam!'} + + +def test_no_warn_on_exclude() -> None: + warnings.simplefilter('error') + + s = SchemaSerializer( + core_schema.model_schema( + BasicModel, + core_schema.model_fields_schema( + { + 'a': core_schema.model_field(core_schema.int_schema()), + 'b': core_schema.model_field(core_schema.int_schema()), + } + ), + ) + ) + + value = BasicModel(a=0, b=1) + assert s.to_python(value, exclude={'b'}) == {'a': 0} + assert s.to_python(value, mode='json', exclude={'b'}) == {'a': 0}