Ejemplo n.º 1
0
def package_with_groups():
    package = Package("foo", "1.2.3")

    optional_group = DependencyGroup("optional", optional=True)
    optional_group.add_dependency(Factory.create_dependency("bam", "^3.0.0"))

    package.add_dependency(Factory.create_dependency("bar", "^1.0.0"))
    package.add_dependency(Factory.create_dependency("baz", "^1.1.0"))
    package.add_dependency(Factory.create_dependency("bim", "^2.0.0", groups=["dev"]))
    package.add_dependency_group(optional_group)

    return package
Ejemplo n.º 2
0
    def _add_package_group_dependencies(
        cls,
        package: ProjectPackage,
        group: str | DependencyGroup,
        dependencies: DependencyConfig,
    ) -> None:
        from poetry.core.packages.dependency_group import MAIN_GROUP

        if isinstance(group, str):
            if package.has_dependency_group(group):
                group = package.dependency_group(group)
            else:
                from poetry.core.packages.dependency_group import DependencyGroup

                group = DependencyGroup(group)

        for name, constraints in dependencies.items():
            _constraints = (constraints if isinstance(constraints, list) else
                            [constraints])
            for _constraint in _constraints:
                if name.lower() == "python":
                    if group.name == MAIN_GROUP and isinstance(
                            _constraint, str):
                        package.python_versions = _constraint
                    continue

                group.add_dependency(
                    cls.create_dependency(
                        name,
                        _constraint,
                        groups=[group.name],
                        root_dir=package.root_dir,
                    ))

        package.add_dependency_group(group)
Ejemplo n.º 3
0
    def add_dependency(
        self,
        dependency: Dependency,
    ) -> Dependency:
        from poetry.core.packages.dependency_group import DependencyGroup

        for group_name in dependency.groups:
            if group_name not in self._dependency_groups:
                # Dynamically add the dependency group
                self.add_dependency_group(DependencyGroup(group_name))

            self._dependency_groups[group_name].add_dependency(dependency)

        return dependency
Ejemplo n.º 4
0
def test_show_with_optional_group(tester, poetry, installed):
    poetry.package.add_dependency(Factory.create_dependency("cachy", "^0.1.0"))
    poetry.package.add_dependency(
        Factory.create_dependency("pendulum", "^2.0.0"))
    group = DependencyGroup("dev", optional=True)
    group.add_dependency(
        Factory.create_dependency("pytest", "*", groups=["dev"]))
    poetry.package.add_dependency_group(group)

    cachy_010 = get_package("cachy", "0.1.0")
    cachy_010.description = "Cachy package"

    pendulum_200 = get_package("pendulum", "2.0.0")
    pendulum_200.description = "Pendulum package"

    pytest_373 = get_package("pytest", "3.7.3")
    pytest_373.description = "Pytest package"
    pytest_373.category = "dev"

    installed.add_package(cachy_010)
    installed.add_package(pendulum_200)
    installed.add_package(pytest_373)

    poetry.locker.mock_lock_data({
        "package": [
            {
                "name": "cachy",
                "version": "0.1.0",
                "description": "Cachy package",
                "category": "main",
                "optional": False,
                "platform": "*",
                "python-versions": "*",
                "checksum": [],
            },
            {
                "name": "pendulum",
                "version": "2.0.0",
                "description": "Pendulum package",
                "category": "main",
                "optional": False,
                "platform": "*",
                "python-versions": "*",
                "checksum": [],
            },
            {
                "name": "pytest",
                "version": "3.7.3",
                "description": "Pytest package",
                "category": "dev",
                "optional": False,
                "platform": "*",
                "python-versions": "*",
                "checksum": [],
            },
        ],
        "metadata": {
            "python-versions": "*",
            "platform": "*",
            "content-hash": "123456789",
            "hashes": {
                "cachy": [],
                "pendulum": [],
                "pytest": []
            },
        },
    })

    tester.execute()

    expected = """\
cachy    0.1.0 Cachy package
pendulum 2.0.0 Pendulum package
"""

    assert expected == tester.io.fetch_output()

    tester.execute("--with dev")

    expected = """\
cachy    0.1.0 Cachy package
pendulum 2.0.0 Pendulum package
pytest   3.7.3 Pytest package
"""

    assert expected == tester.io.fetch_output()
