Skip to content

Commit

Permalink
Load micropackage dependencies statically
Browse files Browse the repository at this point in the history
Signed-off-by: Juan Luis Cano Rodríguez <juan_luis_cano@mckinsey.com>
  • Loading branch information
astrojuanlu committed Dec 19, 2023
1 parent c30b94b commit 8d1fbe0
Show file tree
Hide file tree
Showing 3 changed files with 5 additions and 23 deletions.
15 changes: 4 additions & 11 deletions kedro/framework/cli/micropkg.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,13 @@
from omegaconf import OmegaConf
from packaging.requirements import InvalidRequirement, Requirement
from packaging.utils import canonicalize_name
from pyproject_metadata import StandardMetadata
from rope.base.project import Project
from rope.contrib import generate
from rope.refactor.move import MoveModule
from rope.refactor.rename import Rename
from setuptools.discovery import FlatLayoutPackageFinder

from build.util import project_wheel_metadata
from kedro.framework.cli.pipeline import (
_assert_pkg_name_ok,
_check_pipeline_name,
Expand Down Expand Up @@ -212,12 +212,8 @@ def _pull_package( # noqa: PLR0913
)
project_root_dir = contents[0]

# This is much slower than parsing the requirements
# directly from the metadata files
# because it installs the package in an isolated environment,
# but it's the only reliable way of doing it
# without making assumptions on the project metadata.
library_meta = project_wheel_metadata(project_root_dir)
with open(project_root_dir / "pyproject.toml") as fh:
library_meta = StandardMetadata.from_pyproject(toml.load(fh))

# Project name will be `my-pipeline` even if `pyproject.toml` says `my_pipeline`
# because standards mandate normalization of names for comparison,
Expand Down Expand Up @@ -967,10 +963,7 @@ def _get_all_library_reqs(metadata):
"""Get all library requirements from metadata, leaving markers intact."""
# See https://discuss.python.org/t/\
# programmatically-getting-non-optional-requirements-of-current-directory/26963/2
return [
str(_EquivalentRequirement(dep_str))
for dep_str in metadata.get_all("Requires-Dist", [])
]
return [str(_EquivalentRequirement(str(dep))) for dep in metadata.dependencies]


def _safe_parse_requirements(
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ description = "Kedro helps you build production-ready data and analytics pipelin
requires-python = ">=3.8"
dependencies = [
"attrs>=21.3",
"build>=0.7.0",
"cachetools>=4.1",
"click>=4.0",
"cookiecutter>=2.1.1,<3.0",
Expand All @@ -29,6 +28,7 @@ dependencies = [
"parse>=1.19.0",
"pluggy>=1.0",
"pre-commit-hooks",
"pyproject_metadata",
"PyYAML>=4.2,<7.0",
"rich>=12.0,<14.0",
"rope>=0.21,<2.0", # subject to LGPLv3 license
Expand Down
11 changes: 0 additions & 11 deletions tests/framework/cli/micropkg/test_micropkg_pull.py
Original file line number Diff line number Diff line change
Expand Up @@ -584,17 +584,6 @@ def test_pull_from_pypi(
return_value=tmp_path,
)

# Mock needed to avoid an error when build.util.project_wheel_metadata
# calls tempfile.TemporaryDirectory, which is mocked
class _FakeWheelMetadata:
def get_all(self, name, failobj=None):
return []

mocker.patch(
"kedro.framework.cli.micropkg.project_wheel_metadata",
return_value=_FakeWheelMetadata(),
)

options = ["-e", env] if env else []
options += ["--alias", alias] if alias else []

Expand Down

0 comments on commit 8d1fbe0

Please sign in to comment.