Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 1 addition & 35 deletions src/betterproto/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down Expand Up @@ -1045,40 +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:
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

def _postprocess_single(
self, wire_type: int, meta: FieldMetadata, field_name: str, value: Any
) -> Any:
Expand Down
Loading