2727from _packagedcode .pypi import PythonSetupPyHandler
2828from _packagedcode .pypi import can_process_dependent_package
2929from python_inspector import dependencies
30- from python_inspector import settings
30+ from python_inspector import pyinspector_settings as settings
3131from python_inspector import utils
3232from python_inspector import utils_pypi
3333from python_inspector .package_data import get_pypi_data_from_purl
@@ -64,8 +64,7 @@ def to_dict(self, generic_paths=False):
6464 # clean file paths
6565 for file in files :
6666 path = file ["path" ]
67- file ["path" ] = utils .remove_test_data_dir_variable_prefix (
68- path = path )
67+ file ["path" ] = utils .remove_test_data_dir_variable_prefix (path = path )
6968 return {
7069 "files" : files ,
7170 "packages" : [package for package in self .packages ],
@@ -102,19 +101,19 @@ def resolve_dependencies(
102101 linux OS.
103102
104103 Download from the provided PyPI simple index_urls INDEX(s) URLs defaulting
105- to PyPI.org
104+ to PyPI.org or a configured setting.
106105 """
107106
108107 if not operating_system :
109- raise Exception ("No operating system provided." )
108+ raise Exception (f "No operating system provided." )
110109 if operating_system not in PLATFORMS_BY_OS :
111110 raise ValueError (
112111 f"Invalid operating system: { operating_system } . "
113112 f"Must be one of: { ', ' .join (PLATFORMS_BY_OS .keys ())} "
114113 )
115114
116115 if not python_version :
117- raise Exception ("No python version provided." )
116+ raise Exception (f "No python version provided." )
118117 if python_version not in valid_python_versions :
119118 raise ValueError (
120119 f"Invalid python version: { python_version } . "
@@ -149,22 +148,16 @@ def resolve_dependencies(
149148
150149 # requirements
151150 for req_file in requirement_files :
152- deps = dependencies .get_dependencies_from_requirements (
153- requirements_file = req_file )
154- for extra_data in dependencies .get_extra_data_from_requirements (
155- requirements_file = req_file
156- ):
157- index_urls = (
158- * index_urls , * tuple (extra_data .get ("extra_index_urls" ) or []))
159- index_urls = (
160- * index_urls , * tuple (extra_data .get ("index_url" ) or []))
151+ deps = dependencies .get_dependencies_from_requirements (requirements_file = req_file )
152+ for extra_data in dependencies .get_extra_data_from_requirements (requirements_file = req_file ):
153+ index_urls = (* index_urls , * tuple (extra_data .get ("extra_index_urls" ) or []))
154+ index_urls = (* index_urls , * tuple (extra_data .get ("index_url" ) or []))
161155 direct_dependencies .extend (deps )
162156 package_data = [
163157 pkg_data .to_dict () for pkg_data in PipRequirementsFileHandler .parse (location = req_file )
164158 ]
165159 if generic_paths :
166- req_file = utils .remove_test_data_dir_variable_prefix (
167- path = req_file )
160+ req_file = utils .remove_test_data_dir_variable_prefix (path = req_file )
168161
169162 files .append (
170163 dict (
@@ -217,15 +210,13 @@ def resolve_dependencies(
217210 files = [setup_py_file ],
218211 analyze_setup_py_insecurely = analyze_setup_py_insecurely ,
219212 )
220- setup_py_file_deps = list (
221- get_dependent_packages_from_reqs (reqs ))
213+ setup_py_file_deps = list (get_dependent_packages_from_reqs (reqs ))
222214 direct_dependencies .extend (setup_py_file_deps )
223215
224216 package_data .dependencies = setup_py_file_deps
225217 file_package_data = [package_data .to_dict ()]
226218 if generic_paths :
227- setup_py_file = utils .remove_test_data_dir_variable_prefix (
228- path = setup_py_file )
219+ setup_py_file = utils .remove_test_data_dir_variable_prefix (path = setup_py_file )
229220 files .append (
230221 dict (
231222 type = "file" ,
@@ -254,29 +245,32 @@ def resolve_dependencies(
254245 if verbose :
255246 printer (f"environment: { environment } " )
256247
257- repos = []
248+ repos_by_url = {}
258249 if not use_pypi_json_api :
259250 # Collect PyPI repos
251+ use_only_confed = settings .USE_ONLY_CONFIGURED_INDEX_URLS
260252 for index_url in index_urls :
261253 index_url = index_url .strip ("/" )
262- if index_url in settings .INDEX_URL :
263- repos .append (PypiSimpleRepository (index_url ))
264- else :
265- credentials = None
266- if parsed_netrc :
267- login , password = utils .get_netrc_auth (
268- index_url , parsed_netrc )
269- credentials = (
270- dict (login = login ,
271- password = password ) if login and password else None
272- )
273- repo = PypiSimpleRepository (
274- index_url = index_url ,
275- use_cached_index = use_cached_index ,
276- credentials = credentials ,
277- )
278- repos .append (repo )
254+ if use_only_confed and index_url not in settings .INDEX_URL :
255+ if verbose :
256+ printer (f"Skipping index URL unknown in settings: { index_url !r} " )
257+ continue
258+ if index_url in repos_by_url :
259+ continue
260+
261+ credentials = None
262+ if parsed_netrc :
263+ login , password = utils .get_netrc_auth (index_url , parsed_netrc )
264+ if login and password :
265+ credentials = dict (login = login , password = password )
266+ repo = utils_pypi .PypiSimpleRepository (
267+ index_url = index_url ,
268+ use_cached_index = use_cached_index ,
269+ credentials = credentials ,
270+ )
271+ repos_by_url [index_url ] = repo
279272
273+ repos = repos_by_url .values ()
280274 if verbose :
281275 printer ("repos:" )
282276 for repo in repos :
@@ -363,8 +357,8 @@ def resolve(
363357
364358def get_resolved_dependencies (
365359 requirements : List [Requirement ],
366- environment : Environment ,
367- repos : Sequence [PypiSimpleRepository ] = tuple (),
360+ environment : Environment = None ,
361+ repos : Sequence [utils_pypi . PypiSimpleRepository ] = tuple (),
368362 as_tree : bool = False ,
369363 max_rounds : int = 200000 ,
370364 pdt_output : bool = False ,
@@ -379,7 +373,6 @@ def get_resolved_dependencies(
379373 Used the provided ``repos`` list of PypiSimpleRepository.
380374 If empty, use instead the PyPI.org JSON API exclusively instead
381375 """
382-
383376 resolver = Resolver (
384377 provider = PythonInputProvider (
385378 environment = environment ,
@@ -389,12 +382,8 @@ def get_resolved_dependencies(
389382 ),
390383 reporter = BaseReporter (),
391384 )
392-
393- resolver_results = resolver .resolve (
394- requirements = requirements , max_rounds = max_rounds )
395-
385+ resolver_results = resolver .resolve (requirements = requirements , max_rounds = max_rounds )
396386 package_list = get_package_list (results = resolver_results )
397-
398387 if pdt_output :
399388 return (format_pdt_tree (resolver_results ), package_list )
400389 return (
0 commit comments