From 57bc0de32d14f1cb2b0dca50564f0ecce2bafe5a Mon Sep 17 00:00:00 2001 From: Jerry Date: Mon, 20 Jan 2025 15:31:26 -0800 Subject: [PATCH] Fix failed tests in ^3.11 --- .github/workflows/main.yml | 2 +- pycardano/serialization.py | 14 +++++++++++++- test/pycardano/test_serialization.py | 18 ------------------ 3 files changed, 14 insertions(+), 20 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 9a41be30..9b01d2d6 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -14,7 +14,7 @@ jobs: strategy: matrix: os: [ubuntu-latest, macos-latest] - python-version: ['3.8', '3.9', '3.10', '3.11'] + python-version: ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13'] steps: - uses: actions/checkout@v4 diff --git a/pycardano/serialization.py b/pycardano/serialization.py index 51a60f35..efbefe93 100644 --- a/pycardano/serialization.py +++ b/pycardano/serialization.py @@ -543,9 +543,21 @@ def _restore_typed_primitive( Union[:const:`Primitive`, CBORSerializable]: A CBOR primitive or a CBORSerializable. """ + is_cbor_serializable = False + try: + is_cbor_serializable = issubclass(t, CBORSerializable) + except TypeError: + # Handle the case when t is a generic alias + origin = typing.get_origin(t) + if origin is not None: + try: + is_cbor_serializable = issubclass(origin, CBORSerializable) + except TypeError: + pass + if t is Any or (t in PRIMITIVE_TYPES and isinstance(v, t)): return v - elif isclass(t) and issubclass(t, CBORSerializable): + elif is_cbor_serializable: if "type_args" in getfullargspec(t.from_primitive).args: args = typing.get_args(t) return t.from_primitive(v, type_args=args) diff --git a/test/pycardano/test_serialization.py b/test/pycardano/test_serialization.py index 7d704bf6..55c13282 100644 --- a/test/pycardano/test_serialization.py +++ b/test/pycardano/test_serialization.py @@ -622,24 +622,6 @@ def test_ordered_set_with_complex_types(): vkey_witnesses=NonEmptyOrderedSet[VerificationKeyWitness]([witness]) ) - # # Deserialize an OrderedSet[int] - # data = [1, 2, 3] - # ordered_set = OrderedSet[int].from_primitive(data) - # print(ordered_set) # Output: OrderedSet([1, 2, 3]) - # - # # Deserialize an OrderedSet[MyCBORClass] - # class MyCBORClass(ArrayCBORSerializable): - # a: int - # - # @dataclass - # class MyCBORClass2(ArrayCBORSerializable): - # a: OrderedSet[MyCBORClass] - # - # - # data = [{(1,), (2,)}] - # ordered_set = MyCBORClass2.from_primitive(data) - # print(ordered_set) # Output: OrderedSet([MyCBORClass(), MyCBORClass()]) - # Test serialization/deserialization primitive = witness_set.to_primitive() restored = TransactionWitnessSet.from_primitive(primitive)