Skip to content

Commit a072575

Browse files
For missing fields, we don't warn on exclude_, so don't warn on exclude (#1403)
1 parent 39a6b10 commit a072575

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

src/serializers/fields.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ impl GeneralFieldsSerializer {
206206

207207
if extra.check.enabled()
208208
// If any of these are true we can't count fields
209-
&& !(extra.exclude_defaults || extra.exclude_unset || extra.exclude_none)
209+
&& !(extra.exclude_defaults || extra.exclude_unset || extra.exclude_none || exclude.is_some())
210210
// Check for missing fields, we can't have extra fields here
211211
&& self.required_fields > used_req_fields
212212
{

tests/serializers/test_model.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import dataclasses
22
import json
33
import platform
4+
import warnings
45
from random import randint
56
from typing import Any, ClassVar, Dict
67

@@ -1080,3 +1081,23 @@ class Model:
10801081
m.__pydantic_extra__ = {'extra': 'extra'}
10811082

10821083
assert s.to_python(m) == {'extra': 'extra bam!'}
1084+
1085+
1086+
def test_no_warn_on_exclude() -> None:
1087+
warnings.simplefilter('error')
1088+
1089+
s = SchemaSerializer(
1090+
core_schema.model_schema(
1091+
BasicModel,
1092+
core_schema.model_fields_schema(
1093+
{
1094+
'a': core_schema.model_field(core_schema.int_schema()),
1095+
'b': core_schema.model_field(core_schema.int_schema()),
1096+
}
1097+
),
1098+
)
1099+
)
1100+
1101+
value = BasicModel(a=0, b=1)
1102+
assert s.to_python(value, exclude={'b'}) == {'a': 0}
1103+
assert s.to_python(value, mode='json', exclude={'b'}) == {'a': 0}

0 commit comments

Comments
 (0)