Skip to content

Commit 37f38e1

Browse files
Do not treat wildcard requirements as exact version pins
Signed-off-by: Ali Zulfiqar <codewithfourtix@gmail.com>
1 parent a841c7c commit 37f38e1

2 files changed

Lines changed: 31 additions & 1 deletion

File tree

src/python_inspector/dependencies.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,12 @@ def get_extra_data_from_requirements(requirements_file="requirements.txt") -> It
5454

5555
def is_requirement_pinned(requirement: Requirement) -> bool:
5656
specifiers = requirement.specifier
57-
return specifiers and len(specifiers) == 1 and next(iter(specifiers)).operator in {"==", "==="}
57+
if len(specifiers) != 1:
58+
return False
59+
specifier = next(iter(specifiers))
60+
return specifier.operator == "===" or (
61+
specifier.operator == "==" and not specifier.version.endswith(".*")
62+
)
5863

5964

6065
def get_dependency(specifier) -> DependentPackage:

tests/test_requirement_pins.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import pytest
2+
3+
from packvers.requirements import Requirement
4+
from python_inspector.dependencies import get_dependency
5+
from python_inspector.dependencies import is_requirement_pinned
6+
7+
@pytest.mark.parametrize(
8+
"text,expected",
9+
[
10+
("demo", False),
11+
("demo==1.2.*", False),
12+
("demo>=1", False),
13+
("demo==1.2", True),
14+
("demo===1.2", True),
15+
("demo===1.2.*", True),
16+
],
17+
)
18+
def test_requirement_pins(text, expected):
19+
assert is_requirement_pinned(Requirement(text)) is expected
20+
21+
22+
def test_wildcard_dependency_has_no_exact_version():
23+
dependency = get_dependency("demo==1.2.*")
24+
assert dependency.purl == "pkg:pypi/demo"
25+
assert dependency.is_resolved is False

0 commit comments

Comments
 (0)