From c61714a04c023ee5ca7835a58de72ebf6e3de025 Mon Sep 17 00:00:00 2001 From: Adrien Vannson Date: Thu, 12 Dec 2024 17:27:42 +0100 Subject: [PATCH 1/2] Don't use type annotations in _get_field_default_gen --- src/betterproto/__init__.py | 32 +------------------------------- 1 file changed, 1 insertion(+), 31 deletions(-) diff --git a/src/betterproto/__init__.py b/src/betterproto/__init__.py index 9f7a73c0..c5dd5504 100644 --- a/src/betterproto/__init__.py +++ b/src/betterproto/__init__.py @@ -1047,37 +1047,7 @@ def _get_field_default(self, field_name: str) -> Any: @classmethod def _get_field_default_gen(cls, field: dataclasses.Field) -> Any: - if field.metadata["betterproto"].optional: - return type(None) - - t = cls._type_hint(field.name) - - is_310_union = isinstance(t, _types_UnionType) - if hasattr(t, "__origin__") or is_310_union: - if is_310_union or t.__origin__ is Union: - # This is an optional field (either wrapped, or using proto3 - # field presence). For setting the default we really don't care - # what kind of field it is. - return type(None) - if t.__origin__ is list: - # This is some kind of list (repeated) field. - return list - if t.__origin__ is dict: - # This is some kind of map (dict in Python). - return dict - return t - if issubclass(t, Enum): - # Enums always default to zero. - return t.try_value - if t is datetime: - # Offsets are relative to 1970-01-01T00:00:00Z - return datetime_default_gen - # In proto 3, message fields are always optional - if issubclass(t, Message): - return type(None) - # This is either a primitive scalar or another message type. Calling - # it should result in its zero value. - return t + return field.default_factory def _postprocess_single( self, wire_type: int, meta: FieldMetadata, field_name: str, value: Any From 753c7bbcaba55601db4e5b589a86d521cc4863c7 Mon Sep 17 00:00:00 2001 From: Adrien Vannson Date: Thu, 12 Dec 2024 17:29:44 +0100 Subject: [PATCH 2/2] Remove useless function --- src/betterproto/__init__.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/betterproto/__init__.py b/src/betterproto/__init__.py index c5dd5504..cf54e0e6 100644 --- a/src/betterproto/__init__.py +++ b/src/betterproto/__init__.py @@ -785,7 +785,7 @@ def __init__(self, cls: Type["Message"]): def _get_default_gen( cls: Type["Message"], fields: Iterable[dataclasses.Field] ) -> Dict[str, Callable[[], Any]]: - return {field.name: cls._get_field_default_gen(field) for field in fields} + return {field.name: field.default_factory for field in fields} @staticmethod def _get_cls_by_field( @@ -1045,10 +1045,6 @@ def _get_field_default(self, field_name: str) -> Any: warnings.filterwarnings("ignore", category=DeprecationWarning) return self._betterproto.default_gen[field_name]() - @classmethod - def _get_field_default_gen(cls, field: dataclasses.Field) -> Any: - return field.default_factory - def _postprocess_single( self, wire_type: int, meta: FieldMetadata, field_name: str, value: Any ) -> Any: