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