refactor to use new machinery a little more

This commit is contained in:
Michael Hudson-Doyle 2023-09-04 16:15:29 +12:00
parent a594b09f9f
commit 8e9cf1f3c3
1 changed files with 17 additions and 12 deletions

View File

@ -140,6 +140,11 @@ class CapabilityInfo:
self.allowed.sort()
self.disallowed.sort()
def copy(self) -> "CapabilityInfo":
return CapabilityInfo(
allowed=list(self.allowed), disallowed=list(self.disallowed)
)
def disallow_if(
self,
filter: Callable[[GuidedCapability], bool],
@ -160,6 +165,13 @@ class CapabilityInfo:
new_allowed.append(cap)
self.allowed = new_allowed
def disallow_all(
self,
reason: GuidedDisallowedCapabilityReason,
message: Optional[str] = None,
) -> None:
self.disallow_if(lambda cap: True, reason, message)
@attr.s(auto_attribs=True)
class VariationInfo:
@ -180,22 +192,15 @@ class VariationInfo:
gap: gaps.Gap,
install_min: int,
) -> CapabilityInfo:
r = CapabilityInfo()
r.disallowed = list(self.capability_info.disallowed)
if gap is None:
gap_size = 0
else:
gap_size = gap.size
if self.capability_info.allowed and gap_size < install_min:
for capability in self.capability_info.allowed:
r.disallowed.append(
GuidedDisallowedCapability(
capability=capability,
reason=GuidedDisallowedCapabilityReason.TOO_SMALL,
)
)
else:
r.allowed = list(self.capability_info.allowed)
r = self.capability_info.copy()
if gap_size < install_min:
r.disallow_all(
reason=GuidedDisallowedCapabilityReason.TOO_SMALL,
)
return r
@classmethod