Skip to content

Commit e94dd1f

Browse files
author
Ben Davis
committed
Added ability to resolve optional dependencies
1 parent e4da07e commit e94dd1f

2 files changed

Lines changed: 11 additions & 10 deletions

File tree

src/fastsandpm/dependencies/provider.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ def narrow_requirement_selection(
285285
"""Type alias for the resolution reporter."""
286286

287287

288-
def resolve(manifest: Manifest) -> dict[str, Candidate]:
288+
def resolve(manifest: Manifest, optional_deps: list[str] | None = None) -> dict[str, Candidate]:
289289
"""Resolve all dependencies for a manifest.
290290
291291
Creates a FastSandProvider with the manifest's registries and runs the
@@ -294,6 +294,7 @@ def resolve(manifest: Manifest) -> dict[str, Candidate]:
294294
295295
Args:
296296
manifest: The manifest containing dependencies to resolve.
297+
optional_deps: Optional dependency groups to include in the library.
297298
298299
Returns:
299300
A dictionary mapping package names to their resolved Candidate objects.
@@ -313,5 +314,12 @@ def resolve(manifest: Manifest) -> dict[str, Candidate]:
313314
reporter: FastSandReporter = resolvelib.BaseReporter()
314315

315316
resolver = resolvelib.Resolver(provider, reporter)
316-
result = resolver.resolve(manifest.dependencies)
317+
318+
dependencies = [dep for dep in manifest.dependencies]
319+
if optional_deps:
320+
for group in optional_deps:
321+
if group in manifest.optional_dependencies:
322+
dependencies.extend(manifest.optional_dependencies[group])
323+
324+
result = resolver.resolve(dependencies)
317325
return result.mapping

src/fastsandpm/install.py

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -89,14 +89,7 @@ def library_from_manifest(
8989
Raises:
9090
resolvelib.ResolutionImpossible: If no compatible resolution exists.
9191
"""
92-
# TODO: Support optional_deps parameter once resolve() is updated to accept it
93-
if optional_deps:
94-
raise NotImplementedError(
95-
"Optional dependencies are not yet supported. "
96-
"The resolve() function needs to be updated to accept optional_deps."
97-
)
98-
99-
library = resolve(manifest)
92+
library = resolve(manifest, optional_deps)
10093
build_library(library, dest, clean)
10194

10295

0 commit comments

Comments
 (0)