From 6a7cc679dd1272352d551955cb7824f18e0ac0c1 Mon Sep 17 00:00:00 2001 From: Arjan Zijderveld <5286904+arjanz@users.noreply.github.com> Date: Thu, 18 Jul 2024 16:09:32 +0200 Subject: [PATCH] Tuple single value compatibility PolkadotJS --- scalecodec/types.py | 10 +++++++--- test/test_tuple.py | 7 +++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/scalecodec/types.py b/scalecodec/types.py index 2838fbf..c341e45 100644 --- a/scalecodec/types.py +++ b/scalecodec/types.py @@ -288,13 +288,17 @@ def decode(self, data: ScaleBytes) -> tuple: scale_obj = scale_def.new() scale_obj.decode(data) + + if len(self.values) == 1: + return scale_obj + value += (scale_obj,) return value - def serialize(self, value: tuple) -> tuple: - if len(value) == 1: - return value[0].value + def serialize(self, value: Union[tuple, ScaleType]) -> tuple: + if issubclass(value.__class__, ScaleType): + return value.value return tuple((i.value for i in value)) diff --git a/test/test_tuple.py b/test/test_tuple.py index 57fb8ec..60450d6 100644 --- a/test/test_tuple.py +++ b/test/test_tuple.py @@ -42,6 +42,13 @@ def test_tuple_deserialize(self): obj.deserialize((3, 2)) self.assertEqual(obj.value, (3, 2)) + def test_tuple_single_value(self): + # PolkadotJS compatilibity + obj = Tuple(U8).new() + obj.decode(ScaleBytes('0x03')) + self.assertEqual(obj.value, 3) + self.assertEqual(obj.value_object, U8.new(value=3)) + if __name__ == '__main__': unittest.main()