from __future__ import annotations from pip._internal.models.link import Link from pip._internal.utils.models import KeyBasedCompareMixin from pip._vendor.packaging.version import parse as parse_version class InstallationCandidate(KeyBasedCompareMixin): """Represents a potential "candidate" for installation.""" __slots__ = ['name', 'version', 'link'] def __init__(self, name: str, version: str, link: Link) -> None: self.name = name self.version = parse_version(version) self.link = link super().__init__( key=(self.name, self.version, self.link), defining_class=InstallationCandidate, ) def __repr__(self) -> str: return ''.format( self.name, self.version, self.link, ) def __str__(self) -> str: return '{!r} candidate (version {} at {})'.format( self.name, self.version, self.link, )