def _create_project(config_path: str, verbose: bool): """Implementation of the kedro new cli command. Args: config_path: In non-interactive mode, the path of the config.yml which should contain the project_name, output_dir and repo_name. verbose: Extensive debug terminal logs. """ # pylint: disable=import-outside-toplevel from cookiecutter.main import cookiecutter # for performance reasons try: if config_path: config = _parse_config(config_path, verbose) config = _check_config_ok(config_path, config) else: config = _get_config_from_prompts() config.setdefault("kedro_version", version) result_path = Path( cookiecutter( str(TEMPLATE_PATH), output_dir=config["output_dir"], no_input=True, extra_context=config, ) ) if not config["include_example"]: (result_path / "data" / "01_raw" / "iris.csv").unlink() pipelines_dir = result_path / "src" / config["python_package"] / "pipelines" for dir_path in [ pipelines_dir / "data_engineering", pipelines_dir / "data_science", ]: shutil.rmtree(str(dir_path)) _clean_pycache(result_path) _print_kedro_new_success_message(result_path) except click.exceptions.Abort: # pragma: no cover _handle_exception("User interrupt.") # we don't want the user to see a stack trace on the cli except Exception: # pylint: disable=broad-except _handle_exception("Failed to generate project.")
def test_clean_pycache(self, tmp_path, mocker): """Test `clean_pycache` utility function""" source = Path(tmp_path) pycache2 = Path(source / "nested1" / "nested2" / "__pycache__").resolve() pycache2.mkdir(parents=True) pycache1 = Path(source / "nested1" / "__pycache__").resolve() pycache1.mkdir() pycache = Path(source / "__pycache__").resolve() pycache.mkdir() mocked_rmtree = mocker.patch("shutil.rmtree") _clean_pycache(source) expected_calls = [ mocker.call(pycache, ignore_errors=True), mocker.call(pycache1, ignore_errors=True), mocker.call(pycache2, ignore_errors=True), ] assert mocked_rmtree.mock_calls == expected_calls