def search_for_file(self, dependency: FileDependency) -> List[Package]: if dependency in self._deferred_cache: dependency, _package = self._deferred_cache[dependency] package = _package.clone() else: package = self.get_package_from_file(dependency.full_path) dependency._constraint = package.version dependency._pretty_constraint = package.version.text self._deferred_cache[dependency] = (dependency, package) if dependency.name != package.name: # For now, the dependency's name must match the actual package's name raise RuntimeError( "The dependency name for {} does not match the actual package's name: {}" .format(dependency.name, package.name)) if dependency.base is not None: package.root_dir = dependency.base package.files = [{ "file": dependency.path.name, "hash": "sha256:" + dependency.hash() }] return [package]
def dependencies(self): if self._dependencies is None: # avoid circular dependency when loading DirectoryDependency from poetry.core.packages import DirectoryDependency from poetry.core.packages import FileDependency from poetry.core.packages import dependency_from_pep_508 self._dependencies = [] for requirement in self.requires: dependency = None try: dependency = dependency_from_pep_508(requirement) except ValueError: # PEP 517 requires can be path if not PEP 508 path = Path(requirement) try: if path.is_file(): dependency = FileDependency(name=canonicalize_name( path.name), path=path) elif path.is_dir(): dependency = DirectoryDependency( name=canonicalize_name(path.name), path=path) except OSError: # compatibility Python < 3.8 # https://docs.python.org/3/library/pathlib.html#methods pass if dependency is None: # skip since we could not determine requirement continue self._dependencies.append(dependency) return self._dependencies
def test_guaranteed_hash(hash_name, expected): path = DIST_PATH / TEST_FILE dep = FileDependency("demo", path) assert dep.hash(hash_name) == expected
def test_default_hash(): path = DIST_PATH / TEST_FILE dep = FileDependency("demo", path) SHA_256 = "72e8531e49038c5f9c4a837b088bfcb8011f4a9f76335c8f0654df6ac539b3d6" assert dep.hash() == SHA_256
def test_file_dependency_dir(): with pytest.raises(ValueError): FileDependency("demo", DIST_PATH)
def test_file_dependency_wrong_path(): with pytest.raises(ValueError): FileDependency("demo", DIST_PATH / TEST_FILE.replace("1", "2"))
def test_file_dependency_wrong_path(): with pytest.raises(ValueError): FileDependency("demo", DIST_PATH / "demo-0.2.0.tar.gz")