mirror of
https://github.com/pypa/pip
synced 2023-12-13 21:30:23 +01:00
Merge pull request #7972 from uranusjr/editable
Refactor InstallRequirement-related operations to base class
This commit is contained in:
commit
73bfea6d28
|
@ -19,6 +19,7 @@ if MYPY_CHECK_RUNNING:
|
||||||
from pip._vendor.packaging.version import _BaseVersion
|
from pip._vendor.packaging.version import _BaseVersion
|
||||||
from pip._vendor.pkg_resources import Distribution
|
from pip._vendor.pkg_resources import Distribution
|
||||||
|
|
||||||
|
from pip._internal.distributions import AbstractDistribution
|
||||||
from pip._internal.models.link import Link
|
from pip._internal.models.link import Link
|
||||||
|
|
||||||
from .base import Requirement
|
from .base import Requirement
|
||||||
|
@ -67,11 +68,11 @@ def make_install_req_from_dist(dist, parent):
|
||||||
return ireq
|
return ireq
|
||||||
|
|
||||||
|
|
||||||
class LinkCandidate(Candidate):
|
class _InstallRequirementBackedCandidate(Candidate):
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
link, # type: Link
|
link, # type: Link
|
||||||
parent, # type: InstallRequirement
|
ireq, # type: InstallRequirement
|
||||||
factory, # type: Factory
|
factory, # type: Factory
|
||||||
name=None, # type: Optional[str]
|
name=None, # type: Optional[str]
|
||||||
version=None, # type: Optional[_BaseVersion]
|
version=None, # type: Optional[_BaseVersion]
|
||||||
|
@ -79,7 +80,7 @@ class LinkCandidate(Candidate):
|
||||||
# type: (...) -> None
|
# type: (...) -> None
|
||||||
self.link = link
|
self.link = link
|
||||||
self._factory = factory
|
self._factory = factory
|
||||||
self._ireq = make_install_req_from_link(link, parent)
|
self._ireq = ireq
|
||||||
self._name = name
|
self._name = name
|
||||||
self._version = version
|
self._version = version
|
||||||
self._dist = None # type: Optional[Distribution]
|
self._dist = None # type: Optional[Distribution]
|
||||||
|
@ -110,13 +111,15 @@ class LinkCandidate(Candidate):
|
||||||
self._version = self.dist.parsed_version
|
self._version = self.dist.parsed_version
|
||||||
return self._version
|
return self._version
|
||||||
|
|
||||||
|
def _get_abstract_distribution(self):
|
||||||
|
# type: () -> AbstractDistribution
|
||||||
|
raise NotImplementedError("Override in subclass")
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def dist(self):
|
def dist(self):
|
||||||
# type: () -> Distribution
|
# type: () -> Distribution
|
||||||
if self._dist is None:
|
if self._dist is None:
|
||||||
abstract_dist = self._factory.preparer.prepare_linked_requirement(
|
abstract_dist = self._get_abstract_distribution()
|
||||||
self._ireq
|
|
||||||
)
|
|
||||||
self._dist = abstract_dist.get_pkg_resources_distribution()
|
self._dist = abstract_dist.get_pkg_resources_distribution()
|
||||||
# TODO: Only InstalledDistribution can return None here :-(
|
# TODO: Only InstalledDistribution can return None here :-(
|
||||||
assert self._dist is not None
|
assert self._dist is not None
|
||||||
|
@ -166,6 +169,29 @@ class LinkCandidate(Candidate):
|
||||||
return self._ireq
|
return self._ireq
|
||||||
|
|
||||||
|
|
||||||
|
class LinkCandidate(_InstallRequirementBackedCandidate):
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
link, # type: Link
|
||||||
|
parent, # type: InstallRequirement
|
||||||
|
factory, # type: Factory
|
||||||
|
name=None, # type: Optional[str]
|
||||||
|
version=None, # type: Optional[_BaseVersion]
|
||||||
|
):
|
||||||
|
# type: (...) -> None
|
||||||
|
super(LinkCandidate, self).__init__(
|
||||||
|
link=link,
|
||||||
|
ireq=make_install_req_from_link(link, parent),
|
||||||
|
factory=factory,
|
||||||
|
name=name,
|
||||||
|
version=version,
|
||||||
|
)
|
||||||
|
|
||||||
|
def _get_abstract_distribution(self):
|
||||||
|
# type: () -> AbstractDistribution
|
||||||
|
return self._factory.preparer.prepare_linked_requirement(self._ireq)
|
||||||
|
|
||||||
|
|
||||||
class AlreadyInstalledCandidate(Candidate):
|
class AlreadyInstalledCandidate(Candidate):
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
|
|
|
@ -19,7 +19,7 @@ from .requirements import (
|
||||||
)
|
)
|
||||||
|
|
||||||
if MYPY_CHECK_RUNNING:
|
if MYPY_CHECK_RUNNING:
|
||||||
from typing import Dict, Optional, Set, Tuple
|
from typing import Dict, Optional, Set, Tuple, TypeVar
|
||||||
|
|
||||||
from pip._vendor.packaging.specifiers import SpecifierSet
|
from pip._vendor.packaging.specifiers import SpecifierSet
|
||||||
from pip._vendor.packaging.version import _BaseVersion
|
from pip._vendor.packaging.version import _BaseVersion
|
||||||
|
@ -34,6 +34,9 @@ if MYPY_CHECK_RUNNING:
|
||||||
|
|
||||||
from .base import Candidate, Requirement
|
from .base import Candidate, Requirement
|
||||||
|
|
||||||
|
C = TypeVar("C")
|
||||||
|
Cache = Dict[Link, C]
|
||||||
|
|
||||||
|
|
||||||
class Factory(object):
|
class Factory(object):
|
||||||
def __init__(
|
def __init__(
|
||||||
|
@ -52,7 +55,7 @@ class Factory(object):
|
||||||
self._make_install_req_from_spec = make_install_req
|
self._make_install_req_from_spec = make_install_req
|
||||||
self._ignore_installed = ignore_installed
|
self._ignore_installed = ignore_installed
|
||||||
self._ignore_requires_python = ignore_requires_python
|
self._ignore_requires_python = ignore_requires_python
|
||||||
self._link_candidate_cache = {} # type: Dict[Link, LinkCandidate]
|
self._link_candidate_cache = {} # type: Cache[LinkCandidate]
|
||||||
|
|
||||||
def _make_candidate_from_dist(
|
def _make_candidate_from_dist(
|
||||||
self,
|
self,
|
||||||
|
|
Loading…
Reference in a new issue