diff --git a/.github/workflows/build-wheel-tree.yaml b/.github/workflows/build-wheel-tree.yaml index 7cf93ed..e53c513 100644 --- a/.github/workflows/build-wheel-tree.yaml +++ b/.github/workflows/build-wheel-tree.yaml @@ -4,7 +4,7 @@ on: branches: - main tags: - - '**' + - "**" pull_request: concurrency: @@ -25,7 +25,7 @@ jobs: fetch-depth: 0 - name: Create venv - run: /opt/python/cp38-cp38/bin/python3 -m venv venv + run: /opt/python/cp310-cp310/bin/python3 -m venv venv - name: Create Wheels run: | diff --git a/.github/workflows/build-wheels.yaml b/.github/workflows/build-wheels.yaml index 00aca57..fbd686a 100644 --- a/.github/workflows/build-wheels.yaml +++ b/.github/workflows/build-wheels.yaml @@ -32,7 +32,7 @@ jobs: fetch-depth: 0 - name: Create venv - run: /opt/python/cp38-cp38/bin/python3 -m venv venv + run: /opt/python/cp310-cp310/bin/python3 -m venv venv - name: Create Wheel run: | diff --git a/hsms/clvm_serde/__init__.py b/hsms/clvm_serde/__init__.py index cd4a121..093e93c 100644 --- a/hsms/clvm_serde/__init__.py +++ b/hsms/clvm_serde/__init__.py @@ -1,4 +1,5 @@ -from dataclasses import is_dataclass, fields, MISSING +from dataclasses import MISSING, fields, is_dataclass +from types import UnionType from typing import Any, Callable, Optional, Tuple, Type, Union, get_type_hints from chia_base.meta.type_tree import ArgsType, CompoundLookup, OriginArgsType, TypeTree @@ -115,6 +116,7 @@ def ser(item): tuple: serialize_for_tuple, tuple_frugal: ser_for_tuple_frugal, Union: serialize_for_optional, + UnionType: serialize_for_optional, } @@ -342,6 +344,7 @@ def deserialize_optional(p: Program): tuple: deser_for_tuple, tuple_frugal: de_for_tuple_frugal, Union: deser_for_optional, + UnionType: deser_for_optional, } diff --git a/tests/test_clvm_serde.py b/tests/test_clvm_serde.py index ea05159..6a58740 100644 --- a/tests/test_clvm_serde.py +++ b/tests/test_clvm_serde.py @@ -31,7 +31,8 @@ from .legacy.unsigned_spend import UnsignedSpend as LegacyUS -def test_ser(): +@pytest.mark.parametrize("pep604", [True, False]) +def test_ser(pep604: bool): tpb = to_program_for_type(bytes) fpb = from_program_for_type(bytes) tps = to_program_for_type(str) @@ -134,9 +135,16 @@ class Foo: f1 = fp(p) assert f1 == foo - @dataclass - class Foo: - a: Optional[int] = field(metadata=dict(key="a")) + if pep604: + + @dataclass + class Foo: + a: int | None = field(metadata=dict(key="a")) + else: + + @dataclass + class Foo: + a: Optional[int] = field(metadata=dict(key="a")) tp = to_program_for_type(Foo) fp = from_program_for_type(Foo) @@ -151,9 +159,16 @@ class Foo: p1 = tp(foo) assert p1 == p - @dataclass - class Foo: - a: Optional[List[int]] = field(metadata=dict(key="a")) + if pep604: + + @dataclass + class Foo: + a: List[int] | None = field(metadata=dict(key="a")) + else: + + @dataclass + class Foo: + a: Optional[List[int]] = field(metadata=dict(key="a")) tp = to_program_for_type(Foo) fp = from_program_for_type(Foo)