Best Python code snippet using lisa_python
features.py
Source:features.py  
...805            ),806            "data_disk_size",807        )808        result.merge(809            self._check_has_resource_disk(810                self.has_resource_disk, capability.has_resource_disk811            ),812            "has_resource_disk",813        )814        result.merge(815            search_space.check_countspace(816                self.max_data_disk_count, capability.max_data_disk_count817            ),818            "max_data_disk_count",819        )820        return result821    def _call_requirement_method(self, method_name: str, capability: Any) -> Any:822        assert isinstance(823            capability, AzureDiskOptionSettings824        ), f"actual: {type(capability)}"825        assert (826            capability.disk_type827        ), "capability should have at least one disk type, but it's None"828        value = AzureDiskOptionSettings()829        super_value = schema.DiskOptionSettings._call_requirement_method(830            self, method_name, capability831        )832        set_filtered_fields(super_value, value, ["data_disk_count"])833        cap_disk_type = capability.disk_type834        if isinstance(cap_disk_type, search_space.SetSpace):835            assert (836                len(cap_disk_type) > 0837            ), "capability should have at least one disk type, but it's empty"838        elif isinstance(cap_disk_type, schema.DiskType):839            cap_disk_type = search_space.SetSpace[schema.DiskType](840                is_allow_set=True, items=[cap_disk_type]841            )842        else:843            raise LisaException(844                f"unknown disk type on capability, type: {cap_disk_type}"845            )846        value.disk_type = getattr(search_space, f"{method_name}_setspace_by_priority")(847            self.disk_type, capability.disk_type, schema.disk_type_priority848        )849        # below values affect data disk only.850        if self.data_disk_count is not None or capability.data_disk_count is not None:851            value.data_disk_count = getattr(search_space, f"{method_name}_countspace")(852                self.data_disk_count, capability.data_disk_count853            )854        if (855            self.max_data_disk_count is not None856            or capability.max_data_disk_count is not None857        ):858            value.max_data_disk_count = getattr(859                search_space, f"{method_name}_countspace"860            )(self.max_data_disk_count, capability.max_data_disk_count)861        # The Ephemeral doesn't support data disk, but it needs a value. And it862        # doesn't need to calculate on intersect863        value.data_disk_iops = 0864        value.data_disk_size = 0865        if method_name == RequirementMethod.generate_min_capability:866            assert isinstance(867                value.disk_type, schema.DiskType868            ), f"actual: {type(value.disk_type)}"869            disk_type_iops = _disk_size_iops_map.get(value.disk_type, None)870            # ignore unsupported disk type like Ephemeral. It supports only os871            # disk. Calculate for iops, if it has value. If not, try disk size872            if disk_type_iops:873                if isinstance(self.data_disk_iops, int) or (874                    self.data_disk_iops != search_space.IntRange(min=0)875                ):876                    req_disk_iops = search_space.count_space_to_int_range(877                        self.data_disk_iops878                    )879                    cap_disk_iops = search_space.count_space_to_int_range(880                        capability.data_disk_iops881                    )882                    min_iops = max(req_disk_iops.min, cap_disk_iops.min)883                    max_iops = min(req_disk_iops.max, cap_disk_iops.max)884                    value.data_disk_iops = min(885                        iops886                        for iops, _ in disk_type_iops887                        if iops >= min_iops and iops <= max_iops888                    )889                    value.data_disk_size = self._get_disk_size_from_iops(890                        value.data_disk_iops, disk_type_iops891                    )892                elif self.data_disk_size:893                    req_disk_size = search_space.count_space_to_int_range(894                        self.data_disk_size895                    )896                    cap_disk_size = search_space.count_space_to_int_range(897                        capability.data_disk_size898                    )899                    min_size = max(req_disk_size.min, cap_disk_size.min)900                    max_size = min(req_disk_size.max, cap_disk_size.max)901                    value.data_disk_iops = min(902                        iops903                        for iops, disk_size in disk_type_iops904                        if disk_size >= min_size and disk_size <= max_size905                    )906                    value.data_disk_size = self._get_disk_size_from_iops(907                        value.data_disk_iops, disk_type_iops908                    )909                else:910                    # if req is not specified, query minimum value.911                    cap_disk_size = search_space.count_space_to_int_range(912                        capability.data_disk_size913                    )914                    value.data_disk_iops = min(915                        iops916                        for iops, _ in disk_type_iops917                        if iops >= cap_disk_size.min and iops <= cap_disk_size.max918                    )919                    value.data_disk_size = self._get_disk_size_from_iops(920                        value.data_disk_iops, disk_type_iops921                    )922        elif method_name == RequirementMethod.intersect:923            value.data_disk_iops = search_space.intersect_countspace(924                self.data_disk_iops, capability.data_disk_iops925            )926            value.data_disk_size = search_space.intersect_countspace(927                self.data_disk_size, capability.data_disk_size928            )929        # all caching types are supported, so just take the value from requirement.930        value.data_disk_caching_type = self.data_disk_caching_type931        check_result = self._check_has_resource_disk(932            self.has_resource_disk, capability.has_resource_disk933        )934        if not check_result.result:935            raise NotMeetRequirementException("capability doesn't support requirement")936        value.has_resource_disk = capability.has_resource_disk937        return value938    def _get_disk_size_from_iops(939        self, data_disk_iops: int, disk_type_iops: List[Tuple[int, int]]940    ) -> int:941        return next(942            disk_size for iops, disk_size in disk_type_iops if iops == data_disk_iops943        )944    def _check_has_resource_disk(945        self, requirement: Optional[bool], capability: Optional[bool]946    ) -> search_space.ResultReason:947        result = search_space.ResultReason()948        # if requirement is none, capability can be either of True or False949        # else requirement should match capability950        if requirement is not None:951            if capability is None:952                result.add_reason(953                    "if requirements isn't None, capability shouldn't be None"954                )955            else:956                if requirement != capability:957                    result.add_reason(958                        "requirement is a truth value, capability should be exact "...Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
