File tree Expand file tree Collapse file tree 1 file changed +39
-0
lines changed Expand file tree Collapse file tree 1 file changed +39
-0
lines changed Original file line number Diff line number Diff line change 1+ from dataclasses import dataclass
2+
3+ from pydantic import BaseModel , PlainSerializer , model_serializer
4+
5+ @dataclass
6+ class OmitIfNone :
7+ pass
8+
9+ class AppResponseModel (BaseModel ):
10+ @model_serializer
11+ def _serialize (self ):
12+ skip_if_none = set ()
13+ serialize_aliases = dict ()
14+
15+ # Gather fields that should omit if None
16+ for name , field_info in self .model_fields .items ():
17+ if any (
18+ isinstance (metadata , OmitIfNone ) for metadata in field_info .metadata
19+ ):
20+ skip_if_none .add (name )
21+ elif field_info .serialization_alias :
22+ serialize_aliases [name ] = field_info .serialization_alias
23+
24+ serialized = dict ()
25+
26+ for name , value in self :
27+ # Skip serializing None if it was marked with "OmitIfNone"
28+ if value is None and name in skip_if_none :
29+ continue
30+ serialize_key = serialize_aliases .get (name , name )
31+
32+ # Run Annotated PlainSerializer
33+ for metadata in self .model_fields [name ].metadata :
34+ if isinstance (metadata , PlainSerializer ):
35+ value = metadata .func (value )
36+
37+ serialized [serialize_key ] = value
38+
39+ return serialized
You can’t perform that action at this time.
0 commit comments