refactor(pypi): split out more utils and start passing 'abi_os_arch' around (#2069)
This is extra preparation needed for #2059.
Summary:
- Create `pypi_repo_utils` for more ergonomic handling of Python in repo
context.
- Split the resolution of requirements files to platforms into a
separate function
to make the testing easier. This also allows more validation that was
realized
that there is a need for in the WIP feature PR.
- Make the code more robust about the assumption of the target platform
label.
Work towards #260, #1105, #1868.
diff --git a/python/private/pypi/extension.bzl b/python/private/pypi/extension.bzl
index 6aafc71..d837d8d 100644
--- a/python/private/pypi/extension.bzl
+++ b/python/private/pypi/extension.bzl
@@ -26,6 +26,7 @@
load(":parse_whl_name.bzl", "parse_whl_name")
load(":pip_repository_attrs.bzl", "ATTRS")
load(":render_pkg_aliases.bzl", "whl_alias")
+load(":requirements_files_by_platform.bzl", "requirements_files_by_platform")
load(":simpleapi_download.bzl", "simpleapi_download")
load(":whl_library.bzl", "whl_library")
load(":whl_repo_name.bzl", "whl_repo_name")
@@ -183,12 +184,16 @@
requirements_by_platform = parse_requirements(
module_ctx,
- requirements_by_platform = pip_attr.requirements_by_platform,
- requirements_linux = pip_attr.requirements_linux,
- requirements_lock = pip_attr.requirements_lock,
- requirements_osx = pip_attr.requirements_darwin,
- requirements_windows = pip_attr.requirements_windows,
- extra_pip_args = pip_attr.extra_pip_args,
+ requirements_by_platform = requirements_files_by_platform(
+ requirements_by_platform = pip_attr.requirements_by_platform,
+ requirements_linux = pip_attr.requirements_linux,
+ requirements_lock = pip_attr.requirements_lock,
+ requirements_osx = pip_attr.requirements_darwin,
+ requirements_windows = pip_attr.requirements_windows,
+ extra_pip_args = pip_attr.extra_pip_args,
+ python_version = major_minor,
+ logger = logger,
+ ),
get_index_urls = get_index_urls,
python_version = major_minor,
logger = logger,
@@ -298,7 +303,7 @@
requirement = select_requirement(
requirements,
- platform = repository_platform,
+ platform = None if pip_attr.download_only else repository_platform,
)
if not requirement:
# Sometimes the package is not present for host platform if there