コード例 #1
0
def test_directory_dependency_egg_info():
    dependency = DirectoryDependency(DIST_PATH / "demo")

    assert dependency.is_directory()
    assert dependency.name == "demo"
    assert dependency.pretty_constraint == "0.1.2"
    assert dependency.python_versions == "*"

    package = dependency.package
    assert package.name == "demo"
    assert package.pretty_version == "0.1.2"
    assert package.python_versions == "*"
コード例 #2
0
def test_directory_dependency_no_egg_info(mocker):
    mocker.patch("poetry.utils.env.Env.get", return_value=MockEnv())

    dependency = DirectoryDependency(DIST_PATH / "demo")

    assert dependency.is_directory()
    assert dependency.name == "demo"
    assert dependency.pretty_constraint == "0.1.2"
    assert dependency.python_versions == "*"

    package = dependency.package
    assert package.name == "demo"
    assert package.pretty_version == "0.1.2"
    assert package.python_versions == "*"
コード例 #3
0
ファイル: test_provider.py プロジェクト: mgasner/poetry
def test_search_for_directory_setup_read_setup_with_extras(provider, mocker):
    mocker.patch("poetry.utils.env.EnvManager.get", return_value=MockEnv())

    dependency = DirectoryDependency(
        "demo",
        Path(__file__).parent.parent
        / "fixtures"
        / "git"
        / "github.com"
        / "demo"
        / "demo",
    )
    dependency.extras.append("foo")

    package = provider.search_for_directory(dependency)[0]

    assert package.name == "demo"
    assert package.version.text == "0.1.2"
    assert package.requires == [
        get_dependency("pendulum", ">=1.4.4"),
        get_dependency("cleo", optional=True),
    ]
    assert package.extras == {
        "foo": [get_dependency("cleo")],
        "bar": [get_dependency("tomlkit")],
    }
コード例 #4
0
def test_search_for_directory_setup_with_base(provider, directory):
    dependency = DirectoryDependency(
        "demo",
        Path(__file__).parent.parent
        / "fixtures"
        / "git"
        / "github.com"
        / "demo"
        / directory,
        base=Path(__file__).parent.parent
        / "fixtures"
        / "git"
        / "github.com"
        / "demo"
        / directory,
    )

    package = provider.search_for_directory(dependency)[0]

    assert package.name == "demo"
    assert package.version.text == "0.1.2"
    assert package.requires == [get_dependency("pendulum", ">=1.4.4")]
    assert package.extras == {
        "foo": [get_dependency("cleo")],
        "bar": [get_dependency("tomlkit")],
    }
    assert package.root_dir == (
        Path(__file__).parent.parent
        / "fixtures"
        / "git"
        / "github.com"
        / "demo"
        / directory
    )
コード例 #5
0
ファイル: test_provider.py プロジェクト: mgasner/poetry
def test_search_for_directory_poetry(provider):
    dependency = DirectoryDependency(
        "demo", Path(__file__).parent.parent / "fixtures" / "project_with_extras"
    )

    package = provider.search_for_directory(dependency)[0]

    assert package.name == "project-with-extras"
    assert package.version.text == "1.2.3"
    assert package.requires == []
    assert package.extras == {
        "extras_a": [get_dependency("pendulum", ">=1.4.4")],
        "extras_b": [get_dependency("cachy", ">=0.2.0")],
    }
コード例 #6
0
def test_search_for_directory_setup_read_setup_with_no_dependencies(
        provider, mocker):
    mocker.patch("poetry.utils.env.EnvManager.get", return_value=MockEnv())

    dependency = DirectoryDependency(
        "demo",
        Path(__file__).parent.parent / "fixtures" / "git" / "github.com" /
        "demo" / "no-dependencies",
    )

    package = provider.search_for_directory(dependency)[0]

    assert package.name == "demo"
    assert package.version.text == "0.1.2"
    assert package.requires == []
    assert package.extras == {}
