diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index 5bcfbd4e7a..10de3498a9 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -13,7 +13,7 @@ jobs: strategy: matrix: os: [ubuntu-20.04, windows-2019] - python-version: ["3.8", "3.9", "3.10"] + python-version: ["3.8", "3.9", "3.10", "3.11-dev"] fail-fast: false steps: - name: Checkout repository to $GITHUB_WORKSPACE @@ -58,4 +58,4 @@ jobs: - name: Run ShellCheck if: runner.os == 'Linux' && matrix.python-version == '3.8' - uses: ludeeus/action-shellcheck@0.5.0 \ No newline at end of file + uses: ludeeus/action-shellcheck@0.5.0 diff --git a/lisa/environment.py b/lisa/environment.py index 76448426bb..d0656e29fd 100644 --- a/lisa/environment.py +++ b/lisa/environment.py @@ -82,7 +82,7 @@ def _get_environment_id() -> int: class EnvironmentMessage(MessageBase): type: str = "Environment" name: str = "" - runbook: schema.Environment = schema.Environment() + runbook: schema.Environment = field(default_factory=schema.Environment) status: EnvironmentStatus = EnvironmentStatus.New diff --git a/lisa/features/nvme.py b/lisa/features/nvme.py index e8e3c304ca..b908d5656f 100644 --- a/lisa/features/nvme.py +++ b/lisa/features/nvme.py @@ -3,6 +3,7 @@ import re from dataclasses import dataclass, field +from functools import partial from typing import Any, List, Type from dataclasses_json import dataclass_json @@ -93,7 +94,7 @@ def _get_device_from_ls(self, force_run: bool = False) -> None: class NvmeSettings(FeatureSettings): type: str = "Nvme" disk_count: search_space.CountSpace = field( - default=search_space.IntRange(min=0), + default_factory=partial(search_space.IntRange, min=0), metadata=field_metadata(decoder=search_space.decode_count_space), ) diff --git a/lisa/schema.py b/lisa/schema.py index fffc80fec1..aeaaaa8b17 100644 --- a/lisa/schema.py +++ b/lisa/schema.py @@ -714,21 +714,21 @@ class NodeSpace(search_space.RequirementMixin, TypedSchema, ExtendableSchemaMixi name: str = "" is_default: bool = field(default=False) node_count: search_space.CountSpace = field( - default=search_space.IntRange(min=1), + default_factory=partial(search_space.IntRange, min=1), metadata=field_metadata(decoder=search_space.decode_count_space), ) core_count: search_space.CountSpace = field( - default=search_space.IntRange(min=1), + default_factory=partial(search_space.IntRange, min=1), metadata=field_metadata(decoder=search_space.decode_count_space), ) memory_mb: search_space.CountSpace = field( - default=search_space.IntRange(min=512), + default_factory=partial(search_space.IntRange, min=512), metadata=field_metadata(decoder=search_space.decode_count_space), ) disk: Optional[DiskOptionSettings] = None network_interface: Optional[NetworkInterfaceOptionSettings] = None gpu_count: search_space.CountSpace = field( - default=search_space.IntRange(min=0), + default_factory=partial(search_space.IntRange, min=0), metadata=field_metadata(decoder=search_space.decode_count_space), ) # all features on requirement should be included. diff --git a/selftests/test_search_space.py b/selftests/test_search_space.py index 070e448c76..0c58ccb6c9 100644 --- a/selftests/test_search_space.py +++ b/selftests/test_search_space.py @@ -3,7 +3,8 @@ import logging import unittest -from dataclasses import dataclass +from dataclasses import dataclass, field +from functools import partial from typing import Any, List, Optional, TypeVar from lisa.search_space import ( @@ -30,7 +31,7 @@ class MockSchema: @dataclass class MockItem(RequirementMixin): - number: CountSpace = IntRange(min=1, max=5) + number: CountSpace = field(default_factory=partial(IntRange, min=1, max=5)) def check(self, capability: Any) -> ResultReason: assert isinstance(capability, MockItem), f"actual: {type(capability)}"