@@ -93,6 +93,25 @@ def get_requirements_from_distribution(
9393 handler : BasePypiHandler ,
9494 location : str ,
9595) -> List [Requirement ]:
96+ """
97+ Return a list of requirements from a source distribution or wheel at
98+ ``location`` using the provided ``handler`` DatafileHandler for parsing.
99+ """
100+ if not location :
101+ return []
102+ if not os .path .exists (location ):
103+ return []
104+ reqs = []
105+ for package_data in handler .parse (location ):
106+ dependencies = package_data .dependencies
107+ reqs .extend (get_requirements_from_dependencies (dependencies = dependencies ))
108+ return reqs
109+
110+
111+ def get_deps_from_distribution (
112+ handler : BasePypiHandler ,
113+ location : str ,
114+ ) -> List [DependentPackage ]:
96115 """
97116 Return a list of requirements from a source distribution or wheel at
98117 ``location`` using the provided ``handler`` DatafileHandler for parsing.
@@ -104,7 +123,7 @@ def get_requirements_from_distribution(
104123 deps = []
105124 for package_data in handler .parse (location ):
106125 dependencies = package_data .dependencies
107- deps .extend (get_requirements_from_dependencies ( dependencies = dependencies ) )
126+ deps .extend (dependencies = dependencies )
108127 return deps
109128
110129
@@ -133,7 +152,7 @@ def contain_string(string: str, files: List) -> bool:
133152 return False
134153
135154
136- def parse_setup_py_insecurely (setup_py ):
155+ def parse_reqs_from_setup_py_insecurely (setup_py ):
137156 """
138157 Yield requirements from the setup.py file at ``setup_py``.
139158 """
@@ -143,6 +162,27 @@ def parse_setup_py_insecurely(setup_py):
143162 yield Requirement (req )
144163
145164
165+ def parse_deps_from_setup_py_insecurely (setup_py ):
166+ """
167+ Yield requirements from the setup.py file at ``setup_py``.
168+ """
169+ if not os .path .exists (setup_py ):
170+ return []
171+ for req in iter_requirements (level = "" , extras = [], setup_file = setup_py ):
172+ parsed_req = Requirement (req )
173+ yield DependentPackage (
174+ purl = str (
175+ PackageURL (
176+ type = "pypi" ,
177+ name = parsed_req .name ,
178+ )
179+ ),
180+ extracted_requirement = req ,
181+ scope = "install" ,
182+ is_runtime = False ,
183+ )
184+
185+
146186def is_valid_version (
147187 parsed_version : Union [LegacyVersion , Version ],
148188 requirements : Dict ,
@@ -685,7 +725,7 @@ def get_setup_dependencies(location, analyze_setup_py_insecurely=False, use_requ
685725 string = "_require" , files = [setup_py_location , setup_cfg_location ]
686726 ):
687727 if analyze_setup_py_insecurely :
688- yield from parse_setup_py_insecurely (setup_py = setup_py_location )
728+ yield from parse_reqs_from_setup_py_insecurely (setup_py = setup_py_location )
689729 else :
690730 raise Exception ("Unable to collect setup.py dependencies securely" )
691731
0 commit comments