Skip to content

Commit e765d93

Browse files
committed
split up large method
1 parent ec5b21b commit e765d93

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
@@ -15,14 +15,14 @@
1515
from packaging.utils import canonicalize_name
1616

1717
from poetry.core.packages.dependency import Dependency
18+
from poetry.core.packages.dependency_group import DependencyGroup
1819
from poetry.core.utils.helpers import combine_unicode
1920
from poetry.core.utils.helpers import readme_content_type
2021

2122

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

25-
from poetry.core.packages.dependency_group import DependencyGroup
2626
from poetry.core.packages.project_package import ProjectPackage
2727
from poetry.core.poetry import Poetry
2828
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
@@ -367,68 +367,9 @@ def _configure_package_dependencies(
367367
)
368368

369369
if with_groups:
370-
tool_poetry_groups = tool_poetry.get("group", {})
371-
tool_poetry_groups_normalized = {
372-
canonicalize_name(name): config
373-
for name, config in tool_poetry_groups.items()
374-
}
375-
# create groups from the dependency-groups section considering
376-
# additional information from the corresponding tool.poetry.group section
377-
pep739_include_groups = {}
378-
for group_name, dependencies in dependency_groups.items():
379-
poetry_group_config = tool_poetry_groups_normalized.get(
380-
canonicalize_name(group_name), {}
381-
)
382-
group = DependencyGroup(
383-
name=group_name,
384-
optional=poetry_group_config.get("optional", False),
385-
)
386-
package.add_dependency_group(group)
387-
included_groups = cls._add_package_pep735_group_dependencies(
388-
package=package,
389-
group=group,
390-
dependencies=dependencies,
391-
)
392-
pep739_include_groups[group_name] = included_groups
393-
# create groups from the tool.poetry.group section
394-
# with no corresponding entry in dependency-groups
395-
# and add dependency information for existing groups
396-
poetry_include_groups = {}
397-
for group_name, group_config in tool_poetry_groups.items():
398-
poetry_include_groups[group_name] = group_config.get(
399-
"include-groups", []
400-
)
401-
if package.has_dependency_group(group_name):
402-
group = package.dependency_group(group_name)
403-
else:
404-
group = DependencyGroup(
405-
name=group_name,
406-
optional=group_config.get("optional", False),
407-
)
408-
package.add_dependency_group(group)
409-
cls._add_package_poetry_group_dependencies(
410-
package=package,
411-
group=group,
412-
dependencies=group_config.get("dependencies", {}),
413-
)
414-
415-
for group_name, include_groups in chain(
416-
pep739_include_groups.items(), poetry_include_groups.items()
417-
):
418-
if include_groups:
419-
current_group = package.dependency_group(group_name)
420-
for name in include_groups:
421-
try:
422-
# `name` isn't normalized,
423-
# but `.dependency_group()` handles that.
424-
group_to_include = package.dependency_group(name)
425-
except ValueError as e:
426-
raise ValueError(
427-
f"Group '{group_name}' includes group '{name}'"
428-
" which is not defined."
429-
) from e
430-
431-
current_group.include_dependency_group(group_to_include)
370+
cls._configure_package_dependency_groups(
371+
package, tool_poetry, dependency_groups
372+
)
432373

433374
if with_groups and "dev-dependencies" in tool_poetry:
434375
cls._add_package_poetry_group_dependencies(
@@ -457,6 +398,74 @@ def _configure_package_dependencies(
457398

458399
package.extras = package_extras
459400

401+
@classmethod
402+
def _configure_package_dependency_groups(
403+
cls,
404+
package: ProjectPackage,
405+
tool_poetry: dict[str, Any],
406+
dependency_groups: dict[str, list[str | dict[str, str]]],
407+
) -> None:
408+
tool_poetry_groups = tool_poetry.get("group", {})
409+
tool_poetry_groups_normalized = {
410+
canonicalize_name(name): config
411+
for name, config in tool_poetry_groups.items()
412+
}
413+
# create groups from the dependency-groups section considering
414+
# additional information from the corresponding tool.poetry.group section
415+
pep739_include_groups = {}
416+
for group_name, dependencies in dependency_groups.items():
417+
poetry_group_config = tool_poetry_groups_normalized.get(
418+
canonicalize_name(group_name), {}
419+
)
420+
group = DependencyGroup(
421+
name=group_name,
422+
optional=poetry_group_config.get("optional", False),
423+
)
424+
package.add_dependency_group(group)
425+
included_groups = cls._add_package_pep735_group_dependencies(
426+
package=package,
427+
group=group,
428+
dependencies=dependencies,
429+
)
430+
pep739_include_groups[group_name] = included_groups
431+
# create groups from the tool.poetry.group section
432+
# with no corresponding entry in dependency-groups
433+
# and add dependency information for existing groups
434+
poetry_include_groups = {}
435+
for group_name, group_config in tool_poetry_groups.items():
436+
poetry_include_groups[group_name] = group_config.get("include-groups", [])
437+
if package.has_dependency_group(group_name):
438+
group = package.dependency_group(group_name)
439+
else:
440+
group = DependencyGroup(
441+
name=group_name,
442+
optional=group_config.get("optional", False),
443+
)
444+
package.add_dependency_group(group)
445+
cls._add_package_poetry_group_dependencies(
446+
package=package,
447+
group=group,
448+
dependencies=group_config.get("dependencies", {}),
449+
)
450+
451+
for group_name, include_groups in chain(
452+
pep739_include_groups.items(), poetry_include_groups.items()
453+
):
454+
if include_groups:
455+
current_group = package.dependency_group(group_name)
456+
for name in include_groups:
457+
try:
458+
# `name` isn't normalized,
459+
# but `.dependency_group()` handles that.
460+
group_to_include = package.dependency_group(name)
461+
except ValueError as e:
462+
raise ValueError(
463+
f"Group '{group_name}' includes group '{name}'"
464+
" which is not defined."
465+
) from e
466+
467+
current_group.include_dependency_group(group_to_include)
468+
460469
@classmethod
461470
def _prepare_formats(
462471
cls,

0 commit comments

Comments
 (0)