@@ -50,6 +50,11 @@ def get_extra_data_from_requirements(requirements_file="requirements.txt"):
5050 yield package_data .extra_data
5151
5252
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+
5358def get_dependency (specifier ):
5459 """
5560 Return a DependentPackage given a requirement ``specifier`` string.
@@ -63,26 +68,22 @@ def get_dependency(specifier):
6368
6469 requirement = Requirement (requirement_string = specifier )
6570
66- # TODO: use new InstallRequirement.from_specifier constructor when available
67- ir = InstallRequirement (
68- req = requirement ,
69- requirement_line = specifier ,
70- )
71-
7271 scope = "install"
7372 is_runtime = True
7473 is_optional = False
7574
76- if ir .name :
75+ if requirement .name :
7776 # 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 ()
8081
8182 return models .DependentPackage (
8283 purl = purl ,
8384 scope = scope ,
8485 is_runtime = is_runtime ,
8586 is_optional = is_optional ,
86- is_resolved = ir . is_pinned or False ,
87+ is_resolved = False or is_requirement_pinned ( requirement ) ,
8788 extracted_requirement = specifier ,
8889 )
0 commit comments