Skip to content

Commit 140690e

Browse files
committed
feat: allow to disable track while evaluating dependencies
1 parent 5c1847d commit 140690e

4 files changed

Lines changed: 38 additions & 1 deletion

File tree

src/twyn/cli.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,12 @@ def entry_point() -> None:
7676
default=False,
7777
help="Disable use of the trusted packages cache. Always fetch from the source.",
7878
)
79+
@click.option(
80+
"--no-track",
81+
is_flag=True,
82+
default=False,
83+
help="Do not show the progress bar while processing packages.",
84+
)
7985
def run(
8086
config: str,
8187
dependency_file: Optional[str],
@@ -84,6 +90,7 @@ def run(
8490
v: bool,
8591
vv: bool,
8692
no_cache: bool,
93+
no_track: bool,
8794
) -> int:
8895
if v and vv:
8996
raise click.UsageError(
@@ -113,6 +120,7 @@ def run(
113120
selector_method=selector_method,
114121
verbosity=verbosity,
115122
use_cache=not no_cache,
123+
use_track=not no_track,
116124
)
117125
except TwynError as e:
118126
raise CliError(e.message) from e

src/twyn/main.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ def check_dependencies(
3232
dependencies: Optional[set[str]] = None,
3333
verbosity: AvailableLoggingLevels = AvailableLoggingLevels.none,
3434
use_cache: bool = True,
35+
use_track: bool = False,
3536
) -> list[TyposquatCheckResult]:
3637
"""Check if dependencies could be typosquats."""
3738
config_file_handler = FileHandler(config_file or DEFAULT_PROJECT_TOML_FILE)
@@ -52,7 +53,10 @@ def check_dependencies(
5253
normalized_dependencies = normalize_packages(dependencies)
5354

5455
errors: list[TyposquatCheckResult] = []
55-
for dependency in track(normalized_dependencies, description="Processing..."):
56+
dependencies_list = (
57+
track(normalized_dependencies, description="Processing...") if use_track else normalized_dependencies
58+
)
59+
for dependency in dependencies_list:
5660
if dependency in normalized_allowlist_packages:
5761
logger.info("Dependency %s is in the allowlist", dependency)
5862
continue

tests/main/test_cli.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ def test_click_arguments_dependency_file(self, mock_check_dependencies):
8989
selector_method="first-letter",
9090
verbosity=AvailableLoggingLevels.debug,
9191
use_cache=True,
92+
use_track=True,
9293
)
9394
]
9495

@@ -111,6 +112,7 @@ def test_click_arguments_dependency_file_in_different_path(self, mock_check_depe
111112
selector_method=None,
112113
verbosity=AvailableLoggingLevels.none,
113114
use_cache=True,
115+
use_track=True,
114116
)
115117
]
116118

@@ -132,6 +134,7 @@ def test_click_arguments_single_dependency_cli(self, mock_check_dependencies):
132134
selector_method=None,
133135
verbosity=AvailableLoggingLevels.none,
134136
use_cache=True,
137+
use_track=True,
135138
)
136139
]
137140

@@ -165,6 +168,7 @@ def test_click_arguments_multiple_dependencies(self, mock_check_dependencies):
165168
selector_method=None,
166169
verbosity=AvailableLoggingLevels.none,
167170
use_cache=True,
171+
use_track=True,
168172
)
169173
]
170174

@@ -181,6 +185,7 @@ def test_click_arguments_default(self, mock_check_dependencies):
181185
dependencies=None,
182186
verbosity=AvailableLoggingLevels.none,
183187
use_cache=True,
188+
use_track=True,
184189
)
185190
]
186191

tests/main/test_main.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,3 +283,23 @@ def test_get_parsed_dependencies_from_file(self, mock_parse: Mock, mock_get_depe
283283
mock_get_dependency_parser.return_value = RequirementsTxtParser()
284284
mock_parse.return_value = {"boto3"}
285285
assert get_parsed_dependencies_from_file() == {"boto3"}
286+
287+
@patch("twyn.main.TopPyPiReference")
288+
@patch("twyn.main.get_parsed_dependencies_from_file")
289+
def test_track_is_disabled_by_default_when_used_as_package(
290+
self, mock_get_parsed_dependencies_from_file, mock_top_pypi_reference
291+
) -> None:
292+
mock_top_pypi_reference.return_value.get_packages.return_value = {"mypackage"}
293+
mock_get_parsed_dependencies_from_file.return_value = {"my-package"}
294+
with patch("twyn.main.track") as m_track:
295+
check_dependencies("all")
296+
assert m_track.call_count == 0
297+
298+
@patch("twyn.main.TopPyPiReference")
299+
@patch("twyn.main.get_parsed_dependencies_from_file")
300+
def test_track_is_shown_when_enabled(self, mock_get_parsed_dependencies_from_file, mock_top_pypi_reference) -> None:
301+
mock_top_pypi_reference.return_value.get_packages.return_value = {"mypackage"}
302+
mock_get_parsed_dependencies_from_file.return_value = {"my-package"}
303+
with patch("twyn.main.track") as m_track:
304+
check_dependencies("all", use_track=True)
305+
assert m_track.call_count == 1

0 commit comments

Comments
 (0)