コード例 #7
0
def test_search_for_directory_setup_egg_info_with_extras(provider):
    dependency = DirectoryDependency(
        "demo",
        Path(__file__).parent.parent / "fixtures" / "git" / "github.com" /
        "demo" / "demo",
    )
    dependency.extras.append("foo")

    package = provider.search_for_directory(dependency)[0]

    assert package.name == "demo"
    assert package.version.text == "0.1.2"
    assert package.requires == [
        get_dependency("pendulum", ">=1.4.4"),
        get_dependency("cleo", optional=True),
    ]
    assert package.extras == {
        "foo": [get_dependency("cleo")],
        "bar": [get_dependency("tomlkit")],
    }
コード例 #8
0
def test_directory_dependency_must_exist():
    with pytest.raises(ValueError):
        DirectoryDependency("demo", DIST_PATH / "invalid")
コード例 #9
0
    def _export_requirements_txt(
        self,
        cwd,
        output,
        with_hashes=True,
        dev=False,
        extras=None,
        with_credentials=False,
    ):  # type: (Path, Union[IO, str], bool, bool, bool) -> None
        indexes = []
        content = ""

        # Generate a list of package names we have opted into via `extras`
        extras_set = frozenset(extras or ())
        extra_package_names = set()
        if extras:
            for extra_name, extra_packages in self._poetry.locker.lock_data.get(
                    "extras", {}).items():
                if extra_name in extras_set:
                    extra_package_names.update(extra_packages)

        for package in sorted(
                self._poetry.locker.locked_repository(dev).packages,
                key=lambda p: p.name):
            # If a package is optional and we haven't opted in to it, continue
            if package.optional and package.name not in extra_package_names:
                continue

            if package.source_type == "git":
                dependency = VCSDependency(
                    package.name,
                    package.source_type,
                    package.source_url,
                    package.source_reference,
                )
                dependency.marker = package.marker
                line = "-e git+{}@{}#egg={}".format(package.source_url,
                                                    package.source_reference,
                                                    package.name)
            elif package.source_type in ["directory", "file", "url"]:
                if package.source_type == "file":
                    dependency = FileDependency(package.name,
                                                Path(package.source_url))
                elif package.source_type == "directory":
                    dependency = DirectoryDependency(package.name,
                                                     Path(package.source_url))
                else:
                    dependency = URLDependency(package.name,
                                               package.source_url)

                dependency.marker = package.marker

                line = "{}".format(package.source_url)
                if package.develop:
                    line = "-e " + line
            else:
                dependency = package.to_dependency()
                line = "{}=={}".format(package.name, package.version)

            requirement = dependency.to_pep_508()
            if ";" in requirement:
                line += "; {}".format(requirement.split(";")[1].strip())

            if package.source_type == "legacy" and package.source_url:
                indexes.append(package.source_url)

            if package.files and with_hashes:
                hashes = []
                for f in package.files:
                    h = f["hash"]
                    algorithm = "sha256"
                    if ":" in h:
                        algorithm, h = h.split(":")

                        if algorithm not in self.ALLOWED_HASH_ALGORITHMS:
                            continue

                    hashes.append("{}:{}".format(algorithm, h))

                if hashes:
                    line += " \\\n"
                    for i, h in enumerate(hashes):
                        line += "    --hash={}{}".format(
                            h, " \\\n" if i < len(hashes) - 1 else "")

            line += "\n"
            content += line

        if indexes:
            # If we have extra indexes, we add them to the begin
            # of the output
            indexes_header = ""
            for index in indexes:
                repository = [
                    r for r in self._poetry.pool.repositories
                    if r.url == index.rstrip("/")
                ][0]
                if (self._poetry.pool.has_default()
                        and repository is self._poetry.pool.repositories[0]):
                    url = (repository.authenticated_url
                           if with_credentials else repository.url)
                    indexes_header = "--index-url {}\n".format(url)
                    continue

                url = (repository.authenticated_url
                       if with_credentials else repository.url)
                indexes_header += "--extra-index-url {}\n".format(url)

            content = indexes_header + "\n" + content

        self._output(content, cwd, output)
コード例 #10
0
def test_directory_dependency_with_no_version_should_raise_an_error(mocker):
    mocker.patch("poetry.utils.env.Env.get", return_value=MockEnv())

    with pytest.raises(RuntimeError):
        DirectoryDependency(DIST_PATH / "no-version")