|
1 | 1 | import logging |
| 2 | +from collections.abc import Iterable |
2 | 3 | from typing import Optional, Union |
3 | 4 |
|
4 | | -from rich.progress import track |
5 | | - |
6 | 5 | from twyn.base.constants import ( |
7 | 6 | SELECTOR_METHOD_MAPPING, |
8 | 7 | PackageEcosystems, |
@@ -59,6 +58,7 @@ def check_dependencies( |
59 | 58 | Returns: |
60 | 59 | TyposquatCheckResultList: A list of results indicating which dependencies, if any, are suspected typosquats. |
61 | 60 | """ |
| 61 | + |
62 | 62 | config = _get_config( |
63 | 63 | load_config_from_file=load_config_from_file, |
64 | 64 | config_file=config_file, |
@@ -88,21 +88,31 @@ def check_dependencies( |
88 | 88 | normalized_dependencies = top_package_reference.normalize_packages(dependencies_to_check) |
89 | 89 |
|
90 | 90 | typos_list = TyposquatCheckResultList() |
91 | | - dependencies_list = ( |
92 | | - track(normalized_dependencies, description="Processing...") if show_progress_bar else normalized_dependencies |
93 | | - ) |
94 | | - for dependency in dependencies_list: |
| 91 | + |
| 92 | + for dependency in _get_dependencies_list(normalized_dependencies, show_progress_bar): |
95 | 93 | if dependency in normalized_allowlist_packages: |
96 | 94 | logger.info("Dependency %s is in the allowlist", dependency) |
97 | 95 | continue |
98 | 96 |
|
99 | 97 | logger.info("Analyzing %s", dependency) |
100 | 98 | if dependency not in trusted_packages and (typosquat_results := trusted_packages.get_typosquat(dependency)): |
101 | 99 | typos_list.errors.append(typosquat_results) |
102 | | - |
103 | 100 | return typos_list |
104 | 101 |
|
105 | 102 |
|
| 103 | +def _get_dependencies_list(normalized_dependencies: set[str], show_progress_bar: bool) -> Iterable[str]: |
| 104 | + try: |
| 105 | + from rich.progress import track # noqa: PLC0415 |
| 106 | + |
| 107 | + return ( |
| 108 | + track(normalized_dependencies, description="Processing...") |
| 109 | + if show_progress_bar |
| 110 | + else normalized_dependencies |
| 111 | + ) |
| 112 | + except ImportError: |
| 113 | + return normalized_dependencies |
| 114 | + |
| 115 | + |
106 | 116 | def _get_selector_method(selector_method: str) -> SelectorMethod: |
107 | 117 | if selector_method not in SELECTOR_METHOD_MAPPING: |
108 | 118 | InvalidSelectorMethodError("Invalid selector method") |
|
0 commit comments