From df1ba911b75da04eec56b6b39bd93a3779d51b24 Mon Sep 17 00:00:00 2001 From: atomicmac <156139337+atomicmac@users.noreply.github.com> Date: Fri, 29 Mar 2024 07:08:02 -0700 Subject: [PATCH] Add betterproto.Enum __copy__ and __deepcopy__ implementations (#566) * Add betterproto.Enum __copy__ and __deepcopy__ implementations betterproto.Enum is missing __copy__ and __deepcopy__ implementations, which were recently added to enum.Enum, see https://github.com/python/cpython/issues/106602 This fixes the bug where betterproto messages with Enums nested within cannot be copied via copy.deepcopy. * Type hint on Enum.__copy__ Co-authored-by: James Hilton-Balfe * Type hint on Enum.__deepcopy__ Co-authored-by: James Hilton-Balfe --------- Co-authored-by: James Hilton-Balfe --- src/betterproto/enum.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/betterproto/enum.py b/src/betterproto/enum.py index 5298322..5302d45 100644 --- a/src/betterproto/enum.py +++ b/src/betterproto/enum.py @@ -156,6 +156,12 @@ class Enum(IntEnum if TYPE_CHECKING else int, metaclass=EnumType): f"{self.__class__.__name__} Cannot delete a member's attributes." ) + def __copy__(self) -> Self: + return self + + def __deepcopy__(self, memo: Any) -> Self: + return self + @classmethod def try_value(cls, value: int = 0) -> Self: """Return the value which corresponds to the value.