') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); fix(pypi): skip index lookups when all package overrides are specified by aignas · Pull Request #3710 · bazel-contrib/rules_python · GitHub
Skip to content

fix(pypi): skip index lookups when all package overrides are specified - #3710

Merged
aignas merged 1 commit into
bazel-contrib:mainfrom
aignas:aignas.fix.experimental_index_url_overrides_no_index_call
Apr 16, 2026
Merged

fix(pypi): skip index lookups when all package overrides are specified#3710
aignas merged 1 commit into
bazel-contrib:mainfrom
aignas:aignas.fix.experimental_index_url_overrides_no_index_call

Conversation

@aignas

@aignasaignas commented Apr 16, 2026

Copy link
Copy Markdown
Collaborator

When index_url_overrides is provided for all packages, we no longer need to
call the index at all. This improves performance and aligns with the expected
behavior where overrides should be sufficient.

Just to note, currently Pytorch, PyPI, Artifactory have the root index pages, whilst GAR does not.

Fixes#3709

When index_url_overrides is provided for all packages, we no longer need to
call the index at all. This improves performance and aligns with the expected
behavior where overrides should be sufficient.
Fixesbazel-contrib#3709

@gemini-code-assistgemini-code-assistBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request modifies the simpleapi_download logic to optimize package URL resolution when index_url_overrides are provided, alongside corresponding updates to the documentation and tests. However, the current implementation introduces a regression by ignoring extra_index_urls whenever any override is present, which breaks support for partial overrides. Feedback suggests refining the early-return condition to ensure that auto-discovery via extra indexes is preserved when necessary. A minor formatting issue with a trailing space in the changelog was also identified.

Comment threadpython/private/pypi/simpleapi_download.bzl
Comment threadCHANGELOG.md
@rickeylev
rickeylev added this pull request to the merge queueApr 16, 2026
@rickeylev

Copy link
Copy Markdown
Collaborator

Does this need to be put into the 2.0 release?

@github-merge-queue
github-merge-queueBot removed this pull request from the merge queue due to failed status checks Apr 16, 2026
@aignas
aignas added this pull request to the merge queueApr 16, 2026
Merged via the queue into bazel-contrib:main with commit 208ca88Apr 16, 2026
4 checks passed
@aignas
aignas deleted the aignas.fix.experimental_index_url_overrides_no_index_call branch April 16, 2026 23:28
@aignasaignas mentioned this pull request Apr 17, 2026
17 tasks
rickeylev pushed a commit to rickeylev/rules_python that referenced this pull request Apr 20, 2026
bazel-contrib#3710)
When index_url_overrides is provided for all packages, we no longer need
to
call the index at all. This improves performance and aligns with the
expected
behavior where overrides should be sufficient.
Just to note, currently Pytorch, PyPI, Artifactory have the root index
pages, whilst GAR does not.
Fixesbazel-contrib#3709
(cherry picked from commit 208ca88)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

simpleapi_download: root /simple/ fetch crashes on registries that don't serve PEP 503 root index (e.g. Google Artifact Registry)

2 participants

@aignas@rickeylev