Skip to content

Commit 183967d

Browse files
authored
Merge pull request #724 from dhellmann/make-sdist-install-deps-pluggable
feat: make get_install_dependencies_of_sdist pluggable
2 parents 4f407ef + 2d76463 commit 183967d

1 file changed

Lines changed: 43 additions & 7 deletions

File tree

src/fromager/dependencies.py

Lines changed: 43 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
BUILD_SYSTEM_REQ_FILE_NAME = "build-system-requirements.txt"
2424
BUILD_BACKEND_REQ_FILE_NAME = "build-backend-requirements.txt"
2525
BUILD_SDIST_REQ_FILE_NAME = "build-sdist-requirements.txt"
26+
INSTALL_REQ_FILE_NAME = "requirements.txt"
2627

2728

2829
def get_build_system_dependencies(
@@ -208,6 +209,7 @@ def default_get_build_sdist_dependencies(
208209
Defaults to result of hook call
209210
:meth:`~pyproject_hooks.BuildBackendHookCaller.get_requires_for_build_wheel`
210211
"""
212+
logger.info(f"looking for build sdist dependencies in {build_dir}")
211213
pbi = ctx.package_build_info(req)
212214
hook_caller = get_build_backend_hook_caller(
213215
ctx=ctx,
@@ -232,10 +234,46 @@ def get_install_dependencies_of_sdist(
232234
233235
Uses PEP 517 prepare_metadata_for_build_wheel() API.
234236
"""
237+
logger.info(
238+
f"getting install requirements for {req} from sdist in {sdist_root_dir}"
239+
)
235240
pbi = ctx.package_build_info(req)
236241
build_dir = pbi.build_dir(sdist_root_dir)
237-
logger.info(f"getting install requirements for {req} from sdist in {build_dir}")
238242
extra_environ = pbi.get_extra_environ(build_env=build_env)
243+
orig_deps = overrides.find_and_invoke(
244+
req.name,
245+
"get_install_dependencies_of_sdist",
246+
default_get_install_dependencies_of_sdist,
247+
ctx=ctx,
248+
req=req,
249+
sdist_root_dir=sdist_root_dir,
250+
build_env=build_env,
251+
extra_environ=extra_environ,
252+
build_dir=build_dir,
253+
config_settings=pbi.config_settings,
254+
)
255+
deps = _filter_requirements(req, orig_deps)
256+
_write_requirements_file(
257+
deps,
258+
sdist_root_dir.parent / INSTALL_REQ_FILE_NAME,
259+
)
260+
return deps
261+
262+
263+
def default_get_install_dependencies_of_sdist(
264+
*,
265+
ctx: context.WorkContext,
266+
req: Requirement,
267+
sdist_root_dir: pathlib.Path,
268+
build_env: build_environment.BuildEnvironment,
269+
extra_environ: dict[str, str],
270+
build_dir: pathlib.Path,
271+
config_settings: dict[str, str],
272+
) -> set[Requirement]:
273+
"""Get install requirements (Requires-Dist) from sources
274+
275+
Uses PEP 517 prepare_metadata_for_build_wheel() API.
276+
"""
239277
hook_caller = get_build_backend_hook_caller(
240278
ctx=ctx,
241279
req=req,
@@ -246,16 +284,14 @@ def get_install_dependencies_of_sdist(
246284
with tempfile.TemporaryDirectory() as tmp_dir:
247285
distinfo_name = hook_caller.prepare_metadata_for_build_wheel(
248286
tmp_dir,
249-
config_settings=pbi.config_settings,
287+
config_settings=config_settings,
250288
)
251289
metadata_file = pathlib.Path(tmp_dir) / distinfo_name / "METADATA"
252290
# ignore minor metadata issues
253291
metadata = parse_metadata(metadata_file, validate=False)
254-
255-
if metadata.requires_dist is None:
292+
if not metadata.requires_dist:
256293
return set()
257-
else:
258-
return _filter_requirements(req, metadata.requires_dist)
294+
return set(metadata.requires_dist)
259295

260296

261297
def parse_metadata(metadata_file: pathlib.Path, *, validate: bool = True) -> Metadata:
@@ -276,7 +312,7 @@ def get_install_dependencies_of_wheel(
276312
deps = _filter_requirements(req, wheel.requires_dist)
277313
_write_requirements_file(
278314
deps,
279-
requirements_file_dir / "requirements.txt",
315+
requirements_file_dir / INSTALL_REQ_FILE_NAME,
280316
)
281317
return deps
282318

0 commit comments

Comments
 (0)