Coverage for britney2/excusedeps.py: 95%
32 statements
« prev ^ index » next coverage.py v7.6.0, created at 2026-06-17 09:00 +0000
« prev ^ index » next coverage.py v7.6.0, created at 2026-06-17 09:00 +0000
1from dataclasses import dataclass, field
2from typing import TYPE_CHECKING, Optional, Union
4from britney2.policies import PolicyVerdict
6if TYPE_CHECKING: 6 ↛ 7line 6 didn't jump to line 7 because the condition on line 6 was never true
7 from . import DependencyType, PackageId
10@dataclass(slots=True)
11class DependencySpec:
12 deptype: "DependencyType"
13 architecture: str | None = field(default=None)
15 def __post_init__(self) -> None:
16 assert self.architecture != "all", "all not allowed for DependencySpec"
19class DependencyState:
20 dep: Union[str, "PackageId"] | None
22 def __init__(self, dep: Union[str, "PackageId"]) -> None:
23 """State of a dependency
25 :param dep: the excuse that we are depending on
27 """
28 self.valid = True
29 self.verdict = PolicyVerdict.PASS
30 self.dep = dep
32 @property
33 def possible(self) -> bool:
34 return True
36 def invalidate(self, verdict: PolicyVerdict) -> None:
37 self.valid = False
38 self.verdict = PolicyVerdict.worst_of(verdict)
41class ImpossibleDependencyState(DependencyState):
42 """Object tracking an impossible dependency"""
44 def __init__(self, verdict: PolicyVerdict, desc: str) -> None:
45 """
47 :param desc: description of the impossible dependency
49 """
50 self.valid = False
51 self.verdict = verdict
52 self.desc = desc
53 self.dep = None
55 @property
56 def possible(self) -> bool:
57 return False