1
1
Fork 0
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:
Pradyun Gedam 2020-04-04 04:29:21 +05:30 committed by GitHub
commit 73bfea6d28
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 37 additions and 8 deletions

View file

@ -19,6 +19,7 @@ if MYPY_CHECK_RUNNING:
from pip._vendor.packaging.version import _BaseVersion
from pip._vendor.pkg_resources import Distribution
from pip._internal.distributions import AbstractDistribution
from pip._internal.models.link import Link
from .base import Requirement
@ -67,11 +68,11 @@ def make_install_req_from_dist(dist, parent):
return ireq
class LinkCandidate(Candidate):
class _InstallRequirementBackedCandidate(Candidate):
def __init__(
self,
link, # type: Link
parent, # type: InstallRequirement
ireq, # type: InstallRequirement
factory, # type: Factory
name=None, # type: Optional[str]
version=None, # type: Optional[_BaseVersion]
@ -79,7 +80,7 @@ class LinkCandidate(Candidate):
# type: (...) -> None
self.link = link
self._factory = factory
self._ireq = make_install_req_from_link(link, parent)
self._ireq = ireq
self._name = name
self._version = version
self._dist = None # type: Optional[Distribution]
@ -110,13 +111,15 @@ class LinkCandidate(Candidate):
self._version = self.dist.parsed_version
return self._version
def _get_abstract_distribution(self):
# type: () -> AbstractDistribution
raise NotImplementedError("Override in subclass")
@property
def dist(self):
# type: () -> Distribution
if self._dist is None:
abstract_dist = self._factory.preparer.prepare_linked_requirement(
self._ireq
)
abstract_dist = self._get_abstract_distribution()
self._dist = abstract_dist.get_pkg_resources_distribution()
# TODO: Only InstalledDistribution can return None here :-(
assert self._dist is not None
@ -166,6 +169,29 @@ class LinkCandidate(Candidate):
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):
def __init__(
self,

View file

@ -19,7 +19,7 @@ from .requirements import (
)
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.version import _BaseVersion
@ -34,6 +34,9 @@ if MYPY_CHECK_RUNNING:
from .base import Candidate, Requirement
C = TypeVar("C")
Cache = Dict[Link, C]
class Factory(object):
def __init__(
@ -52,7 +55,7 @@ class Factory(object):
self._make_install_req_from_spec = make_install_req
self._ignore_installed = ignore_installed
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(
self,