diff --git a/poetry/puzzle/provider.py b/poetry/puzzle/provider.py index 3e5a11917b1..aa68e74b6b8 100755 --- a/poetry/puzzle/provider.py +++ b/poetry/puzzle/provider.py @@ -151,6 +151,21 @@ def search_for(self, dependency): # type: (Dependency) -> List[DependencyPackag return PackageCollection(dependency, packages) + def _get_from_deferred_cache(self, dependency): # type (Dependency) -> Optional[Package] + if dependency not in self._deferred_cache: + return None + + package = self._deferred_cache[dependency] + dependency._constraint = package.version + dependency._pretty_constraint = package.version.text + + if not dependency._source_reference: + dependency._source_reference = package.source_reference + if not dependency._source_resolved_reference: + dependency._source_resolved_reference = package.source_resolved_reference + + return package + def search_for_vcs(self, dependency): # type: (VCSDependency) -> List[Package] """ Search for the specifications that match the given VCS dependency. @@ -158,8 +173,10 @@ def search_for_vcs(self, dependency): # type: (VCSDependency) -> List[Package] Basically, we clone the repository in a temporary directory and get the information we need by checking out the specified reference. """ - if dependency in self._deferred_cache: - return [self._deferred_cache[dependency]] + cached = self._get_from_deferred_cache(dependency) + if cached is not None: + print("!!!! get from deferred_cache", dependency, "::", self._deferred_cache[dependency]) + return [cached] package = self.get_package_from_vcs( dependency.vcs, @@ -181,7 +198,7 @@ def search_for_vcs(self, dependency): # type: (VCSDependency) -> List[Package] @classmethod def get_package_from_vcs( cls, vcs, url, branch=None, tag=None, rev=None, name=None - ): # type: (str, str, Optional[str], Optional[str]) -> Package + ): # type: (str, str, Optional[str], Optional[str], Optional[str], Optional[str]) -> Package if vcs != "git": raise ValueError("Unsupported VCS dependency {}".format(vcs)) @@ -213,8 +230,9 @@ def get_package_from_vcs( return package def search_for_file(self, dependency): # type: (FileDependency) -> List[Package] - if dependency in self._deferred_cache: - dependency, _package = self._deferred_cache[dependency] + cached = self._get_from_deferred_cache(dependency) + if cached is not None: + dependency, _package = cached package = _package.clone() else: @@ -258,8 +276,9 @@ def get_package_from_file(cls, file_path): # type: (Path) -> Package def search_for_directory( self, dependency ): # type: (DirectoryDependency) -> List[Package] - if dependency in self._deferred_cache: - dependency, _package = self._deferred_cache[dependency] + cached = self._get_from_deferred_cache(dependency) + if cached is not None: + dependency, _package = cached package = _package.clone() else: @@ -298,8 +317,9 @@ def get_package_from_directory( return package def search_for_url(self, dependency): # type: (URLDependency) -> List[Package] - if dependency in self._deferred_cache: - return [self._deferred_cache[dependency]] + cached = self._get_from_deferred_cache(dependency) + if cached is not None: + return [cached] package = self.get_package_from_url(dependency.url) diff --git a/poetry/repositories/base_repository.py b/poetry/repositories/base_repository.py index 46422ca0edc..aaf87a5d387 100644 --- a/poetry/repositories/base_repository.py +++ b/poetry/repositories/base_repository.py @@ -1,15 +1,20 @@ +from typing import List +from typing import Optional + +from poetry.core.packages.package import Package + class BaseRepository(object): def __init__(self): - self._packages = [] + self._packages = [] # type: List[Package] @property - def packages(self): + def packages(self): # type: () -> List[Package] return self._packages def has_package(self, package): raise NotImplementedError() - def package(self, name, version, extras=None): + def package(self, name, version, extras=None): # type: (str, str, Optional[List[str]]) -> Package raise NotImplementedError() def find_packages(self, dependency): diff --git a/poetry/repositories/repository.py b/poetry/repositories/repository.py index 1ebe702bb9c..c781c85ac16 100755 --- a/poetry/repositories/repository.py +++ b/poetry/repositories/repository.py @@ -1,6 +1,10 @@ +from typing import List +from typing import Optional + from poetry.core.semver import VersionConstraint from poetry.core.semver import VersionRange from poetry.core.semver import parse_constraint +from poetry.core.packages.package import Package from .base_repository import BaseRepository @@ -21,7 +25,7 @@ def __init__(self, packages=None, name=None): def name(self): return self._name - def package(self, name, version, extras=None): + def package(self, name, version, extras=None): # type: (str, str, Optional[List[str]]) -> Package name = name.lower() for package in self.packages: