Skip to content

Commit 085765f

Browse files
committed
refactor: split up large method (#823)
1 parent cbb8dd1 commit 085765f

File tree

1 file changed

+74
-65
lines changed

1 file changed

+74
-65
lines changed

src/poetry/core/factory.py

Lines changed: 74 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@
1616
from packaging.utils import canonicalize_name
1717

1818
from poetry.core.packages.dependency import Dependency
19+
from poetry.core.packages.dependency_group import DependencyGroup
1920
from poetry.core.utils.helpers import combine_unicode
2021
from poetry.core.utils.helpers import readme_content_type
2122

2223

2324
if TYPE_CHECKING:
2425
from packaging.utils import NormalizedName
2526

26-
from poetry.core.packages.dependency_group import DependencyGroup
2727
from poetry.core.packages.project_package import ProjectPackage
2828
from poetry.core.poetry import Poetry
2929
from poetry.core.pyproject.toml import PyProjectTOML
@@ -103,8 +103,8 @@ def _add_package_pep735_group_dependencies(
103103
groups=[group.pretty_name],
104104
)
105105
group.add_dependency(dep)
106-
else:
107-
group_includes.append(constraint["include-group"])
106+
elif include := constraint.get("include-group"):
107+
group_includes.append(include)
108108
return group_includes
109109

110110
@classmethod
@@ -422,68 +422,9 @@ def _configure_package_dependencies(
422422
)
423423

424424
if with_groups:
425-
tool_poetry_groups = tool_poetry.get("group", {})
426-
tool_poetry_groups_normalized = {
427-
canonicalize_name(name): config
428-
for name, config in tool_poetry_groups.items()
429-
}
430-
# create groups from the dependency-groups section considering
431-
# additional information from the corresponding tool.poetry.group section
432-
pep739_include_groups = {}
433-
for group_name, dependencies in dependency_groups.items():
434-
poetry_group_config = tool_poetry_groups_normalized.get(
435-
canonicalize_name(group_name), {}
436-
)
437-
group = DependencyGroup(
438-
name=group_name,
439-
optional=poetry_group_config.get("optional", False),
440-
)
441-
package.add_dependency_group(group)
442-
included_groups = cls._add_package_pep735_group_dependencies(
443-
package=package,
444-
group=group,
445-
dependencies=dependencies,
446-
)
447-
pep739_include_groups[group_name] = included_groups
448-
# create groups from the tool.poetry.group section
449-
# with no corresponding entry in dependency-groups
450-
# and add dependency information for existing groups
451-
poetry_include_groups = {}
452-
for group_name, group_config in tool_poetry_groups.items():
453-
poetry_include_groups[group_name] = group_config.get(
454-
"include-groups", []
455-
)
456-
if package.has_dependency_group(group_name):
457-
group = package.dependency_group(group_name)
458-
else:
459-
group = DependencyGroup(
460-
name=group_name,
461-
optional=group_config.get("optional", False),
462-
)
463-
package.add_dependency_group(group)
464-
cls._add_package_poetry_group_dependencies(
465-
package=package,
466-
group=group,
467-
dependencies=group_config.get("dependencies", {}),
468-
)
469-
470-
for group_name, include_groups in chain(
471-
pep739_include_groups.items(), poetry_include_groups.items()
472-
):
473-
if include_groups:
474-
current_group = package.dependency_group(group_name)
475-
for name in include_groups:
476-
try:
477-
# `name` isn't normalized,
478-
# but `.dependency_group()` handles that.
479-
group_to_include = package.dependency_group(name)
480-
except ValueError as e:
481-
raise ValueError(
482-
f"Group '{group_name}' includes group '{name}'"
483-
" which is not defined."
484-
) from e
485-
486-
current_group.include_dependency_group(group_to_include)
425+
cls._configure_package_dependency_groups(
426+
package, tool_poetry, dependency_groups
427+
)
487428

488429
if with_groups and "dev-dependencies" in tool_poetry:
489430
cls._add_package_poetry_group_dependencies(
@@ -512,6 +453,74 @@ def _configure_package_dependencies(
512453

513454
package.extras = package_extras
514455

456+
@classmethod
457+
def _configure_package_dependency_groups(
458+
cls,
459+
package: ProjectPackage,
460+
tool_poetry: dict[str, Any],
461+
dependency_groups: dict[str, list[str | dict[str, str]]],
462+
) -> None:
463+
tool_poetry_groups = tool_poetry.get("group", {})
464+
tool_poetry_groups_normalized = {
465+
canonicalize_name(name): config
466+
for name, config in tool_poetry_groups.items()
467+
}
468+
# create groups from the dependency-groups section considering
469+
# additional information from the corresponding tool.poetry.group section
470+
pep739_include_groups = {}
471+
for group_name, dependencies in dependency_groups.items():
472+
poetry_group_config = tool_poetry_groups_normalized.get(
473+
canonicalize_name(group_name), {}
474+
)
475+
group = DependencyGroup(
476+
name=group_name,
477+
optional=poetry_group_config.get("optional", False),
478+
)
479+
package.add_dependency_group(group)
480+
included_groups = cls._add_package_pep735_group_dependencies(
481+
package=package,
482+
group=group,
483+
dependencies=dependencies,
484+
)
485+
pep739_include_groups[group_name] = included_groups
486+
# create groups from the tool.poetry.group section
487+
# with no corresponding entry in dependency-groups
488+
# and add dependency information for existing groups
489+
poetry_include_groups = {}
490+
for group_name, group_config in tool_poetry_groups.items():
491+
poetry_include_groups[group_name] = group_config.get("include-groups", [])
492+
if package.has_dependency_group(group_name):
493+
group = package.dependency_group(group_name)
494+
else:
495+
group = DependencyGroup(
496+
name=group_name,
497+
optional=group_config.get("optional", False),
498+
)
499+
package.add_dependency_group(group)
500+
cls._add_package_poetry_group_dependencies(
501+
package=package,
502+
group=group,
503+
dependencies=group_config.get("dependencies", {}),
504+
)
505+
506+
for group_name, include_groups in chain(
507+
pep739_include_groups.items(), poetry_include_groups.items()
508+
):
509+
if include_groups:
510+
current_group = package.dependency_group(group_name)
511+
for name in include_groups:
512+
try:
513+
# `name` isn't normalized,
514+
# but `.dependency_group()` handles that.
515+
group_to_include = package.dependency_group(name)
516+
except ValueError as e:
517+
raise ValueError(
518+
f"Group '{group_name}' includes group '{name}'"
519+
" which is not defined."
520+
) from e
521+
522+
current_group.include_dependency_group(group_to_include)
523+
515524
@classmethod
516525
def _prepare_formats(
517526
cls,

0 commit comments

Comments
 (0)