candidate.py 753 B

12345678910111213141516171819202122232425
  1. from dataclasses import dataclass
  2. from pip._vendor.packaging.version import Version
  3. from pip._vendor.packaging.version import parse as parse_version
  4. from pip._internal.models.link import Link
  5. @dataclass(frozen=True)
  6. class InstallationCandidate:
  7. """Represents a potential "candidate" for installation."""
  8. __slots__ = ["name", "version", "link"]
  9. name: str
  10. version: Version
  11. link: Link
  12. def __init__(self, name: str, version: str, link: Link) -> None:
  13. object.__setattr__(self, "name", name)
  14. object.__setattr__(self, "version", parse_version(version))
  15. object.__setattr__(self, "link", link)
  16. def __str__(self) -> str:
  17. return f"{self.name!r} candidate (version {self.version} at {self.link})"