From b422c4e339f3315b69407f0186c25448f424f98a Mon Sep 17 00:00:00 2001 From: Etienne Wallet <116115319+EtienneWallet@users.noreply.github.com> Date: Fri, 17 Jan 2025 18:08:10 +0100 Subject: [PATCH 1/4] if names_to_discriminants is set, include the name in the payload when calling `get_payload` --- multiversx_sdk/abi/enum_value.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/multiversx_sdk/abi/enum_value.py b/multiversx_sdk/abi/enum_value.py index ee151a7f..1fce88cf 100644 --- a/multiversx_sdk/abi/enum_value.py +++ b/multiversx_sdk/abi/enum_value.py @@ -144,6 +144,11 @@ def get_payload(self) -> Any: setattr(obj, ENUM_DISCRIMINANT_FIELD_NAME, self.discriminant) + if self.names_to_discriminants is not None: + for name, discriminant in self.names_to_discriminants.items(): + if discriminant == self.discriminant: + setattr(obj, ENUM_NAME_FIELD_NAME, name) + return obj def __eq__(self, other: Any) -> bool: From 51180da1434677e8d2514fe4051ee35a0b801dd1 Mon Sep 17 00:00:00 2001 From: Etienne Wallet <116115319+EtienneWallet@users.noreply.github.com> Date: Fri, 17 Jan 2025 18:08:16 +0100 Subject: [PATCH 2/4] adjust tests to cover the name if the returned payload --- multiversx_sdk/abi/enum_value_test.py | 10 +++++----- multiversx_sdk/core/transaction_events_parser_test.py | 1 + 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/multiversx_sdk/abi/enum_value_test.py b/multiversx_sdk/abi/enum_value_test.py index 0c98ac80..b1b0e8f6 100644 --- a/multiversx_sdk/abi/enum_value_test.py +++ b/multiversx_sdk/abi/enum_value_test.py @@ -97,7 +97,7 @@ def test_set_payload_and_get_payload_using_names(): value = EnumValue(fields_provider=lambda discriminant: [], names_to_discriminants={"TypeB": 42}) value.set_payload("TypeB") assert value.discriminant == 42 - assert value.get_payload() == SimpleNamespace(__discriminant__=42) + assert value.get_payload() == SimpleNamespace(__discriminant__=42, __name__="TypeB") # With fields (from SimpleNamespace, object, dictionary or list) def provide_fields(discriminant: int) -> list[Field]: @@ -124,7 +124,7 @@ def provide_fields(discriminant: int) -> list[Field]: value.set_payload(SimpleNamespace(__name__="TypeA", a=1, b=2)) assert value.discriminant == 41 assert value.fields == [Field("a", U32Value(1)), Field("b", BigUIntValue(2))] - assert value.get_payload() == SimpleNamespace(__discriminant__=41, a=1, b=2) + assert value.get_payload() == SimpleNamespace(__discriminant__=41, __name__="TypeA", a=1, b=2) assert int(value.get_payload()) == 41 class Payload: @@ -137,19 +137,19 @@ def __init__(self, c: int, d: int): value.set_payload(Payload(3, 4)) assert value.discriminant == 42 assert value.fields == [Field("c", U32Value(3)), Field("d", BigUIntValue(4))] - assert value.get_payload() == SimpleNamespace(__discriminant__=42, c=3, d=4) + assert value.get_payload() == SimpleNamespace(__discriminant__=42, __name__="TypeB", c=3, d=4) assert int(value.get_payload()) == 42 # Then, from dictionary value.set_payload({"__name__": "TypeC", "e": 5, "f": 6}) assert value.discriminant == 43 assert value.fields == [Field("e", U32Value(5)), Field("f", BigUIntValue(6))] - assert value.get_payload() == SimpleNamespace(__discriminant__=43, e=5, f=6) + assert value.get_payload() == SimpleNamespace(__discriminant__=43, __name__="TypeC", e=5, f=6) assert int(value.get_payload()) == 43 # Finally, from list (first element is the name) value.set_payload(["TypeD", 7, 8]) assert value.discriminant == 44 assert value.fields == [Field("g", U32Value(7)), Field("h", BigUIntValue(8))] - assert value.get_payload() == SimpleNamespace(__discriminant__=44, g=7, h=8) + assert value.get_payload() == SimpleNamespace(__discriminant__=44, __name__="TypeD", g=7, h=8) assert int(value.get_payload()) == 44 diff --git a/multiversx_sdk/core/transaction_events_parser_test.py b/multiversx_sdk/core/transaction_events_parser_test.py index 069c59f1..d446259b 100644 --- a/multiversx_sdk/core/transaction_events_parser_test.py +++ b/multiversx_sdk/core/transaction_events_parser_test.py @@ -135,6 +135,7 @@ def test_parse_multisig_start_perform_action(): arguments=[bytes.fromhex("07")], ), "__discriminant__": 5, + "__name__": "SendTransferExecuteEgld" } ), signers=[ From 0b071b164272f86e8899c2f65f5cf5306ef8dc33 Mon Sep 17 00:00:00 2001 From: Etienne Wallet <116115319+EtienneWallet@users.noreply.github.com> Date: Tue, 21 Jan 2025 08:02:40 +0100 Subject: [PATCH 3/4] fix network test --- multiversx_sdk/core/transaction_events_parser_test.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/multiversx_sdk/core/transaction_events_parser_test.py b/multiversx_sdk/core/transaction_events_parser_test.py index d446259b..63093a6b 100644 --- a/multiversx_sdk/core/transaction_events_parser_test.py +++ b/multiversx_sdk/core/transaction_events_parser_test.py @@ -135,7 +135,7 @@ def test_parse_multisig_start_perform_action(): arguments=[bytes.fromhex("07")], ), "__discriminant__": 5, - "__name__": "SendTransferExecuteEgld" + "__name__": "SendTransferExecuteEgld", } ), signers=[ @@ -285,6 +285,7 @@ def test_multisig_start_perform_action(): } ), "__discriminant__": 5, + "__name__": "SendTransferExecuteEgld", }, ), signers=[ From 1683bb551e185217deead6785605eb16a17e2a33 Mon Sep 17 00:00:00 2001 From: Etienne Wallet <116115319+EtienneWallet@users.noreply.github.com> Date: Tue, 21 Jan 2025 18:12:34 +0100 Subject: [PATCH 4/4] fix custom enum test --- multiversx_sdk/abi/abi_test.py | 1 + 1 file changed, 1 insertion(+) diff --git a/multiversx_sdk/abi/abi_test.py b/multiversx_sdk/abi/abi_test.py index dea18264..916a4fe6 100644 --- a/multiversx_sdk/abi/abi_test.py +++ b/multiversx_sdk/abi/abi_test.py @@ -474,6 +474,7 @@ def test_decode_custom_enum(): ), ) setattr(expected_output, "__discriminant__", 5) + setattr(expected_output, "__name__", "SendTransferExecuteEgld") assert decoded_type == expected_output