@@ -50,6 +50,11 @@ def get_extra_data_from_requirements(requirements_file="requirements.txt"):
50
50
yield package_data .extra_data
51
51
52
52
53
+ def is_requirement_pinned (requirement : Requirement ):
54
+ specifiers = requirement .specifier
55
+ return specifiers and len (specifiers ) == 1 and next (iter (specifiers )).operator in {"==" , "===" }
56
+
57
+
53
58
def get_dependency (specifier ):
54
59
"""
55
60
Return a DependentPackage given a requirement ``specifier`` string.
@@ -63,26 +68,22 @@ def get_dependency(specifier):
63
68
64
69
requirement = Requirement (requirement_string = specifier )
65
70
66
- # TODO: use new InstallRequirement.from_specifier constructor when available
67
- ir = InstallRequirement (
68
- req = requirement ,
69
- requirement_line = specifier ,
70
- )
71
-
72
71
scope = "install"
73
72
is_runtime = True
74
73
is_optional = False
75
74
76
- if ir .name :
75
+ if requirement .name :
77
76
# will be None if not pinned
78
- version = ir .get_pinned_version
79
- purl = PackageURL (type = "pypi" , name = ir .name , version = version ).to_string ()
77
+ version = None
78
+ if is_requirement_pinned (requirement ):
79
+ version = str (list (requirement .specifier )[0 ].version )
80
+ purl = PackageURL (type = "pypi" , name = requirement .name , version = version ).to_string ()
80
81
81
82
return models .DependentPackage (
82
83
purl = purl ,
83
84
scope = scope ,
84
85
is_runtime = is_runtime ,
85
86
is_optional = is_optional ,
86
- is_resolved = ir . is_pinned or False ,
87
+ is_resolved = False or is_requirement_pinned ( requirement ) ,
87
88
extracted_requirement = specifier ,
88
89
)
0 commit comments