From 0e8fab90cc4e32d5fbce613914b178dcddfca8cc Mon Sep 17 00:00:00 2001 From: Ignas Anikevicius <240938+aignas@users.noreply.github.com> Date: Sat, 29 Aug 2026 12:19:32 +0900 Subject: [PATCH 1/4] spike test --- tests/pypi/extension/extension_tests.bzl | 64 ++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/tests/pypi/extension/extension_tests.bzl b/tests/pypi/extension/extension_tests.bzl index 97849e882d..65c64a666e 100644 --- a/tests/pypi/extension/extension_tests.bzl +++ b/tests/pypi/extension/extension_tests.bzl @@ -580,6 +580,70 @@ def _test_extension_dep_coexists_with_concrete_hub(env): _tests.append(_test_extension_dep_coexists_with_concrete_hub) +def _test_default_index_setting(env): + def mock_simpleapi_download(*_, attr, **_kwargs): + digest_in_lock_file = "sha256:deadbeef" + return { + "simple": struct( + whls = { + digest_in_lock_file: struct( + yanked = None, + filename = "simple-0.0.1-py3-none-any.whl", + digest = digest_in_lock_file, + url = "file://simple-0.0.1-py3-none-any.whl", + ), + }, + sdists = {}, + hashes_by_version = {}, + index_url = attr.index_url, + ), + } + + for test in [ + struct( + default = _default_tags_default, + parse = [ + _parse( + hub_name = "pypi_a", + python_version = "3.15", + requirements_lock = "requirements.txt", + ), + ], + want_index_url = "https://pypi.org/simple", + ), + ]: + pypi = _parse_modules( + env, + module_ctx = _pypi_mock_mctx( + _mod( + name = "my_module", + default = test.default, + parse = test.parse, + ), + os_name = "linux", + arch_name = "x86_64", + ), + available_interpreters = { + "python_3_15_host": "unit_test_interpreter_target", + }, + minor_mapping = {"3.15": "3.15.19"}, + simpleapi_download = mock_simpleapi_download, + ) + + pypi.whl_libraries().contains_exactly({ + "pypi_a_315_simple_py3_none_any_deadbeef": { + "config_load": "@pypi_a//:config.bzl", + "dep_template": "@pypi_a//{name}:{target}", + "filename": "simple-0.0.1-py3-none-any.whl", + "index_url": test.want_index_url, + "integrity": "sha256-3q2+7w==", + "requirement": "simple==0.0.1", + "urls": ["file://simple-0.0.1-py3-none-any.whl"], + }, + }) + +_tests.append(_test_default_index_setting) + def extension_test_suite(name): """Create the test suite. From fc3185bfb39e26024a81ee903c433f5f0307dee4 Mon Sep 17 00:00:00 2001 From: Ignas Anikevicius <240938+aignas@users.noreply.github.com> Date: Sat, 29 Aug 2026 12:22:12 +0900 Subject: [PATCH 2/4] spike the test --- tests/pypi/extension/extension_tests.bzl | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/tests/pypi/extension/extension_tests.bzl b/tests/pypi/extension/extension_tests.bzl index 65c64a666e..2a0dc100c1 100644 --- a/tests/pypi/extension/extension_tests.bzl +++ b/tests/pypi/extension/extension_tests.bzl @@ -601,12 +601,16 @@ def _test_default_index_setting(env): for test in [ struct( - default = _default_tags_default, - parse = [ - _parse( - hub_name = "pypi_a", - python_version = "3.15", - requirements_lock = "requirements.txt", + modules = [ + _mod( + name = "my_module", + parse = [ + _parse( + hub_name = "pypi_a", + python_version = "3.15", + requirements_lock = "requirements.txt", + ), + ], ), ], want_index_url = "https://pypi.org/simple", @@ -615,13 +619,9 @@ def _test_default_index_setting(env): pypi = _parse_modules( env, module_ctx = _pypi_mock_mctx( - _mod( - name = "my_module", - default = test.default, - parse = test.parse, - ), os_name = "linux", arch_name = "x86_64", + *test.modules ), available_interpreters = { "python_3_15_host": "unit_test_interpreter_target", From 8633161facf3fa304cb79a9b2e0b7cd63d0bffe2 Mon Sep 17 00:00:00 2001 From: Ignas Anikevicius <240938+aignas@users.noreply.github.com> Date: Sat, 29 Aug 2026 12:23:29 +0900 Subject: [PATCH 3/4] spike the test --- tests/pypi/extension/extension_tests.bzl | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tests/pypi/extension/extension_tests.bzl b/tests/pypi/extension/extension_tests.bzl index 2a0dc100c1..012f4a7f3c 100644 --- a/tests/pypi/extension/extension_tests.bzl +++ b/tests/pypi/extension/extension_tests.bzl @@ -615,6 +615,26 @@ def _test_default_index_setting(env): ], want_index_url = "https://pypi.org/simple", ), + struct( + modules = [ + _mod( + name = "my_module", + default = [ + _default( + index_url = "https://pypi.internal.org/simple", + ), + ], + parse = [ + _parse( + hub_name = "pypi_a", + python_version = "3.15", + requirements_lock = "requirements.txt", + ), + ], + ), + ], + want_index_url = "https://pypi.org/simple", + ), ]: pypi = _parse_modules( env, From 2960c4c97d3abd7f9ac383b1d3f41361522ec942 Mon Sep 17 00:00:00 2001 From: Ignas Anikevicius <240938+aignas@users.noreply.github.com> Date: Sat, 29 Aug 2026 12:26:14 +0900 Subject: [PATCH 4/4] add notes --- tests/pypi/extension/extension_tests.bzl | 36 +++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/tests/pypi/extension/extension_tests.bzl b/tests/pypi/extension/extension_tests.bzl index 012f4a7f3c..87adb767cd 100644 --- a/tests/pypi/extension/extension_tests.bzl +++ b/tests/pypi/extension/extension_tests.bzl @@ -633,7 +633,29 @@ def _test_default_index_setting(env): ], ), ], - want_index_url = "https://pypi.org/simple", + want_index_url = "https://pypi.internal.org/simple", + ), + struct( + modules = [ + _mod( + name = "my_module", + default = [ + _default( + index_url = "https://pypi.internal.org/simple", + ), + ], + parse = [ + _parse( + hub_name = "pypi_a", + python_version = "3.15", + requirements_lock = "requirements_with_index_url.txt", + ), + ], + ), + ], + # We want the file to have lower precedence than our default if the + # `my_module` is setting the default. + want_index_url = "https://pypi.internal.org/simple", ), ]: pypi = _parse_modules( @@ -641,6 +663,18 @@ def _test_default_index_setting(env): module_ctx = _pypi_mock_mctx( os_name = "linux", arch_name = "x86_64", + mock_files = { + "requirements.txt": """\ +simple==0.0.1 \ + --hash=sha256:deadbeef \ + --hash=sha256:deadbaaf""", + "requirements_with_index_url.txt": """\ +--index-url="https://pypi.org/simple" + +simple==0.0.1 \ + --hash=sha256:deadbeef \ + --hash=sha256:deadbaaf""", + }, *test.modules ), available_interpreters = {