Ejemplo n.º 5
0
def test_dependency_group_remove_dependency() -> None:
    group = DependencyGroup(name="linter")
    group.add_dependency(Dependency(name="black", constraint="*"))
    group.add_dependency(Dependency(name="isort", constraint="*"))
    group.add_dependency(Dependency(name="flake8", constraint="*"))

    assert {dependency.name
            for dependency in group.dependencies} == {
                "black",
                "isort",
                "flake8",
            }

    group.remove_dependency("isort")
    assert {dependency.name
            for dependency in group.dependencies} == {"black", "flake8"}

    group.remove_dependency("black")
    assert {dependency.name for dependency in group.dependencies} == {"flake8"}

    group.remove_dependency("flake8")
    assert {dependency.name for dependency in group.dependencies} == set()
Ejemplo n.º 6
0
    def configure_package(
        cls,
        package: ProjectPackage,
        config: dict[str, Any],
        root: Path,
        with_groups: bool = True,
    ) -> ProjectPackage:
        from poetry.core.packages.dependency import Dependency
        from poetry.core.packages.dependency_group import MAIN_GROUP
        from poetry.core.packages.dependency_group import DependencyGroup
        from poetry.core.spdx.helpers import license_by_id

        package.root_dir = root

        for author in config["authors"]:
            package.authors.append(combine_unicode(author))

        for maintainer in config.get("maintainers", []):
            package.maintainers.append(combine_unicode(maintainer))

        package.description = config.get("description", "")
        package.homepage = config.get("homepage")
        package.repository_url = config.get("repository")
        package.documentation_url = config.get("documentation")
        try:
            license_: License | None = license_by_id(config.get("license", ""))
        except ValueError:
            license_ = None

        package.license = license_
        package.keywords = config.get("keywords", [])
        package.classifiers = config.get("classifiers", [])

        if "readme" in config:
            if isinstance(config["readme"], str):
                package.readmes = (root / config["readme"], )
            else:
                package.readmes = tuple(root / readme
                                        for readme in config["readme"])

        if "platform" in config:
            package.platform = config["platform"]

        if "dependencies" in config:
            cls._add_package_group_dependencies(
                package=package,
                group=MAIN_GROUP,
                dependencies=config["dependencies"])

        if with_groups and "group" in config:
            for group_name, group_config in config["group"].items():
                group = DependencyGroup(group_name,
                                        optional=group_config.get(
                                            "optional", False))
                cls._add_package_group_dependencies(
                    package=package,
                    group=group,
                    dependencies=group_config["dependencies"],
                )

        if with_groups and "dev-dependencies" in config:
            cls._add_package_group_dependencies(
                package=package,
                group="dev",
                dependencies=config["dev-dependencies"])

        extras = config.get("extras", {})
        for extra_name, requirements in extras.items():
            package.extras[extra_name] = []

            # Checking for dependency
            for req in requirements:
                req = Dependency(req, "*")

                for dep in package.requires:
                    if dep.name == req.name:
                        dep.in_extras.append(extra_name)
                        package.extras[extra_name].append(dep)

                        break

        if "build" in config:
            build = config["build"]
            if not isinstance(build, dict):
                build = {"script": build}
            package.build_config = build or {}

        if "include" in config:
            package.include = []

            for include in config["include"]:
                if not isinstance(include, dict):
                    include = {"path": include}

                formats = include.get("format", [])
                if formats and not isinstance(formats, list):
                    formats = [formats]
                include["format"] = formats

                package.include.append(include)

        if "exclude" in config:
            package.exclude = config["exclude"]

        if "packages" in config:
            package.packages = config["packages"]

        # Custom urls
        if "urls" in config:
            package.custom_urls = config["urls"]

        return package