From c20b486447ce18302e999a8c00397aea3037e7c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrei=20B=C4=83ncioiu?= Date: Thu, 6 Jun 2024 12:24:14 +0300 Subject: [PATCH 1/2] Fix after review. --- multiversx_sdk/abi/fields.py | 2 ++ multiversx_sdk/abi/serializer.py | 17 +++++++++++------ multiversx_sdk/abi/serializer_test.py | 2 +- multiversx_sdk/abi/token_identifier_value.py | 2 -- 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/multiversx_sdk/abi/fields.py b/multiversx_sdk/abi/fields.py index 28092965..f1afec16 100644 --- a/multiversx_sdk/abi/fields.py +++ b/multiversx_sdk/abi/fields.py @@ -8,6 +8,8 @@ class Field: def __init__(self, name: str, value: SingleValue) -> None: self.name = name self.value = value + + def encode_fields_nested(fields: List[Field], writer: io.BytesIO): for field in fields: try: diff --git a/multiversx_sdk/abi/serializer.py b/multiversx_sdk/abi/serializer.py index 6fd19979..afc719cf 100644 --- a/multiversx_sdk/abi/serializer.py +++ b/multiversx_sdk/abi/serializer.py @@ -1,6 +1,7 @@ from typing import Any, List, Sequence from multiversx_sdk.abi.codec import Codec +from multiversx_sdk.abi.interface import SingleValue from multiversx_sdk.abi.parts import PartsHolder from multiversx_sdk.abi.values_multi import * @@ -30,7 +31,7 @@ def serialize_to_parts(self, input_values: Sequence[Any]) -> List[bytes]: def _do_serialize(self, parts_holder: PartsHolder, input_values: Sequence[Any]): for i, value in enumerate(input_values): if value is None: - raise ValueError("cannot serialize nil value") + raise ValueError("cannot serialize null value") if isinstance(value, OptionalValue): if i != len(input_values) - 1: @@ -48,11 +49,13 @@ def _do_serialize(self, parts_holder: PartsHolder, input_values: Sequence[Any]): raise ValueError("variadic values must be last among input values") self._do_serialize(parts_holder, value.items) - else: + elif isinstance(value, SingleValue): parts_holder.append_empty_part() self._serialize_single_value(parts_holder, value) + else: + raise ValueError(f"cannot serialize value of type: {type(value).__name__}") - def _serialize_single_value(self, parts_holder: PartsHolder, value: Any): + def _serialize_single_value(self, parts_holder: PartsHolder, value: SingleValue): data = self.codec.encode_top_level(value) parts_holder.append_to_last_part(data) @@ -67,7 +70,7 @@ def deserialize_parts(self, parts: Sequence[bytes], output_values: Sequence[Any] def _do_deserialize(self, parts_holder: PartsHolder, output_values: Sequence[Any]): for i, value in enumerate(output_values): if value is None: - raise ValueError("cannot deserialize into nil value") + raise ValueError("cannot deserialize into null value") if isinstance(value, OptionalValue): if i != len(output_values) - 1: @@ -87,8 +90,10 @@ def _do_deserialize(self, parts_holder: PartsHolder, output_values: Sequence[Any raise ValueError("variadic values must be last among output values") self._deserialize_variadic_values(parts_holder, value) - else: + elif isinstance(value, SingleValue): self._deserialize_single_value(parts_holder, value) + else: + raise ValueError(f"cannot deserialize value of type: {type(value).__name__}") def _deserialize_variadic_values(self, parts_holder: PartsHolder, value: VariadicValues): if value.item_creator is None: @@ -101,7 +106,7 @@ def _deserialize_variadic_values(self, parts_holder: PartsHolder, value: Variadi value.items.append(new_item) - def _deserialize_single_value(self, parts_holder: PartsHolder, value: Any): + def _deserialize_single_value(self, parts_holder: PartsHolder, value: SingleValue): part = parts_holder.read_whole_focused_part() self.codec.decode_top_level(part, value) parts_holder.focus_on_next_part() diff --git a/multiversx_sdk/abi/serializer_test.py b/multiversx_sdk/abi/serializer_test.py index b894dbb4..f79b153f 100644 --- a/multiversx_sdk/abi/serializer_test.py +++ b/multiversx_sdk/abi/serializer_test.py @@ -146,7 +146,7 @@ def test_deserialize(): serializer = Serializer(parts_separator="@") # nil destination - with pytest.raises(ValueError, match="^cannot deserialize into nil value$"): + with pytest.raises(ValueError, match="^cannot deserialize into null value$"): serializer.deserialize("", [None]) # u8 diff --git a/multiversx_sdk/abi/token_identifier_value.py b/multiversx_sdk/abi/token_identifier_value.py index 74266183..d737a37c 100644 --- a/multiversx_sdk/abi/token_identifier_value.py +++ b/multiversx_sdk/abi/token_identifier_value.py @@ -1,5 +1,3 @@ - - from typing import Any from multiversx_sdk.abi.string_value import StringValue From 02ebcd2180ee2284c9aa6e2e17c15b442bcae614 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrei=20B=C4=83ncioiu?= Date: Thu, 6 Jun 2024 12:31:32 +0300 Subject: [PATCH 2/2] Fix after review. --- multiversx_sdk/abi/codec.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/multiversx_sdk/abi/codec.py b/multiversx_sdk/abi/codec.py index fb9dd6cc..49aa2d87 100644 --- a/multiversx_sdk/abi/codec.py +++ b/multiversx_sdk/abi/codec.py @@ -1,6 +1,5 @@ import io -from typing import Any from multiversx_sdk.abi.interface import SingleValue @@ -14,12 +13,12 @@ def encode_nested(self, value: SingleValue) -> bytes: value.encode_nested(buffer) return buffer.getvalue() - def encode_top_level(self, value: Any) -> bytes: + def encode_top_level(self, value: SingleValue) -> bytes: buffer = io.BytesIO() value.encode_top_level(buffer) return buffer.getvalue() - def decode_nested(self, data: bytes, value: Any) -> None: + def decode_nested(self, data: bytes, value: SingleValue) -> None: reader = io.BytesIO(data) try: @@ -27,7 +26,7 @@ def decode_nested(self, data: bytes, value: Any) -> None: except ValueError as e: raise ValueError(f"cannot decode (nested) {type(value)}, because of: {e}") - def decode_top_level(self, data: bytes, value: Any) -> None: + def decode_top_level(self, data: bytes, value: SingleValue) -> None: try: value.decode_top_level(data) except ValueError as e: