@@ -581,20 +581,18 @@ def __bytes__(self) -> bytes:
581
581
# Being selected in a a group means this field is the one that is
582
582
# currently set in a `oneof` group, so it must be serialized even
583
583
# if the value is the default zero value.
584
- selected_in_group = (
585
- meta .group and self ._group_current [meta .group ] == field_name
586
- )
584
+ selected_in_group = False
585
+ if meta .group and self ._group_current [meta .group ] == field_name :
586
+ selected_in_group = True
587
587
588
- # Empty messages can still be sent on the wire if they were
589
- # set (or received empty).
590
- serialize_empty = isinstance (value , Message ) and value ._serialized_on_wire
591
-
592
- include_default_value_for_oneof = self ._include_default_value_for_oneof (
593
- field_name = field_name , meta = meta
594
- )
588
+ serialize_empty = False
589
+ if isinstance (value , Message ) and value ._serialized_on_wire :
590
+ # Empty messages can still be sent on the wire if they were
591
+ # set (or received empty).
592
+ serialize_empty = True
595
593
596
594
if value == self ._get_field_default (field_name ) and not (
597
- selected_in_group or serialize_empty or include_default_value_for_oneof
595
+ selected_in_group or serialize_empty
598
596
):
599
597
# Default (zero) values are not serialized. Two exceptions are
600
598
# if this is the selected oneof item or if we know we have to
@@ -623,17 +621,6 @@ def __bytes__(self) -> bytes:
623
621
sv = _serialize_single (2 , meta .map_types [1 ], v )
624
622
output += _serialize_single (meta .number , meta .proto_type , sk + sv )
625
623
else :
626
- # If we have an empty string and we're including the default value for
627
- # a oneof, make sure we serialize it. This ensures that the byte string
628
- # output isn't simply an empty string. This also ensures that round trip
629
- # serialization will keep `which_one_of` calls consistent.
630
- if (
631
- isinstance (value , str )
632
- and value == ""
633
- and include_default_value_for_oneof
634
- ):
635
- serialize_empty = True
636
-
637
624
output += _serialize_single (
638
625
meta .number ,
639
626
meta .proto_type ,
@@ -737,13 +724,6 @@ def _postprocess_single(
737
724
738
725
return value
739
726
740
- def _include_default_value_for_oneof (
741
- self , field_name : str , meta : FieldMetadata
742
- ) -> bool :
743
- return (
744
- meta .group is not None and self ._group_current .get (meta .group ) == field_name
745
- )
746
-
747
727
def parse (self : T , data : bytes ) -> T :
748
728
"""
749
729
Parse the binary encoded Protobuf into this message instance. This
@@ -822,22 +802,10 @@ def to_dict(
822
802
cased_name = casing (field_name ).rstrip ("_" ) # type: ignore
823
803
if meta .proto_type == TYPE_MESSAGE :
824
804
if isinstance (value , datetime ):
825
- if (
826
- value != DATETIME_ZERO
827
- or include_default_values
828
- or self ._include_default_value_for_oneof (
829
- field_name = field_name , meta = meta
830
- )
831
- ):
805
+ if value != DATETIME_ZERO or include_default_values :
832
806
output [cased_name ] = _Timestamp .timestamp_to_json (value )
833
807
elif isinstance (value , timedelta ):
834
- if (
835
- value != timedelta (0 )
836
- or include_default_values
837
- or self ._include_default_value_for_oneof (
838
- field_name = field_name , meta = meta
839
- )
840
- ):
808
+ if value != timedelta (0 ) or include_default_values :
841
809
output [cased_name ] = _Duration .delta_to_json (value )
842
810
elif meta .wraps :
843
811
if value is not None or include_default_values :
@@ -847,28 +815,19 @@ def to_dict(
847
815
value = [i .to_dict (casing , include_default_values ) for i in value ]
848
816
if value or include_default_values :
849
817
output [cased_name ] = value
850
- elif (
851
- value ._serialized_on_wire
852
- or include_default_values
853
- or self ._include_default_value_for_oneof (
854
- field_name = field_name , meta = meta
855
- )
856
- ):
857
- output [cased_name ] = value .to_dict (casing , include_default_values ,)
858
- elif meta .proto_type == "map" :
818
+ else :
819
+ if value ._serialized_on_wire or include_default_values :
820
+ output [cased_name ] = value .to_dict (
821
+ casing , include_default_values
822
+ )
823
+ elif meta .proto_type == TYPE_MAP :
859
824
for k in value :
860
825
if hasattr (value [k ], "to_dict" ):
861
826
value [k ] = value [k ].to_dict (casing , include_default_values )
862
827
863
828
if value or include_default_values :
864
829
output [cased_name ] = value
865
- elif (
866
- value != self ._get_field_default (field_name )
867
- or include_default_values
868
- or self ._include_default_value_for_oneof (
869
- field_name = field_name , meta = meta
870
- )
871
- ):
830
+ elif value != self ._get_field_default (field_name ) or include_default_values :
872
831
if meta .proto_type in INT_64_TYPES :
873
832
if field_is_repeated :
874
833
output [cased_name ] = [str (n ) for n in value ]
@@ -927,8 +886,6 @@ def from_dict(self: T, value: dict) -> T:
927
886
elif meta .wraps :
928
887
setattr (self , field_name , value [key ])
929
888
else :
930
- # NOTE: `from_dict` mutates the underlying message, so no
931
- # assignment here is necessary.
932
889
v .from_dict (value [key ])
933
890
elif meta .map_types and meta .map_types [1 ] == TYPE_MESSAGE :
934
891
v = getattr (self , field_name )
@@ -954,8 +911,8 @@ def from_dict(self: T, value: dict) -> T:
954
911
elif isinstance (v , str ):
955
912
v = enum_cls .from_string (v )
956
913
957
- if v is not None :
958
- setattr (self , field_name , v )
914
+ if v is not None :
915
+ setattr (self , field_name , v )
959
916
return self
960
917
961
918
def to_json (self , indent : Union [None , int , str ] = None ) -> str :
0 commit comments