def test_load_kedro_objects(self, tmp_path, mocker): fake_metadata = ProjectMetadata( source_dir=tmp_path / "src", # default config_file=tmp_path / "pyproject.toml", package_name="fake_package_name", project_name="fake_project_name", project_version="0.1", project_path=tmp_path, ) mocker.patch("kedro.framework.session.session.configure_project") mocker.patch( "kedro.framework.startup.bootstrap_project", return_value=fake_metadata, ) mock_line_magic = mocker.MagicMock() mock_line_magic.__name__ = "abc" mocker.patch("kedro.framework.cli.load_entry_points", return_value=[mock_line_magic]) mock_register_line_magic = mocker.patch( "kedro.extras.extensions.ipython.register_line_magic") mock_context = mocker.patch( "kedro.framework.session.KedroSession.load_context") mock_ipython = mocker.patch( "kedro.extras.extensions.ipython.get_ipython") load_kedro_objects(tmp_path) mock_ipython().push.assert_called_once_with( variables={ "context": mock_context(), "catalog": mock_context().catalog, "session": mocker.ANY, }) assert mock_register_line_magic.call_count == 1
def test_bootstrap_project(self, mocker, monkeypatch, tmp_path): monkeypatch.delenv("PYTHONPATH", raising=False) # assume settings.py is okay mocker.patch("kedro.framework.project._validate_module") pyproject_toml_payload = { "tool": { "kedro": { "package_name": "fake_package_name", "project_name": "fake_project_name", "project_version": kedro_version, } } } pyproject_toml = tmp_path / "pyproject.toml" pyproject_toml.write_text(toml.dumps(pyproject_toml_payload)) src_dir = tmp_path / "src" src_dir.mkdir(exist_ok=True) result = bootstrap_project(tmp_path) expected_metadata = { "config_file": pyproject_toml, "package_name": "fake_package_name", "project_name": "fake_project_name", "project_path": tmp_path, "project_version": kedro_version, "source_dir": src_dir, } assert result == ProjectMetadata(**expected_metadata) assert str(src_dir) in sys.path[0] assert os.environ["PYTHONPATH"] == str(src_dir)
def fake_metadata(fake_root_dir): metadata = ProjectMetadata( fake_root_dir / REPO_NAME / "pyproject.toml", PACKAGE_NAME, "CLI Testing Project", fake_root_dir / REPO_NAME, kedro_version, fake_root_dir / REPO_NAME / "src", ) return metadata
def metadata(cli_runner): # pylint: disable=unused-argument # cwd() depends on ^ the isolated filesystem, created by CliRunner() project_path = Path.cwd() return ProjectMetadata( project_path / "pyproject.toml", "hello_world", "Hello world !!!", project_path, kedro_version, project_path / "src", )
def test_load_kedro_objects(self, tmp_path, mocker): # pylint: disable=unused-argument def get_settings_mock(package_name, property_name, default): return default fake_metadata = ProjectMetadata( source_dir=tmp_path / "src", # default config_file=tmp_path / "pyproject.toml", package_name="fake_package_name", project_name="fake_project_name", project_version="0.1", project_path=tmp_path, ) mocker.patch( "kedro.framework.startup._get_project_metadata", return_value=fake_metadata, ) mocker.patch("kedro.framework.cli.utils._add_src_to_path") mock_line_magic = mocker.MagicMock() mock_line_magic.__name__ = "abc" mocker.patch("kedro.framework.cli.load_entry_points", return_value=[mock_line_magic]) mock_register_line_magic = mocker.patch( "kedro.extras.extensions.ipython.register_line_magic") mock_context = mocker.patch( "kedro.framework.session.KedroSession.load_context") mock_get_settings = mocker.patch( "kedro.framework.session.session._get_project_settings", side_effect=get_settings_mock, ) mock_ipython = mocker.patch( "kedro.extras.extensions.ipython.get_ipython") load_kedro_objects(tmp_path) mock_ipython().push.assert_called_once_with( variables={ "context": mock_context(), "catalog": mock_context().catalog, "session": mocker.ANY, }) assert mock_register_line_magic.call_count == 1 expected_calls = [ mocker.call(fake_metadata.package_name, "SESSION_STORE_CLASS", BaseSessionStore), mocker.call(fake_metadata.package_name, "SESSION_STORE_ARGS", {}), mocker.call(fake_metadata.package_name, "HOOKS", ()), mocker.call(fake_metadata.package_name, "DISABLE_HOOKS_FOR_PLUGINS", ()), ] assert mock_get_settings.mock_calls == expected_calls
def test_load_kedro_objects(self, tmp_path, mocker): fake_metadata = ProjectMetadata( source_dir=tmp_path / "src", # default config_file=tmp_path / "pyproject.toml", package_name="fake_package_name", project_name="fake_project_name", project_version="0.1", project_path=tmp_path, ) my_pipelines = {"ds": Pipeline([])} def my_register_pipeline(): return my_pipelines mocker.patch( "kedro.framework.project._ProjectPipelines._get_pipelines_registry_callable", return_value=my_register_pipeline, ) mocker.patch("kedro.framework.project.settings.configure") mocker.patch("kedro.framework.session.session.validate_settings") mocker.patch( "kedro.framework.startup.bootstrap_project", return_value=fake_metadata, ) mock_line_magic = mocker.MagicMock() mock_line_magic.__name__ = "abc" mocker.patch("kedro.framework.cli.load_entry_points", return_value=[mock_line_magic]) mock_register_line_magic = mocker.patch( "kedro.extras.extensions.ipython.register_line_magic") mock_context = mocker.patch( "kedro.framework.session.KedroSession.load_context") mock_ipython = mocker.patch( "kedro.extras.extensions.ipython.get_ipython") reload_kedro(tmp_path) mock_ipython().push.assert_called_once_with( variables={ "context": mock_context(), "catalog": mock_context().catalog, "session": mocker.ANY, "pipelines": my_pipelines, }) mock_register_line_magic.assert_called_once()
def test_valid_toml_file(self, mocker): mocker.patch.object(Path, "is_file", return_value=True) pyproject_toml_payload = { "tool": { "kedro": { "package_name": "fake_package_name", "project_name": "fake_project_name", "project_version": kedro_version, } } } mocker.patch("anyconfig.load", return_value=pyproject_toml_payload) actual = _get_project_metadata(self.project_path) expected = ProjectMetadata( source_dir=self.project_path / "src", # default config_file=self.project_path / "pyproject.toml", package_name="fake_package_name", project_name="fake_project_name", project_version=kedro_version, project_path=self.project_path, ) assert actual == expected