Coverage for lintro / tools / core / install_strategies / binary_strategy.py: 92%

26 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2026-04-03 18:53 +0000

1"""Binary download install strategy.""" 

2 

3from __future__ import annotations 

4 

5from lintro.enums.install_context import PackageManager 

6from lintro.tools.core.install_strategies.base import InstallStrategy 

7from lintro.tools.core.install_strategies.brew_names import BREW_FORMULA_NAMES 

8from lintro.tools.core.install_strategies.environment import InstallEnvironment 

9from lintro.tools.core.install_strategies.registry import register_strategy 

10 

11 

12class BinaryStrategy(InstallStrategy): 

13 """Install strategy for standalone binary tools (brew or manual download).""" 

14 

15 def install_type(self) -> str: 

16 """Return ``'binary'``.""" 

17 return "binary" 

18 

19 def is_available(self, _env: InstallEnvironment) -> bool: 

20 """Binary tools always have a fallback (manual URL).""" 

21 return True 

22 

23 def check_prerequisites( 

24 self, 

25 _env: InstallEnvironment, 

26 _tool_name: str, 

27 ) -> str | None: 

28 """Binary tools never fail prerequisite checks. 

29 

30 Args: 

31 _env: The current install environment (unused). 

32 _tool_name: Canonical tool name (unused). 

33 

34 Returns: 

35 Always None. 

36 """ 

37 return None 

38 

39 def install_hint( 

40 self, 

41 env: InstallEnvironment, 

42 tool_name: str, 

43 _tool_version: str, 

44 install_package: str | None, 

45 _install_component: str | None, 

46 ) -> str: 

47 """Generate binary install hint. 

48 

49 Args: 

50 env: The current install environment. 

51 tool_name: Canonical tool name. 

52 _tool_version: Expected version (unused). 

53 install_package: Package name override. 

54 _install_component: Unused for binary. 

55 

56 Returns: 

57 Shell command string. 

58 """ 

59 pkg = install_package or tool_name 

60 if env.has(PackageManager.BREW): 

61 brew_pkg = BREW_FORMULA_NAMES.get(tool_name, tool_name) 

62 return f"brew install {brew_pkg}" 

63 return f"See https://github.com/search?q={pkg}+releases" 

64 

65 def upgrade_hint( 

66 self, 

67 env: InstallEnvironment, 

68 tool_name: str, 

69 _tool_version: str, 

70 install_package: str | None, 

71 _install_component: str | None, 

72 ) -> str: 

73 """Generate binary upgrade hint. 

74 

75 Args: 

76 env: The current install environment. 

77 tool_name: Canonical tool name. 

78 _tool_version: Expected version (unused). 

79 install_package: Package name override. 

80 _install_component: Unused for binary. 

81 

82 Returns: 

83 Shell command string. 

84 """ 

85 pkg = install_package or tool_name 

86 if env.has(PackageManager.BREW): 

87 brew_pkg = BREW_FORMULA_NAMES.get(tool_name, tool_name) 

88 return f"brew upgrade {brew_pkg}" 

89 return f"See https://github.com/search?q={pkg}+releases" 

90 

91 

92register_strategy(BinaryStrategy())