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
« prev ^ index » next coverage.py v7.13.0, created at 2026-04-03 18:53 +0000
1"""Binary download install strategy."""
3from __future__ import annotations
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
12class BinaryStrategy(InstallStrategy):
13 """Install strategy for standalone binary tools (brew or manual download)."""
15 def install_type(self) -> str:
16 """Return ``'binary'``."""
17 return "binary"
19 def is_available(self, _env: InstallEnvironment) -> bool:
20 """Binary tools always have a fallback (manual URL)."""
21 return True
23 def check_prerequisites(
24 self,
25 _env: InstallEnvironment,
26 _tool_name: str,
27 ) -> str | None:
28 """Binary tools never fail prerequisite checks.
30 Args:
31 _env: The current install environment (unused).
32 _tool_name: Canonical tool name (unused).
34 Returns:
35 Always None.
36 """
37 return None
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.
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.
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"
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.
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.
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"
92register_strategy(BinaryStrategy())