Esempio n. 1
0
    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]
Esempio n. 2
0
    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
Esempio n. 3
0
def test_guaranteed_hash(hash_name, expected):
    path = DIST_PATH / TEST_FILE
    dep = FileDependency("demo", path)
    assert dep.hash(hash_name) == expected
Esempio n. 4
0
def test_default_hash():
    path = DIST_PATH / TEST_FILE
    dep = FileDependency("demo", path)
    SHA_256 = "72e8531e49038c5f9c4a837b088bfcb8011f4a9f76335c8f0654df6ac539b3d6"
    assert dep.hash() == SHA_256
Esempio n. 5
0
def test_file_dependency_dir():
    with pytest.raises(ValueError):
        FileDependency("demo", DIST_PATH)
Esempio n. 6
0
def test_file_dependency_wrong_path():
    with pytest.raises(ValueError):
        FileDependency("demo", DIST_PATH / TEST_FILE.replace("1", "2"))
Esempio n. 7
0
def test_file_dependency_wrong_path():
    with pytest.raises(ValueError):
        FileDependency("demo", DIST_PATH / "demo-0.2.0.tar.gz")