Skip to content

Commit d50ea9a

Browse files
committed
error (instead of warning) on unavailable extra
1 parent 102d818 commit d50ea9a

File tree

2 files changed

+29
-5
lines changed

2 files changed

+29
-5
lines changed

src/pip/_internal/exceptions.py

+23
Original file line numberDiff line numberDiff line change
@@ -775,3 +775,26 @@ def __init__(self, *, distribution: "BaseDistribution") -> None:
775775
),
776776
hint_stmt=None,
777777
)
778+
779+
780+
class UnavailableExtra(InstallationError):
781+
"""A requested extra is not available."""
782+
783+
def __init__(
784+
self,
785+
base: str,
786+
version: str,
787+
extra: str,
788+
available_extras: List[str],
789+
):
790+
self.base = base
791+
self.version = version
792+
self.extra = extra
793+
self.available_extras = available_extras
794+
795+
def __str__(self) -> str:
796+
nice_available = " ".join(
797+
'"{}", '.format(e)
798+
for e in self.available_extras
799+
)[:-2]
800+
return f"{self.base} {self.version} does not provide the extra '{self.extra}'\n{self.base} provides extras: {nice_available}"

src/pip/_internal/resolution/resolvelib/candidates.py

+6-5
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
InstallationSubprocessError,
1212
MetadataInconsistent,
1313
MetadataInvalid,
14+
UnavailableExtra,
1415
)
1516
from pip._internal.metadata import BaseDistribution
1617
from pip._internal.models.link import Link, links_equivalent
@@ -508,11 +509,11 @@ def iter_dependencies(self, with_requires: bool) -> Iterable[Optional[Requiremen
508509
valid_extras = self.extras.intersection(self.base.dist.iter_provided_extras())
509510
invalid_extras = self.extras.difference(self.base.dist.iter_provided_extras())
510511
for extra in sorted(invalid_extras):
511-
logger.warning(
512-
"%s %s does not provide the extra '%s'",
513-
self.base.name,
514-
self.version,
515-
extra,
512+
raise UnavailableExtra(
513+
base=self.base.name,
514+
version=self.version,
515+
extra=extra,
516+
available_extras=self.base.dist.iter_provided_extras(),
516517
)
517518

518519
for r in self.base.dist.iter_dependencies(valid_extras):

0 commit comments

Comments
 (0)