Skip to content

Commit 08e8a68

Browse files
add getnewargs_ex to Enum, fix pickling (#663)
1 parent 6a65ca9 commit 08e8a68

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

src/betterproto/enum.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,9 @@ def __new__(cls, *, name: Optional[str], value: int) -> Self:
132132
super().__setattr__(self, "value", value)
133133
return self
134134

135+
def __getnewargs_ex__(self) -> Tuple[Tuple[()], Dict[str, Any]]:
136+
return (), {"name": self.name, "value": self.value}
137+
135138
def __str__(self) -> str:
136139
return self.name or "None"
137140

tests/test_pickling.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,11 @@ class Complex(betterproto.Message):
5757
)
5858

5959

60+
class BetterprotoEnum(betterproto.Enum):
61+
UNSPECIFIED = 0
62+
ONE = 1
63+
64+
6065
def complex_msg():
6166
return Complex(
6267
foo_str="yep",
@@ -201,3 +206,11 @@ def use_cache():
201206
.string_value
202207
== "world"
203208
)
209+
210+
211+
def test_pickle_enum():
212+
enum = BetterprotoEnum.ONE
213+
assert unpickled(enum) == enum
214+
215+
enum = BetterprotoEnum.UNSPECIFIED
216+
assert unpickled(enum) == enum

0 commit comments

Comments
 (0)