Coverage for britney2/excusedeps.py: 95%

32 statements  

« 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 

3 

4from britney2.policies import PolicyVerdict 

5 

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 

8 

9 

10@dataclass(slots=True) 

11class DependencySpec: 

12 deptype: "DependencyType" 

13 architecture: str | None = field(default=None) 

14 

15 def __post_init__(self) -> None: 

16 assert self.architecture != "all", "all not allowed for DependencySpec" 

17 

18 

19class DependencyState: 

20 dep: Union[str, "PackageId"] | None 

21 

22 def __init__(self, dep: Union[str, "PackageId"]) -> None: 

23 """State of a dependency 

24 

25 :param dep: the excuse that we are depending on 

26 

27 """ 

28 self.valid = True 

29 self.verdict = PolicyVerdict.PASS 

30 self.dep = dep 

31 

32 @property 

33 def possible(self) -> bool: 

34 return True 

35 

36 def invalidate(self, verdict: PolicyVerdict) -> None: 

37 self.valid = False 

38 self.verdict = PolicyVerdict.worst_of(verdict) 

39 

40 

41class ImpossibleDependencyState(DependencyState): 

42 """Object tracking an impossible dependency""" 

43 

44 def __init__(self, verdict: PolicyVerdict, desc: str) -> None: 

45 """ 

46 

47 :param desc: description of the impossible dependency 

48 

49 """ 

50 self.valid = False 

51 self.verdict = verdict 

52 self.desc = desc 

53 self.dep = None 

54 

55 @property 

56 def possible(self) -> bool: 

57 return False