From 9e9449cf153a3044ceff8dd33a3a046b5d9b0146 Mon Sep 17 00:00:00 2001 From: Jo Stichbury Date: Mon, 30 Oct 2023 15:32:53 +0000 Subject: [PATCH 01/27] Revise link to notebook docs and remove unnecessary intro page Signed-off-by: Jo Stichbury --- docs/source/introduction/index.md | 18 +++++++++++++----- docs/source/introduction/introduction.md | 16 ---------------- docs/source/resources/glossary.md | 2 +- 3 files changed, 14 insertions(+), 22 deletions(-) delete mode 100644 docs/source/introduction/introduction.md diff --git a/docs/source/introduction/index.md b/docs/source/introduction/index.md index dee8eaeee3..a8ac23d9ee 100644 --- a/docs/source/introduction/index.md +++ b/docs/source/introduction/index.md @@ -1,10 +1,18 @@ # Introduction to Kedro -```{toctree} -:hidden: -introduction -``` - Kedro is an open-source Python framework to create reproducible, maintainable, and modular data science code. It uses software engineering best practices to help you build production-ready data science pipelines. Kedro is hosted by the [LF AI & Data Foundation](https://lfaidata.foundation/), and you can find the [Kedro source code on GitHub](https://github.com/kedro-org/kedro). + +In the following chapters, you will learn [how to set up Kedro](../get_started/install.md) and discover the [key Kedro concepts](../get_started/kedro_concepts.md). You can then review the [spaceflights tutorial](../tutorial/tutorial_template.md) to get hands-on experience with a Kedro project. + +For new and intermediate Kedro users, there's a comprehensive section on [visualising Kedro projects using Kedro-Viz](../visualisation/kedro-viz_visualisation.md) and [working with Kedro and Jupyter notebooks](../notebooks_and_ipython/index.md). + +Use the left-hand table of contents to explore the documentation available for more advanced Kedro usage and deployment. We also recommend the [glossary](../resources/glossary.md) and the [API reference documentation](/kedro). + +```{note} +We have designed the preliminary documentation and the [spaceflights tutorial](../tutorial/spaceflights_tutorial.md) for anyone new to Kedro. The more knowledge of Python you have, the easier you will find the learning curve. + +There are many excellent online resources for learning Python; you should choose those that reference Python 3, as Kedro is built for Python 3.8+. There are curated lists of online resources, such as the [official Python programming language website](https://www.python.org/) and this list of [free programming books and tutorials](https://github.com/EbookFoundation/free-programming-books/blob/master/books/free-programming-books-langs.md#python). + +``` diff --git a/docs/source/introduction/introduction.md b/docs/source/introduction/introduction.md deleted file mode 100644 index 6749a1dc49..0000000000 --- a/docs/source/introduction/introduction.md +++ /dev/null @@ -1,16 +0,0 @@ -# Learn how to use Kedro - -In the following chapters, you will learn [how to set up Kedro](../get_started/install.md) and discover the [key Kedro concepts](../get_started/kedro_concepts.md). You can then review the [spaceflights tutorial](../tutorial/tutorial_template.md) to get hands-on experience with a Kedro project. - -For new and intermediate Kedro users, there's a comprehensive section on [visualising Kedro projects using Kedro-Viz](../visualisation/kedro-viz_visualisation.md) and [working with Kedro and Jupyter notebooks](../notebooks_and_ipython/kedro_and_notebooks). - -Use the left-hand table of contents to explore the documentation available for more advanced Kedro usage and deployment. We also recommend the [glossary](../resources/glossary.md) and the [API reference documentation](/kedro). - -## Assumptions - -We have designed the preliminary documentation and the [spaceflights tutorial](../tutorial/spaceflights_tutorial.md) for anyone new to Kedro. The more knowledge of Python you have, the easier you will find the learning curve. - -```{note} -There are many excellent online resources for learning Python; you should choose those that reference Python 3, as Kedro is built for Python 3.8+. There are curated lists of online resources, such as the [official Python programming language website](https://www.python.org/) and this list of [free programming books and tutorials](https://github.com/EbookFoundation/free-programming-books/blob/master/books/free-programming-books-langs.md#python). - -``` diff --git a/docs/source/resources/glossary.md b/docs/source/resources/glossary.md index 4f382d9b78..57acb7d801 100644 --- a/docs/source/resources/glossary.md +++ b/docs/source/resources/glossary.md @@ -14,7 +14,7 @@ Data science extracts insights from data by using a combination of domain expert ## Kedro Kedro is an open-source Python framework for creating reproducible, maintainable and modular data science code. It applies software engineering best-practices to machine learning code, including modularity, separation of concerns and versioning. -[Introduction to Kedro](../introduction/introduction.md) +[Introduction to Kedro](../introduction/index.md) ## `KedroContext` A Python class that holds the configuration and Kedro’s main functionality. From c5b5b0d981a5560728e75822293834b183ee273f Mon Sep 17 00:00:00 2001 From: Jo Stichbury Date: Mon, 30 Oct 2023 15:50:46 +0000 Subject: [PATCH 02/27] Update starters content Signed-off-by: Jo Stichbury --- docs/source/index.rst | 6 ++ docs/source/kedro_project_setup/starters.md | 85 +-------------------- docs/source/starters/index.md | 83 ++++++++++++++++++++ 3 files changed, 90 insertions(+), 84 deletions(-) create mode 100644 docs/source/starters/index.md diff --git a/docs/source/index.rst b/docs/source/index.rst index 6de5274198..efaaed1d40 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -104,6 +104,12 @@ Welcome to Kedro's documentation! nodes_and_pipelines/index.md +.. toctree:: + :maxdepth: 2 + + starters/index.md + + .. toctree:: :maxdepth: 2 :caption: Advanced usage diff --git a/docs/source/kedro_project_setup/starters.md b/docs/source/kedro_project_setup/starters.md index 62301daf25..ba1af321f5 100644 --- a/docs/source/kedro_project_setup/starters.md +++ b/docs/source/kedro_project_setup/starters.md @@ -1,87 +1,4 @@ -# Kedro starters - -A Kedro starter contains code in the form of a [Cookiecutter](https://cookiecutter.readthedocs.io/en/1.7.2/) template for a Kedro project. Metaphorically, a starter is similar to using a pre-defined layout when creating a presentation or document. - -Kedro starters provide pre-defined example code and configuration that can be reused, for example: - -* As template code for a typical Kedro project -* To add a `docker-compose` setup to launch Kedro next to a monitoring stack -* To add deployment scripts and CI/CD setup for your targeted infrastructure - -You can create your own starters for reuse within a project or team, as described in the documentation about [how to create a Kedro starter](../kedro_project_setup/starters.md#how-to-create-a-kedro-starter). - -## How to use Kedro starters - -To create a Kedro project using a starter, apply the `--starter` flag to `kedro new`: - -```bash -kedro new --starter= -``` - -```{note} -`path-to-starter` could be a local directory or a VCS repository, as long as [Cookiecutter](https://cookiecutter.readthedocs.io/en/1.7.2/usage.html) supports it. -``` - -To create a project using the `PySpark` starter: - -```bash -kedro new --starter=pyspark -``` - -## Starter aliases - -We provide aliases for common starters maintained by the Kedro team so that users don't have to specify the full path. For example, to use the `PySpark` starter to create a project: - -```bash -kedro new --starter=pyspark -``` - -To list all the aliases we support: - -```bash -kedro starter list -``` - -## List of official starters - -The Kedro team maintains the following starters for a range of Kedro projects: - -* [`astro-airflow-iris`](https://github.com/kedro-org/kedro-starters/tree/main/astro-airflow-iris): The [Kedro Iris dataset example project](../get_started/new_project.md) with a minimal setup for deploying the pipeline on Airflow with [Astronomer](https://www.astronomer.io/). -* [`standalone-datacatalog`](https://github.com/kedro-org/kedro-starters/tree/main/standalone-datacatalog): A minimum setup to use the traditional [Iris dataset](https://www.kaggle.com/uciml/iris) with Kedro's [`DataCatalog`](../data/data_catalog.md), which is a core component of Kedro. This starter is of use in the exploratory phase of a project. It was formerly known as `mini-kedro`. -* [`pandas-iris`](https://github.com/kedro-org/kedro-starters/tree/main/pandas-iris): The [Kedro Iris dataset example project](../get_started/new_project.md) -* [`pyspark-iris`](https://github.com/kedro-org/kedro-starters/tree/main/pyspark-iris): An alternative Kedro Iris dataset example, using [PySpark](../integrations/pyspark_integration.md) -* [`pyspark`](https://github.com/kedro-org/kedro-starters/tree/main/pyspark): The configuration and initialisation code for a [Kedro pipeline using PySpark](../integrations/pyspark_integration.md) -* [`spaceflights-pandas`](https://github.com/kedro-org/kedro-starters/tree/main/spaceflights-pandas): The [spaceflights tutorial](../tutorial/spaceflights_tutorial.md) example code with `pandas` datasets. -* [`spaceflights-pandas-viz`](https://github.com/kedro-org/kedro-starters/tree/main/spaceflights-pandas-viz): The [spaceflights tutorial](../tutorial/spaceflights_tutorial.md) example code with `pandas` datasets and visualisation and experiment tracking `kedro-viz` features. -* [`spaceflights-pyspark`](https://github.com/kedro-org/kedro-starters/tree/main/spaceflights-pyspark): The [spaceflights tutorial](../tutorial/spaceflights_tutorial.md) example code with `pyspark` datasets. -* [`spaceflights-pyspark-viz`](https://github.com/kedro-org/kedro-starters/tree/main/spaceflights-pyspark-viz): The [spaceflights tutorial](../tutorial/spaceflights_tutorial.md) example code with `pyspark` datasets and visualisation and experiment tracking `kedro-viz` features. - -## Starter versioning - -By default, Kedro will use the latest version available in the repository, but if you want to use a specific version of a starter, you can pass a `--checkout` argument to the command: - -```bash -kedro new --starter=pyspark --checkout=0.1.0 -``` - -The `--checkout` value points to a branch, tag or commit in the starter repository. - -Under the hood, the value will be passed to the [`--checkout` flag in Cookiecutter](https://cookiecutter.readthedocs.io/en/1.7.2/usage.html#works-directly-with-git-and-hg-mercurial-repos-too). - - -## Use a starter with a configuration file - -By default, when you create a new project using a starter, `kedro new` asks you to enter the `project_name`, which it uses to set the `repo_name` and `python_package` name. This is the same behavior as when you [create a new empty project](../get_started/new_project.md#create-a-new-empty-project) - -However, Kedro also allows you to [specify a configuration file](../get_started/new_project.md#create-a-new-project-from-a-configuration-file) when you create a project using a Kedro starter. Use the `--config` flag alongside the starter: - -```bash -kedro new --config=my_kedro_pyspark_project.yml --starter=pyspark -``` - -This option is useful when the starter requires more configuration than the default mode requires. - -## How to create a Kedro starter +# How to create a Kedro starter Kedro starters are used to create projects that contain code to run as-is, or to adapt and extend. A good example is the Iris dataset example of basic Kedro project layout, configuration and initialisation code. A team may find it useful to build Kedro starters to create reusable projects that bootstrap a common base and can be extended. diff --git a/docs/source/starters/index.md b/docs/source/starters/index.md new file mode 100644 index 0000000000..d970fcc2c8 --- /dev/null +++ b/docs/source/starters/index.md @@ -0,0 +1,83 @@ +# Kedro starters + +A Kedro starter contains code in the form of a [Cookiecutter](https://cookiecutter.readthedocs.io/en/1.7.2/) template for a Kedro project. Metaphorically, a starter is similar to using a pre-defined layout when creating a presentation or document. + +Kedro starters provide pre-defined example code and configuration that can be reused, for example: + +* As template code for a typical Kedro project +* To add a `docker-compose` setup to launch Kedro next to a monitoring stack +* To add deployment scripts and CI/CD setup for your targeted infrastructure + +You can create your own starters for reuse within a project or team, as described in the documentation about [how to create a Kedro starter](../kedro_project_setup/starters.md#how-to-create-a-kedro-starter). + +## How to use Kedro starters + +To create a Kedro project using a starter, apply the `--starter` flag to `kedro new`: + +```bash +kedro new --starter= +``` + +```{note} +`path-to-starter` could be a local directory or a VCS repository, as long as [Cookiecutter](https://cookiecutter.readthedocs.io/en/1.7.2/usage.html) supports it. +``` + +To create a project using the `PySpark` starter: + +```bash +kedro new --starter=pyspark +``` + +## Starter aliases + +We provide aliases for common starters maintained by the Kedro team so that users don't have to specify the full path. For example, to use the `PySpark` starter to create a project: + +```bash +kedro new --starter=pyspark +``` + +To list all the aliases we support: + +```bash +kedro starter list +``` + +## List of official starters + +The Kedro team maintains the following starters for a range of Kedro projects: + +* [`astro-airflow-iris`](https://github.com/kedro-org/kedro-starters/tree/main/astro-airflow-iris): The [Kedro Iris dataset example project](../get_started/new_project.md) with a minimal setup for deploying the pipeline on Airflow with [Astronomer](https://www.astronomer.io/). +* [`standalone-datacatalog`](https://github.com/kedro-org/kedro-starters/tree/main/standalone-datacatalog): A minimum setup to use the traditional [Iris dataset](https://www.kaggle.com/uciml/iris) with Kedro's [`DataCatalog`](../data/data_catalog.md), which is a core component of Kedro. This starter is of use in the exploratory phase of a project. It was formerly known as `mini-kedro`. +* [`pandas-iris`](https://github.com/kedro-org/kedro-starters/tree/main/pandas-iris): The [Kedro Iris dataset example project](../get_started/new_project.md) +* [`pyspark-iris`](https://github.com/kedro-org/kedro-starters/tree/main/pyspark-iris): An alternative Kedro Iris dataset example, using [PySpark](../integrations/pyspark_integration.md) +* [`pyspark`](https://github.com/kedro-org/kedro-starters/tree/main/pyspark): The configuration and initialisation code for a [Kedro pipeline using PySpark](../integrations/pyspark_integration.md) +* [`spaceflights-pandas`](https://github.com/kedro-org/kedro-starters/tree/main/spaceflights-pandas): The [spaceflights tutorial](../tutorial/spaceflights_tutorial.md) example code with `pandas` datasets. +* [`spaceflights-pandas-viz`](https://github.com/kedro-org/kedro-starters/tree/main/spaceflights-pandas-viz): The [spaceflights tutorial](../tutorial/spaceflights_tutorial.md) example code with `pandas` datasets and visualisation and experiment tracking `kedro-viz` features. +* [`spaceflights-pyspark`](https://github.com/kedro-org/kedro-starters/tree/main/spaceflights-pyspark): The [spaceflights tutorial](../tutorial/spaceflights_tutorial.md) example code with `pyspark` datasets. +* [`spaceflights-pyspark-viz`](https://github.com/kedro-org/kedro-starters/tree/main/spaceflights-pyspark-viz): The [spaceflights tutorial](../tutorial/spaceflights_tutorial.md) example code with `pyspark` datasets and visualisation and experiment tracking `kedro-viz` features. + +## Starter versioning + +By default, Kedro will use the latest version available in the repository, but if you want to use a specific version of a starter, you can pass a `--checkout` argument to the command: + +```bash +kedro new --starter=pyspark --checkout=0.1.0 +``` + +The `--checkout` value points to a branch, tag or commit in the starter repository. + +Under the hood, the value will be passed to the [`--checkout` flag in Cookiecutter](https://cookiecutter.readthedocs.io/en/1.7.2/usage.html#works-directly-with-git-and-hg-mercurial-repos-too). + + +## Use a starter with a configuration file + +By default, when you create a new project using a starter, `kedro new` asks you to enter the `project_name`, which it uses to set the `repo_name` and `python_package` name. This is the same behavior as when you [create a new empty project](../get_started/new_project.md#create-a-new-empty-project) + +However, Kedro also allows you to [specify a configuration file](../get_started/new_project.md#create-a-new-project-from-a-configuration-file) when you create a project using a Kedro starter. Use the `--config` flag alongside the starter: + +```bash +kedro new --config=my_kedro_pyspark_project.yml --starter=pyspark +``` + +This option is useful when the starter requires more configuration than the default mode requires. + From 3cee9f46fa6fd4034479dd1cfc4753cf596b1a7a Mon Sep 17 00:00:00 2001 From: Jo Stichbury Date: Thu, 16 Nov 2023 12:03:11 +0000 Subject: [PATCH 03/27] relocate starters content Signed-off-by: Jo Stichbury --- docs/source/extend_kedro/index.md | 1 + docs/source/index.rst | 7 +------ docs/source/kedro_project_setup/index.md | 1 - .../starters.md => starters/create_a_starter.md} | 4 ++-- docs/source/starters/{index.md => starters.md} | 0 5 files changed, 4 insertions(+), 9 deletions(-) rename docs/source/{kedro_project_setup/starters.md => starters/create_a_starter.md} (99%) rename docs/source/starters/{index.md => starters.md} (100%) diff --git a/docs/source/extend_kedro/index.md b/docs/source/extend_kedro/index.md index 5671a2c786..6a7400947c 100644 --- a/docs/source/extend_kedro/index.md +++ b/docs/source/extend_kedro/index.md @@ -6,4 +6,5 @@ common_use_cases plugins architecture_overview +../starters/create_a_starter ``` diff --git a/docs/source/index.rst b/docs/source/index.rst index d62891acca..c368a91b62 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -71,6 +71,7 @@ Welcome to Kedro's documentation! :caption: Tutorial and basic Kedro usage tutorial/spaceflights_tutorial.md + starters/starters.md .. toctree:: @@ -100,12 +101,6 @@ Welcome to Kedro's documentation! nodes_and_pipelines/index.md -.. toctree:: - :maxdepth: 2 - - starters/index.md - - .. toctree:: :maxdepth: 2 :caption: Advanced usage diff --git a/docs/source/kedro_project_setup/index.md b/docs/source/kedro_project_setup/index.md index 609b4d32b8..5112a51094 100644 --- a/docs/source/kedro_project_setup/index.md +++ b/docs/source/kedro_project_setup/index.md @@ -3,7 +3,6 @@ ```{toctree} :maxdepth: 1 -starters dependencies session settings diff --git a/docs/source/kedro_project_setup/starters.md b/docs/source/starters/create_a_starter.md similarity index 99% rename from docs/source/kedro_project_setup/starters.md rename to docs/source/starters/create_a_starter.md index ba1af321f5..042a1f3326 100644 --- a/docs/source/kedro_project_setup/starters.md +++ b/docs/source/starters/create_a_starter.md @@ -17,7 +17,7 @@ You then need to decide which are: * the common, boilerplate parts of the project * the configurable elements, which need to be replaced by `cookiecutter` strings -### Configuration variables +## Configuration variables By default, when you create a new project using a Kedro starter, `kedro new` launches in interactive mode. The user is then prompted for the variables that have been set in `prompts.yml`. @@ -48,7 +48,7 @@ If the input to the prompts needs to be **validated**, for example to make sure If you want `cookiecutter` to provide sensible **defaults** in case a user doesn't provide any input, you can add those to `cookiecutter.json`. See [the default starter `cookiecutter.json`](https://github.com/kedro-org/kedro/blob/main/kedro/templates/project/cookiecutter.json) as example. -### Example Kedro starter +## Example Kedro starter To review an example Kedro starter, check out the [`pandas-iris` starter on GitHub](https://github.com/kedro-org/kedro-starters/tree/main/pandas-iris). diff --git a/docs/source/starters/index.md b/docs/source/starters/starters.md similarity index 100% rename from docs/source/starters/index.md rename to docs/source/starters/starters.md From 124bd90d94a5fd24549aae5b46709ad73f10a5db Mon Sep 17 00:00:00 2001 From: Jo Stichbury Date: Thu, 16 Nov 2023 14:46:35 +0000 Subject: [PATCH 04/27] Added some changes for add-ons and some to do notes Signed-off-by: Jo Stichbury --- docs/source/addons_and_starters/addons.md | 4 + .../create_a_starter.md | 6 ++ docs/source/addons_and_starters/index.md | 13 +++ .../starters.md | 4 + docs/source/extend_kedro/index.md | 2 +- docs/source/get_started/new_project.md | 96 ++++++++----------- docs/source/index.rst | 47 +-------- docs/source/tutorial/tutorial_template.md | 5 +- 8 files changed, 71 insertions(+), 106 deletions(-) create mode 100644 docs/source/addons_and_starters/addons.md rename docs/source/{starters => addons_and_starters}/create_a_starter.md (99%) create mode 100644 docs/source/addons_and_starters/index.md rename docs/source/{starters => addons_and_starters}/starters.md (99%) diff --git a/docs/source/addons_and_starters/addons.md b/docs/source/addons_and_starters/addons.md new file mode 100644 index 0000000000..c947524824 --- /dev/null +++ b/docs/source/addons_and_starters/addons.md @@ -0,0 +1,4 @@ +# Add-ons + + + diff --git a/docs/source/starters/create_a_starter.md b/docs/source/addons_and_starters/create_a_starter.md similarity index 99% rename from docs/source/starters/create_a_starter.md rename to docs/source/addons_and_starters/create_a_starter.md index 042a1f3326..7fabca8320 100644 --- a/docs/source/starters/create_a_starter.md +++ b/docs/source/addons_and_starters/create_a_starter.md @@ -1,5 +1,9 @@ # How to create a Kedro starter + + + + Kedro starters are used to create projects that contain code to run as-is, or to adapt and extend. A good example is the Iris dataset example of basic Kedro project layout, configuration and initialisation code. A team may find it useful to build Kedro starters to create reusable projects that bootstrap a common base and can be extended. A Kedro starter is a [Cookiecutter](https://cookiecutter.readthedocs.io/en/1.7.2/) template that contains the boilerplate code for a Kedro project. @@ -90,3 +94,5 @@ Here is the layout of the project as a Cookiecutter template: ```{note} You can [add an alias by creating a plugin using `kedro.starters` entry point](../extend_kedro/plugins.md#extend-starter-aliases), which will allows you to do `kedro new --starter=your_starters` and shows up on shows up on `kedro starter list`. ``` + + diff --git a/docs/source/addons_and_starters/index.md b/docs/source/addons_and_starters/index.md new file mode 100644 index 0000000000..7f762a0815 --- /dev/null +++ b/docs/source/addons_and_starters/index.md @@ -0,0 +1,13 @@ +# Add-ons and starters + + + + + + +```{toctree} +:maxdepth: 1 + +addons +starters +``` diff --git a/docs/source/starters/starters.md b/docs/source/addons_and_starters/starters.md similarity index 99% rename from docs/source/starters/starters.md rename to docs/source/addons_and_starters/starters.md index d970fcc2c8..6933a1b305 100644 --- a/docs/source/starters/starters.md +++ b/docs/source/addons_and_starters/starters.md @@ -1,5 +1,9 @@ # Kedro starters + + + + A Kedro starter contains code in the form of a [Cookiecutter](https://cookiecutter.readthedocs.io/en/1.7.2/) template for a Kedro project. Metaphorically, a starter is similar to using a pre-defined layout when creating a presentation or document. Kedro starters provide pre-defined example code and configuration that can be reused, for example: diff --git a/docs/source/extend_kedro/index.md b/docs/source/extend_kedro/index.md index 6a7400947c..7c8ad3838a 100644 --- a/docs/source/extend_kedro/index.md +++ b/docs/source/extend_kedro/index.md @@ -6,5 +6,5 @@ common_use_cases plugins architecture_overview -../starters/create_a_starter +../addons_and_starters/create_a_starter ``` diff --git a/docs/source/get_started/new_project.md b/docs/source/get_started/new_project.md index 5499a09fae..0c571f767d 100644 --- a/docs/source/get_started/new_project.md +++ b/docs/source/get_started/new_project.md @@ -1,23 +1,13 @@ # Create a new Kedro project -## Summary - -There are a few ways to create a new project once you have [set up Kedro](install.md): - -* You can use `kedro new` to [create a basic Kedro project](#create-a-new-empty-project) containing project directories and basic code, but empty to extend as you need. -* You can use `kedro new` and [pass in a configuration file](#create-a-new-project-from-a-configuration-file) to manually control project details such as the name, folder and package name. -* You can [create a Kedro project populated with template code](#create-a-new-project-containing-example-code) that acts as a starter example. This guide illustrates with the `pandas-iris` starter, and there is a [range of Kedro starter projects](../kedro_project_setup/starters.md#list-of-official-starters). - - -Once you've created a project: +There are several ways to create a new Kedro project depending on whether you want it to contain: -* You need to **navigate to its project folder** and **install its dependencies**: `pip install -r requirements.txt` -* **To run the project**: `kedro run` -* **To visualise the project**: `kedro viz` +* just the [default project code](#create-a-new-empty-project) +* some ["starter" code as a sample](#create-a-new-project-containing-example-code), to run as-is or to adapt and extend. ## Create a new empty project -The simplest way to create a default Kedro project is to navigate to your preferred directory and type: +You can create a default Kedro project containing just the code needed to set up your own nodes and pipelines. Navigate to your preferred directory and type: ```bash kedro new @@ -36,18 +26,28 @@ So, if you enter "Get Started", the folder for the project (`repo_name`) is auto | The Python package name for the project (short, all-lowercase) | `python_package` | `get_started` | -The output of `kedro new` is a directory containing all the project files and subdirectories required for a basic Kedro project, ready to extend with the code. +The output of `kedro new` is a directory containing all the project files and subdirectories required for a basic Kedro project, ready to extend with the code. The exact code added for the project will depend on which add-ons you select, described as follows: + +### Kedro add-ons + + + +### Create a new empty project from a configuration file -## Create a new project from a configuration file +To create a new project with custom directory and package names, pass in a configuration file as follows: -To customise a new project's directory and package name, use a configuration file to specify those values. The configuration file must contain: +```bash +kedro new --config=/config.yml +``` + +The configuration file must contain: - `output_dir` The path in which to create the project directory - `project_name` - `repo_name` - `python_package` -The `output_dir` can be set to customised. For example, `~` for the home directory or `.` for the current working directory. Here is an example `config.yml`, which assumes that a directory named `~/code` already exists: +The `output_dir` can be set to `~` for the home directory or `.` for the current working directory. Here is an example `config.yml`, which assumes that a directory named `~/code` already exists: ```yaml output_dir: ~/code @@ -55,16 +55,13 @@ project_name: My First Kedro Project repo_name: testing-kedro python_package: test_kedro ``` +## Create a new project containing example code -To create this new project: - -```bash -kedro new --config=/config.yml -``` +Use a [Kedro starter](../kedro_project_setup/starters.md) to create a project containing some sample code, to run as-is or to adapt and extend. -## Create a new project containing example code -Use a [Kedro starter](../kedro_project_setup/starters.md) to create a project containing template code, to run as-is or to adapt and extend. + + The following illustrates a project created with example code based on the familiar [Iris dataset](https://www.kaggle.com/uciml/iris). @@ -74,6 +71,7 @@ The first step is to create the Kedro project using a starter to add the example kedro new --starter=pandas-iris ``` + ## Run the project However you create a Kedro project, once `kedro new` has completed, the next step is to navigate to the project folder (`cd `) and install dependencies with `pip` as follows: @@ -102,7 +100,7 @@ The Kedro-Viz package needs to be installed into your virtual environment separa pip install kedro-viz ``` -To start Kedro-Viz, enter the following in your terminal: +To start Kedro-Viz, navigate to the project folder (`cd `) and enter the following in your terminal: ```bash kedro viz @@ -112,45 +110,27 @@ This command automatically opens a browser tab to serve the visualisation at `ht To exit the visualisation, close the browser tab. To regain control of the terminal, enter `^+c` on Mac or `Ctrl+c` on Windows or Linux machines. -## Where next? -You have completed the section on Kedro project creation for new users. Now choose how to learn more: - -* Understand more about Kedro: The following page explains the [fundamental Kedro concepts](./kedro_concepts.md). - -* Learn hands-on: If you prefer to learn hands-on, move on to the [spaceflights tutorial](../tutorial/spaceflights_tutorial.md). The tutorial illustrates how to set up a working project, add dependencies, create nodes, register pipelines, set up the Data Catalog, add documentation, and package the project. - -* How-to guide for notebook users: The documentation section following the tutorial explains [how to combine Kedro with a Jupyter notebook](../notebooks_and_ipython/kedro_and_notebooks.md). - -If you've worked through the documentation listed and are unsure where to go next, review the [Kedro repositories on GitHub](https://github.com/kedro-org) and [Kedro's Slack channels](https://slack.kedro.org). - - -## More information about the `pandas-iris` example project - -If you used the `pandas-iris` starter to create an example project, the rest of this page gives further information. +## Summary -
-Expand for more details. +There are a few ways to create a new project once you have [set up Kedro](install.md): -### Background information -The Iris dataset was generated in 1936 by the British statistician and biologist Ronald Fisher. The dataset contains 150 samples, comprising 50 each of 3 different species of Iris plant (*Iris Setosa*, *Iris Versicolour* and *Iris Virginica*). For each sample, the flower measurements are recorded for the sepal length, sepal width, petal length and petal width. +* You can [create a Kedro project populated with template code](#create-a-new-project-containing-example-code) that acts as a starter example. There is a [range of Kedro starter projects](../starters/starters.md#list-of-official-starters) available to use. +* You can use `kedro new` to [create a basic Kedro project](#create-a-new-empty-project) containing project directories and basic code, but empty to extend as you need. +* You can use `kedro new` and [pass in a configuration file](#create-a-new-project-from-a-configuration-file) to manually control project details such as the name, folder and package name. -![](../meta/images/iris_measurements.png) -A machine learning model can use the Iris dataset to illustrate classification (a method used to determine the type of an object by comparison with similar objects that have previously been categorised). Once trained on known data, the machine learning model can make a predictive classification by comparing a test object to the output of its training data. +For any new project, once it is created, you need to navigate to its project folder and install its dependencies: `pip install -r requirements.txt` -The Kedro starter contains a single [pipeline](../resources/glossary.md#pipeline) comprising three [nodes](../resources/glossary.md#node) responsible for splitting the data into training and testing samples, running a 1-nearest neighbour classifier algorithm to make predictions and accuracy-reporting. +* **To run the project**, from the project folder type `kedro run` +* **To visualise the project**, from the project folder type `kedro viz` -The nodes are stored in `src/get_started/nodes.py`: +### Where next? +You have completed the section on Kedro project creation for new users. Here are some useful resources to learn more: -| Node | Description | -| --------------- | ----------------------------------------------------------------------------------- | -| `split_data` | Splits the example Iris dataset into train and test samples | -| `make_predictions`| Makes class predictions (using 1-nearest neighbour classifier and train-test set) | -| `report_accuracy` | Reports the accuracy of the predictions performed by the previous node. | +* Understand more about Kedro: The following page explains the [fundamental Kedro concepts](./kedro_concepts.md). -### Iris example: visualisation +* Learn hands-on: If you prefer to learn hands-on, move on to the [spaceflights tutorial](../tutorial/spaceflights_tutorial.md). The tutorial illustrates how to set up a working project, add dependencies, create nodes, register pipelines, set up the Data Catalog, add documentation, and package the project. -If you [visualise your project with Kedro-Viz](#visualise-a-kedro-project) you should see the following: +* How-to guide for notebook users: The documentation section following the tutorial explains [how to combine Kedro with a Jupyter notebook](../notebooks_and_ipython/kedro_and_notebooks.md). -![](../meta/images/pipeline_visualisation_iris_starter.png) -
+If you've worked through the documentation listed and are unsure where to go next, review the [Kedro repositories on GitHub](https://github.com/kedro-org) and [Kedro's Slack channels](https://slack.kedro.org). diff --git a/docs/source/index.rst b/docs/source/index.rst index c368a91b62..f794fa0dfb 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -60,10 +60,6 @@ Welcome to Kedro's documentation! :caption: Learn about Kedro introduction/index.md - -.. toctree:: - :maxdepth: 2 - get_started/index.md .. toctree:: @@ -71,17 +67,7 @@ Welcome to Kedro's documentation! :caption: Tutorial and basic Kedro usage tutorial/spaceflights_tutorial.md - starters/starters.md - - -.. toctree:: - :maxdepth: 2 - visualisation/index.md - -.. toctree:: - :maxdepth: 2 - notebooks_and_ipython/index.md resources/index.md @@ -90,51 +76,20 @@ Welcome to Kedro's documentation! :caption: Kedro projects configuration/index.md - -.. toctree:: - :maxdepth: 2 - data/index.md - -.. toctree:: - :maxdepth: 2 - nodes_and_pipelines/index.md + addons_and_starters/index.md .. toctree:: :maxdepth: 2 :caption: Advanced usage kedro_project_setup/index.md - -.. toctree:: - :maxdepth: 2 - extend_kedro/index.md - -.. toctree:: - :maxdepth: 2 - hooks/index.md - -.. toctree:: - :maxdepth: 2 - logging/index.md - -.. toctree:: - :maxdepth: 2 - integrations/pyspark_integration.md - -.. toctree:: - :maxdepth: 2 - development/index.md - -.. toctree:: - :maxdepth: 2 - deployment/index.md .. toctree:: diff --git a/docs/source/tutorial/tutorial_template.md b/docs/source/tutorial/tutorial_template.md index 0a919fa2db..7e0ee46fa6 100644 --- a/docs/source/tutorial/tutorial_template.md +++ b/docs/source/tutorial/tutorial_template.md @@ -1,6 +1,6 @@ # Set up the spaceflights project -This section shows how to create a new project (with `kedro new` using the [Kedro spaceflights starter](https://github.com/kedro-org/kedro-starters/tree/main/spaceflights-pandas)) and install project dependencies (with `pip install -r requirements.txt`). +This section shows how to create a new project with `kedro new` using the [Kedro spaceflights starter](https://github.com/kedro-org/kedro-starters/tree/main/spaceflights-pandas)) and install project dependencies (with `pip install -r requirements.txt`). ## Create a new project @@ -12,6 +12,9 @@ We recommend that you use the same version of Kedro that was most recently used In your terminal, navigate to the folder you want to store the project. Type the following to generate the project from the [Kedro spaceflights starter](https://github.com/kedro-org/kedro-starters/tree/main/spaceflights-pandas). The project will be populated with a complete set of working example code: + + + ```bash kedro new --starter=spaceflights-pandas ``` From 4abbdbb02f58ded9ae687378bc960a29dead23b9 Mon Sep 17 00:00:00 2001 From: Jo Stichbury Date: Tue, 21 Nov 2023 12:38:51 +0000 Subject: [PATCH 05/27] Some further fixes Signed-off-by: Jo Stichbury --- docs/source/deployment/distributed.md | 2 +- .../extend_kedro/architecture_overview.md | 2 +- docs/source/extend_kedro/common_use_cases.md | 2 +- docs/source/extend_kedro/index.md | 2 +- docs/source/extend_kedro/plugins.md | 43 ------------------ docs/source/faq/faq.md | 2 +- docs/source/get_started/new_project.md | 4 +- docs/source/index.rst | 2 +- docs/source/resources/glossary.md | 2 +- .../create_a_starter.md | 45 ++++++++++++++++++- .../index.md | 4 +- .../new_project_tools.md} | 2 +- .../starters.md | 10 ++--- 13 files changed, 59 insertions(+), 63 deletions(-) rename docs/source/{addons_and_starters => starters}/create_a_starter.md (73%) rename docs/source/{addons_and_starters => starters}/index.md (70%) rename docs/source/{addons_and_starters/addons.md => starters/new_project_tools.md} (68%) rename docs/source/{addons_and_starters => starters}/starters.md (77%) diff --git a/docs/source/deployment/distributed.md b/docs/source/deployment/distributed.md index fe21c66dd1..91bfc5b2b9 100644 --- a/docs/source/deployment/distributed.md +++ b/docs/source/deployment/distributed.md @@ -40,4 +40,4 @@ We encourage you to play with different ways of parameterising your runs as you ## 4. (Optional) Create starters -This is an optional step, but it may speed up your work in the long term. If you find yourself having to deploy in a similar environment or to a similar platform fairly often, you may want to [build your own Kedro starter](../kedro_project_setup/starters.md). That way you will be able to re-use any deployment scripts written as part of step 2. +This is an optional step, but it may speed up your work in the long term. If you find yourself having to deploy in a similar environment or to a similar platform fairly often, you may want to [build your own Kedro starter](../starters/starters.md). That way you will be able to re-use any deployment scripts written as part of step 2. diff --git a/docs/source/extend_kedro/architecture_overview.md b/docs/source/extend_kedro/architecture_overview.md index d918022bea..7f11253468 100644 --- a/docs/source/extend_kedro/architecture_overview.md +++ b/docs/source/extend_kedro/architecture_overview.md @@ -37,7 +37,7 @@ Kedro framework serves as the interface between a Kedro project and Kedro librar ## Kedro starter -You can use a [Kedro starter](../kedro_project_setup/starters.md) to generate a Kedro project that contains boilerplate code. We maintain a set of [official starters](https://github.com/kedro-org/kedro-starters/) but you can also use a custom starter of your choice. +You can use a [Kedro starter](../starters/starters.md) to generate a Kedro project that contains boilerplate code. We maintain a set of [official starters](https://github.com/kedro-org/kedro-starters/) but you can also use a custom starter of your choice. ## Kedro library diff --git a/docs/source/extend_kedro/common_use_cases.md b/docs/source/extend_kedro/common_use_cases.md index db9717dbdd..0714ea209e 100644 --- a/docs/source/extend_kedro/common_use_cases.md +++ b/docs/source/extend_kedro/common_use_cases.md @@ -39,4 +39,4 @@ Your plugin's implementation can take advantage of other extension mechanisms su ## Use Case 4: How to customise the initial boilerplate of your project -Sometimes you might want to tailor the starting boilerplate of a Kedro project to your specific needs. For example, your organisation might have a standard CI script that you want to include in every new Kedro project. To this end, see the [guide for creating Kedro starters](../kedro_project_setup/starters.md#how-to-create-a-kedro-starter). +Sometimes you might want to tailor the starting boilerplate of a Kedro project to your specific needs. For example, your organisation might have a standard CI script that you want to include in every new Kedro project. To this end, see the [guide for creating Kedro starters](../starters/create_a_starter.md). diff --git a/docs/source/extend_kedro/index.md b/docs/source/extend_kedro/index.md index 7c8ad3838a..6a7400947c 100644 --- a/docs/source/extend_kedro/index.md +++ b/docs/source/extend_kedro/index.md @@ -6,5 +6,5 @@ common_use_cases plugins architecture_overview -../addons_and_starters/create_a_starter +../starters/create_a_starter ``` diff --git a/docs/source/extend_kedro/plugins.md b/docs/source/extend_kedro/plugins.md index de259e65b5..ec1a182933 100644 --- a/docs/source/extend_kedro/plugins.md +++ b/docs/source/extend_kedro/plugins.md @@ -42,49 +42,6 @@ Once the plugin is installed, you can run it as follows: kedro to_json ``` -## Extend starter aliases -It is possible to extend the list of starter aliases built into Kedro. This means that a [custom Kedro starter](../kedro_project_setup/starters.md#how-to-create-a-kedro-starter) can be used directly through the `starter` argument in `kedro new` rather than needing to explicitly provide the `template` and `directory` arguments. A custom starter alias behaves in the same way as an official Kedro starter alias and is also picked up by `kedro starter list`. - -You need to extend the starters by providing a list of `KedroStarterSpec`, in this example it is defined in a file called `plugin.py`. - -Example for a non-git repository starter: -```python -# plugin.py -starters = [ - KedroStarterSpec( - alias="test_plugin_starter", - template_path="your_local_directory/starter_folder", - ) -] -``` - -Example for a git repository starter: -```python -# plugin.py -starters = [ - KedroStarterSpec( - alias="test_plugin_starter", - template_path="https://github.com/kedro-org/kedro-starters/", - directory="spaceflights-pandas", - ) -] -``` - -The `directory` argument is optional and should be used when you have multiple templates in one repository as for the [official kedro-starters](https://github.com/kedro-org/kedro-starters). If you only have one template, your top-level directory will be treated as the template. For an example, see the [spaceflights-pandas starter](https://github.com/kedro-org/kedro-starters/tree/main/spaceflights-pandas). - -In your `pyproject.toml`, you need to register the specifications to `kedro.starters`: - -```toml -[project.entry-points."kedro.starters"] -starter = "plugin:starters" -``` - -After that you can use this starter with `kedro new --starter=test_plugin_starter`. - -```{note} -If your starter lives on a git repository, by default Kedro attempts to use a tag or branch labelled with your version of Kedro, e.g. `0.18.12`. This means that you can host different versions of your starter template on the same repository, and the correct one will automatically be used. If you do not wish to follow this structure, you should override it with the `checkout` flag, e.g. `kedro new --starter=test_plugin_starter --checkout=main`. -``` - ## Working with `click` Commands must be provided as [`click` `Groups`](https://click.palletsprojects.com/en/7.x/api/#click.Group) diff --git a/docs/source/faq/faq.md b/docs/source/faq/faq.md index 8652833b9c..8cc1c3f484 100644 --- a/docs/source/faq/faq.md +++ b/docs/source/faq/faq.md @@ -13,7 +13,7 @@ This is a growing set of technical FAQs. The [product FAQs on the Kedro website] ## Kedro project development -* [How do I write my own Kedro starter projects](../kedro_project_setup/starters.md#how-to-create-a-kedro-starter)? +* [How do I write my own Kedro starter projects](../starters/create_a_starter.md)? ## Configuration diff --git a/docs/source/get_started/new_project.md b/docs/source/get_started/new_project.md index 0c571f767d..e9667bdedc 100644 --- a/docs/source/get_started/new_project.md +++ b/docs/source/get_started/new_project.md @@ -57,7 +57,7 @@ python_package: test_kedro ``` ## Create a new project containing example code -Use a [Kedro starter](../kedro_project_setup/starters.md) to create a project containing some sample code, to run as-is or to adapt and extend. +Use a [Kedro starter](../starters/starters.md) to create a project containing some sample code, to run as-is or to adapt and extend. @@ -116,7 +116,7 @@ There are a few ways to create a new project once you have [set up Kedro](instal * You can [create a Kedro project populated with template code](#create-a-new-project-containing-example-code) that acts as a starter example. There is a [range of Kedro starter projects](../starters/starters.md#list-of-official-starters) available to use. * You can use `kedro new` to [create a basic Kedro project](#create-a-new-empty-project) containing project directories and basic code, but empty to extend as you need. -* You can use `kedro new` and [pass in a configuration file](#create-a-new-project-from-a-configuration-file) to manually control project details such as the name, folder and package name. +* You can use `kedro new` and [pass in a configuration file](#create-a-new-empty-project-from-a-configuration-file) to manually control project details such as the name, folder and package name. For any new project, once it is created, you need to navigate to its project folder and install its dependencies: `pip install -r requirements.txt` diff --git a/docs/source/index.rst b/docs/source/index.rst index f794fa0dfb..d4af27077c 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -75,10 +75,10 @@ Welcome to Kedro's documentation! :maxdepth: 2 :caption: Kedro projects + starters/index.md configuration/index.md data/index.md nodes_and_pipelines/index.md - addons_and_starters/index.md .. toctree:: :maxdepth: 2 diff --git a/docs/source/resources/glossary.md b/docs/source/resources/glossary.md index bef605dc2c..477f6ccc3e 100644 --- a/docs/source/resources/glossary.md +++ b/docs/source/resources/glossary.md @@ -89,7 +89,7 @@ Runners are different execution mechanisms to run pipelines with the specified d ## Starters Kedro starters are used to create projects that contain code to run as-is, or to adapt and extend. They provide pre-defined example code and configuration that can be reused. A Kedro starter is a [Cookiecutter template](https://cookiecutter.readthedocs.io/) that contains the boilerplate code for a Kedro project. -[Further information about Kedro starters](../kedro_project_setup/starters.md) +[Further information about Kedro starters](../starters/starters.md) ## Tags You can apply tags to nodes or pipelines as a means of filtering which are executed. diff --git a/docs/source/addons_and_starters/create_a_starter.md b/docs/source/starters/create_a_starter.md similarity index 73% rename from docs/source/addons_and_starters/create_a_starter.md rename to docs/source/starters/create_a_starter.md index 7fabca8320..464dd0fde6 100644 --- a/docs/source/addons_and_starters/create_a_starter.md +++ b/docs/source/starters/create_a_starter.md @@ -91,8 +91,49 @@ Here is the layout of the project as a Cookiecutter template: └── tests ``` -```{note} -You can [add an alias by creating a plugin using `kedro.starters` entry point](../extend_kedro/plugins.md#extend-starter-aliases), which will allows you to do `kedro new --starter=your_starters` and shows up on shows up on `kedro starter list`. + +## Extend starter aliases + +You can add an alias by creating a plugin using `kedro.starters` entry point which enables you to call `kedro new --starter=your_starters`. That is, it can be used directly through the `starter` argument in `kedro new` rather than needing to explicitly provide the `template` and `directory` arguments. + +A custom starter alias behaves in the same way as an official Kedro starter alias and is also picked up by `kedro starter list`. + +You need to extend the starters by providing a list of `KedroStarterSpec`, in this example it is defined in a file called `plugin.py`. + +Example for a non-git repository starter: +```python +# plugin.py +starters = [ + KedroStarterSpec( + alias="test_plugin_starter", + template_path="your_local_directory/starter_folder", + ) +] ``` +Example for a git repository starter: +```python +# plugin.py +starters = [ + KedroStarterSpec( + alias="test_plugin_starter", + template_path="https://github.com/kedro-org/kedro-starters/", + directory="spaceflights-pandas", + ) +] +``` +The `directory` argument is optional and should be used when you have multiple templates in one repository as for the [official kedro-starters](https://github.com/kedro-org/kedro-starters). If you only have one template, your top-level directory will be treated as the template. For an example, see the [spaceflights-pandas starter](https://github.com/kedro-org/kedro-starters/tree/main/spaceflights-pandas). + +In your `pyproject.toml`, you need to register the specifications to `kedro.starters`: + +```toml +[project.entry-points."kedro.starters"] +starter = "plugin:starters" +``` + +After that you can use this starter with `kedro new --starter=test_plugin_starter`. + +```{note} +If your starter lives on a git repository, by default Kedro attempts to use a tag or branch labelled with your version of Kedro, e.g. `0.18.12`. This means that you can host different versions of your starter template on the same repository, and the correct one will automatically be used. If you do not wish to follow this structure, you should override it with the `checkout` flag, e.g. `kedro new --starter=test_plugin_starter --checkout=main`. +``` \ No newline at end of file diff --git a/docs/source/addons_and_starters/index.md b/docs/source/starters/index.md similarity index 70% rename from docs/source/addons_and_starters/index.md rename to docs/source/starters/index.md index 7f762a0815..d007730e05 100644 --- a/docs/source/addons_and_starters/index.md +++ b/docs/source/starters/index.md @@ -1,4 +1,4 @@ -# Add-ons and starters +# New project tools @@ -8,6 +8,6 @@ ```{toctree} :maxdepth: 1 -addons +new_project_tools starters ``` diff --git a/docs/source/addons_and_starters/addons.md b/docs/source/starters/new_project_tools.md similarity index 68% rename from docs/source/addons_and_starters/addons.md rename to docs/source/starters/new_project_tools.md index c947524824..9a6b03fee1 100644 --- a/docs/source/addons_and_starters/addons.md +++ b/docs/source/starters/new_project_tools.md @@ -1,4 +1,4 @@ -# Add-ons +# Configure a new project diff --git a/docs/source/addons_and_starters/starters.md b/docs/source/starters/starters.md similarity index 77% rename from docs/source/addons_and_starters/starters.md rename to docs/source/starters/starters.md index 6933a1b305..2e127337b8 100644 --- a/docs/source/addons_and_starters/starters.md +++ b/docs/source/starters/starters.md @@ -12,7 +12,7 @@ Kedro starters provide pre-defined example code and configuration that can be re * To add a `docker-compose` setup to launch Kedro next to a monitoring stack * To add deployment scripts and CI/CD setup for your targeted infrastructure -You can create your own starters for reuse within a project or team, as described in the documentation about [how to create a Kedro starter](../kedro_project_setup/starters.md#how-to-create-a-kedro-starter). +You can create your own starters for reuse within a project or team, as described in the documentation about [how to create a Kedro starter](../starters/create_a_starter.md). ## How to use Kedro starters @@ -50,11 +50,9 @@ kedro starter list The Kedro team maintains the following starters for a range of Kedro projects: +The Kedro team maintains the following starters for a range of Kedro projects: + * [`astro-airflow-iris`](https://github.com/kedro-org/kedro-starters/tree/main/astro-airflow-iris): The [Kedro Iris dataset example project](../get_started/new_project.md) with a minimal setup for deploying the pipeline on Airflow with [Astronomer](https://www.astronomer.io/). -* [`standalone-datacatalog`](https://github.com/kedro-org/kedro-starters/tree/main/standalone-datacatalog): A minimum setup to use the traditional [Iris dataset](https://www.kaggle.com/uciml/iris) with Kedro's [`DataCatalog`](../data/data_catalog.md), which is a core component of Kedro. This starter is of use in the exploratory phase of a project. It was formerly known as `mini-kedro`. -* [`pandas-iris`](https://github.com/kedro-org/kedro-starters/tree/main/pandas-iris): The [Kedro Iris dataset example project](../get_started/new_project.md) -* [`pyspark-iris`](https://github.com/kedro-org/kedro-starters/tree/main/pyspark-iris): An alternative Kedro Iris dataset example, using [PySpark](../integrations/pyspark_integration.md) -* [`pyspark`](https://github.com/kedro-org/kedro-starters/tree/main/pyspark): The configuration and initialisation code for a [Kedro pipeline using PySpark](../integrations/pyspark_integration.md) * [`spaceflights-pandas`](https://github.com/kedro-org/kedro-starters/tree/main/spaceflights-pandas): The [spaceflights tutorial](../tutorial/spaceflights_tutorial.md) example code with `pandas` datasets. * [`spaceflights-pandas-viz`](https://github.com/kedro-org/kedro-starters/tree/main/spaceflights-pandas-viz): The [spaceflights tutorial](../tutorial/spaceflights_tutorial.md) example code with `pandas` datasets and visualisation and experiment tracking `kedro-viz` features. * [`spaceflights-pyspark`](https://github.com/kedro-org/kedro-starters/tree/main/spaceflights-pyspark): The [spaceflights tutorial](../tutorial/spaceflights_tutorial.md) example code with `pyspark` datasets. @@ -77,7 +75,7 @@ Under the hood, the value will be passed to the [`--checkout` flag in Cookiecutt By default, when you create a new project using a starter, `kedro new` asks you to enter the `project_name`, which it uses to set the `repo_name` and `python_package` name. This is the same behavior as when you [create a new empty project](../get_started/new_project.md#create-a-new-empty-project) -However, Kedro also allows you to [specify a configuration file](../get_started/new_project.md#create-a-new-project-from-a-configuration-file) when you create a project using a Kedro starter. Use the `--config` flag alongside the starter: +However, Kedro also allows you to [specify a configuration file](../get_started/new_project.md#create-a-new-empty-project-from-a-configuration-file) when you create a project using a Kedro starter. Use the `--config` flag alongside the starter: ```bash kedro new --config=my_kedro_pyspark_project.yml --starter=pyspark From ab9bcd98e69aea5e1fa5ce6d7c35c136a6eb853a Mon Sep 17 00:00:00 2001 From: Jo Stichbury Date: Tue, 21 Nov 2023 13:55:41 +0000 Subject: [PATCH 06/27] Move section about development version of Kedro Signed-off-by: Jo Stichbury --- docs/source/faq/faq.md | 23 +++++++++++++++++++++++ docs/source/get_started/install.md | 22 ---------------------- 2 files changed, 23 insertions(+), 22 deletions(-) diff --git a/docs/source/faq/faq.md b/docs/source/faq/faq.md index 8cc1c3f484..8069b68c63 100644 --- a/docs/source/faq/faq.md +++ b/docs/source/faq/faq.md @@ -67,3 +67,26 @@ Refer to the following table below for a high level guide to each layer's purpos | Models | Stored, serialised pre-trained machine learning models | | Model output | Analytics specific data model(s) containing the results generated by the model based on the `model input` data | | Reporting | Reporting data model(s) that are used to combine a set of `primary`, `feature`, `model input` and `model output` data used to drive the dashboard and the views constructed. It encapsulates and removes the need to define any blending or joining of data, improve performance and replacement of presentation layer without having to redefine the data models | + +## How do I install a development version of Kedro? + +This section explains how to try out a development version of Kedro direct from the [Kedro GitHub repository](https://github.com/kedro-org/kedro). + +```{important} +The development version of Kedro is not guaranteed to be bug-free and/or compatible with any of the [stable versions](https://pypi.org/project/kedro/#history). We do not recommend that you use a development version of Kedro in any production systems. Please install and use with caution. +``` + +To try out latest, unreleased functionality from the `develop` branch of the Kedro GitHub repository, run the following installation command: + +```bash +pip install git+https://github.com/kedro-org/kedro.git@develop +``` + +This will install Kedro from the `develop` branch of the GitHub repository, which is always the most up to date. This command will install Kedro from source, unlike `pip install kedro` which installs Kedro from PyPI. + +If you want to roll back to a stable version of Kedro, execute the following in your environment: + +```bash +pip uninstall kedro -y +pip install kedro +``` \ No newline at end of file diff --git a/docs/source/get_started/install.md b/docs/source/get_started/install.md index ed9b857ebb..b55b2ecc34 100644 --- a/docs/source/get_started/install.md +++ b/docs/source/get_started/install.md @@ -162,28 +162,6 @@ When migrating an existing project to a newer Kedro version, make sure you also * For projects generated with versions of Kedro > 0.17.0, you'll do this in the `pyproject.toml` file from the project root directory. * If your project was generated with a version of Kedro <0.17.0, you will instead need to update the `ProjectContext`, which is found in `src//run.py`. -## How to install a development version of Kedro - -This section explains how to try out a development version of Kedro direct from the [Kedro GitHub repository](https://github.com/kedro-org/kedro). - -```{important} -The development version of Kedro is not guaranteed to be bug-free and/or compatible with any of the [stable versions](https://pypi.org/project/kedro/#history). We do not recommend that you use a development version of Kedro in any production systems. Please install and use with caution. -``` - -To try out latest, unreleased functionality from the `develop` branch of the Kedro GitHub repository, run the following installation command: - -```bash -pip install git+https://github.com/kedro-org/kedro.git@develop -``` - -This will install Kedro from the `develop` branch of the GitHub repository, which is always the most up to date. This command will install Kedro from source, unlike `pip install kedro` which installs Kedro from PyPI. - -If you want to roll back to a stable version of Kedro, execute the following in your environment: - -```bash -pip uninstall kedro -y -pip install kedro -``` ## Summary From b7876647e4a2fec593fad74456a3f9889ff5a97d Mon Sep 17 00:00:00 2001 From: Jo Stichbury Date: Tue, 21 Nov 2023 15:01:18 +0000 Subject: [PATCH 07/27] Add text for new project Signed-off-by: Jo Stichbury --- docs/source/deployment/airflow_astronomer.md | 2 +- docs/source/get_started/new_project.md | 57 +++++++++++-------- docs/source/nodes_and_pipelines/nodes.md | 2 +- .../kedro_and_notebooks.md | 2 +- docs/source/starters/starters.md | 4 +- 5 files changed, 37 insertions(+), 30 deletions(-) diff --git a/docs/source/deployment/airflow_astronomer.md b/docs/source/deployment/airflow_astronomer.md index 7d8a27c2e8..a74661048d 100644 --- a/docs/source/deployment/airflow_astronomer.md +++ b/docs/source/deployment/airflow_astronomer.md @@ -15,7 +15,7 @@ The following tutorial uses a different approach and shows how to deploy a Kedro [Astronomer](https://docs.astronomer.io/astro/install-cli) is a managed Airflow platform which allows users to spin up and run an Airflow cluster easily in production. Additionally, it also provides a set of tools to help users get started with Airflow locally in the easiest way possible. -The tutorial discusses how to run the [example Iris classification pipeline](../get_started/new_project.md#create-a-new-project-containing-example-code) on a local Airflow cluster with Astronomer. You may also consider using our [`astro-airflow-iris` starter](https://github.com/kedro-org/kedro-starters/tree/main/astro-airflow-iris) which provides a template containing the boilerplate code that the tutorial describes: +The tutorial discusses how to run the [example Iris classification pipeline](../get_started/new_project.md#create-a-new-project-containing-starter-code) on a local Airflow cluster with Astronomer. You may also consider using our [`astro-airflow-iris` starter](https://github.com/kedro-org/kedro-starters/tree/main/astro-airflow-iris) which provides a template containing the boilerplate code that the tutorial describes: ```shell kedro new --starter=astro-airflow-iris diff --git a/docs/source/get_started/new_project.md b/docs/source/get_started/new_project.md index e9667bdedc..c5c8f095ef 100644 --- a/docs/source/get_started/new_project.md +++ b/docs/source/get_started/new_project.md @@ -2,18 +2,33 @@ There are several ways to create a new Kedro project depending on whether you want it to contain: -* just the [default project code](#create-a-new-empty-project) -* some ["starter" code as a sample](#create-a-new-project-containing-example-code), to run as-is or to adapt and extend. +* some [basic project code](#create-a-basic-project) +* a set of ["starter" code](#create-a-new-project-containing-starter-code), to run as-is or to adapt and extend. -## Create a new empty project +## Create a basic project -You can create a default Kedro project containing just the code needed to set up your own nodes and pipelines. Navigate to your preferred directory and type: +You can create a basic Kedro project containing just the default code needed to set up your own nodes and pipelines. Navigate to your preferred directory and type: ```bash kedro new ``` -Enter a name for the project, which can be human-readable and may contain alphanumeric symbols, spaces, underscores and hyphens. It must be at least two characters long. +### Tools to configure the new project +After you enter `kedro new`, the command line interface will ask which tools you'd like to include, which will depend on the requirements of your project. + +Add one or more of the options, or follow the default and add none at all: + +* Linting: A basic linting setup with Black and ruff +* Testing: A basic testing setup with pytest +* Custom Logging: Additional logging options +* Documentation: Configuration for basic documentation built with Sphinx +* Data Structure: The [directory structure](../faq/faq.md#what-is-data-engineering-convention) for storing data +* Pyspark: Setup and configuration for working with PySpark +* Kedro Viz: Kedro's native visualisation tool. + +Find out more about these options in the documentation that explains how to [configure a new project](../starters/new_project_tools.md). + +You'll then be asked to enter a name for the project, which can be human-readable and may contain alphanumeric symbols, spaces, underscores and hyphens. It must be at least two characters long. It's best to keep the name simple because the choice is set as the value of `project_name` and is also used to generate the folder and package names for the project automatically. @@ -26,15 +41,11 @@ So, if you enter "Get Started", the folder for the project (`repo_name`) is auto | The Python package name for the project (short, all-lowercase) | `python_package` | `get_started` | -The output of `kedro new` is a directory containing all the project files and subdirectories required for a basic Kedro project, ready to extend with the code. The exact code added for the project will depend on which add-ons you select, described as follows: - -### Kedro add-ons - - +The output of `kedro new` is a directory containing all the project files and subdirectories required for a basic Kedro project. The exact code added for the project will depend on which tools you selected. -### Create a new empty project from a configuration file +### Create a basic project from a configuration file -To create a new project with custom directory and package names, pass in a configuration file as follows: +To create a new project with custom directory and package names, navigate to your preferred directory and type the following command, which passes in a configuration file `config.yml`: ```bash kedro new --config=/config.yml @@ -55,22 +66,18 @@ project_name: My First Kedro Project repo_name: testing-kedro python_package: test_kedro ``` -## Create a new project containing example code +## Create a new project containing starter code -Use a [Kedro starter](../starters/starters.md) to create a project containing some sample code, to run as-is or to adapt and extend. +You can create a new Kedro project with a [starter](../starters/starters.md) that adds a set of code for a common project use case from the [range available](../starters/starters.md). - - - - -The following illustrates a project created with example code based on the familiar [Iris dataset](https://www.kaggle.com/uciml/iris). - -The first step is to create the Kedro project using a starter to add the example code and data. +The following illustrates a project created with example code for the [spaceflights tutorial](../tutorial/spaceflights_tutorial.md). Navigate to your preferred directory and type the following: ```bash -kedro new --starter=pandas-iris +kedro new --starter=pandas-spaceflights ``` +You will not be offered the opportunity to select different project tools as for the basic Kedro project above. + ## Run the project @@ -114,9 +121,9 @@ To exit the visualisation, close the browser tab. To regain control of the termi There are a few ways to create a new project once you have [set up Kedro](install.md): -* You can [create a Kedro project populated with template code](#create-a-new-project-containing-example-code) that acts as a starter example. There is a [range of Kedro starter projects](../starters/starters.md#list-of-official-starters) available to use. -* You can use `kedro new` to [create a basic Kedro project](#create-a-new-empty-project) containing project directories and basic code, but empty to extend as you need. -* You can use `kedro new` and [pass in a configuration file](#create-a-new-empty-project-from-a-configuration-file) to manually control project details such as the name, folder and package name. +* You can use `kedro new` to [create a basic Kedro project](#create-a-basic-project) containing project directories and basic code, which you can configure depending on the tooling you need, but otherwise empty to extend as you need. +* You can use `kedro new` and [pass in a configuration file](#create-a-basic-project-from-a-configuration-file) to manually control project details such as the name, folder and package name. +* You can [create a Kedro project populated with starter code](#create-a-new-project-containing-starter-code) from the [range of Kedro starter projects](../starters/starters.md#list-of-official-starters) available. For any new project, once it is created, you need to navigate to its project folder and install its dependencies: `pip install -r requirements.txt` diff --git a/docs/source/nodes_and_pipelines/nodes.md b/docs/source/nodes_and_pipelines/nodes.md index a1106ee1ae..0816b4b103 100644 --- a/docs/source/nodes_and_pipelines/nodes.md +++ b/docs/source/nodes_and_pipelines/nodes.md @@ -188,7 +188,7 @@ You can also call a node as a regular Python function: `adder_node(dict(a=2, b=3 ### Set up the project -To demonstrate the use of generator functions in Kedro nodes, first, set up a Kedro project using the `pandas-iris` starter. If you haven't already created a Kedro project, you can follow the [get started guide](../get_started/new_project.md#create-a-new-project-containing-example-code) to create it. +To demonstrate the use of generator functions in Kedro nodes, first, set up a Kedro project using the `pandas-iris` starter. If you haven't already created a Kedro project, you can follow the [get started guide](../get_started/new_project.md#create-a-new-project-containing-starter-code) to create it. Create the project with this command: ```bash diff --git a/docs/source/notebooks_and_ipython/kedro_and_notebooks.md b/docs/source/notebooks_and_ipython/kedro_and_notebooks.md index 80eb0f9740..589c29e71f 100644 --- a/docs/source/notebooks_and_ipython/kedro_and_notebooks.md +++ b/docs/source/notebooks_and_ipython/kedro_and_notebooks.md @@ -6,7 +6,7 @@ This page also explains how to use line magic to display a Kedro-Viz visualisati ## Iris dataset example -Create a sample Kedro project with the [`pandas-iris` starter](https://github.com/kedro-org/kedro-starters/tree/main/pandas-iris) as we showed in the [get started documentation](../get_started/new_project.md#create-a-new-project-containing-example-code): +Create a sample Kedro project with the [`pandas-iris` starter](https://github.com/kedro-org/kedro-starters/tree/main/pandas-iris) as we showed in the [get started documentation](../get_started/new_project.md#create-a-new-project-containing-starter-code): ```bash kedro new --starter=pandas-iris diff --git a/docs/source/starters/starters.md b/docs/source/starters/starters.md index 2e127337b8..10c0b29b38 100644 --- a/docs/source/starters/starters.md +++ b/docs/source/starters/starters.md @@ -73,9 +73,9 @@ Under the hood, the value will be passed to the [`--checkout` flag in Cookiecutt ## Use a starter with a configuration file -By default, when you create a new project using a starter, `kedro new` asks you to enter the `project_name`, which it uses to set the `repo_name` and `python_package` name. This is the same behavior as when you [create a new empty project](../get_started/new_project.md#create-a-new-empty-project) +By default, when you create a new project using a starter, `kedro new` asks you to enter the `project_name`, which it uses to set the `repo_name` and `python_package` name. This is the same behavior as when you [create a new empty project](../get_started/new_project.md#create-a-basic-project) -However, Kedro also allows you to [specify a configuration file](../get_started/new_project.md#create-a-new-empty-project-from-a-configuration-file) when you create a project using a Kedro starter. Use the `--config` flag alongside the starter: +However, Kedro also allows you to [specify a configuration file](../get_started/new_project.md#create-a-basic-project-from-a-configuration-file) when you create a project using a Kedro starter. Use the `--config` flag alongside the starter: ```bash kedro new --config=my_kedro_pyspark_project.yml --starter=pyspark From cd7938e4fa58208d2dd43c776a24d707cff3482c Mon Sep 17 00:00:00 2001 From: Jo Stichbury Date: Tue, 21 Nov 2023 15:23:40 +0000 Subject: [PATCH 08/27] Remove mention of pandas-iris where possible, replacing with alternative Signed-off-by: Jo Stichbury --- docs/source/deployment/airflow_astronomer.md | 4 ++-- docs/source/hooks/examples.md | 20 ------------------- .../nodes_and_pipelines/run_a_pipeline.md | 1 - .../kedro_and_notebooks.md | 12 ++++------- 4 files changed, 6 insertions(+), 31 deletions(-) diff --git a/docs/source/deployment/airflow_astronomer.md b/docs/source/deployment/airflow_astronomer.md index a74661048d..a8f5d15e4e 100644 --- a/docs/source/deployment/airflow_astronomer.md +++ b/docs/source/deployment/airflow_astronomer.md @@ -44,10 +44,10 @@ To follow this tutorial, ensure you have the following: astro dev init ``` -2. Create a new Kedro project using the `pandas-iris` starter. You can use the default value in the project creation process: +2. Create a new Kedro project using the `astro-airflow-iris` starter. You can use the default value in the project creation process: ```shell - kedro new --starter=pandas-iris + kedro new --starter=astro-airflow-iris ``` 3. Copy all files and directories under `new-kedro-project`, which was the default project name created in step 2, to the root directory so Kedro and Astro CLI share the same project root: diff --git a/docs/source/hooks/examples.md b/docs/source/hooks/examples.md index c60724a7d9..54e584d89c 100644 --- a/docs/source/hooks/examples.md +++ b/docs/source/hooks/examples.md @@ -72,26 +72,6 @@ Then re-run the pipeline: $ kedro run ``` -The output should look similar to the following: - -``` -... -[01/25/23 21:38:23] INFO Loading data from 'example_iris_data' (CSVDataset)... data_catalog.py:343 - INFO Loading example_iris_data consumed 0.99MiB memory hooks.py:67 - INFO Loading data from 'parameters' (MemoryDataset)... data_catalog.py:343 - INFO Loading parameters consumed 0.48MiB memory hooks.py:67 - INFO Running node: split: split_data([example_iris_data,parameters]) -> [X_train,X_test,y_train,y_test] node.py:327 - INFO Saving data to 'X_train' (MemoryDataset)... data_catalog.py:382 - INFO Saving data to 'X_test' (MemoryDataset)... data_catalog.py:382 - INFO Saving data to 'y_train' (MemoryDataset)... data_catalog.py:382 - INFO Saving data to 'y_test' (MemoryDataset)... data_catalog.py:382 - INFO Completed 1 out of 3 tasks sequential_runner.py:85 - INFO Loading data from 'X_train' (MemoryDataset)... data_catalog.py:343 - INFO Loading X_train consumed 0.49MiB memory hooks.py:67 - INFO Loading data from 'X_test' (MemoryDataset)... -... -``` - ## Add data validation This example adds data validation to node inputs and outputs using [Great Expectations](https://docs.greatexpectations.io/en/latest/). diff --git a/docs/source/nodes_and_pipelines/run_a_pipeline.md b/docs/source/nodes_and_pipelines/run_a_pipeline.md index 44dbc85c29..4eaa06c296 100644 --- a/docs/source/nodes_and_pipelines/run_a_pipeline.md +++ b/docs/source/nodes_and_pipelines/run_a_pipeline.md @@ -144,7 +144,6 @@ If a node has multiple inputs or outputs (e.g., `node(func, ["a", "b", "c"], ["d $ kedro run --async ... 2020-03-24 09:20:01,482 - kedro.runner.sequential_runner - INFO - Asynchronous mode is enabled for loading and saving data -2020-03-24 09:20:01,483 - kedro.io.data_catalog - INFO - Loading data from `example_iris_data` (CSVDataset)... ... ``` diff --git a/docs/source/notebooks_and_ipython/kedro_and_notebooks.md b/docs/source/notebooks_and_ipython/kedro_and_notebooks.md index 589c29e71f..79694c354a 100644 --- a/docs/source/notebooks_and_ipython/kedro_and_notebooks.md +++ b/docs/source/notebooks_and_ipython/kedro_and_notebooks.md @@ -4,15 +4,11 @@ This page explains how to use a Jupyter notebook to explore elements of a Kedro This page also explains how to use line magic to display a Kedro-Viz visualisation of your pipeline directly in your notebook. -## Iris dataset example +## Example project -Create a sample Kedro project with the [`pandas-iris` starter](https://github.com/kedro-org/kedro-starters/tree/main/pandas-iris) as we showed in the [get started documentation](../get_started/new_project.md#create-a-new-project-containing-starter-code): - -```bash -kedro new --starter=pandas-iris -``` - -We will assume you call the project `iris`, but you can call it whatever you choose. +The example adds a notebook to experiment with the retired [`pandas-iris` starter](https://github.com/kedro-org/kedro-starters/tree/main/pandas-iris). As an alternative, you can follow the example using a different starter, such as [`pandas-spaceflights`](https://github.com/kedro-org/kedro-starters/tree/main/pandas-spaceflights) or just add a notebook to your own project. + +We will assume the example project is called `iris`, but you can call it whatever you choose. Navigate to the project directory (`cd iris`) and issue the following command in the terminal to launch Jupyter: From c4d8ed5c7f74d129ee46ae4b62390a3805a1da02 Mon Sep 17 00:00:00 2001 From: Jo Stichbury Date: Tue, 21 Nov 2023 15:31:34 +0000 Subject: [PATCH 09/27] Fix linter errors Signed-off-by: Jo Stichbury --- docs/source/faq/faq.md | 2 +- docs/source/get_started/new_project.md | 4 ++-- docs/source/notebooks_and_ipython/kedro_and_notebooks.md | 2 +- docs/source/starters/create_a_starter.md | 4 ++-- docs/source/starters/starters.md | 1 - 5 files changed, 6 insertions(+), 7 deletions(-) diff --git a/docs/source/faq/faq.md b/docs/source/faq/faq.md index 8069b68c63..f0f8106871 100644 --- a/docs/source/faq/faq.md +++ b/docs/source/faq/faq.md @@ -89,4 +89,4 @@ If you want to roll back to a stable version of Kedro, execute the following in ```bash pip uninstall kedro -y pip install kedro -``` \ No newline at end of file +``` diff --git a/docs/source/get_started/new_project.md b/docs/source/get_started/new_project.md index c5c8f095ef..8b91d5e218 100644 --- a/docs/source/get_started/new_project.md +++ b/docs/source/get_started/new_project.md @@ -14,7 +14,7 @@ kedro new ``` ### Tools to configure the new project -After you enter `kedro new`, the command line interface will ask which tools you'd like to include, which will depend on the requirements of your project. +After you enter `kedro new`, the command line interface will ask which tools you'd like to include, which will depend on the requirements of your project. Add one or more of the options, or follow the default and add none at all: @@ -68,7 +68,7 @@ python_package: test_kedro ``` ## Create a new project containing starter code -You can create a new Kedro project with a [starter](../starters/starters.md) that adds a set of code for a common project use case from the [range available](../starters/starters.md). +You can create a new Kedro project with a [starter](../starters/starters.md) that adds a set of code for a common project use case from the [range available](../starters/starters.md). The following illustrates a project created with example code for the [spaceflights tutorial](../tutorial/spaceflights_tutorial.md). Navigate to your preferred directory and type the following: diff --git a/docs/source/notebooks_and_ipython/kedro_and_notebooks.md b/docs/source/notebooks_and_ipython/kedro_and_notebooks.md index 79694c354a..2d0cc7f507 100644 --- a/docs/source/notebooks_and_ipython/kedro_and_notebooks.md +++ b/docs/source/notebooks_and_ipython/kedro_and_notebooks.md @@ -7,7 +7,7 @@ This page also explains how to use line magic to display a Kedro-Viz visualisati ## Example project The example adds a notebook to experiment with the retired [`pandas-iris` starter](https://github.com/kedro-org/kedro-starters/tree/main/pandas-iris). As an alternative, you can follow the example using a different starter, such as [`pandas-spaceflights`](https://github.com/kedro-org/kedro-starters/tree/main/pandas-spaceflights) or just add a notebook to your own project. - + We will assume the example project is called `iris`, but you can call it whatever you choose. Navigate to the project directory (`cd iris`) and issue the following command in the terminal to launch Jupyter: diff --git a/docs/source/starters/create_a_starter.md b/docs/source/starters/create_a_starter.md index 464dd0fde6..837c821831 100644 --- a/docs/source/starters/create_a_starter.md +++ b/docs/source/starters/create_a_starter.md @@ -94,7 +94,7 @@ Here is the layout of the project as a Cookiecutter template: ## Extend starter aliases -You can add an alias by creating a plugin using `kedro.starters` entry point which enables you to call `kedro new --starter=your_starters`. That is, it can be used directly through the `starter` argument in `kedro new` rather than needing to explicitly provide the `template` and `directory` arguments. +You can add an alias by creating a plugin using `kedro.starters` entry point which enables you to call `kedro new --starter=your_starters`. That is, it can be used directly through the `starter` argument in `kedro new` rather than needing to explicitly provide the `template` and `directory` arguments. A custom starter alias behaves in the same way as an official Kedro starter alias and is also picked up by `kedro starter list`. @@ -136,4 +136,4 @@ After that you can use this starter with `kedro new --starter=test_plugin_starte ```{note} If your starter lives on a git repository, by default Kedro attempts to use a tag or branch labelled with your version of Kedro, e.g. `0.18.12`. This means that you can host different versions of your starter template on the same repository, and the correct one will automatically be used. If you do not wish to follow this structure, you should override it with the `checkout` flag, e.g. `kedro new --starter=test_plugin_starter --checkout=main`. -``` \ No newline at end of file +``` diff --git a/docs/source/starters/starters.md b/docs/source/starters/starters.md index 10c0b29b38..d06469b600 100644 --- a/docs/source/starters/starters.md +++ b/docs/source/starters/starters.md @@ -82,4 +82,3 @@ kedro new --config=my_kedro_pyspark_project.yml --starter=pyspark ``` This option is useful when the starter requires more configuration than the default mode requires. - From fc4aed5e484da2d3f5c761035a4ee3648df102ce Mon Sep 17 00:00:00 2001 From: Jo Stichbury Date: Wed, 22 Nov 2023 10:34:11 +0000 Subject: [PATCH 10/27] Update new project docs Signed-off-by: Jo Stichbury --- docs/source/get_started/new_project.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/docs/source/get_started/new_project.md b/docs/source/get_started/new_project.md index 8b91d5e218..9a5ac674e0 100644 --- a/docs/source/get_started/new_project.md +++ b/docs/source/get_started/new_project.md @@ -41,7 +41,9 @@ So, if you enter "Get Started", the folder for the project (`repo_name`) is auto | The Python package name for the project (short, all-lowercase) | `python_package` | `get_started` | -The output of `kedro new` is a directory containing all the project files and subdirectories required for a basic Kedro project. The exact code added for the project will depend on which tools you selected. +After you enter `kedro new`, the command line interface will ask which tools you'd like to include, which will depend on the requirements of your project. The options are [described in more detail above](#tools-to-configure-the-new-project) and in the [documentation about the new project tools](../starters/new_project_tools.md). + +The output of `kedro new` is a directory containing all the project files and subdirectories required. The exact code added for the project will depend on which tools you selected. ### Create a basic project from a configuration file @@ -50,7 +52,6 @@ To create a new project with custom directory and package names, navigate to you ```bash kedro new --config=/config.yml ``` - The configuration file must contain: - `output_dir` The path in which to create the project directory @@ -66,6 +67,8 @@ project_name: My First Kedro Project repo_name: testing-kedro python_package: test_kedro ``` + + ## Create a new project containing starter code You can create a new Kedro project with a [starter](../starters/starters.md) that adds a set of code for a common project use case from the [range available](../starters/starters.md). @@ -76,8 +79,7 @@ The following illustrates a project created with example code for the [spaceflig kedro new --starter=pandas-spaceflights ``` -You will not be offered the opportunity to select different project tools as for the basic Kedro project above. - +After you enter `kedro new`, the command line interface will ask which tools you'd like to include, which will depend on the requirements of your project. The options are [described in more detail above](#tools-to-configure-the-new-project) and in the [documentation about the new project tools](../starters/new_project_tools.md). ## Run the project From bdf10a3fe9bef30903b1e8ff1c3116444a3a2782 Mon Sep 17 00:00:00 2001 From: Jo Stichbury Date: Wed, 22 Nov 2023 11:05:14 +0000 Subject: [PATCH 11/27] Remove deprecated starters from architecture diagram Signed-off-by: Jo Stichbury --- .../meta/images/KedroArchitecture.drawio | 35 +++++++----------- .../source/meta/images/kedro_architecture.png | Bin 125633 -> 170555 bytes 2 files changed, 13 insertions(+), 22 deletions(-) diff --git a/docs/source/meta/images/KedroArchitecture.drawio b/docs/source/meta/images/KedroArchitecture.drawio index 8256737edf..a7fb121e8c 100644 --- a/docs/source/meta/images/KedroArchitecture.drawio +++ b/docs/source/meta/images/KedroArchitecture.drawio @@ -1,6 +1,6 @@ - + - + @@ -40,10 +40,7 @@ - - - - + @@ -139,14 +136,8 @@ - - - - - - - - + + @@ -154,9 +145,6 @@ - - - @@ -228,12 +216,15 @@ - - + + - - + + + + + @@ -263,7 +254,7 @@ - + diff --git a/docs/source/meta/images/kedro_architecture.png b/docs/source/meta/images/kedro_architecture.png index 0d7fd896baa04b92cb3b6b559d4e069284af24ba..bcc3cfef9df4bee0486fdd24f7c2c4472afff338 100644 GIT binary patch literal 170555 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 literal 125633 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/ITvPqM3q~S*QB~KW<~Fr!aiC@M#yUEWb1HegY$Y} z0rjXe4^V|luIBCb*%lOI9)7gP-w;lkas9`OSm~{#9%hv{-p?8L`%tN*Qm@IB6k$6b zJt}v;xqcJMxCR(wp*(Lt=hI5SJpT<$;*9-9;_i-#mjG~qW6xXJ ze~qw)6Bnw;XEgYEg`uG$t#yPemq~U1+zZtHp^S-tKwdW0{4U%$p58DyQL}N7#*Z*) zb#oIKDFznZi|+3EI~w(8YhwRmy6n$1TnWt3EO}AW6z}uFK=Rqj{I}VJJw)H%t${@N z!k}X{1l-3{BuHeLctARx=-7J!+y)UmUEGL_i6;pk{UcUp|mDE%vmzD~ITj|lbe0inD8Dj?W3L25$a?!O0veeHw_n8U9R z)9Rzj0w#4+Jgy78SX2A=S&>BgmDv}7d*J|u#T=H^Ap3P7{2B+Cz2GsXt38|YFacwe z(ZmyAy8oJ8`1dj3PzzLS4Il4Co^YZjgw0{rH}L_7`0CWNw|`$Aj)Hw=A^cS+Y)0{3 z1FXyf{88t>*8<#mxaMd0Nv4Ju^!}^*M}xn|3}5Fb4T7;9!YYXpI21$|UYQ!KRf-d~>j-*-R{Ns$DydaGOO$rJdkbHgwMy%ePe@uJ7BG)BH-C>U@g#^c zsf(c{4R-$g!FH~yA-pyI=Qg)^YJxTqW<3lf+6DjIslSHs^C~|zm>Q|jv>|UO+3>nC z#qjqqcdt=D4)e?R!s){QurI(U*sKpZh?UBp-zM{y2MDH$GT6=-s_@2t@4#>vjC?@q zMeHKJf`7ISsd*x7&yG?}INcV;?~vNd#{F^Wk5A$=re`r@XAGtpmUHzBz$k2U4g3QW*dEL0ZDE%djge z3^Py~`p?`MtP}?0Bp6TJj#K*gV`;!@D6@{>qrv#gQB8s=#I5(T4pAHn54b);Fep@z zgkVr}kU1&_=A~{hgL0wY(!7nD#J5}US3Npj!~v%^3w>ux+@L$KIgnH%;^-o1mX@WJ zsbNh^{QEAyC4uP=*cE9MKN%7ACoRkzUw7)*xQWVX#so^J20w z2PNBY0meSTbp+ES6@P+)!$gm@VNwvPOHPRa@T(pLCq4R|6vd%XZ4Rp6*a5O6uZcSe zk8){aw%~qD?T>a%wX&rmvn>Fv3RM-J^|~J64oclhZWFQ`f88e>m2_;DYI0(wcRxV{ zugSbpA8_Tjakv4%bQLnpeTXeB#`fho{Vo7}zpXp>_vig&ej}dYWtqcp(lfrh@T~dI zH9bV28-+X#=~F?iJ??GC9uC9!)CZ?0VI3cw{aWPuDqi`6O7EjaPj(38{1Og-gk|O$ zZAr4*MKoc*@d4?iY$m{0^ax_32$Rdiq@B4qu&RAmqL`32x*m|;`!E06mf+%iTrN}B z-V+;gYG22x=}r+I2_YK)F*-9bv@ z=h0G+CsAVYU%m`<=WbcipDTfn1H~qC*;27W{?{7+{HCA!3ajn^{@CuVMp1=AN&I6- z9Kfj)2$p%9%n0@G)qsc`SIvLTL{YqdfcJyjCP}*o);A z-~3CX{$8`6v0)g4GaLnqs;amD`W7?vSWrSB`#Ty7V*HTcn!3_%))^F{At|&WrYYlj z2o3>6xS&Tzvn=}$?tqC^s9^B=328r$-9TaZ*VI2y9(%hx`=;h3A{#3+L13p-hs%Ih z72;RmM|dmk8pIf)p9Wgg?UQp80ba22@Wsv8yz{5To>?f5Q|jN|06aEGL>E;ul(*`k4X$qM<2Eb zN0I}m@IvTVl{3kUkc-zJ&Uy7c%l&TTuy6Ab z32&?|I22iTe0VQ?1j_?~PO>v|A2Vv{MSlRI;w2QX53LUQ`t|{C) zy-;-08{FGQynDbEY76e1J77F35|<$=QVc=ga=j$fZxoRy1wtnllA|>7J`hgf5z)?A zDS5R8^}AL=Ox{8Ncn>NEFsL(Owr+kr zswVgl$-B^-;n|LP*qdNgW?)yOJ#TNRrnCsTt%VzE_V4js0q%m$1tG)ez_4uQCxu(9 z*xgWvV40(Snze&ZPhBxgOn=TNf&w!L>VyoQRX}sh0B|`D_%q!bSR=c^qqM1*D~^c+ zdcjq6LekwQIgFwqU4|~9sCa=VTgM&03TQkFs@z@VTb5T8BwvdjR8PsRd5(cVHG^S z6?~MMk$Z&PMbu$bf=p2s%&j2#iV1 z3(uAyEv?%8wVg3a>>!w=5v6Kij6$2gf@B3r@B&t$Iel-9|DJ)a z?ad`Mk9jcDhB0mNQGh09{n~rL6^j3iEeI#-^Nv77GUf*z{xb+sG3j`>hBW_Jny9Fr zSzGsfe%iY}gpRdXy3HAQi*>4nyC4uS8X?1^5B85`Rp!5PEfiQaK7~60VY2};RR;a~ z+!{@0b0}l!=X0NP%Z!RAp)c}C#n|qfaL>J6DK_XaGw*~vby+F(Y6Ke&HfLxT@w8I8%^NKC+e?m;eF4R5|u2sFd z5Fe|O?GP&R0tBSnPDf*4AsZ0QaHw-e(PYlV)42T*qU%G6vgO9g^=_6!=eZs7b#kNo*fe>$T2)%}tJgp9 zRDPA~;;DLI13?I@Gxpyu%~Bh)q}xCw%0M5MLn5VY?VC21 zRvjmmF6*g_U%2xq;=I#O(?w<#-t3{*z{4v$2r1~M zBGNHt3RFXX@#W)xB`tpz4)SR;g`=QIplNKFOay#Z56@Y2S1bIq;KJ2FPH#+W3S(=o zoh_Iskj+^**p4-0YYf_<4jMaKe_J46SiSV{QMKPoau>l2@XWHXmt55K+sg{lgZ+Rr zqA&oW134yL^gzhKZH0$bfebOc@6SivKXl18DsO2kxzj_qq;~GeT2;(4IkLHGn)0T- z822+nR5p-I!y%@hh=F$?jRc>M8co;pKA46PGtYw){d7(<72(AAt$b5lt3JNPEo<`9QNTI_69E0I0@UMftA)-l&7X>=XJo#-I zkr~Q3t^ImhqiGDz>+1LC%Rk{hD};*&Kuy(g)> zWon@2zl<1uIHeuL=R+_gfRjXph)s-Z!Wt*6w?nFL5Tzxg>nhJkGM4yII2PLt3`X$o zbTA$kZQ3t6dD3gP_Ed4R5RDO=)cWY2ih>1()y|5g+2K9pFZOp0SQgnZOl{Bqn9{Tx z4)?Mh`#`h$@e6(57Wu#o9%jB|^(85f_`9&IB@Y9@$a`-LT=p{kX%7dk|!@`c(49Q$K+{l z@VK`>@GU7B@@gz!n=(I7pI}~K?A2k-sNV<#Y8R*-b@D2!+@{@cW|wr?dD}(Cx!-+v zUY?Wkq8i$B20)1Xzu0pa5nnHSTtq};$Em|rGRL_9+^kV{G&{8RJR5FN9g^FQYaT0M z+d)-g7HKo{O%vnY?tMBhwGtyh_i z?xRQ1y~_C*$5*-)uJdno;}=x5Ei)DaSiTpSt63i$8{WHDZ^1{>aHFKxnR8>ZjeIV^ zg~wTTKGaCOdoFIFa4TEeqjAiw$#?6(jMEy!>i0+Ydkcwqdjfc+OE~+Ci)9ncN+)B^ zxPKm-IM|VEhl7fIyY8R5A5tQ|?ppNYNVUV3=YHo}uDy6p$ciu@{VnC73Qh;RP`*dV zN5nP*TMrrKT=9Xd)8D?Q5#wRnJH!52eAn*nx2&8cXxi@|+3Yqs?_W8crW1BCzT8t?fnp~Z^ zv6=Lu*mK32){!Hla;bCB-ED)@cCr0#=c}$Nccm|ybHMvjadJ7Eyt=6TU57L7WJp7P zd6j~iNKy4hh1CJ$;=uF{kJ@LwT}6ttUDa%gs?TE_W-O(*m!CCzjY--JF51Q{)pOBa z?9BCk9K-BsG1Qm4aes*4Ll8-Km0IKQ$g#xBFrX-ocdQpA({o|kWh z`r0OwE))uE7LK3qBo?_D^{~8Jexlgk_aiK2L3z=AcV2-k&-e3rmbXJQ70=;Le64*p zTk0EYih{ZWoijT0-@d<@F^oLqIQVJ&ctx5veTj;p@_U+Oj+~sekLC8oQxgl^99h0w z+f}P0uX1{Rq<5RgJSh=VY%h}DS#LAPc=mvHxovRJcQ9(A;_6t@G=uHVk8gW7X6Nz^ zClCE2Aok77#%J|5&v0edn4o*xN}LgmtU7(WV$IY_iSA`FfUP#GA8=IoqQXsN_N$^S z9FZ5S20ljS>SKslH#AdP_^+7oxo%&bD5bmGYoOs}Zp~i2dbhIlI%&mZrLyfxbcg+` zW(JS$hU3!GEuI4|=~jVht5NMfvAKB_u5o@#lVb0>Cxa4PPuG%t94uLJ^RnVu_e^3~ z`Y2}4i;0Yni_@w3(Vk(^zn###cj=xG_j!IXhq4zjk^;_8Ll1Ag7vmRECKaK{V!UQ1 zD160bv3tTUn7jD-7-vLZf^XgndF#XGC2Q3kPcp|ggo`SA%&WGu`jj;%$ftG^+3RdQ zRar`OGtB*T2E2eLyj8@;t4$CybBl1FQ4L)oi{Nm3)2D9-5}du`mtGr|d}RCI+H!C* zR|3sUJoCkPRkeL0Mbw)yZ%z7I*gCfzn64X`tgS8vrVBb2h^;KfTEu(z&b<+Jt&!*X zB%U-S-9Kb>ZT{{2RdN0KxboAIg2Sh?JG2-uT7m5u=Z6#^<=4rGr#z)ijW_)fC8hH^ESDUdn-f`jy zu;cA~j4CjBDYfO*o5?0z;O{-(*v24J^wSo*B*qF+_h)sY5Q0KsIfM3RRSp@sv#_JC zmV8k{W}OzUx#K~#I)irQDmRjmTjxGXUg>fzeQBAmENDI3rq;dBsJCpjif=^_4#<-J z?I=&&`}>9y~WtNpYcs@ z0x`YWTEA!wvK`zcl%T?0Qmmya(XzuKdv)T5oeqjMJD%w_zX8pFZD*Otr z^r^b9jCGZj6wl;N%m9%n8D=4p=S2nKYVnINiWTccTE3GtK?54A2|n8m`!_cH=Vy+5 zG%#HnjJJvYob^f9KYf4EmwE&7ZvKy9yw<+Y*`_#M%**}wErV2vpbf)tzr{k9yUH6e z`@0n%G|LVX)m=cR-UXnGu8-2Ecn>@>{0F$f4E)IghB7xN;F5xChwxN)s;vqguBO^? z_6Y5Gz481cPv8nH6h#chI|ll3+Yr36Z4o9N_z_JI)tp3^EdH(rZEh>pk%< zfI;Rk3SK{2-Dwl)Hz<5@4aF$1jRn9R!;Cmx5B9tx%y0%ccl2RTTb+8lnv$|5gP~gK z9?TNxzXDg^-y4}nlLEIu2m=_N3AiW3BHm?@Q+x5MVSMXC$uq0}tMN_v292(ix#ZZ- zJqxb4*kYaL(&H^Ph$Li&CB#i1l2@sjTKnEAjz7W#T83_~O)s=ogSZ?ya(yUZjdp^w zah4j0uguPiZ#Yo6u2$sd7gdzsEV3Jrs(X-V2{VkPdwsQV=L8-Gs9L&#PSF;*I+@iY zVL^{D|sWpFVS6p=U)%Il*@2_@KPh*ipkD_Xmpr-^EwWx6?Q0XG<*J4O0MxJ=yrYhb8 zj3#pcVI$GL>&LHUOrn^mf)wWEFGqn34och1#dwg{tOWkurZh|Qh*n0~cI|9)>jDb~ zo_DvBxiDNwMR-^O03G8Zhb<9Zxc6#L`eZC1`g#KhNOPRN z)OY5aNb9Ov(<9oJ3dBeiLHkxmT0+mGpbPQ;RWO`XL zw&@U$U;m{b25iOMD+m`=!xfF|YYQfYr?;Totpw%tsZBYUw6{>xWoV$)7Z0Vq;t(9Q zg{+F3{}kX3JSsj1(yJ7R7u}L9+6VW^MHo#)tONb%Uf}K_>;~>mB?hh`JWRZ#m;T!P zfbyI$Tb*tqU_j^P_ap$H{{L)0b}@Wdv2fz^YKt+53uB@XhrQFiPfuYV=Gd^-B(^^g z)TzxvDd7vC-%u#ybx%U^QpPj5TJ)Z5iNw8wdU0dJdVNp%4I$y*|@i2SCzzgUeFT?F%^NuTzFaM4}emLf03~ z)|B4?N&g&#_>9@0bT^RNj02wmg1ZKTc}xOCBHDo;I%YA$-H=rpxSnbEX~@b%t$9!j zCo5bl$-)Xcn?Uy8n;8_w!B)#p2k|!nU$AV!HAM^xED;BHBJd_v(}>xsIqu+d0b+lA zq*x@ofei=h^WAKEUZz$d;+54zb7zQ@M&xqhXrIlj(cl*-IxOjS*Ars={kDZypv@UH zkh6&P7jYPr@TiWc1W@e2mJf8PF9t~{OP%PgZ~;DRAR5t+FoHUB+F~C_&=o^8wi}@y z0U^7nur~x$?M6?@ASKdl%X|Nn*TQ*&j>&I(vQ7PaV&VsvT}l0)Lg=dAEb&8klL|yq zLp`0sp_ut&C2Bbaf^Zduok`iCOB#Izq-FY*Zz6vWwGq!z2t71!Bfd~sP@$TXW`4!` z$Vb?uJ#$k~Y_C~jl5T965=k-jO5Zt`&$aUVNbo#?VstHC;b+7(jGGmaI&(%5D1?%% zj(lp}kB4c!^?d^sobA#le}{bD)W?ghk9Ix|M)?_t&iQV7a9*H&Vs6WMmVr@=PKFcb{eBA?RUb_JUX_7qgY*Rfepy0XaS@mt$ z=JNqePta!Io)SyfOob)nq1T*!*a+Iy4$4Xq*^b9j`3ES_js2Pfq^=vjapD;U?KVKB zb`_eY&eKTLN!+G6-=^;1%!Mvn&*T zIQS%N6oR#x$M!?Q>+yDgfK&OkHU_PWpuLYMsji-oxKuoab zoIg$gKfzhbERFsRt6PB|)SYADg?F?#Z9zEr0jz#N+LM1ImnCj9@#(8jTPnrvkJXb0 z^=vM+3MrdW(Yg&f2<1XUx(V12V?0GI1R}k7xw$PsmzCX!qa~DRzZUUS(>;07pD z0b&q<;G{kDR&b_^y}&_)IdSIZ3u;B2TD`+bmflBd>2j}~jJDg%sk-gT*tr)UB%lW7 zagY3r!JD&eL+ay#k743=dRRo>n3d;NQ_)7VPE%9I^%SZe2q*x6_I%U3(( zH#}lPgmn{``!^s-GVoTc+*Wbo45RmQ%LQVG7hg_%_m^N6S}_G#8IS;czmBbVj|OgS z6!(M6u}A%e%@|~G@MI~NZt@dl6%ykT$qc{3r-*GaAt6%Tx$7&n%jiF|kB|z|TiH-7@l-rvUOi=q(Q4VYQsCX)G)OAgqT!SuF z%t9lw54AQ#FlHb(s2aB?FnMWq7qa_r2PWgVS(!y1y*0l)J7w-*{w9_(wugeX{wWiT zksCWk8An3dCqm3PxG=>9=KGjLw#c=G?y~Gy9PzEq{C?a*{t@>`iOJ&t*A$udal)hJwc#pP*el9<$XmJ*S$U24)JqaXaT^2R_2E^T_&F)LC zK7EwTAm-{AmGm&7N29nX&e)*cZQI;AZnP*o)I>KTH;hsJ$Hvf3JZ%~fo=t2?4&+<# zbpo+<41AY6d%~mWh8L|K>oAW~{9lNPWD>985n)E?F6_ah@RPYq9A2w;*)>V>&hYXP z!GHqCG$%cqdk)2hO>WjP2kaVJH-$qiTnHzMdFaGIJ;oKz0_~cCAGzdmc;DqbyD7*J zyOsn1B}DJQv{8~AL5!4l`4$Yuy|3FX*b}Jva-mbEI~=!Vb_>8oQnm3cck099VG+kf zBln)G+pjL+w~rL_iF8~oem|%6?R#7;J6$xFq9#L-$qGfR&w~(iaUzUmeQL%9CqfJN zx15oR!NW~sll&e;GE9!}7&Vk$^GrOg4g5q$=w%%14IDYHxEPc?+9-W2At>luYgmzE zqiC=(^U6rvN#v%BL4f9jHNXoVAuJ-2Qlr&zl+3?nG4|of92ljpdQk|4a3Bg>_24z~ zkh$SgXRd*G&ksauMtTR%uL-jZOcpZya=;&qzf3j$rcdmq=9jZ(PJyCnOdE2Jgy$lQ zw~qS_FUMFupJNueIi@_bO)2BJ{_bG}69|j#8Jt?Wtuy|^%hC!&m}{h}JGv?-xsSgT z{^A(C4yM;k%2+Y}1Qamz)5RXS@zsA%R!9@{M=i^pAeZ>+*Z8{KeF>4`DBNeXV-R<5 z@(3=E2Xd#f3c)StbXo)iE>XqxGf~j8p$TAxmw{_b`D86gV#kR61>H!e4EH0sL($0o}=Y5aotLq^lls{!gda5BBZAQ8dn%3*=7umuJik2=Fb6 z&xCxFV-iQZi$ygAhW1_q20giVKN{J{iLlK?>c}EEXWD~<>1GN=SS~g#KgN(9AeS+(CzyF4f@Jj@#kWfVa|Ezback=L`C7e)3Lwyypi= zPgHvoGBcC^YH(`@;Il?LZlG#gt;xJ#A>fz;FRDLWK#u^Zt#zulkK}+`)qGf##*A zsG-o8uCmfY9>_X%7^~~c1xsDQgT+dKaChTkZ>Kj6&>Y(z)Id~mmf=1szm@mCOYJ1)&E44}Wsxu=r z^ah;FM^U{p`vEajuQLmTBhP``rJKQ{|I&Sl#XI6LI(jd`Q*jzf5OqmwOuhl_p3hSi zq4u({pDu#oYd85RsS{Y4*fjQnQ=`b>_E-|UjCn)Da~+6c6JRFe>pETpjR3fs=h<5U z=JZna3OH50fJ>S`mfqVQRe7a8#3}MF;xz)a2611Z)uTA5(VCY#^#lyHo+rA-Q+(QP z7oPT>^_g!`JmPkxBbFDE>=mfP^oxTHAMXZZwx8H`Y`RkR04Ui3*>&jzfy2wUc$b4* z=C%Y}Yg{LRJw4swgcT9YSWPGP$e}?;&aL79gR%FHr@H_D$4e&>WrdV7G9sgB*ilB- zu}O%^aWb=IM~kS;WR^X$GL97@*^aVzCuB=yh1B=)R9&Cz{l0y^zu)(-tLwTt=e%Ce z@fi2V{c(Q;mypbZ%75jtTv~c2o9oTK>KWu=jKL2=&FZvc)9cy?BHYLHv!^iEVfvFg zzI$fK5Qn#VaT63j)I^p*Ku83quW~)>kcaRsT(0cf=v zx@*cC?;M7BNhkN3EG@%h4k8i5dz}55GF*qkgVtFfl#d5|I``pfBQ<2!>Y)AU z3Ziv|XQ9!5*Fx&LOC!6*L7+$yyjuLbZtg33K!4SxAFgskx z$?1X*c2vjcBQGLkEdUqFdMw5|_v=!Ug1tvA^ZJ{z6`unVW)e#exA}LTi8zUYm zj`MT}qO+6}!dp=E18QfkWXnk1>Vvi<%#e24nq|`s^G7E=Kf_JmQqzUNYhvL2ikFFxF0_AX2;(s6 zyk3cCFC%uGy&xNUh%r(yx2iKkl40@(AigSHVVy`>tLrJfI9rkS?1cTj&qv2H{_?q;Wh7I$3XsAShe;?nJ zHmdr}N0OrU3xSn5Po{nb%!(boS&+xl*dye}0+MT^>v1_R6^4KHQVXtYzyUeidE978 z)m{dO|8~~j!BNEJtL|#M95zSi7 zs0mikF~(k)nNy~0MDk*`G*Kik=uaI^l^HmYD^Z@IWc1o4xlBaBWsL}v%%{xLg;ul( zlSnv>Sgy;HA|l_(7#Ef$0mJRAWPnnL_2-Y(##<3?d>ElrG`W=0DvNVb$(@8Eu~O~@EuVGcQCvgW@#v6bd3O6K?EbS^rq%JJV6}$^%xv7mW!;_(AsX$|ndaGq zW>rm&S`>jdGWLlO8`C-S>MXRPeCBbdB#uu;F!J{w z6VJ9Wh@b6;luLt(x@MY^jpjUnh1i~LC{y}E$u9N=pJ4YGJZB)IDVxK1HEC#)B>iBQ zY3%`1VZ+Fta2qWRD&|O0c{tvCyy7tF7p~8inx_agYSkwbYt@9x)lC#?kC)jDmA(&D z#Myj)sq}O8itR8qE;2K=oBLekrwppQubu$Ewk&qAyPEh;0Q!lmcp^EnUaHh)p}FvQ z=ofw_Ir$ZJ(bDUGICe4Y8AJG|mZ*x!$iNscCi9v}-34g1`Qo)=kz|5N?`5oAgo}6u z(?~Km`HyXyk0McP%SJk9O+R=MwxaVz9E1PJRheDP-fNK76KFb{lQN%=RaFs^OgL}v z5u`JONk4NyYW@tkzz_14G-R~2+cCVeuCefzGF_^YjC7R;9?@L4NUdDn3*JY>Dn)}GsURm;y8lv+-4hf~lDY0Hrk2&cO#fe(6K0me-M#NloX4GA8iW4F@1$|Zt_?k|JO?x`=*T~0cVU+{zn z+3MQ@Y4Yx-cQA>kZ*;mQGqa}Nlu^Pc8D8>z)h$<0@6 zRzqg}p{kNW15LVYgVBHx)8Qa@Ped&Fs$V}n5#zoRRM8PByB`K)nL{VHgW*le8h2>% zE{)Zo3O9xvG3TtXbPhKY#oQOSh!|vDjhO;)n=`I9gS0T_25mjdnqqpgq z?QXzO$K9|RMqF();-@dD5Wr+Bb|h$D36XA^fM#Gj`0Mg)Y+!pGlMC*SRm(a+xStac!!!pR(dS=O zD!HI#n=Y99WA_20E-Kz>Tn;QPm=Tu_?b!(c-Cg=)n_C4;%8QJIo4dN0+F?Zc_#Q=J+f=6I-5 zc`H#~eB$Xfn{VSyb_ZV)<#qKhUmf%)AiV;nuMJ?muJB@$(l5#f_L^!sqLWL3eby6T z+IG{>TGhadM2Hu@RMhD6a}8gj=-gU^Vq=fafs4gfku80?X?Z;tAn?wCE*rZxW9Rn@ zrvV6e8?OPGex$Aa`2r^J3vs?;`BrZp9sN&TrtFA`ecQgx6KTVCr&F2Ntvis9H`pAI?LZO-0sJKoQAMyr- zOep-K5^J2>i2LU$OpctgYqu{@zjNl;B-0pYO2HdhcjyY8*e)Wb8Z4Bvi!RRcW0K=N zusfox+sg0Ds==SG9k`gbb329nZP_8rB&fWP3Dv(p-CMd(xFhp9DdLV4ILJdsaDA3k zWrSE>D(tY`FpS&f<>O9p-a#O$>#U@4;o%m>9qm?7K+@?9`psV=j-!J+EZ9HR@Ys!+ z<`B@{?Ia5Z1k@Z;JqbysCzj9Kt5l(J0(O$sgpX1Ddd+zsaoLB2t<}j)CMm6)d-xvz z$e_wo{DrLad_j+X>1VV=dKw zy2=vPV^q!wSkG1zoJM^qt2S4{j+r=oVs;Yt*I9fQof1|S$Z41@stiq=#-kiF6x%32 z9)NT$V^3cD3msu=!IxDkC%<1ktl}0Ab~50c*Py)pJqDxdoxD-hcNt2I=XcgbzX-*T z&{8~sLwm8RXfM2vn4cI05i+0(>T~fN?jX%yez2DL>7fry$y&drYFfFIxHiJOn&6N|*e$VZI@g z&-vS(v+woSIU_imL~mk~6r`++WRMwnv8^oyI)`ivFPGTGo80_(7ki6eQp@lL)N!7n znH--x;vgsbfa79Xal!GTnTMaVU!zLl@RAqEki-z)&c>-ozsP$GBSxw=SBy%$4bRB2 zxpZk^eHf!o80td3V7hu6*Ks`$=V`r+DS=FqakWq7pvoq|=cT8jjy8XejC(a6rfSS& zQEq+STC=3vdK1YC+fEAGw5eoS#ZMcn*zPdknMMe;(Bm+3bsrgTs}Z@eIZ z?xXzn|2|w`_;(=RcJ2u6u9{52vGOi?U!hVGS=8Ii7A*Z>stdU}H1NbVN=-e#9rv_D zK^&0f4lPdIt3}{r(STGmhJWOAiI~aj>ir};u4f>0Qz4t` z3!)!vkC4*$ETF6#;jdD~ai*-(m4$ku5zA?4K?UQ=)bM)Rnrjj4ey*p1cJaJ;D z1P{k>apGWIv10MhA|V$ct1H&}XF`wZ=*$}76J{1*JZZr^jP+bgfT?fXeA&fenq$#6 zaABx<{e7s2_KGIX!b3?3(-fG&v%k-upE0*AIX+i0!5sqRMB0GcqibHg)tpJ@~>riK*#ZYguQEd)QCpSU;zIAQW9SOK zM)xWLloVK!!_r~UXvzCzrHX~kS<_#RA7+OuN;b-crumfRBqHy`7;*-Qu1()TuZiYi z4?d{^N0=kjp}drQGs@hS>&6LTt2Q5qSDx&@U2qB<{pX%om9&zKC;^okskcnaW~KGT zdKkP|sDk~yH_?}WfQ4VWej3S`azUAe-!HG-KmLnVlyQ1Z}Z(3@&w{j%qLB(GTUA;VvJgAICIiY`KE=JW8% zIArAmwx{$%)x4q42@TKTevpE}Cvo99dGLJSmVcRBV{a}QT3`HimU(ku>!<*Q=^3AN zBd&Jta$pKrL8jfh`WaRFI@MQ+$diFh;gafXLIO7 zab#tFo~jwQh#0ThQxZ|8D>{I`yzc^Dc;=p?tx+dSTwt))SqyIh&nEL!rY*LJTNUt? zch=MrzQO=iu{DzSMNwP@>4 zyzF`Lz|>!Kuk}M};*zOw*$<4rXxtQnR=k5?B>U7(vKo4*y|hI2aA-na8h&a!f?;LR zn++swW&cK9P*|EEHbm$~r9zG}C{#dJBH7ukg^~C8ls)+%diR8e5>92XK4HxqC0RZvt z4~a)#qLJWrg7N`RQ?9Bna3#cHdXZLO&%N=~o;0poLN)w0Z8HT~z|E-55g#Vxs^%fp zg{}DAkUK$RyH=u}*xtmH@tZ=ia5mor9`+YyB`%TqIYYSFnW$g_3R-Y_i6KnL=u^TFVmj~hXN38vfb~5;>K4_)Aft-1VZmsU%lSo5@rzG7T6V5@=;ZFh1Dp5}j zIXycUjJi&R!PiFOp>>=o6N)%;KZC`+MJi^jJh7$3M zRK&XRq8wwRJH^Y!B}u%@%Dg5^g$`qiZi61*%ATyRL$vUbIHD$`;4NLYl{Pm|M11KI ze=fH#MaM%ovQpf)Mrsy0K$<5@VTt49XKeaN^4EZ@QgZ1=mH|9)P%gi2h8bu#yCxN7 zoHFXF3wx&Vc)-`H0YO-mT<_b5@o=r`MsC!w5HsN3e1&RGu$x!3$r5ZzGBblBAfa^u zvaBLv*Y-U+mrl<-y)RX44RWrNY}NJjQN?NB>pu!;RgbDj4#Fp?@poZkKdK4SUVwN- z^w6cQySLl`c37ac+>TQ0PAvx+Mxb1q$s#YNn^jkrcNBp;8uFBt{hH47K z?>f&Gmb?E_uqfJ}_rLAt|7CwT;hZK{ivb4OKv5HjFwpl`32-CtF#yc4WoM>oW$n|> z2bI%)!9wH^&w=Wt@SiNc9)L0!n-m8BYA4>9kYOFKJ*sZj@ zvWIxW8^3hs<2h2f_&jIb1?@g5`yMqatXj{ zV9(zJi!>!n185!`Ggwo{e<~gO{hc6UBtW-(A7Jq6n~eIX;+SJpLV#R)<7`t3)33F5 z-vOW;?U=t^4`>X!8=YecwiGvkE3u>!GWn-6?y*%FXY+@H_OG|O3f~W7z*eB>a|s~- zptyDTlN}l-dRwDhCF%F7|r`!As>!xnfqAT+iATNOgtu$*W zxHvOWf-IM-VS=6LAowN z8UW*-3bz}b{Sjc;ilJS50EXP-(&HQ-cz#9#HoyrY!hDHqsKR36y$r28P=iBCXwVhk z{-P76rEQD`31>rnQD{tip6l@yP$@iZ_Ig_^6nf&JtN1h11e9YLsT$#4vc$dROee!U zfVB}|qJ!pIh~2h^2~!1M~xZu>^aFogm;#Av6&Uq`U({Q~Yr zG4$plb;KN)6r*2gq0XxYk9rkk)pGbMbd37K8}c1Lsdxf|%@&wCEAVau5Sm+q0-_Mp zLI1*w@-S0#3Qknwk@PpLaAsS-?tHxjJ8uRC;r6FlrCAE>*`pITcKml?hZCiSW~}K3aRO8JK$G;N&{_>M92BzXId+T6x7>-iOGiaZUBT zyf(bz8u;!GN%x?YL4SN;0fd&N9`td6C#F0ldUg6^>7R$CgeAOXtlo)t*!=4KZ!U%p zSdVq(aKe_K2jo5YXIMax^8GPch_Hhz^O@JBkudtYql#hye;-j zI~rRS)s(5GW@{9+Eiwf{o_lG8WZoNEXP3KlhFRj_3TI1$@DE5Vl=MUGb8N=CWdj5v z#(!1;^d<=f8lXeP1JXHE>gDeQ0F^$$#*o(tI?-`x!Xp%pG!O^RMzoItdzp$h049mz zm#)?ZjH-kES@H6eLoQcfZSG7o&?y6g*9H=&egUbfCARmLp!0 zE65Vj+$q?2?~F+|PZrv%&6IYh4(7@LJ=doYQ5Kq-ps?G7q^#U5-yzLO$kR%YvXr+i z@L=rQm96*>>P+6u1vRVq>HaLeV{Vtzg@ih|<=1aOm}-2G9~!K)Do7U~9z6lj9xwK} zl~K8nMEO)wklN%eCIi~Iw{)W$v=q<4UV2R|JspJSE<5CFK?5b7t*VU~Ta1$Z`nH#{ z3=WJ+mzCdc6}4tnC??$Fr;oA#LnrCgUQm;=fKi1}EsDA;B*5Qnf$R5Ce@6)QX7#U) zv%FKI+S-h9ciRm7zd=FLffCB{%~BQ9g`>-1orf>LLhwxkk}P9y1V14f&3$Ow!zQy8f?E!;v-w z-Tx?f7vqs7asUlro;-eO$6<&^xI3T}n_P2=>P93K7n~P{3LCLwMOdikD|H%%(#H)P z5EM^!I*3Lby1j7w^>Z^mBz#Uc-d_PSHUEKxLs8msq={c?IG=eNa5K?(S$07%Uq$v>EWn3n7n44cg382X3J`KA`ns^k|9GqwR~P!s z`J%N?hd`BJ&iTm0CLWCZ67V!=h!9fMiuP;nQQJ36mfMOQe)o{{gN89sy~(&q#bhGf z$`F8rwgl-xkRovd5@F~VOR7I9So`FDD$Gy7C7M)j$(F(Q^J3p zcn~i3EgWmy12S7$y<+!e>WsK|5kMRS* zL{Trv;4KgfAA3q0?{Fy{Zl+s_^K4Q~l1lDwqWQ~cvv9kWv}X%DQ-pL;$I z&&`c*2&X+t3Hzp;@s%2dzx!Yjbuf`NRuB-f$d~H%I?yZmI6iE-q~jG{$Pq5eoxHL< zI+{*pHmZrVZDS?faw~y*vzC@TKV8n64#W%bGKI?0KC2fVqpU=8Iv9ePnJ{lS^u1$E z=6CcdD~1-#K8=}z3*O0)>UTN}F$it0hB{o}wL5R3pzLz@nt9Gz!K)6d@vhUn17WE_ zi_#1Y)I>B^6e&~~6>;APnp5#Ery{<<0+(w*Fplfb*MOxmYEEFQnVB#o#cna z4NmNy@49zo>EL$-_E6kGB?6%vAj|i=oU^`NNn(xd2!l*%mX`_jm^-Es>9jfHpQDVIcwH{o-w(@y+fI|AHXHYbM`zu2?7$g8%K3F z9Qu;5gi7qB!l(>s}6O9*L_qOK?F~bk|rZmU|8XU*OI@WJB}- z@No3f>$e%M4$%?xq5RPyp>k#`z(AqBmZDBEegMu*u0q_JMGU-8C*5;jxB@+xBp$JA zdj{W(14uCa(ekk1h3EOPFA|s7$g+#4vhRrPCQiL;`*Gm`LtHdlV)c=LSQ6{W>mhqs z#on1-C}QFxLv05@%u%vZ^PwTHnLeX6aQig@*&2>NxCu9;#3wBekcD!y2j0~Uwz(-H zaU6qJ{JLwzJq?2b`(1~hUzI3@CI?h|2~xjjo93>V<6DVEQY09B7ulPe>>;0EaSRX3 z-UG`kkG5st>lNp(5L5*F2CGV(hwIRUYjBFDkBgq^U7#kaJ%dc6^--^(vQi*PfKNOD z&JF>HbWQ63<*?JT!#douhezV0EuE~XC~@C=ZMV86cN+Z0i9K_^>5+WzpJw{d#eKcp z?ht#(U(}8cCqo-R4xc(X`uZqbx~JfL>rdvZQNiW*fXkgt^YJuq2;cktQGzq(_VpXf zq0{{w!0p(+eqUA!)?$pszyjgwci_o6{mk~GmD!Cfg{QK)ioL~ytPfCdh*3&1C1l_w z$ZA#qNPQxlbDrG*KI?SqTkAonso#aq?rU`>^W&tX_9h9EX!$yJJE2l@FdcjpBh7Ek(e#DC(V<)8uWOV%KQvY}Gh) z{6&R~xtmUw|BhNl6P<>g(l$f7V-YCJsD%uTmQRKB?6iGsQ;s71E<% zym2%mEH)iHMF7VC%DBLGJFWKqcg&IwD99=(KbIzdEp1)F-eTFYt*qvVn3K@B+J1l! zAuIBa#=X58t&!iNv z0D&Pld{}_;R006r>>-@6ArGEsko(=Duy4|Yf#mN5{6)#-hU)i;ASg~jy7R@3n&|%o zPygpN_rY `B^YJb)E6ci4x>p9{sId^ORTKAR&+M3%U(KHlaYt`tNyrCUEaXf@#P z->i=`l-ou|hhE_V`+h|tJ&9>KZjbj%hA2`>UF>V%Jf3^T4waAb=th#wKv8B}v?%@s zr7;W*2A%eNPF~awf&_$68v}R3k2{nMi0%dBZF(oHlOcT|fWH_7@{CH?%EL1w*HI(Z zp2Je5^6k5pY5hfy78FtW4FPb`I{#hN6SnG4l~4*c0FHdjYpTbut{9BCTuy12nk0?F z3NVX`af?BGc9Hi$cnfOnLa~ZtbXSg1@A}HTHE?CIfl(bO&I8u?s)_xG{hK`m%T6BD zb)h0fU_T6`)ZbKU46pUSXa}j5=%mvINckCqvDzK*0Z#R)$MV(D%_OPW?7}&yhyuMr4Uh@Kwn26Rh^Mm^-9~B4}B1jS)#6^NIso<2;V=>$b7A1 zz@AJ1DuOGJ*HNCaxE%U`^aJQ*IsXfXv6l$r)ztc9W`2RJsQtC>r(ruMfzfAni8m|= z4V#7u({H;Law|S><(u(9CrZ3~sD|Z$m4v@67LbJr-O^|QIFhH~Q1#VK(*PiCA0%;% zj4T>87~DVW-zka5*@Fgo8_Zse%zFu`cdW>z$jtr>ts}g$%d7DG{af1i@00GDczu0~ zl~K9QAG-)*Vg$rmZF&PLbMF-&v06s*>p2=Gpkel+?NUz1YTRLnruh4(#)o0n96fu6&Mmj>t=x_Z1y<18 z%uT%jgFlVR98=-#nj>7+AdkEVQuQ`aDaG2WTwH+(0h%@LFzRh$V|}i_aK1xT*kyCt zQzF?34Oet2a=CnN8R`{9XGU(mft8)Cs&byzmV}~>4KzHgAj&D?4Cj=L6rd3CWhM}c z-cGbXyMd1O$Pmh`kC|3^9p5haj{lG8jsu*hwJb#R3cR5jyy0=nPG$@N?vA;hEPElw zQQf|NIxMlS*|6HjdxTS)=h{WnUZxp;&f|^U0`7*8(8^cSKSYf4!FyGx2TB-vSLh!A zwKHWSfe^e3SbqJZL$SO(o-1>P8Kj{emN+QKIyyQ+la4#Z$q~SJ2Ls!n_v+XJXA*qA zEwC9yECBb~qI!&{qS3qJNE3wuz5awSLU~;V)CAI6B5I*=B>zGu4aPADHmGE@%?84t z5b#Xr$+2#NT6yER^LDECDy;lE z+ISNy$qkUsn-$@qY9S3hA$8f#pq_yK=MvRUkk#lzPe4iK4@B3T^pk;l^Im@u36~cY zgt!-MIA^QD@+ux+Nvr`ZUBuz}MLGL>a?vvX1MC6m`VL~> zaoUsviU~fUk*@I+0G}?tPt4MQR%)hlnTOeSXWpgatV2MxvkNLGL_dQnw|HUW#Z{t1`cUzt5k%2#sGa0W$hPsS)3>1~;*sa7w1_M6f@J z`nHI-Ec+_N*-pX}t^2|4hr*i6_c=rK0Jbgk2)Y6~+u3h-O1d}6+4c)v1P8|-12bmuQb+K?-IPrPNK{l8P+wGNW`Fp!vBsslR?V>;kM zs694Nwmu@JszQ7=8KDgI(gB&v`G^$<)qY7gi*(}kP54@yD3gORAK(7v0=V)O**PS? zpP!OAtJ6_Px+^<#ezXw$7Ycw!V;n`6fh_5`9Nw-kxFW~K58SX@7Z`x5tq);@z;3jZ z+aWX{r-(}92qD`p#GVBy@4qxc%5K4KBk09yefDz(EOfgnrOanOGf|1 zhBtZhpQZo8^m!-F)y&oLQ4T$_AZ_iZ1iGtE?+i76!4wJqf#dxv5 z<~}bYn?gwe@%`2t9cEJPNQU*le@)j&&R+49NboT%2BERwT#Dg~2hjM^zu+qnq-<8^ z`d8{0H2Qw5E!y_wUvULuY{S(V3gX2(p~|qwTHqyvt<3iu~tNfYbL7ivNHB7>*YKZQcU9sPYrf-8);4c5xeMbH^uolP; z!=qVB>l+Yf-oIZ1JJgS0#^2u$HVRI2E+STV8VdgMd_s-&6;mu`#Nc(0yeS=(B_Xmm zbj=K&>NO7k<_y!GuR`Ea3_asKpYTZ+>1tTsW*p~%^LiTA`6VSc1ByzaWt$ePo*|ih zmDD-%bm9G$TrdO@Q6$xgbl;(-yQM-3zAi<26?JPs^SDj*=8Eb@e})t+p$gZ26d0?* zM=surRL0Svz&Oe5MAt>QME4lMeR^C>j7A;b>2awgaw6i{h=|Pf6 zUkGuet1JfUh8mvx0L*flbg@`8i~}U-4RMPsp$*BLT0G+^4q6P{$KC$?w&x%SfIHQn zl(0U~r>{=P*m!dyD+g}RfoQY(V&saaQ^My!0bM!sHZ%tfBI!`f#GW%lW-xgsA5zju z&lT`Ag^19|qaG8X9b2Y7-D7m47= z0vO)*^{wr$C~Pc4({W}8ieCU;-$t)81F>ES^iN0zM!!-p*=igmfDl2s?KJAAmgFsf znnO>uudgJq)8|n{2}5{kyt zU*Av00mty?F4uGRxu(@4faBjlHv(04U|Y1A;t(3iFbWlsDr+6XSePaL61W3hd&NlG ztUFQyi|vL7urh1rQBBb;3M|>cS0q^Hmhs@I&)=hVaB!c9#%ufVJYW>RE&4#~irU`? z_C1;lZxr7-JB0}jV)3Vkz6k% zAEwvIq2lt{5?pi<3WrY@ahv$|GA*O-YG#oBLVSs=h@f%lJ7`ifve`Up0H;=5B6!c=#nHfsxO}{yF1L6b($Qi}Us6JG;x!WO zm-ub|i@yFkMqQCF`M$aiyY!YVp1A>Ih~26tU_HhO*~h3Bfh8oQYmdraXcWUU@0Doa zYF>7QMJTs<2lbUfAQ4QBLz5N31$SiTRlBi}M3Bzx4ak>(rQ5=(r3Pxy5&-c5b8To$5lF`#rUG*CANR5K(3<=G z)NndKV=hg#ccTsMZj%am8Fq*mLHLz)&N6z>{H%L@d*|6&%V?{{OA@BQ# zT=P-e#ETcLSju+bNf-B>cFe2=&tmia%g3~XQ^h;Ip)2om0S~T&pK4{xQ&KD1Pjt*! zEb{$dI! zx%}s+k;U0Ao2pE4lS?y#6w%jp+Gd#gClpXU=I%Cdgh+s?o5{{V-P6A>7^eb+^hX%? zlJ5Xu1yz`7FUH)xwTo=$PW(BWEamvS8MbfCZ+L8LO}2!9Bkf`Eu0K~2HufY%-R7>c z>zWq(;9vZ=L23Yav8=x=fSy5Zb*qgd=JDqKvO~T?7C|07`i$NXYHU3$?QXx)U+m1g z`XD=Ni2kikruw>D81wz@^?<+&u#s-S4pPB3<>w1?~&H0*pZ}_$Q zK0ZZDf!nkizGD*Bd!^4ieSpnhR8PALV85+LW1pok=a1!|l|5lbA^Vyc9F^(u4hqaw zIWr>|_e}zXf@6g6w2~A`ByBxp2q36#QT&v7}YW#%04|1y*?bGIU zI6jYiCNLa^R~7X~|6`rdA2|_l-T&@*J}Zyrkl@U@^Gx`?!XeaZhiam?PdWe3djDXD z5X(n11)Z_qI2Y|$ivpPfB@sh~^LjBQfZdI$MS&(t4*uFezinG9y)EQD7eowxu+q}6 z$FwNwf@K~2MJ+mU5{9zupU*Nok>i;J&fTNstW?e4gEzEV?;uw|9~=e4D(#Y?_P|r`QoX zAM)*fUU0$$0y5|tyQ;OWI6zFG5aaXDnb^Ad7a1D6g!LdIxvZ}yqzV_Q@TC2T!>9d4 z>uYdU|Fv!fV5vk0k2HQCLq@eB!(ufK+UO3QRRr+&_kGw43B)q%UKySHvU|~0)Xa~z z>VX)~LOsLL;yDE|j`9@4-M@QphZ+5O+jwa7trvU9JTiw{fz}tm^gGW!DH^ANgJ;~z z68AHk0Z~?e@3#NeXE33nTomIc{nRQaLu#TsTOKtjMZlva`89pKf}8n}kskum2%PF? z|33d6EW1v>ZlXrSUdWIy&^C76SHj@AYTMb_L*UoKcha3Ai(Ws&FR=GdLjCV0qP2$q zm%7_uw5R1k6OIq=kf01tL*w zEfJLa(98n@7$Z4KIGD0M;3F+;r}p0rhL2oh9TJE?;4iAWqapvFkI4GJPEig=O})@J zx8$V>oUdI--NXjc^4BPLCPkxDh6;9d_h1=LCkD64|0~8sN5p^SWx^%g3Xu)7A# z+ZXT2Qo!B$7)ni~^;c!4y$}wcRX5Y6iIYwH`Ea+_)nD_sRPWXPYZ+7INzlJZ@cp&% z;k4(9jX^a?T)6fa;`@O;5}(r5d!zItIht>10y7_1pc$Q}n8&jl73-k%>P;|jqDNd=@6F|22-=(u!bC)XAxa&Rhn+jsPeV`@)ty-l z@%aGQ1PhQMhzGE=L8$8c)r$3*7q&n+QLz-#g~f0T`hEVLtm97%&cWqueI)j&pqKdjehIkU|S)W(d zc<{vpDAf1a z;hKXK^#K+c`?&$D-Umedg*zECnykRj5mGG#$GieHDv2xnHGF}FWsbNlm3m(Y#cg?I zxy2%L3}HIQE4FncWQE2_LbNsl{%!BgESdW+=c*Er|OQ6)z5j^-k{d^l@Ry68Cim-@|>F zEsy~|#TW(;{(BzCwtzyCO}%fC}NtO)$=*5$n=jNuY!rzZgAnjwH)2%4O{ z0SN(6kT*>>FWmVF1P!DBR=Oz3tqUqH^C`1{3(gYKtATJ|)f%Y?=i??F!(S_%F=kYI?l-|w)_r04r~?ny}8hzb>2@KLNYG3PaO2go&UIloH`%o zij)h^4m=X-&-m6V+FqJ7TTXjn`Lf3}x8$b?ouO4{%J&eVT}J~z2FrzN#G$7QiGip; zJzfLiK$8jKQr(8n=;I*Ziyyovq@1nGeOw`#RIJd_ zD0q(jH(gOV_hCkc)0r`k!@T~Yz4~H{e>{PF+$~HxG{sKfGPP6Vx&*SajY^2|FU#Nz ziibv9g=XkJnF7eEqWcJa{J@IP_L!p*i%x(Q+j&;h%OlUA3496OSu#MX!POKniKv?y zMaSI5xmtLN~Jn^5bpOw0UFu;NST!1^>)0KSzdvk#XuAn}%Gs@C&H?dIot&eM5Z%(kdc44MXgVP;+HUh` zC!j0;oiZFw_+L|oPPdekPs#kk%+1rnzed;6is%Cra$?CDiCLgnMD`t+5IKf4NYB`# zWz$BSU@H#&vlT;1g0>|IY$#xymYyJLKRhvyuILaQwstiaY3@ z?6#0t6W)Hd;J9koCQIrz$oLWG^3U)6{OkL47PV-Sqbp{{93!tPE`1`nFIWb`sE5)7xb&b1#tjSX^EYrHskcgmSGyg3n)P zND&9w`L0J#_rhhMfR8D%Q^54cov?L=^jBypM(0}D2dHmD*_FC^3GvCdRzi`&d`9Y3 zu-X$Wyi+iP8IU76zJs>SXW!(a{d{ClZg|{v^Tz?|t-G$X&yT%OaIgq|Y+ zgAx{ntKX>Mq*6dA)#*D9(iG8(nF>I9O{%$A5GcE!<%yg{0C~-Ue~PAm;|B0-k7Uz) zGS89YiGsy_YWr(gVl_oVX({ixD_T7Dc2@x1pFd>Ht(X3@9jM{^_Lu1a23S~LFR8fO z7?Dst7DYk^TcW)Ex?Jd17yQ=KaRGMp*!<%DeGpIl*#@DL04%-J?9@`DxL|)6DiPpC z3g20zEQ-OnV0BnF)9c<(QjYw?dD&WTLpgSx$&a|5tmF_#f5+YuoT)l;3aYx#EF&(- z+bi-N2;NE755QdX@Yicge@~swZ7{x{V8iYxv+FE~o7>-G!L5ITfTU9+rfBECtC(9G znoWtah91pmR=E6J@M^z;Zd3nzDcM7Y;pqK4H2u9E@^}8Mp*+*JH~*?@?SnFPQ^%hx z@OS+}-okenvc6(vg97uGfY`0a@LyzVQy@l1&jIcOWn{^WG>RxALx2&r!KFP3u;w@G zm!MA00oNz;f~dxybGVnjvCI9Yct8vv6sIlfnOuHFZO7aH2Y-1E)oVY0KjHEB7YOLd zzQIq`f;~mK*BclHv8D`sY+m&Ne_1;?lM}8#q5)Y(Ck0p|7BFB13VlJ#tY~#;K|u!O zPv|VjCn0dM`9lRBS2stbU1*{};}o-@D+efRnMFKnQ2Q7J#^!Zk0;$iI8D|Eg=g0R- zLEvTu_)NdmJJeqSok7`+O=AW05>#gau9?&yrz%54;VS$J<*Y>ngfooieQp|0)u~k(-Io2|F!;&jL5K_?YOd= zh(blAdV;wp6M?9upujotN_idzD{lp8Foy>9*diY67L6BRnKhm&2;)GdYIA7UI)I)1 z05n}k!WxP8yB|cLHZ`HLaeAa+X#>Hg_+caO#t-ns z>TI>3q$KQ?FoRq&YOGdvJzBVkz*3-twxU=VwYr4gqmQS5)}#=vAC>?D4dY>IPhmXv zA?UX=+H;aa8-h%`X7){}F3-Wl_d-~WK1vFlOr$Qg4OEO!9}Ap|LTFC*yuVKt%D&s4 zcckFSJWLW?dJJ9LPW9S!_n@Lb!V5v=rw91cZmU5d&{p4$u)5X5iKg19Ige6%(|;VG z8UmtV13G05aB?9U%I>YPFnAt7yI;Q08#vLVh_lXmjJnh9VB8K;xUmJbNEF>gT`99@ zI{=;XvC!e|q@Sw7xY|M+*k@a8WKZv*p?wg*oTiN)6lBAz5I0gE7ASxOjun#BqY{4g z&JHj$6sZ6Qq7O|7JEoHsyrJ+;nK$12fD>p}?vB5~d0S`U+EuR0M-+qeQCBMJ{%cTU z`L9p;pIKV<=-J&$K#&I?4eViZ3WulT^eBBX!NwmK|J1sM%2; zX$4+{7x;F-KryADFycyPYojhEUEW{jmbK&*lp>*2ECq93hjy*WivulU*pyowI`E8! zxh0oAnko$9x!JhPeyz_613PPQXxES1dnFoYdh>2TLk!`tw1?Q*7u0AEr)aX^Lh&gV zkO2hfwxTRJ2P!t@)VZ}O58SfemHocVnv~rU%3mIPrbCB+tCjqp5lV1m%wB|qOzuCJsp#|MaXXzhq z=_9--8-mCFEUmC`J1k>8Iay*U2o!l^`kV< zJG60?mrZRt1Kj;NN)CmuXb7D$$Wy@&HUz3sswt16R)9*4*-Fg?qvl6Z0!*ru<{13< zJVw-f@!NpPlC9^bB+dIZCuzN>QCPpC+<#&#W|O09)O{l6-{~n|tS1^;h6>$fG#>^B z2IBjYE*q1>uBBwk)XnZFtGnj-{=TpB1#hva45TgF(iavSp?e`PJ zSCUA6*DsVv91Y>p>d7dm=aS|U;g*ttVOpI8_hl!5b|uz06Ehd(e=X$OFu^l&|Amh)^{$2n^V)lD@hu(&fSL`DIRHs!-iQU?w4 zcGx=gt|biA=dQ9J@=g@6F|kQ`X3G5?Nn%Kjhnz>On^s9G-4C7mwm2{5?%euFh!v{k8_45t#BFWMTByNJ`eM9HL0N{B0>kHdZ51YMcl>d z+f^!8RlVeDGS!6RxwAyvJ{y<3)wMZgWARMkFBjlLZHmf%VJ!@Pf5h|=6SB9ISQAAa z!}Q)PAHJlVA%4o5%=zJU1^-78An)<>V^zAT{m~XJqgTs6L%rk-&)LsxNK~&viY-!E zADNo7x~ECCau+q|Hb}oPjhQ02GB%x!Ul;^39Ot0Af<6Bc?drLA8;>UP3U4t)W%F$q zSAWquyS^b*F*jPE@8X(2@&WZPa8AC+Zn;D1629h)Q5v1oP*!QvskRR#byY_P1{+kG zS_*)ui=*MQnX_L4n8pOP&zCt9NzmA^fH*>Y zlyaFl+2HLSGsMyFkmwcSQ0A6!w!p)>3N8c+er^JL|BWh~e6t=R~SH8m7qJ-DCu zree}AJHdfsppTGX)^>3=Du3j2Ax@cZdqy(XQbM+<1cWneZi$bGuOm}B6{P8JDo|o^ z*HnzN5=Mk0-e+Dr=A5WGN=<}HRRvXmbMW06R=~18+h|l?4zema4pg2D=#QUM!duRG zpRfH2B@p|~SsTsx2ENP;@o6t?{Nv0ds;4{}33Ca`jl)S3gCKq)Rg-DT$(O8CtKUD@ zJfdqvpX$M;!;~>|!B{1K<~y~wX>@AyRKyoO{dAwNDXW5&?Hpp2xvpCcY+JGGH%wTe z*qg?mfl{>OfMnN!ibAL7_2OY&ws*@^B8=YeqK3 z{UL%QCu#A<@&P@tSP+< zgop}+*v1vL{C7QeI60mNLIzAS;$)g%>+E@R+&Eoj{|gz{S;O)+ zH&)#S4Y+qZA5Q;y^vEd(o@WKvpk|Wpioq4_x02nXMzZ!y?Ewe+6=bW;LmE3>ohly- zKy!Rxh5zIN)2U-k5|x*iV|r&x^25G=x+gRkYQ87wsJN`Q-l%R#1heZ8of;pV=sY2v za8@BBLiWZd%_NgHgQ%l?PWs-*R8N&n)!&p(7ifpNB%=h5NTR;V{f_6i69+yPJAhAT zIZwEgLrytP4H@F9=IrfPc32H_9QUQ6{42LNVhE{B%ZcTsBituEmuEnjZ|Rcr-gshl zIO~OdI4w)nN(W-z5oQMpXeuij2S1;s2M#&K^SM z7u7BI|$uu8MHZnyc z9`6Rl-17Oa(%@bDR(Ptpl*$u^%qfe)Qr$U@6kUnG0es{F|0_=DbuM+gXDEt7~eG3DShrjZM zl6tGne)KHD0Msn$$jabbev7c&l06CsKG7_VVe5ecj>3Vp#3)3;3@}fM^P3uLA-pkY4 zsb02G^#D^L>9l)=2mT*kOg`i_^D+Itnw(36QNq>cp8A=iiemF^zWx2uxi4dLzo##k z{V0e~lAeji&v&~o+SU%crTtKIe5>xeiIeQPVaBHB(W9Sz*_L^A+WNyQi8tjVryE`K zjQiJrE`FmgZUNm(=(vT}Ini&)f|Xa?_0ciKLaUM8_#?Q-dHQU_`%}hLhO(G!<&6$1lM5? zPur!VvERQ@&x+VTA9jArxYF><_tJ-rd;Kg8Y&SIaRt?*p`Y^rlDQ820S^RzfmmgGf zAu*@s*RhA@Bg+=&emacVG%dCpMw+-b%^owf_o-Ol@B-?|A&*6v{=8h7HQ;jo^UEGy z)&;KrQ{9_~Q@yW$qT-=IhE?4 zCR>$L#qDjR^zEvNgZI)`j`?Y7dFjX~gWN*Z!Z=T=MA4@CPj4RD^?m-ss=VD6;=4;n zqz6X`Igpdl5a_6k|96)qW|W9HU$EK7>IDyPre>_{z_-Oh&|h^1lmRKaRX)C zm6i{}j@{vsx0OHoEOogkjz5qq{S}`$@!ET`L^NKsoBRDN*}ZqZ^4-c|KD_3q_7(|y z_ll<5ito)&cQyIlo|6<-GS1_2eekI-JF-OS>tGyacsbq2e$C7AX1?P2FCFhZpjswB zvje)2S4O;J9%jopo%b)Q?k+w|G7tIVaBuRW>qP3S@YI)n9>(DrvHbIpg&t>v@r~ASwG`vBzRZW{1^8d>{TT%RDe{4pZW^>OO2mIDu(LWPq{ zgY(_?UCm#aZAb=}vPj1L-Pdtq_;_Rfv)(*d46v-I@?F~d+b5G z{1$GR46Llwz2jYFef^~YlBo)>5`0%mO2%E{tCqfNDdy>Ob54I4kn{P{G5@tevitgg z@Q0`DR>i`Tdu%w@es(alymtTQEQl8*=I`?l+%fj~lZ2gbaFyJe__Oc9oFCa{q_T9f z1@LdGXJeZD$FzGN0?nKpDICOy_Dx8>g_d=W_CphrSFAe(wUoB>*+uFmJF2v#PDmUU zy<~iL`z=T4r9fH0RV6snU~s%B?iA`sZ`ssZQ(Uo}EAr z{GoTN{EwftnWTxDm3j9*PUXuP?$y4J6|c{{pW}2SRHsaQkzRGZ?wKJV!O`w|z~oW0 zM|~6~t9h$&n|#tqo;|kDO!DF$@mvT_>#7Q=l5r@_&z_hX$Ua`?FN5zn?dGQOevP^* z*>b1Sj9C8Tfe1P8@qy?Fmh0F5EPJgU2M{k@-He!a@Jn<<*xdPOsN|xkZjQ3dsAwP@ zzKO0^==*?V^@lMqwR@M1T$!Z}1O%&p+6GOSWgYvxS&djyJoNsIUfI1s$cB1 z<6m2eRB@bxAuD@Njy7)<&(n%9>G32jdzZW1C;9a~Z4;d=K6$r`Gu8j@>F!BOhd$A2 zM?G)y5ok~ar(?VDwZD2T=r`E`-c3Z!Go8eq+x0EogYT`%j^Ec4i6(Cr#C$=JFMS!{ z%|kuEnNV&>+6m~T8sOr|_6ROsuN2kR?}hPk1?*B;ZnSMoB~9qdznbsyJ)EP;JB%DA z#HRA^r{&M@M>z#V+OnNw_E(HIP_mI-|I&3*7)Rg-kq%Ca;QQO$_JgPQKQtO$f5uaKR{Ih{%_q0uY}r%7fEZq?|B`% z``a<(L!TC7TsOR%>HZCeP2t~?xAe_73*er9-P&>J&)z;&UQ0Ado*kU<)z%1?WWAA8 zv7Vp;v=9e8oBpq!y*~!#<<;-nV>xnl^k@GUE4E%SM>W>w!oQjp*tP48bucU7ZGQkB z9^36o-0Hu(Keu9@Bd0a-a1}%d@)}Ti`~T^bXA~2CL-@aa-Luk}y}XDqe{l%s~)81C~;=JXFIPj*VXUwk%^jHv|tDn zJBX;9cMt5tvrpSaF=0qi#|dq3VDPr++;rpH$qqmN+Y3@+sQbKODYU1^z{`mbfAS2s z-)_m`dj< z{AHa~<2d^z?!$1@{*uND&Mw=djW87NqX9G^b23vg@RmFFNc^SSSpJKtr!Xg^sVt#& zs7#RRL3r(2a+WbYE0I@jowx|mw&GCx4zD3_5#2PxZ{xnX{x*9MC03zd#=K*kl?8gG zkiN_6|RG01I~i`cD?^tJ`)943tG7Vu%-tUQ8sXZIprK5Lp99;L>tBd zVN-nI;ZwT)`U+rbl0y9?KbTk*H^3XS_x8&{2NW#SyW^c{x7r;TYm=77zN2~T?Do!u z?^lZ?@i9U6f^^UlS`?lzQ=yBk+c+Mz^nqkZV3F8C>Uxdi>{t_zexcX}m zA-@z?)_N6pT@(o`-r+C0W&3{7VA=jW2dl=7#73<2e%nLbEIGG-zIyyEV-M3N+xL}2 zPs13Bcr*5g$$v{e_$`^~=wi!B?$(bh}mUlBS*?{5rDPrD>J8i*C{h_Hj;ulN1+44F2J|=sY zQpxTBM?e$UzA(1f9T1GA*6BF2BKGRJk+ysGEjuB-yEHp$4Q0mC*gK*)UOLVA0tyIQtosW3sxngFw_9hLSA zdsnLUJ^@4e)rPI;6TlA?E#$(_)sH(7c{$oyEIaAE8+tHJTNU&J&hBhd zuWnrCD*P`NwSt|BxVQAE_%g1*M}kM^t$B4vkvNlP;HVldE((HgYIFV$IP8mJsQ5fOI>nw4^b8KmO+cm z=C6ChFKI#E`rp1^lLiYFgp2Z;@B=rm02|5TS%cm{W`s~e-Fpc%v5RXXj|q3I7&>p! zFyxjrr2^m`ht{0650$9?4MHlV7MH4IuW%Z(!rTU&fDx%jH##e#F+~{t+cCjdL(+PN z^k8Z)ed$T3m)ROn!Ayltu(B=_izd{UF3OX>@=h%xzwTsYi(gUq1=OESY za1KiEDx6X_6de(rlT0ZvGbL4k%s}VH!ZzuG<&q(YMzuRiTuJ#~TCAoNI5MAKmZ)Ga z?xb@U#*ZeTzAa!x_?Cf>PK2b*L%>K_A{1>8u)b0;f?lrB^Ei3IjEEtqV(f``u$zYw zVF8F=rl- ztkQ%3V3p)9!GZE*dA~}yBTwI%May(Rs$q!n?$hNr+>?So0rWv0jm~@wpqTk9ppRv{ zZ?1z&oj?+SqpptLP-XSUu4l9DIun3YO%*bq0g=}-Z1d0B9ByifUxYaH&Dt` zX@tz_ANJiB5=**Ho%v*Y``i}JgJ-WDe_vd@1C8;-e>KJen%LC7eXqxCj{Y3lV+MQS zA|2fks)4yhe-VrZu~&dnLVk*9rePBB_=%Sf#*}^uJ5bSehzDA!6`|rb0Sk6zbeN*6 zOyE;pgDg%r0B|n>GK6e6gIFQ_NjpK8aRv68Yax(|C9caAB0}__opX-tdCLZ ztr{|paerYPNj_efx0L{udH08}_i{)2>R_7sSoy)!<2|DR_U@nIX2U&N2~)LZiK01< zuXc5ZUZc0sh~KeK#Xg9_ic}8nqvz7yerg?Ce`hXZo44iMLng@u*KJ&j>my^a*6K-1_uyQP@KGe zh(j7!dwE7%=)@HjC1 zHQ~JBhn>0K2((iyR7UaQsMDbMQ3_VATn=4LIu}l1NJB549aN+jw^U2NjUipg7%OY# z7f+uEnk>r)>yMKxvspam$X+V}D4I#2iq)yNTB!%Kiy?~iZvAdr{tr2(|W84; zk#Ecw7Ubb+u3BxG7EnVTHS7@~xcNcr1aznR=*6d-U+ibzoBDfLgZ#Hf=HUwdz-Hli zC{fuWoVlVeW}E)~qa2{!cu1)p>Wnny`^dkTT&MwL&jqmDvSU%invX5?_koFE&-q!v z=MR0pRpgE8`tIPU(?|!3SWacoypVT)t8{d0WYtr z{WmPYJaC+MgPF93p%pEE(y-kW<9L0C9QjQdfR`$?^k2S*=j8T@YBP^yR3smRFE zS#fLv(tOC*v>3t-%aeesuNd(GBBdoc5RaVbY#d<$5Og6NdNx!frJ^F zx|BhO*2zf~1jJj8YCHrqAaBK6tO&6#w}SSE(Y7Bo=mmG>=L^LbopgGZX8Rc8Pk9u; zhb6`+hI@UDy^bs`tPyiUuj5B5@b#w|v$&2;@qJw=kgj;-u+pq7{HWI~f0;q>+*R$f ze!5nyAs}&PwRDx%htQ1~YK>L$fC~JOL`t&*fZ8MPw!sUmBK1{rxwOHoTkNN-*t)k! zMxiSZK)RP=gX?un>;kZoo!`R@yMg>I&&WEOm}ZI(OH4&~(r2%4;)!yJrx@T=@RUuJ zywVYRuWfhkkoeQY1&0yq78mbZpD$^5^YQ)s^aQT_r}q&tE7CXnbU1XMwez__Q==$; z%cA0jq8sQKNgp#9PHUNBBMAFPoe(33uzp$C-e^jhMCv05)R|y=;Ggi{BIUtFxH9kwY>wqU3p zEOYn|KgCw-%D*hyvXI3@43x$YozyXeJJf49ysQwo351&14QI+cyG6uran;s)Dub^j zVHkVyM$ThVg_u}oqUW@#E`d3EOJ(Pb%LzU5G`Sj{`*iDcyF5Ph3N7neBE8j?+mW#< zU2O8ldQwrSG+ABjXKt|N)R3HDSm-O}sMf{?S&$TDzqRqCVK-BU-7y*Q4Kr~+0`*y$ z8TGyzhjnVkH_JO!6MK6u-n-?P6>s7q8PB?O33ZP{m-MroVRPd2;{2t13l@gTl+AvJ zzxRiz$Yrog`qTXF@(j+q<^=u=um&@;rUNNxU zAQel|R<8UAE`dItSnX}v=nT5*mjh${hp%(G;w7Kb0$+38v;mfkkT`pXWi9cCDw%>o z%c5Q73od)imulYvEZ(fTq%cB5arg|iCGS*SiY zY4BR-!m?!ulr5636Oy5JIhCIe&eZ?zmPK-a=fDYPjXy)r@wOR3SEpn={ zPKrQYLOTCT#EhH&up-ZUlT^HLQQuVA4L2IP_v?Ukbf#_ymZ70viynqc_?WWLr?*-c-XQVeMJdh?J zbzSQqE`=$YP?L~d$VbO?zVb2BUzL!u4%o~_cBSHuw%`Z0FBr}OrwX_WR&<^LIG03r zSsP(V65%d+$Ky+5ESuHy_P6m89x;`KTZ*49mt)Ar%^743==WY~D`ld7)S>ibwvsAu zFn7IRbapTx64qL)E5#(rKDtPJO;XX~TMDD!x3s5C9fOtpxVAFoZ!z($U4|&&(9=G$ zk`SkpOC#(hwAs+p3#iYw-F16*bH~fAJdD$#cbCN-YU{5G8b;I|p429^U6u?pG0;@N zr9ItsXi7SXjzYDLkiV~2tL;1KVZ%gD7f?zpKU}_M%tE!(mdpeJ@wQ$piLNC{9c3$KoOr{c+3`1Bwl!w|wD8~)o=e8Iz7+{1K zoTR*NhsQF9>L?%N>&E8X{p{C{;;$NDJ@+?-1M>(B0@g{M^z#_LkE$q-*;HgE+)AZ+Y;-Sw4r4n+g zE)Tper|7cHUDKA)+c0WRIb<~`%AlVq8qJ*9J=~+AH_#vH`S8mm$Got^~mH#?(iEVAI+q_jRu_Y6!z*C z`Qtb2{^gmJ5`erQ-$&JyohaNiwIiAd;6t|!_-Kg>;lxD02F7-tvTEL6IT-Cy-@xeV z9M6u^p_t?f;FCgR!`zPIAly~ZPi9UsR8Tq4D{w*KSgg+594%j?(GMN-7R3b@AzTcM zWj{_}kbDu3!|QYijam@QWQ4_Wi_jEt<-kyaB>iU1jPR%nPIK;~I?nB@VPl73(Y_jr z;<1iX^U*!}hP zL0XC#ogIy&w=2=hq8Zr*&o$+TnlGqO^pr)v^ND;bcN4_-j&ZoI)T$k^*-r?{Ib$Qs z!~9denkA_vrq9eW{nySx<;D15 z=r;X`>*XFg{7U6R_n3)^3F#a>>P)wN8gce<-a4a!i68qy2Zg0#XF~lJTps-TL%89( z8h86(=-^=awI^>adkyX?7pC>;#Vgko>s5N~_%joSJ8=toK3@l;G?I-LghT321LU}o zReTIq@t7+)VV`C>Oo-Yn#oZ7HIu=k$^0Hor>V&pn272>oLy*+#;0H8nnQ zM(pmRGW$Sj<`gP_J0-@5?Beu&V^Gj=a+MZYZke9mdsX*^>J8C_1MLgy>%1CznL+;CM~$C|=N>-0ICskM5H==r@ClwS*CF!>(XNF) z)E-L}+fo9}*QJdILJtbsM=ega$E{zA$A4dngpv6B!_22&9;?#2XlkO9@&Jyy$1RH7 zQr?lk*z)(cH6IrIA)$9tw}Ujv=UOrPU_Z~U!jZB}OV~TJjz~@_J?G$Y9+5{rT9j?M z4>PS2HNpfxk&>70E*DsmO_)=-ghfgT2Q&r4gd+VC-dAUzGr1whOeKy4y_Vl{U#))= z=R($gDcQkpZE|pCt`nqw2#~pzWkb;buR0xMe?qo%e92fX+|NwSzp(Tqf+!ayMz7W0 z4%D8rA;mI7L%8RWtUYG7NrLW&XWFp23eZ|q7IU~=zzHI__I;WqSN;f;p8R2?lXA27 zk4meYKOUC)&sj{T_4nLM*WP;Jaxv0n840Mv>DgAIK}y!J>D~u5UrY@|cBh-I zd5>1*&0Y;#orr6$BXnC%I9Wkhl2myLG2lCjPA*hr#hx^=xd+_Ws^p}G$f4KtPV zUW$G5%TM$ZRnecb@SV3D@yiEae?)+;(#S=s#j)7b#5X2?!r(w)QR%Oe1sj;$*dK;Y zu-C4_9|tZQilgd}7V(Z5M%XSMnsX|-k(`oI;g}>=Av1;lkaoIIS4{nsb_43{bAnbu z50>vNxrhg=2Q`tfbwRgzySP8f1P|S{#&QWQ_(K71Jnp3aWxFn|7VAi*cgOB|w!0aQ zBreLlVJd;Qe=<@F^cN$zoVV=9zspZP=w-`|gm+meT@qK$$8~N0bg4jG%1A--D7xVdPkTSedT3vbEOl2u=@u*lDG zos1r_*{4sue4ld%Gj;SSvEZt{JW`~f^EBvJAKQJ(vfsqwQrvS_4i2d-*A4H#d=$Vt z96i0v8t@t#&$@s5K9GjeMGjwpEtZO!Eyasl)x;S)b)kmT#Ipd*dV9mWwga zqZT^h%ttIqp_Q4BRdz50Jo57}ElO{r-xh7LIcL;Ddi^5AoC8n@f3?Yw>E#iD#!Qi1}S!A zz-dW|HTx?fZzyyE4z<+eeQ_9)-VcXiTqskE}>9zgSEs^kT#s``%1#;qXCmN4{iO6q98u}V8x7LaO-oy*=QYI9o>+9CrdtBjeHXir9JrS`F{Bi5E5LVK`)oHmV4px z1YmAR*nzs1oYO81VM%RDs|{;wi0lP5`-!+dwSsO@rG+(u_cY%E#1C%Kb&*G=DJij3 ze^S_<`yac{g>a8&giE+A^PXH6o15wyIz;kslyCkxfZ8NMOQ#DpMJB4X1llxOHy1Ix zCPI#Kv=qMa8NFUA2hzrkgeqU2uYn%P{pZu z6@2v&Eg&@nakhSh=0#g5^SI7Y_MP3QXV?K--l!Mq#UJU^k6h$GW~P0+^PrUiF1P-L z{I12$Xqqmb>06~2N{EI)o}M&v$hcu5=#S3=_?b~XhUQsn5<9i4$8$c%gek}-omc*p zVeYi+2^P-s);rCH$~EwieqVJ~NP}c$voGy5Db?LEn#gA7dH<-%wB;<6 zGrGZlFm~VPT3SDYRg3aP>?)Hj48l~}{naF(tsB1$h&|MJiv$P{3o>;}r#KddrhG$Z z@5-B3amtAMI%Vn?)wTHvB=TB(&whs7k)`c+Mn7(H&BpcY>0XBi(fe#06PT%oj^-xA zxyM1SA(Wh3h`cBP{#Huh4CFY|x6tisBUngf3+?(rkSqr78m;SJ_>w}dX0Yuia5$h+$ zA&HRmx5|F}hY_!aVXs(P_PFb%|$Vk_R>YMY#X#{e{xD6=ZMIaA+EqGU0#de65JLa`Q}Kr zIOLE<&%JgOspVja%Y#c*0Gy~K`b5!iRE(FRyCsD0RagdU=9fw*iWC&=h7C}C=!f*a z=h6Gb#AKi_)Vp1}@hsB(4c~B~Ie)r%{}|SwR%gTLIkPyN_8x{rpBp+OmoxoNRtNn) znBEx}l5!PL!KX>{kUW4Ih+VI~NZW`h5K1Yz4O0D!n>{%$Jm%f3yC%?&BUuZj{ghu$K=vUK_U4J%kq4#Uh ztVhIk`i}iLcW9TMCakK+Wy+4YG+f879sLLOnvrx9S8`@%QPeKiQ&ynv<1Cs67w!k*rNXmJGbTbG&(g~QmN8~ z@zx_C|1$@AySr>}zJs&Kn;Qlj>pa~KK73N0C#q@8#FDK|uqcC&0f+;!W5w8^+LW*b-Tr#Ke^l%tGGvMr6? zDC1B*kt}tZ=|Djd9y{YD6*-I;B_p;z(K+U0m;47$*I0odz6h5;5vJuh#5WT27>L%>Hnd81PhzL=Bq|t|IC9)G=~!f8!Bqoo;(m!*GU8 z^D)ClQnH~;}r`w`e!u6VqZexEpv~_Grzm%&rUUU-BPeX(+NS4n0?DHKg-{6 z4eW(~alIqUewv}#2cP{(M*tt40%XBj&ys@egloGGp3Y^#2B=|kAZK+edUm!wM=wKO z`=sX8Jg}e?)dDy&?<%(TeD(*2t#rY(D)=8NyB+@zmZ@qSsTnO?fi|litR`1KPBrCs z+|#-kt}2HaGa;L#c$}QMY%6`D*cjg44IGA!%MC@w>#l4fEsi$Jp+a=9$aK&NlwKX7 z|8xo9Qr*j)@bkObrJhg{ZcKSPFHF~T^p5jpl0$TIJWes?o}zmKaya;*U%zm&zh{nVk6^Ql=dZgDj37{5wiaGD~^-oGso_-j0l(`OjTjL^fCP*qo^ z9L3rs0Rj zZg+fWc9ODu2gx*5$RG~b7fw}P@p_5X{2-WU8S{R!mp2vYu7u=PuKv_ zPbK&^Ui}SOm(fCB2NvcFUc@nez!ULXuCS#WN81M@P?nEZSsQ#=XE8grE&+^PsZWVJ zcE9imcHos~wM`y5zJndbC*K8mYe#hsF3+RsjQ9tHQt0U4A(VcjdBR}h3E+$R^9sUL zW$A+0sdtCkwwG}45L^#+;7Cg|6!dhi!!6kU!(9G7jt=&6@XgBYScbg20tj^W+j}!k zsaRiQwg0fjfB#aaw>66mH8-A5*=vPdKa>X|{dl8+W=cBYKO6~M)DGAWj!*6LaVI=L z^W|bgl)>G-=IA-Cd*N@sL`MELv;PIg?jeTsZsvk*mG6$jXo@JXbZq`&|Eojw4}da3 z{0!xBqm-J_3q2G73*f(zwy!_M^*u8Y|P-yNT}++UXj>7^`Fp zt_>R)-e?n!8j+N#CG1$O_1!4mwR@vKT?a@QxaY0e7H>w2z!Y!{u=w~cb+oc5K0x3w zABqln=!Ka#Hb4MoH@4OAH1<2hj-xFnEY^P|4}L0(N4XPKOmY(JD&;E4+N52i2_hy2 zZed+D9d}|)I%FMH)ScEVH1P2)zdug6Lx;W~I0$~}|9vxN>gx8A^|ykuz#jBX=wE=m z-a`Mm`#yqrM|2~D{*Im4x3pr5@C6cIp()*A_9Vb@gP%lw0T)&Y3% z@$J7qPEp+qvB2VXM))PXgCs8M2D}TidENoKRg4Qe6=?u)kf?2Ib-#y_vxzQ@_TajH zJ0C)*LJC#`41;uWhok8~e_z1az!^YEpgdYL5a7K~;pzhHlLKT!(w!=Qye_T7g?|8+ zOQ!@g+aD@R7>lQn9&v0CFDuRkuxf`rly{$it!#(LBKfRCo+w(-A8^QC4`i+%Twc0c zfHaj(_ly7Mx#7J{s~k#p7zgre1Th@nr8x%_4!v}YVrKzA;n0K`hLFM<7|)|I*E)c(x9l&He{f6jf&UOYMuf59xoh)Dg-15CNuFA+THPlM&;_ z6@b9>TDmq}xW08)Dfg8RwMdo^LePbA2(?SEO!RcaIKKGJL!Gbzc`g=CCGp6Wm3y&W zdQUHc7LEhztXTG)=?jFNL_v0wOoy(T9qM=w#IhY8o{H- zQYpU&xeZ1oawqE|t~QA-IhmsR8V-W=mIqDYsvH597-5ky1PpO1tQXQJLmWRQ2UnRe z<`F3W3ClftHmQIpxt)rd>nG$fqPxkTn&KmTB2Gj)LA&caPZu3L^$mGh@=T8#@D2_!`p~1U&oPl(b>@ovk zOc~@2>H$nBS;o^GzDVe9fpp&m#9i71n6$k%>vkNB!pZCF=aXy zeL?d^pUnIUiT%k(uUElxj&H->0gU49UVTuDIlTf1M$f$pmvQ(+z@x=R+NLwcl2Y0VO!D zeKjx+?AVl+9Hy#)mW3|ADNJ=Y9W-YkexfG1UdPEOIe_>HD{71TL&f*BfN;>OFv>JR zOe6ZX<~~oGaGC%SVdgyC5hFZM?xp*J9O}DrSCX&-z}@7VL?VHCD=U^Ipc`n(64Lo} z7GKb5L#*`}Ar$8!&G&5oNt-c1$TgKQ&*asx@r^7?@Qb~m&`2{J z3H>5KTm|VZ7hK%)A1qy=xz#r7IB{DGH7)axSOuP}mqp*P z1{u`#3{b>rph94>XT-JEp)FGG;qLrV_us{<}Bf_Q2n7$V!gs#zd%A=cB;l#hV`Jg=|lOlcC)}k$CweGiT zLV*igTKPa10@_2(;|MI+;;cv@3YqU*#n8Vrgs{IZL{*)>+2@3vB>J`}V7Dc?*xLVj zyzpoXWJ|gW{oVq&6E^S&;v_dWLcD&0nD4=|L?^@VTm35dEwk6M@BjHxUb-h>5MOI# zh5di~+zso)`O}fAu`T=9)|masmHkiG2U{0Vv$iRH^31-LibrxA;2&+GKH;I-*}(q; D)kan7 From f2a8868b270a2e371e2e86d004a902863b1382e1 Mon Sep 17 00:00:00 2001 From: Jo Stichbury Date: Wed, 22 Nov 2023 11:23:00 +0000 Subject: [PATCH 12/27] Add warning for pandas-iris usage in generator section Signed-off-by: Jo Stichbury --- docs/source/nodes_and_pipelines/nodes.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/docs/source/nodes_and_pipelines/nodes.md b/docs/source/nodes_and_pipelines/nodes.md index 0816b4b103..09cdcf3c9c 100644 --- a/docs/source/nodes_and_pipelines/nodes.md +++ b/docs/source/nodes_and_pipelines/nodes.md @@ -184,18 +184,22 @@ You can also call a node as a regular Python function: `adder_node(dict(a=2, b=3 ## How to use generator functions in a node +```{warning} +This documentation section uses the `pandas-iris` starter that is unavailable in Kedro version 0.19.0 and beyond. The latest version of Kedro that supports `pandas-iris` is Kedro 0.18.14: install that or an earlier version to work through this example `pip install example-package<=0.18.14`). +``` + [Generator functions](https://learnpython.org/en/Generators) were introduced with [PEP 255](https://www.python.org/dev/peps/pep-0255) and are a special kind of function in Python that returns lazy iterators. They are often used for lazy-loading or lazy-saving of data, which can be particularly useful when dealing with large datasets that do not fit entirely into memory. In the context of Kedro, generator functions can be used in nodes to efficiently process and handle such large datasets. ### Set up the project -To demonstrate the use of generator functions in Kedro nodes, first, set up a Kedro project using the `pandas-iris` starter. If you haven't already created a Kedro project, you can follow the [get started guide](../get_started/new_project.md#create-a-new-project-containing-starter-code) to create it. +To demonstrate the use of generator functions in Kedro nodes, first, set up a Kedro project using the legacy `pandas-iris` starter. Create the project with this command, assuming Kedro version 0.18.14: -Create the project with this command: ```bash -kedro new -s pandas-iris +kedro new --starter=pandas-iris --checkout=0.18.14 ``` ### Loading data with generators + To use generator functions in Kedro nodes, you need to update the `catalog.yml` file to include the `chunksize` argument for the relevant dataset that will be processed using the generator. You need to add a new dataset in your `catalog.yml` as follows: From 50b51c90f18429b42d092d7b0c99399f3b9517d7 Mon Sep 17 00:00:00 2001 From: Jo Stichbury Date: Wed, 22 Nov 2023 11:43:57 +0000 Subject: [PATCH 13/27] Further updates for instances of kedro new Signed-off-by: Jo Stichbury --- docs/source/faq/faq.md | 4 ++++ docs/source/nodes_and_pipelines/nodes.md | 2 ++ docs/source/tutorial/tutorial_template.md | 12 ++++++------ 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/docs/source/faq/faq.md b/docs/source/faq/faq.md index f0f8106871..9520ec51db 100644 --- a/docs/source/faq/faq.md +++ b/docs/source/faq/faq.md @@ -68,6 +68,10 @@ Refer to the following table below for a high level guide to each layer's purpos | Model output | Analytics specific data model(s) containing the results generated by the model based on the `model input` data | | Reporting | Reporting data model(s) that are used to combine a set of `primary`, `feature`, `model input` and `model output` data used to drive the dashboard and the views constructed. It encapsulates and removes the need to define any blending or joining of data, improve performance and replacement of presentation layer without having to redefine the data models | +## How can I check the version of Kedro installed? +To check the version installed, type `kedro -V` in your terminal window. + + ## How do I install a development version of Kedro? This section explains how to try out a development version of Kedro direct from the [Kedro GitHub repository](https://github.com/kedro-org/kedro). diff --git a/docs/source/nodes_and_pipelines/nodes.md b/docs/source/nodes_and_pipelines/nodes.md index 09cdcf3c9c..3868f205a1 100644 --- a/docs/source/nodes_and_pipelines/nodes.md +++ b/docs/source/nodes_and_pipelines/nodes.md @@ -186,6 +186,8 @@ You can also call a node as a regular Python function: `adder_node(dict(a=2, b=3 ```{warning} This documentation section uses the `pandas-iris` starter that is unavailable in Kedro version 0.19.0 and beyond. The latest version of Kedro that supports `pandas-iris` is Kedro 0.18.14: install that or an earlier version to work through this example `pip install example-package<=0.18.14`). + +To check the version installed, type `kedro -V` in your terminal window. ``` [Generator functions](https://learnpython.org/en/Generators) were introduced with [PEP 255](https://www.python.org/dev/peps/pep-0255) and are a special kind of function in Python that returns lazy iterators. They are often used for lazy-loading or lazy-saving of data, which can be particularly useful when dealing with large datasets that do not fit entirely into memory. In the context of Kedro, generator functions can be used in nodes to efficiently process and handle such large datasets. diff --git a/docs/source/tutorial/tutorial_template.md b/docs/source/tutorial/tutorial_template.md index 7e0ee46fa6..a8283efc01 100644 --- a/docs/source/tutorial/tutorial_template.md +++ b/docs/source/tutorial/tutorial_template.md @@ -7,19 +7,19 @@ This section shows how to create a new project with `kedro new` using the [Kedro [Set up Kedro](../get_started/install.md) if you have not already done so. ```{important} -We recommend that you use the same version of Kedro that was most recently used to test this tutorial (0.18.6). To check the version installed, type `kedro -V` in your terminal window. +We recommend that you use the same version of Kedro that was most recently used to test this tutorial (0.19.0). To check the version installed, type `kedro -V` in your terminal window. ``` -In your terminal, navigate to the folder you want to store the project. Type the following to generate the project from the [Kedro spaceflights starter](https://github.com/kedro-org/kedro-starters/tree/main/spaceflights-pandas). The project will be populated with a complete set of working example code: - - - +Navigate to the folder you want to store the project. Type the following to generate the project from the [Kedro spaceflights starter](https://github.com/kedro-org/kedro-starters/tree/main/spaceflights-pandas). The project will be populated with a complete set of working example code: ```bash kedro new --starter=spaceflights-pandas ``` -When prompted for a project name, you should accept the default choice (`Spaceflights`) as the rest of this tutorial assumes that project name. +Note the following: + +1. The command line interface will ask which tools you'd like to include, which typically depend on the requirements of your project. You don't need any for this tutorial so can follow the default and add none at all. For further information, consult the [new project toolsdocumentation](../starters/new_project_tools.md). +2. When prompted for a project name, you should accept the default choice (`Spaceflights`) as the rest of this tutorial assumes that project name. When Kedro has created the project, navigate to the [project root directory](./spaceflights_tutorial.md#project-root-directory): From 5db4cadaddb8679b1ca1f0b0775fe1261caed949 Mon Sep 17 00:00:00 2001 From: Ahdra Merali Date: Wed, 22 Nov 2023 12:05:58 +0000 Subject: [PATCH 14/27] Remove TODO as no longer required Signed-off-by: Ahdra Merali --- docs/source/tutorial/tutorial_template.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/source/tutorial/tutorial_template.md b/docs/source/tutorial/tutorial_template.md index 7e0ee46fa6..6da78cbd4e 100644 --- a/docs/source/tutorial/tutorial_template.md +++ b/docs/source/tutorial/tutorial_template.md @@ -12,8 +12,6 @@ We recommend that you use the same version of Kedro that was most recently used In your terminal, navigate to the folder you want to store the project. Type the following to generate the project from the [Kedro spaceflights starter](https://github.com/kedro-org/kedro-starters/tree/main/spaceflights-pandas). The project will be populated with a complete set of working example code: - - ```bash kedro new --starter=spaceflights-pandas From d83793ec3b10427b12a03912f0b3ca70e349f6e7 Mon Sep 17 00:00:00 2001 From: Jo Stichbury Date: Wed, 22 Nov 2023 12:46:14 +0000 Subject: [PATCH 15/27] Resolve some Vale issues and remove implication of tools + starters Signed-off-by: Jo Stichbury --- docs/source/deployment/distributed.md | 2 +- docs/source/get_started/new_project.md | 12 +++--- docs/source/nodes_and_pipelines/nodes.md | 4 +- docs/source/starters/starters.md | 45 +++++++---------------- docs/source/tutorial/tutorial_template.md | 7 +--- 5 files changed, 24 insertions(+), 46 deletions(-) diff --git a/docs/source/deployment/distributed.md b/docs/source/deployment/distributed.md index 91bfc5b2b9..0a1eb9157e 100644 --- a/docs/source/deployment/distributed.md +++ b/docs/source/deployment/distributed.md @@ -40,4 +40,4 @@ We encourage you to play with different ways of parameterising your runs as you ## 4. (Optional) Create starters -This is an optional step, but it may speed up your work in the long term. If you find yourself having to deploy in a similar environment or to a similar platform fairly often, you may want to [build your own Kedro starter](../starters/starters.md). That way you will be able to re-use any deployment scripts written as part of step 2. +You may opt to [build your own Kedro starter](../starters/starters.md) if you regularly have to deploy in a similar environment or to a similar platform. The starter enables you to re-use any deployment scripts written as part of step 2. diff --git a/docs/source/get_started/new_project.md b/docs/source/get_started/new_project.md index 9a5ac674e0..06f968d4f5 100644 --- a/docs/source/get_started/new_project.md +++ b/docs/source/get_started/new_project.md @@ -7,7 +7,7 @@ There are several ways to create a new Kedro project depending on whether you wa ## Create a basic project -You can create a basic Kedro project containing just the default code needed to set up your own nodes and pipelines. Navigate to your preferred directory and type: +You can create a basic Kedro project containing the default code needed to set up your own nodes and pipelines. Navigate to your preferred directory and type: ```bash kedro new @@ -23,12 +23,12 @@ Add one or more of the options, or follow the default and add none at all: * Custom Logging: Additional logging options * Documentation: Configuration for basic documentation built with Sphinx * Data Structure: The [directory structure](../faq/faq.md#what-is-data-engineering-convention) for storing data -* Pyspark: Setup and configuration for working with PySpark +* PySpark: Setup and configuration for working with PySpark * Kedro Viz: Kedro's native visualisation tool. Find out more about these options in the documentation that explains how to [configure a new project](../starters/new_project_tools.md). -You'll then be asked to enter a name for the project, which can be human-readable and may contain alphanumeric symbols, spaces, underscores and hyphens. It must be at least two characters long. +You'll then be asked to enter a name for the project, which can be human-readable and may contain alphanumeric symbols, spaces, underscores, and hyphens. It must be at least two characters long. It's best to keep the name simple because the choice is set as the value of `project_name` and is also used to generate the folder and package names for the project automatically. @@ -79,7 +79,7 @@ The following illustrates a project created with example code for the [spaceflig kedro new --starter=pandas-spaceflights ``` -After you enter `kedro new`, the command line interface will ask which tools you'd like to include, which will depend on the requirements of your project. The options are [described in more detail above](#tools-to-configure-the-new-project) and in the [documentation about the new project tools](../starters/new_project_tools.md). +If you opt to use `--starter` with `kedro new` you will **not** be asked which tools you'd like to include as [described in more detail above](#tools-to-configure-the-new-project) for a basic Kedro project. ## Run the project @@ -121,14 +121,14 @@ To exit the visualisation, close the browser tab. To regain control of the termi ## Summary -There are a few ways to create a new project once you have [set up Kedro](install.md): +There are three ways to create a new project after you have [set up Kedro](install.md): * You can use `kedro new` to [create a basic Kedro project](#create-a-basic-project) containing project directories and basic code, which you can configure depending on the tooling you need, but otherwise empty to extend as you need. * You can use `kedro new` and [pass in a configuration file](#create-a-basic-project-from-a-configuration-file) to manually control project details such as the name, folder and package name. * You can [create a Kedro project populated with starter code](#create-a-new-project-containing-starter-code) from the [range of Kedro starter projects](../starters/starters.md#list-of-official-starters) available. -For any new project, once it is created, you need to navigate to its project folder and install its dependencies: `pip install -r requirements.txt` +After you create a new project you need to navigate to its project folder and install its dependencies: `pip install -r requirements.txt` * **To run the project**, from the project folder type `kedro run` * **To visualise the project**, from the project folder type `kedro viz` diff --git a/docs/source/nodes_and_pipelines/nodes.md b/docs/source/nodes_and_pipelines/nodes.md index 3868f205a1..11f419eefb 100644 --- a/docs/source/nodes_and_pipelines/nodes.md +++ b/docs/source/nodes_and_pipelines/nodes.md @@ -4,7 +4,7 @@ In this section, we introduce the concept of a node, for which the relevant API Nodes are the building blocks of pipelines, and represent tasks. Pipelines are used to combine nodes to build workflows, which range from simple machine learning workflows to end-to-end (E2E) production workflows. -You must first import libraries from Kedro and other standard tools to run the code snippets demonstrated below. +You must first import libraries from Kedro and other standard tools to run the code snippets below. ```python from kedro.pipeline import * @@ -194,7 +194,7 @@ To check the version installed, type `kedro -V` in your terminal window. ### Set up the project -To demonstrate the use of generator functions in Kedro nodes, first, set up a Kedro project using the legacy `pandas-iris` starter. Create the project with this command, assuming Kedro version 0.18.14: +Set up a Kedro project using the legacy `pandas-iris` starter. Create the project with this command, assuming Kedro version 0.18.14: ```bash kedro new --starter=pandas-iris --checkout=0.18.14 diff --git a/docs/source/starters/starters.md b/docs/source/starters/starters.md index d06469b600..685d29d08e 100644 --- a/docs/source/starters/starters.md +++ b/docs/source/starters/starters.md @@ -1,22 +1,12 @@ # Kedro starters - - +A Kedro starter contains code in the form of a [Cookiecutter](https://cookiecutter.readthedocs.io/en/1.7.2/) template for a Kedro project. Using a starter is like using a pre-defined layout when creating a presentation or document. +You can create your own starters for reuse within a project or team, as described in the [how to create a Kedro starter](../starters/create_a_starter.md) documentation. -A Kedro starter contains code in the form of a [Cookiecutter](https://cookiecutter.readthedocs.io/en/1.7.2/) template for a Kedro project. Metaphorically, a starter is similar to using a pre-defined layout when creating a presentation or document. +## How to use a starter -Kedro starters provide pre-defined example code and configuration that can be reused, for example: - -* As template code for a typical Kedro project -* To add a `docker-compose` setup to launch Kedro next to a monitoring stack -* To add deployment scripts and CI/CD setup for your targeted infrastructure - -You can create your own starters for reuse within a project or team, as described in the documentation about [how to create a Kedro starter](../starters/create_a_starter.md). - -## How to use Kedro starters - -To create a Kedro project using a starter, apply the `--starter` flag to `kedro new`: +To create a Kedro project using a starter, apply the `--starter` flag to `kedro new`. For example: ```bash kedro new --starter= @@ -26,29 +16,20 @@ kedro new --starter= `path-to-starter` could be a local directory or a VCS repository, as long as [Cookiecutter](https://cookiecutter.readthedocs.io/en/1.7.2/usage.html) supports it. ``` -To create a project using the `PySpark` starter: - -```bash -kedro new --starter=pyspark -``` - ## Starter aliases -We provide aliases for common starters maintained by the Kedro team so that users don't have to specify the full path. For example, to use the `PySpark` starter to create a project: +We provide aliases for common starters maintained by the Kedro team so that you don't have to specify the full path. For example, to create a project using the `spaceflights-pandas` starter: ```bash -kedro new --starter=pyspark +kedro new --starter=spaceflights-pandas ``` - To list all the aliases we support: ```bash kedro starter list ``` -## List of official starters - -The Kedro team maintains the following starters for a range of Kedro projects: +## Official Kedro starters The Kedro team maintains the following starters for a range of Kedro projects: @@ -60,25 +41,25 @@ The Kedro team maintains the following starters for a range of Kedro projects: ## Starter versioning -By default, Kedro will use the latest version available in the repository, but if you want to use a specific version of a starter, you can pass a `--checkout` argument to the command: +By default, Kedro will use the latest version available in the repository. If you want to use a specific version of a starter, you can pass a `--checkout` argument to the command: ```bash -kedro new --starter=pyspark --checkout=0.1.0 +kedro new --starter=spaceflights-pandas --checkout=0.1.0 ``` -The `--checkout` value points to a branch, tag or commit in the starter repository. +The `--checkout` value can point to a branch, tag or commit in the starter repository. Under the hood, the value will be passed to the [`--checkout` flag in Cookiecutter](https://cookiecutter.readthedocs.io/en/1.7.2/usage.html#works-directly-with-git-and-hg-mercurial-repos-too). ## Use a starter with a configuration file -By default, when you create a new project using a starter, `kedro new` asks you to enter the `project_name`, which it uses to set the `repo_name` and `python_package` name. This is the same behavior as when you [create a new empty project](../get_started/new_project.md#create-a-basic-project) +By default, when you create a new project using a starter, `kedro new` asks you to enter the `project_name`, which it uses to set the `repo_name` and `python_package` name. This is the same behaviour as when you [create a new empty project](../get_started/new_project.md#create-a-basic-project) -However, Kedro also allows you to [specify a configuration file](../get_started/new_project.md#create-a-basic-project-from-a-configuration-file) when you create a project using a Kedro starter. Use the `--config` flag alongside the starter: +Kedro also allows you to [specify a configuration file](../get_started/new_project.md#create-a-basic-project-from-a-configuration-file) when you create a project using a Kedro starter. Use the `--config` flag alongside the starter: ```bash -kedro new --config=my_kedro_pyspark_project.yml --starter=pyspark +kedro new --config=my_kedro_project.yml --starter=spaceflights-pandas ``` This option is useful when the starter requires more configuration than the default mode requires. diff --git a/docs/source/tutorial/tutorial_template.md b/docs/source/tutorial/tutorial_template.md index a8283efc01..e14be6c4da 100644 --- a/docs/source/tutorial/tutorial_template.md +++ b/docs/source/tutorial/tutorial_template.md @@ -16,12 +16,9 @@ Navigate to the folder you want to store the project. Type the following to gene kedro new --starter=spaceflights-pandas ``` -Note the following: +When prompted for a project name, you should accept the default choice (`Spaceflights`) as the rest of this tutorial assumes that project name. -1. The command line interface will ask which tools you'd like to include, which typically depend on the requirements of your project. You don't need any for this tutorial so can follow the default and add none at all. For further information, consult the [new project toolsdocumentation](../starters/new_project_tools.md). -2. When prompted for a project name, you should accept the default choice (`Spaceflights`) as the rest of this tutorial assumes that project name. - -When Kedro has created the project, navigate to the [project root directory](./spaceflights_tutorial.md#project-root-directory): +After Kedro has created the project, navigate to the [project root directory](./spaceflights_tutorial.md#project-root-directory): ```bash cd spaceflights From edc4e516bd2e786e4753fc40ba2191968862a564 Mon Sep 17 00:00:00 2001 From: Jo Stichbury Date: Wed, 22 Nov 2023 17:05:38 +0000 Subject: [PATCH 16/27] fixes to internal links Signed-off-by: Jo Stichbury --- docs/source/deployment/airflow_astronomer.md | 2 +- docs/source/get_started/new_project.md | 68 +++++++------------- docs/source/starters/starters.md | 4 +- 3 files changed, 28 insertions(+), 46 deletions(-) diff --git a/docs/source/deployment/airflow_astronomer.md b/docs/source/deployment/airflow_astronomer.md index a8f5d15e4e..703ef48488 100644 --- a/docs/source/deployment/airflow_astronomer.md +++ b/docs/source/deployment/airflow_astronomer.md @@ -15,7 +15,7 @@ The following tutorial uses a different approach and shows how to deploy a Kedro [Astronomer](https://docs.astronomer.io/astro/install-cli) is a managed Airflow platform which allows users to spin up and run an Airflow cluster easily in production. Additionally, it also provides a set of tools to help users get started with Airflow locally in the easiest way possible. -The tutorial discusses how to run the [example Iris classification pipeline](../get_started/new_project.md#create-a-new-project-containing-starter-code) on a local Airflow cluster with Astronomer. You may also consider using our [`astro-airflow-iris` starter](https://github.com/kedro-org/kedro-starters/tree/main/astro-airflow-iris) which provides a template containing the boilerplate code that the tutorial describes: +The tutorial discusses how to run the example Iris classification pipeline on a local Airflow cluster with Astronomer. You may also consider using our [`astro-airflow-iris` starter](https://github.com/kedro-org/kedro-starters/tree/main/astro-airflow-iris) which provides a template containing the boilerplate code that the tutorial describes: ```shell kedro new --starter=astro-airflow-iris diff --git a/docs/source/get_started/new_project.md b/docs/source/get_started/new_project.md index 06f968d4f5..2776f76536 100644 --- a/docs/source/get_started/new_project.md +++ b/docs/source/get_started/new_project.md @@ -1,11 +1,10 @@ # Create a new Kedro project -There are several ways to create a new Kedro project depending on whether you want it to contain: +There are several ways to create a new Kedro project. This page explains the flow to create a basic project using `kedro new` and selecting from a range of tools and example codes to extend the basic project. The output of `kedro new` is a directory containing all the project files and subdirectories required. The exact code added for the project will depend on your choice of tools and example code as we'll discuss. -* some [basic project code](#create-a-basic-project) -* a set of ["starter" code](#create-a-new-project-containing-starter-code), to run as-is or to adapt and extend. +You can also create a new Kedro project with a starter that adds a set of code for a common project use case. [Starters are explained separately](../starters/starters.md) later in the documentation set and illustrated with the [spaceflights tutorial](../tutorial/tutorial_template.md). -## Create a basic project +## Introducing `kedro new` You can create a basic Kedro project containing the default code needed to set up your own nodes and pipelines. Navigate to your preferred directory and type: @@ -13,22 +12,7 @@ You can create a basic Kedro project containing the default code needed to set u kedro new ``` -### Tools to configure the new project -After you enter `kedro new`, the command line interface will ask which tools you'd like to include, which will depend on the requirements of your project. - -Add one or more of the options, or follow the default and add none at all: - -* Linting: A basic linting setup with Black and ruff -* Testing: A basic testing setup with pytest -* Custom Logging: Additional logging options -* Documentation: Configuration for basic documentation built with Sphinx -* Data Structure: The [directory structure](../faq/faq.md#what-is-data-engineering-convention) for storing data -* PySpark: Setup and configuration for working with PySpark -* Kedro Viz: Kedro's native visualisation tool. - -Find out more about these options in the documentation that explains how to [configure a new project](../starters/new_project_tools.md). - -You'll then be asked to enter a name for the project, which can be human-readable and may contain alphanumeric symbols, spaces, underscores, and hyphens. It must be at least two characters long. +The command line interface then asks you to enter a name for the project. This is the human-readable name, and it may contain alphanumeric symbols, spaces, underscores, and hyphens. It must be at least two characters long. It's best to keep the name simple because the choice is set as the value of `project_name` and is also used to generate the folder and package names for the project automatically. @@ -40,12 +24,26 @@ So, if you enter "Get Started", the folder for the project (`repo_name`) is auto | Local directory to store the project | `repo_name` | `get-started` | | The Python package name for the project (short, all-lowercase) | `python_package` | `get_started` | +## Project tools -After you enter `kedro new`, the command line interface will ask which tools you'd like to include, which will depend on the requirements of your project. The options are [described in more detail above](#tools-to-configure-the-new-project) and in the [documentation about the new project tools](../starters/new_project_tools.md). +The command line interface then asks which tools you'd like to include in the project. The options are as follows and described in more detail above in the [documentation about the new project tools](../starters/new_project_tools.md). -The output of `kedro new` is a directory containing all the project files and subdirectories required. The exact code added for the project will depend on which tools you selected. +You can add one or more of the options, or follow the default and add none at all: -### Create a basic project from a configuration file +* Linting: A basic linting setup with Black and ruff +* Testing: A basic testing setup with pytest +* Custom Logging: Additional logging options +* Documentation: Configuration for basic documentation built with Sphinx +* Data Structure: The [directory structure](../faq/faq.md#what-is-data-engineering-convention) for storing data +* PySpark: Setup and configuration for working with PySpark +* Kedro Viz: Kedro's native visualisation tool. + +## Project example + +TO DO + + +## Create a basic project from a configuration file To create a new project with custom directory and package names, navigate to your preferred directory and type the following command, which passes in a configuration file `config.yml`: @@ -68,19 +66,6 @@ repo_name: testing-kedro python_package: test_kedro ``` - -## Create a new project containing starter code - -You can create a new Kedro project with a [starter](../starters/starters.md) that adds a set of code for a common project use case from the [range available](../starters/starters.md). - -The following illustrates a project created with example code for the [spaceflights tutorial](../tutorial/spaceflights_tutorial.md). Navigate to your preferred directory and type the following: - -```bash -kedro new --starter=pandas-spaceflights -``` - -If you opt to use `--starter` with `kedro new` you will **not** be asked which tools you'd like to include as [described in more detail above](#tools-to-configure-the-new-project) for a basic Kedro project. - ## Run the project However you create a Kedro project, once `kedro new` has completed, the next step is to navigate to the project folder (`cd `) and install dependencies with `pip` as follows: @@ -121,17 +106,14 @@ To exit the visualisation, close the browser tab. To regain control of the termi ## Summary -There are three ways to create a new project after you have [set up Kedro](install.md): - -* You can use `kedro new` to [create a basic Kedro project](#create-a-basic-project) containing project directories and basic code, which you can configure depending on the tooling you need, but otherwise empty to extend as you need. -* You can use `kedro new` and [pass in a configuration file](#create-a-basic-project-from-a-configuration-file) to manually control project details such as the name, folder and package name. -* You can [create a Kedro project populated with starter code](#create-a-new-project-containing-starter-code) from the [range of Kedro starter projects](../starters/starters.md#list-of-official-starters) available. +After you have [set up Kedro](install.md), you can use `kedro new` to create a basic Kedro project containing project directories and basic code, which you can configure depending on the tooling and example code you need. +Alternatively, you can use `kedro new` and [pass in a configuration file](#create-a-basic-project-from-a-configuration-file) to manually control project details such as the name, folder and package name. After you create a new project you need to navigate to its project folder and install its dependencies: `pip install -r requirements.txt` -* **To run the project**, from the project folder type `kedro run` -* **To visualise the project**, from the project folder type `kedro viz` +* **To run the project**: `kedro run` +* **To visualise the project**: `kedro viz` ### Where next? You have completed the section on Kedro project creation for new users. Here are some useful resources to learn more: diff --git a/docs/source/starters/starters.md b/docs/source/starters/starters.md index 685d29d08e..6fc5b416a7 100644 --- a/docs/source/starters/starters.md +++ b/docs/source/starters/starters.md @@ -33,7 +33,7 @@ kedro starter list The Kedro team maintains the following starters for a range of Kedro projects: -* [`astro-airflow-iris`](https://github.com/kedro-org/kedro-starters/tree/main/astro-airflow-iris): The [Kedro Iris dataset example project](../get_started/new_project.md) with a minimal setup for deploying the pipeline on Airflow with [Astronomer](https://www.astronomer.io/). +* [`astro-airflow-iris`](https://github.com/kedro-org/kedro-starters/tree/main/astro-airflow-iris): An example project using the [Iris dataset](https://www.kaggle.com/uciml/iris) with a minimal setup for deploying the pipeline on Airflow with [Astronomer](https://www.astronomer.io/). * [`spaceflights-pandas`](https://github.com/kedro-org/kedro-starters/tree/main/spaceflights-pandas): The [spaceflights tutorial](../tutorial/spaceflights_tutorial.md) example code with `pandas` datasets. * [`spaceflights-pandas-viz`](https://github.com/kedro-org/kedro-starters/tree/main/spaceflights-pandas-viz): The [spaceflights tutorial](../tutorial/spaceflights_tutorial.md) example code with `pandas` datasets and visualisation and experiment tracking `kedro-viz` features. * [`spaceflights-pyspark`](https://github.com/kedro-org/kedro-starters/tree/main/spaceflights-pyspark): The [spaceflights tutorial](../tutorial/spaceflights_tutorial.md) example code with `pyspark` datasets. @@ -54,7 +54,7 @@ Under the hood, the value will be passed to the [`--checkout` flag in Cookiecutt ## Use a starter with a configuration file -By default, when you create a new project using a starter, `kedro new` asks you to enter the `project_name`, which it uses to set the `repo_name` and `python_package` name. This is the same behaviour as when you [create a new empty project](../get_started/new_project.md#create-a-basic-project) +By default, when you create a new project using a starter, `kedro new` asks you to enter the `project_name`, which it uses to set the `repo_name` and `python_package` name. This is the same behaviour as when you [create a new empty project](../get_started/new_project.md) Kedro also allows you to [specify a configuration file](../get_started/new_project.md#create-a-basic-project-from-a-configuration-file) when you create a project using a Kedro starter. Use the `--config` flag alongside the starter: From f6e1844da0f8aba592304e8a2878d3929b8af31a Mon Sep 17 00:00:00 2001 From: Jo Stichbury Date: Wed, 22 Nov 2023 17:40:04 +0000 Subject: [PATCH 17/27] pandas-spaceflights bad, spaceflights-pandas good Signed-off-by: Jo Stichbury --- docs/source/notebooks_and_ipython/kedro_and_notebooks.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/notebooks_and_ipython/kedro_and_notebooks.md b/docs/source/notebooks_and_ipython/kedro_and_notebooks.md index 2d0cc7f507..9af34b4e92 100644 --- a/docs/source/notebooks_and_ipython/kedro_and_notebooks.md +++ b/docs/source/notebooks_and_ipython/kedro_and_notebooks.md @@ -6,7 +6,7 @@ This page also explains how to use line magic to display a Kedro-Viz visualisati ## Example project -The example adds a notebook to experiment with the retired [`pandas-iris` starter](https://github.com/kedro-org/kedro-starters/tree/main/pandas-iris). As an alternative, you can follow the example using a different starter, such as [`pandas-spaceflights`](https://github.com/kedro-org/kedro-starters/tree/main/pandas-spaceflights) or just add a notebook to your own project. +The example adds a notebook to experiment with the retired [`pandas-iris` starter](https://github.com/kedro-org/kedro-starters/tree/main/pandas-iris). As an alternative, you can follow the example using a different starter, such as [`spaceflights-pandas`](https://github.com/kedro-org/kedro-starters/tree/main/spaceflights-pandas) or just add a notebook to your own project. We will assume the example project is called `iris`, but you can call it whatever you choose. From 135ad6ad05e9cf8ac2f6dba6da207fabc55215d2 Mon Sep 17 00:00:00 2001 From: Jo Stichbury Date: Thu, 23 Nov 2023 11:41:46 +0000 Subject: [PATCH 18/27] fix cookiecutter docs urls Signed-off-by: Jo Stichbury --- .../nodes_and_pipelines/modular_pipelines.md | 2 +- docs/source/starters/create_a_starter.md | 12 +++++----- docs/source/starters/starters.md | 22 ++++++++++++++++--- 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/docs/source/nodes_and_pipelines/modular_pipelines.md b/docs/source/nodes_and_pipelines/modular_pipelines.md index 09c0d5b54e..c7c104d7e8 100644 --- a/docs/source/nodes_and_pipelines/modular_pipelines.md +++ b/docs/source/nodes_and_pipelines/modular_pipelines.md @@ -103,7 +103,7 @@ Pipeline templates are rendered using [Cookiecutter](https://cookiecutter.readth See the [`cookiecutter.json` file in the Kedro default template](https://github.com/kedro-org/kedro/tree/main/kedro/templates/pipeline/cookiecutter.json) for an example. It is important to note that if you are embedding your custom pipeline template within a Kedro starter template, you must tell Cookiecutter not to render this template when creating a new project from the starter. To do this, -you must add [`_copy_without_render: ["templates"]`](https://cookiecutter.readthedocs.io/en/latest/advanced/copy_without_render.html) to the `cookiecutter.json` file for the starter +you must add [`_copy_without_render: ["templates"]`](https://cookiecutter.readthedocs.io/en/stable/advanced/copy_without_render.html) to the `cookiecutter.json` file for the starter and not the `cookiecutter.json` for the pipeline template. ### Ensuring portability diff --git a/docs/source/starters/create_a_starter.md b/docs/source/starters/create_a_starter.md index 837c821831..ce8c3ae5d9 100644 --- a/docs/source/starters/create_a_starter.md +++ b/docs/source/starters/create_a_starter.md @@ -1,12 +1,10 @@ # How to create a Kedro starter - - +Kedro starters are a useful way to create a new project that contains code to run as-is, or to adapt and extend. +A team may find it useful to build Kedro starters to create reusable projects that bootstrap a common base and can be extended. -Kedro starters are used to create projects that contain code to run as-is, or to adapt and extend. A good example is the Iris dataset example of basic Kedro project layout, configuration and initialisation code. A team may find it useful to build Kedro starters to create reusable projects that bootstrap a common base and can be extended. - -A Kedro starter is a [Cookiecutter](https://cookiecutter.readthedocs.io/en/1.7.2/) template that contains the boilerplate code for a Kedro project. +A Kedro starter is a [Cookiecutter](https://cookiecutter.readthedocs.io/) template that contains the boilerplate code for a Kedro project. To create a Kedro starter, you need a base project to convert to a `cookiecutter` template, which forms the boilerplate for all projects that use the Kedro starter. @@ -46,9 +44,9 @@ custom_prompt: information they should provide. ``` -At the very least, the prompt `title` must be defined for the prompt to be valid. After Kedro gets the user's input for each prompt, we pass the value to [`cookiecutter`](https://cookiecutter.readthedocs.io/en/1.7.2/), so every key in your `prompts.yml` must have a corresponding key in [`cookiecutter.json`](https://cookiecutter.readthedocs.io/en/1.7.2/tutorial1.html#cookiecutter-json). +At the very least, the prompt `title` must be defined for the prompt to be valid. After Kedro gets the user's input for each prompt, we pass the value to [`cookiecutter`](https://cookiecutter.readthedocs.io), so every key in your `prompts.yml` must have a corresponding key in [`cookiecutter.json`](https://cookiecutter.readthedocs.io/en/stable/tutorials/tutorial1.html#cookiecutter-json). -If the input to the prompts needs to be **validated**, for example to make sure it only has alphanumeric characters, you can add regex validation rules via the `regex_validator` key. For more complex validation, have a look at [cookiecutter pre/post-generate hooks](https://cookiecutter.readthedocs.io/en/1.7.2/advanced/hooks.html#using-pre-post-generate-hooks-0-7-0). +If the input to the prompts needs to be **validated**, for example to make sure it only has alphanumeric characters, you can add regex validation rules via the `regex_validator` key. For more complex validation, have a look at [cookiecutter pre/post-generate hooks](https://cookiecutter.readthedocs.io/en/stable/advanced/hooks.html#using-pre-post-generate-hooks-0-7-0). If you want `cookiecutter` to provide sensible **defaults** in case a user doesn't provide any input, you can add those to `cookiecutter.json`. See [the default starter `cookiecutter.json`](https://github.com/kedro-org/kedro/blob/main/kedro/templates/project/cookiecutter.json) as example. diff --git a/docs/source/starters/starters.md b/docs/source/starters/starters.md index 6fc5b416a7..ac189f5d5d 100644 --- a/docs/source/starters/starters.md +++ b/docs/source/starters/starters.md @@ -1,6 +1,6 @@ # Kedro starters -A Kedro starter contains code in the form of a [Cookiecutter](https://cookiecutter.readthedocs.io/en/1.7.2/) template for a Kedro project. Using a starter is like using a pre-defined layout when creating a presentation or document. +A Kedro starter contains code in the form of a [Cookiecutter](https://cookiecutter.readthedocs.io/) template for a Kedro project. Using a starter is like using a pre-defined layout when creating a presentation or document. You can create your own starters for reuse within a project or team, as described in the [how to create a Kedro starter](../starters/create_a_starter.md) documentation. @@ -13,7 +13,7 @@ kedro new --starter= ``` ```{note} -`path-to-starter` could be a local directory or a VCS repository, as long as [Cookiecutter](https://cookiecutter.readthedocs.io/en/1.7.2/usage.html) supports it. +`path-to-starter` could be a local directory or a VCS repository, as long as [Cookiecutter](https://cookiecutter.readthedocs.io/en/stable/usage.html) supports it. ``` ## Starter aliases @@ -39,6 +39,22 @@ The Kedro team maintains the following starters for a range of Kedro projects: * [`spaceflights-pyspark`](https://github.com/kedro-org/kedro-starters/tree/main/spaceflights-pyspark): The [spaceflights tutorial](../tutorial/spaceflights_tutorial.md) example code with `pyspark` datasets. * [`spaceflights-pyspark-viz`](https://github.com/kedro-org/kedro-starters/tree/main/spaceflights-pyspark-viz): The [spaceflights tutorial](../tutorial/spaceflights_tutorial.md) example code with `pyspark` datasets and visualisation and experiment tracking `kedro-viz` features. +### Archived starters + +The following Kedro starters have been archived and are unavailable in Kedro version 0.19.0 and beyond. + +* [`standalone-datacatalog`](https://github.com/kedro-org/kedro-starters/tree/main/standalone-datacatalog) +* [`pandas-iris`](https://github.com/kedro-org/kedro-starters/tree/main/pandas-iris) +* [`pyspark-iris`](https://github.com/kedro-org/kedro-starters/tree/main/pyspark-iris) +* [`pyspark`](https://github.com/kedro-org/kedro-starters/tree/main/pyspark) + +The latest version of Kedro that supports these starters is Kedro 0.18.14. + +* To check the version of Kedro you have installed, type `kedro -V` in your terminal window. +* To install a specific version of Kedro, e.g. 0.18.14, type `pip install example-package<=0.18.14`. +* To create a project with one of these starters using `kedro new`, type the following (assuming Kedro version 0.18.14) `kedro new --starter=pandas-iris --checkout=0.18.14` (for example, to use the `pandas-iris` starter). + + ## Starter versioning By default, Kedro will use the latest version available in the repository. If you want to use a specific version of a starter, you can pass a `--checkout` argument to the command: @@ -49,7 +65,7 @@ kedro new --starter=spaceflights-pandas --checkout=0.1.0 The `--checkout` value can point to a branch, tag or commit in the starter repository. -Under the hood, the value will be passed to the [`--checkout` flag in Cookiecutter](https://cookiecutter.readthedocs.io/en/1.7.2/usage.html#works-directly-with-git-and-hg-mercurial-repos-too). +Under the hood, the value will be passed to the [`--checkout` flag in Cookiecutter](https://cookiecutter.readthedocs.io/en/stable/usage.html#works-directly-with-git-and-hg-mercurial-repos-too). ## Use a starter with a configuration file From 711bc0b090b584a267949d495b56e51e7a5f1e23 Mon Sep 17 00:00:00 2001 From: Jo Stichbury Date: Thu, 23 Nov 2023 12:19:53 +0000 Subject: [PATCH 19/27] Update the create a starter docs Signed-off-by: Jo Stichbury --- docs/source/starters/create_a_starter.md | 59 +++++++++++------------- docs/source/starters/starters.md | 4 +- 2 files changed, 29 insertions(+), 34 deletions(-) diff --git a/docs/source/starters/create_a_starter.md b/docs/source/starters/create_a_starter.md index ce8c3ae5d9..adf811f54d 100644 --- a/docs/source/starters/create_a_starter.md +++ b/docs/source/starters/create_a_starter.md @@ -1,40 +1,31 @@ # How to create a Kedro starter -Kedro starters are a useful way to create a new project that contains code to run as-is, or to adapt and extend. +Kedro starters are a useful way to create a new project that contains code to run as-is, or to adapt and extend. A team may find it useful to build Kedro starters to create reusable projects that bootstrap a common base and can be extended. -A Kedro starter is a [Cookiecutter](https://cookiecutter.readthedocs.io/) template that contains the boilerplate code for a Kedro project. - -To create a Kedro starter, you need a base project to convert to a `cookiecutter` template, which forms the boilerplate for all projects that use the Kedro starter. - -Install `cookiecutter` as follows: +## Install the `cookiecutter` package +A Kedro starter is a [Cookiecutter](https://cookiecutter.readthedocs.io/) template that contains the boilerplate code for a Kedro project. First install `cookiecutter` as follows: ```bash pip install cookiecutter ``` -You then need to decide which are: +To create a Kedro starter, you need a base project to convert to a template, which forms the boilerplate for all projects that use it. You then need to decide which are: * the common, boilerplate parts of the project * the configurable elements, which need to be replaced by `cookiecutter` strings -## Configuration variables - -By default, when you create a new project using a Kedro starter, `kedro new` launches in interactive mode. The user is then prompted for the variables that have been set in `prompts.yml`. - -The most basic and empty starter triggered by `kedro new` is set up with the following variable: +## Custom project creation variables -* `project_name` - A human readable name for the new project +When you create a new project using a Kedro starter, `kedro new` prompts you for a project name. This variable (`project_name`) is set in the [default starter setup](https://github.com/kedro-org/kedro/blob/main/kedro/templates/project/prompts.yml) in`prompts.yml`. -Kedro will then automatically generate the following two variables from the entered `project_name`: +Kedro automatically generates the following two variables from the entered `project_name`: * `repo_name` - A name for the directory that holds the project repository * `python_package` - A Python package name for the project package (see [Python package naming conventions](https://www.python.org/dev/peps/pep-0008/#package-and-module-names)) -See the configuration for this basic configuration in [the default starter setup](https://github.com/kedro-org/kedro/blob/main/kedro/templates/project/prompts.yml). - -As the creator of the Kedro starter you can customise the prompts triggered by `kedro new` by adding your own prompts in `prompts.yml`. This is an example of a custom prompt: +As a starter creator, you can customise the prompts triggered by `kedro new` by adding your own prompts into the `prompts.yml` file in the root of your template. This is an example of a custom prompt: ```yaml custom_prompt: @@ -44,29 +35,31 @@ custom_prompt: information they should provide. ``` -At the very least, the prompt `title` must be defined for the prompt to be valid. After Kedro gets the user's input for each prompt, we pass the value to [`cookiecutter`](https://cookiecutter.readthedocs.io), so every key in your `prompts.yml` must have a corresponding key in [`cookiecutter.json`](https://cookiecutter.readthedocs.io/en/stable/tutorials/tutorial1.html#cookiecutter-json). +At the very least, the prompt `title` must be defined for the prompt to be valid. After Kedro receives the user's input for each prompt, it passes the value to Cookiecutter, so every key in `prompts.yml` must have a corresponding key in [`cookiecutter.json`](https://cookiecutter.readthedocs.io/en/stable/tutorials/tutorial1.html#cookiecutter-json). -If the input to the prompts needs to be **validated**, for example to make sure it only has alphanumeric characters, you can add regex validation rules via the `regex_validator` key. For more complex validation, have a look at [cookiecutter pre/post-generate hooks](https://cookiecutter.readthedocs.io/en/stable/advanced/hooks.html#using-pre-post-generate-hooks-0-7-0). +If the input to the prompts needs to be validated, for example to make sure it only has alphanumeric characters, you can add regex validation rules via the `regex_validator` key. Consider using [cookiecutter pre/post-generate hooks](https://cookiecutter.readthedocs.io/en/stable/advanced/hooks.html#using-pre-post-generate-hooks-0-7-0) for more complex validation. -If you want `cookiecutter` to provide sensible **defaults** in case a user doesn't provide any input, you can add those to `cookiecutter.json`. See [the default starter `cookiecutter.json`](https://github.com/kedro-org/kedro/blob/main/kedro/templates/project/cookiecutter.json) as example. +If you want `cookiecutter` to provide sensible default values, in case a user doesn't provide any input, you can add those to `cookiecutter.json`. See [the default starter `cookiecutter.json`](https://github.com/kedro-org/kedro/blob/main/kedro/templates/project/cookiecutter.json) as example. ## Example Kedro starter -To review an example Kedro starter, check out the [`pandas-iris` starter on GitHub](https://github.com/kedro-org/kedro-starters/tree/main/pandas-iris). +To review an example Kedro starter, check out the [`spaceflights-pandas` starter on GitHub](https://github.com/kedro-org/kedro-starters/tree/main/spaceflights-pandas). + +When a new `spaceflights-pandas` project is created with `kedro new --starter=spaceflights-pandas`, the user is asked to enter a `project_name` variable, which is then used to generate the `repo_name` and `python_package` variables by default. -When you create an Iris dataset example project by calling `kedro new`, you supply configuration variables as the documentation in [Create a new project](../get_started/new_project.md) describes. When you go through the interactive flow you must supply the `project_name` variable, which is then used to generate the `repo_name` and `python_package` variables. If you use a configuration file, you must supply all three variables in the file. You can see how these variables are used by inspecting the template: +If you use a configuration file, you must supply all three variables in the file. You can see how these variables are used by [inspecting the template](https://github.com/kedro-org/kedro-starters/tree/main/spaceflights-pandas/%7B%7B%20cookiecutter.repo_name%20%7D%7D): -**project_name** +### `project_name` -The human-readable `project_name` variable is used in the [README.md](https://github.com/kedro-org/kedro-starters/tree/main/pandas-iris/README.md) for the new project. +The human-readable `project_name` variable is used in the [README.md](https://github.com/kedro-org/kedro-starters/blob/main/spaceflights-pandas/%7B%7B%20cookiecutter.repo_name%20%7D%7D/README.md) for the new project. -**repo_name** +### `repo_name` -The project structure contains a folder labelled [`{{ cookiecutter.repo_name }}`](https://github.com/kedro-org/kedro-starters/tree/main/pandas-iris/%7B%7B%20cookiecutter.repo_name%20%7D%7D), which forms the top-level folder to contain the Iris dataset example when it is created. The folder storing the example project is represented by `cookiecutter.repo_name`, which is a customisable variable, as you would expect. +The top-level folder labelled [`{{ cookiecutter.repo_name }}`](https://github.com/kedro-org/kedro-starters/tree/main/spaceflights-pandas/%7B%7B%20cookiecutter.repo_name%20%7D%7D), which forms the top-level folder to contain the starter project when it is created. -**python_package** +### `python_package` -Within the parent folder, inside the `src` subfolder, is another configurable variable [{{ cookiecutter.python_package }}](https://github.com/kedro-org/kedro-starters/tree/main/pandas-iris/%7B%7B%20cookiecutter.repo_name%20%7D%7D/src/%7B%7B%20cookiecutter.python_package%20%7D%7D) which contains the source code for the example pipelines. The variable is also used within [`__main__.py`](https://github.com/kedro-org/kedro-starters/tree/main/pandas-iris/%7B%7B%20cookiecutter.repo_name%20%7D%7D/src/%7B%7B%20cookiecutter.python_package%20%7D%7D/__main__.py). +Within the parent folder, inside the `src` subfolder, is another configurable variable [{{ cookiecutter.python_package }}](https://github.com/kedro-org/kedro-starters/tree/main/spaceflights-pandas/%7B%7B%20cookiecutter.repo_name%20%7D%7D/src/%7B%7B%20cookiecutter.python_package%20%7D%7D) which contains the source code for the example pipelines. The variable is also used within [`__main__.py`](https://github.com/kedro-org/kedro-starters/blob/main/spaceflights-pandas/%7B%7B%20cookiecutter.repo_name%20%7D%7D/src/%7B%7B%20cookiecutter.python_package%20%7D%7D/__main__.py). Here is the layout of the project as a Cookiecutter template: @@ -94,11 +87,12 @@ Here is the layout of the project as a Cookiecutter template: You can add an alias by creating a plugin using `kedro.starters` entry point which enables you to call `kedro new --starter=your_starters`. That is, it can be used directly through the `starter` argument in `kedro new` rather than needing to explicitly provide the `template` and `directory` arguments. -A custom starter alias behaves in the same way as an official Kedro starter alias and is also picked up by `kedro starter list`. +A custom starter alias behaves in the same way as an official Kedro starter alias and is also picked up by the command `kedro starter list`. -You need to extend the starters by providing a list of `KedroStarterSpec`, in this example it is defined in a file called `plugin.py`. +You need to extend the starters by providing a list of `KedroStarterSpec`, in this example it is defined in a file called `plugin.py`. Example for a non-git repository starter: + ```python # plugin.py starters = [ @@ -110,6 +104,7 @@ starters = [ ``` Example for a git repository starter: + ```python # plugin.py starters = [ @@ -121,7 +116,7 @@ starters = [ ] ``` -The `directory` argument is optional and should be used when you have multiple templates in one repository as for the [official kedro-starters](https://github.com/kedro-org/kedro-starters). If you only have one template, your top-level directory will be treated as the template. For an example, see the [spaceflights-pandas starter](https://github.com/kedro-org/kedro-starters/tree/main/spaceflights-pandas). +The `directory` argument is optional and should be used when you have multiple templates in one repository as for the [official kedro-starters](https://github.com/kedro-org/kedro-starters). If you only have one template, your top-level directory will be treated as the template. In your `pyproject.toml`, you need to register the specifications to `kedro.starters`: @@ -133,5 +128,5 @@ starter = "plugin:starters" After that you can use this starter with `kedro new --starter=test_plugin_starter`. ```{note} -If your starter lives on a git repository, by default Kedro attempts to use a tag or branch labelled with your version of Kedro, e.g. `0.18.12`. This means that you can host different versions of your starter template on the same repository, and the correct one will automatically be used. If you do not wish to follow this structure, you should override it with the `checkout` flag, e.g. `kedro new --starter=test_plugin_starter --checkout=main`. +If your starter is stored on a git repository, Kedro defaults to use a tag or branch labelled with your version of Kedro, e.g. `0.18.12`. This means that you can host different versions of your starter template on the same repository, and the correct one will be used automatically. If you prefer not to follow this structure, you should override it with the `checkout` flag, e.g. `kedro new --starter=test_plugin_starter --checkout=main`. ``` diff --git a/docs/source/starters/starters.md b/docs/source/starters/starters.md index ac189f5d5d..1d4b72a19c 100644 --- a/docs/source/starters/starters.md +++ b/docs/source/starters/starters.md @@ -48,9 +48,9 @@ The following Kedro starters have been archived and are unavailable in Kedro ver * [`pyspark-iris`](https://github.com/kedro-org/kedro-starters/tree/main/pyspark-iris) * [`pyspark`](https://github.com/kedro-org/kedro-starters/tree/main/pyspark) -The latest version of Kedro that supports these starters is Kedro 0.18.14. +The latest version of Kedro that supports these starters is Kedro 0.18.14. -* To check the version of Kedro you have installed, type `kedro -V` in your terminal window. +* To check the version of Kedro you have installed, type `kedro -V` in your terminal window. * To install a specific version of Kedro, e.g. 0.18.14, type `pip install example-package<=0.18.14`. * To create a project with one of these starters using `kedro new`, type the following (assuming Kedro version 0.18.14) `kedro new --starter=pandas-iris --checkout=0.18.14` (for example, to use the `pandas-iris` starter). From 201776d0c8214759646d474ac4250dbbdecbca31 Mon Sep 17 00:00:00 2001 From: Jo Stichbury Date: Thu, 23 Nov 2023 13:57:24 +0000 Subject: [PATCH 20/27] Fix link to avoid linkcheck barf Signed-off-by: Jo Stichbury --- docs/source/starters/create_a_starter.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/starters/create_a_starter.md b/docs/source/starters/create_a_starter.md index adf811f54d..10a2542be4 100644 --- a/docs/source/starters/create_a_starter.md +++ b/docs/source/starters/create_a_starter.md @@ -37,7 +37,7 @@ custom_prompt: At the very least, the prompt `title` must be defined for the prompt to be valid. After Kedro receives the user's input for each prompt, it passes the value to Cookiecutter, so every key in `prompts.yml` must have a corresponding key in [`cookiecutter.json`](https://cookiecutter.readthedocs.io/en/stable/tutorials/tutorial1.html#cookiecutter-json). -If the input to the prompts needs to be validated, for example to make sure it only has alphanumeric characters, you can add regex validation rules via the `regex_validator` key. Consider using [cookiecutter pre/post-generate hooks](https://cookiecutter.readthedocs.io/en/stable/advanced/hooks.html#using-pre-post-generate-hooks-0-7-0) for more complex validation. +If the input to the prompts needs to be validated, for example to make sure it only has alphanumeric characters, you can add regex validation rules via the `regex_validator` key. Consider using [cookiecutter pre/post-generate hooks](https://cookiecutter.readthedocs.io/en/stable/advanced/hooks.html) for more complex validation. If you want `cookiecutter` to provide sensible default values, in case a user doesn't provide any input, you can add those to `cookiecutter.json`. See [the default starter `cookiecutter.json`](https://github.com/kedro-org/kedro/blob/main/kedro/templates/project/cookiecutter.json) as example. From b02d672df07eee9ae1296c79de00f10cd1574252 Mon Sep 17 00:00:00 2001 From: Jo Stichbury Date: Thu, 23 Nov 2023 14:02:35 +0000 Subject: [PATCH 21/27] Update docs/source/get_started/new_project.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Juan Luis Cano Rodríguez Signed-off-by: Jo Stichbury --- docs/source/get_started/new_project.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/get_started/new_project.md b/docs/source/get_started/new_project.md index 2776f76536..3081e41a13 100644 --- a/docs/source/get_started/new_project.md +++ b/docs/source/get_started/new_project.md @@ -34,7 +34,7 @@ You can add one or more of the options, or follow the default and add none at al * Testing: A basic testing setup with pytest * Custom Logging: Additional logging options * Documentation: Configuration for basic documentation built with Sphinx -* Data Structure: The [directory structure](../faq/faq.md#what-is-data-engineering-convention) for storing data +* Data Structure: The [directory structure](../faq/faq.md#what-is-data-engineering-convention) for storing data locally * PySpark: Setup and configuration for working with PySpark * Kedro Viz: Kedro's native visualisation tool. From 57701f6559231b4b879b7ee5f15104e463e14623 Mon Sep 17 00:00:00 2001 From: Jo Stichbury Date: Thu, 23 Nov 2023 14:10:59 +0000 Subject: [PATCH 22/27] Update following review Signed-off-by: Jo Stichbury --- docs/source/faq/faq.md | 27 +++------------------------ 1 file changed, 3 insertions(+), 24 deletions(-) diff --git a/docs/source/faq/faq.md b/docs/source/faq/faq.md index 9520ec51db..8a5432255e 100644 --- a/docs/source/faq/faq.md +++ b/docs/source/faq/faq.md @@ -68,29 +68,8 @@ Refer to the following table below for a high level guide to each layer's purpos | Model output | Analytics specific data model(s) containing the results generated by the model based on the `model input` data | | Reporting | Reporting data model(s) that are used to combine a set of `primary`, `feature`, `model input` and `model output` data used to drive the dashboard and the views constructed. It encapsulates and removes the need to define any blending or joining of data, improve performance and replacement of presentation layer without having to redefine the data models | -## How can I check the version of Kedro installed? -To check the version installed, type `kedro -V` in your terminal window. +## Installing Kedro +* [How do I install a development version of Kedro](https://github.com/kedro-org/kedro/wiki/Guidelines-for-contributing-developers)? -## How do I install a development version of Kedro? - -This section explains how to try out a development version of Kedro direct from the [Kedro GitHub repository](https://github.com/kedro-org/kedro). - -```{important} -The development version of Kedro is not guaranteed to be bug-free and/or compatible with any of the [stable versions](https://pypi.org/project/kedro/#history). We do not recommend that you use a development version of Kedro in any production systems. Please install and use with caution. -``` - -To try out latest, unreleased functionality from the `develop` branch of the Kedro GitHub repository, run the following installation command: - -```bash -pip install git+https://github.com/kedro-org/kedro.git@develop -``` - -This will install Kedro from the `develop` branch of the GitHub repository, which is always the most up to date. This command will install Kedro from source, unlike `pip install kedro` which installs Kedro from PyPI. - -If you want to roll back to a stable version of Kedro, execute the following in your environment: - -```bash -pip uninstall kedro -y -pip install kedro -``` +* How can I check the version of Kedro installed? To check the version installed, type `kedro -V` in your terminal window. \ No newline at end of file From aec7ebcfab11a1d066bfc7432494eb494b0fd3fc Mon Sep 17 00:00:00 2001 From: Jo Stichbury Date: Thu, 23 Nov 2023 15:26:34 +0000 Subject: [PATCH 23/27] Update content Signed-off-by: Jo Stichbury --- docs/source/faq/faq.md | 2 +- docs/source/get_started/new_project.md | 43 +++--------------------- docs/source/starters/create_a_starter.md | 2 +- docs/source/starters/index.md | 39 ++++++++++++++++++--- docs/source/starters/starters.md | 2 +- 5 files changed, 42 insertions(+), 46 deletions(-) diff --git a/docs/source/faq/faq.md b/docs/source/faq/faq.md index 8a5432255e..8eb27eca9e 100644 --- a/docs/source/faq/faq.md +++ b/docs/source/faq/faq.md @@ -72,4 +72,4 @@ Refer to the following table below for a high level guide to each layer's purpos ## Installing Kedro * [How do I install a development version of Kedro](https://github.com/kedro-org/kedro/wiki/Guidelines-for-contributing-developers)? -* How can I check the version of Kedro installed? To check the version installed, type `kedro -V` in your terminal window. \ No newline at end of file +* How can I check the version of Kedro installed? To check the version installed, type `kedro -V` in your terminal window. diff --git a/docs/source/get_started/new_project.md b/docs/source/get_started/new_project.md index 2776f76536..1f7135122f 100644 --- a/docs/source/get_started/new_project.md +++ b/docs/source/get_started/new_project.md @@ -1,6 +1,6 @@ # Create a new Kedro project -There are several ways to create a new Kedro project. This page explains the flow to create a basic project using `kedro new` and selecting from a range of tools and example codes to extend the basic project. The output of `kedro new` is a directory containing all the project files and subdirectories required. The exact code added for the project will depend on your choice of tools and example code as we'll discuss. +There are several ways to create a new Kedro project. This page explains the flow to create a basic project using `kedro new` to output a project directory containing the basic files and subdirectories that make up a Kedro project. You can also create a new Kedro project with a starter that adds a set of code for a common project use case. [Starters are explained separately](../starters/starters.md) later in the documentation set and illustrated with the [spaceflights tutorial](../tutorial/tutorial_template.md). @@ -38,37 +38,13 @@ You can add one or more of the options, or follow the default and add none at al * PySpark: Setup and configuration for working with PySpark * Kedro Viz: Kedro's native visualisation tool. -## Project example +## Project examples TO DO +## Run the new project -## Create a basic project from a configuration file - -To create a new project with custom directory and package names, navigate to your preferred directory and type the following command, which passes in a configuration file `config.yml`: - -```bash -kedro new --config=/config.yml -``` -The configuration file must contain: - -- `output_dir` The path in which to create the project directory -- `project_name` -- `repo_name` -- `python_package` - -The `output_dir` can be set to `~` for the home directory or `.` for the current working directory. Here is an example `config.yml`, which assumes that a directory named `~/code` already exists: - -```yaml -output_dir: ~/code -project_name: My First Kedro Project -repo_name: testing-kedro -python_package: test_kedro -``` - -## Run the project - -However you create a Kedro project, once `kedro new` has completed, the next step is to navigate to the project folder (`cd `) and install dependencies with `pip` as follows: +Whichever options you selected for tools and example code, once `kedro new` has completed, the next step is to navigate to the project folder (`cd `) and install dependencies with `pip` as follows: ```bash pip install -r requirements.txt @@ -104,17 +80,6 @@ This command automatically opens a browser tab to serve the visualisation at `ht To exit the visualisation, close the browser tab. To regain control of the terminal, enter `^+c` on Mac or `Ctrl+c` on Windows or Linux machines. -## Summary - -After you have [set up Kedro](install.md), you can use `kedro new` to create a basic Kedro project containing project directories and basic code, which you can configure depending on the tooling and example code you need. - -Alternatively, you can use `kedro new` and [pass in a configuration file](#create-a-basic-project-from-a-configuration-file) to manually control project details such as the name, folder and package name. - -After you create a new project you need to navigate to its project folder and install its dependencies: `pip install -r requirements.txt` - -* **To run the project**: `kedro run` -* **To visualise the project**: `kedro viz` - ### Where next? You have completed the section on Kedro project creation for new users. Here are some useful resources to learn more: diff --git a/docs/source/starters/create_a_starter.md b/docs/source/starters/create_a_starter.md index 10a2542be4..d44f1d1888 100644 --- a/docs/source/starters/create_a_starter.md +++ b/docs/source/starters/create_a_starter.md @@ -1,4 +1,4 @@ -# How to create a Kedro starter +# Create a Kedro starter Kedro starters are a useful way to create a new project that contains code to run as-is, or to adapt and extend. diff --git a/docs/source/starters/index.md b/docs/source/starters/index.md index d007730e05..ef48c3c13d 100644 --- a/docs/source/starters/index.md +++ b/docs/source/starters/index.md @@ -1,13 +1,44 @@ # New project tools +As you saw from the [First steps](../get_started/new_project.md) section, once you have [set up Kedro](../get_started/install.md), you can use `kedro new` to create a basic Kedro project containing project directories and basic code, which you can configure depending on the tooling and example code you need. - - - - +There are several ways to create a new Kedro project, which the pages in this section describe in detail. ```{toctree} :maxdepth: 1 +:hidden: new_project_tools starters ``` + +**Use `kedro new` to create a basic project**
+In the simplest instance, you can create a project using `kedro new` and select from a range of [tools and example code options](./new_project_tools.md) to extend the basic project. + +**Use `kedro new` with `--config`**
+Similarly, you can use `kedro new` but additionally pass in a configuration file, for example: + +```bash +kedro new --config=config.yml +``` + +The file enables you to customise details such as the project folder name and package name. + +The configuration file must contain: + +* `output_dir` The path in which to create the project directory, which can be set to `~` for the home directory or `.` for the current working directory +* `project_name` +* `repo_name` +* `python_package` +* TO DO -- tools and example code options + +The `output_dir` can be specified as `~` for the home directory or `.` for the current working directory. Here is an example `config.yml`, which assumes that a directory named `~/code` already exists: + +```yaml +output_dir: ~/code +project_name: My First Kedro Project +repo_name: testing-kedro +python_package: test_kedro +``` + +**Use `kedro new` with a `--starter`**
+Alternatively, you can create a new Kedro project with a [starter](./starters.md) that adds a set of code for a common project use case. diff --git a/docs/source/starters/starters.md b/docs/source/starters/starters.md index 1d4b72a19c..d66b222f5a 100644 --- a/docs/source/starters/starters.md +++ b/docs/source/starters/starters.md @@ -72,7 +72,7 @@ Under the hood, the value will be passed to the [`--checkout` flag in Cookiecutt By default, when you create a new project using a starter, `kedro new` asks you to enter the `project_name`, which it uses to set the `repo_name` and `python_package` name. This is the same behaviour as when you [create a new empty project](../get_started/new_project.md) -Kedro also allows you to [specify a configuration file](../get_started/new_project.md#create-a-basic-project-from-a-configuration-file) when you create a project using a Kedro starter. Use the `--config` flag alongside the starter: +Kedro also allows you to specify a configuration file when you create a project using a Kedro starter. Use the `--config` flag alongside the starter: ```bash kedro new --config=my_kedro_project.yml --starter=spaceflights-pandas From 8c38a1103243ee536c80f8649a0b023d6dea13e9 Mon Sep 17 00:00:00 2001 From: Jo Stichbury Date: Mon, 27 Nov 2023 10:23:47 +0000 Subject: [PATCH 24/27] Update docs/source/nodes_and_pipelines/nodes.md Co-authored-by: Merel Theisen <49397448+merelcht@users.noreply.github.com> Signed-off-by: Jo Stichbury --- docs/source/nodes_and_pipelines/nodes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/nodes_and_pipelines/nodes.md b/docs/source/nodes_and_pipelines/nodes.md index 11f419eefb..77da140d3b 100644 --- a/docs/source/nodes_and_pipelines/nodes.md +++ b/docs/source/nodes_and_pipelines/nodes.md @@ -185,7 +185,7 @@ You can also call a node as a regular Python function: `adder_node(dict(a=2, b=3 ## How to use generator functions in a node ```{warning} -This documentation section uses the `pandas-iris` starter that is unavailable in Kedro version 0.19.0 and beyond. The latest version of Kedro that supports `pandas-iris` is Kedro 0.18.14: install that or an earlier version to work through this example `pip install example-package<=0.18.14`). +This documentation section uses the `pandas-iris` starter that is unavailable in Kedro version 0.19.0 and beyond. The latest version of Kedro that supports `pandas-iris` is Kedro 0.18.14: install that or an earlier version to work through this example `pip install kedro==0.18.14`). To check the version installed, type `kedro -V` in your terminal window. ``` From bd045967da8a56dd117df62f2ab44813911a1061 Mon Sep 17 00:00:00 2001 From: Jo Stichbury Date: Mon, 27 Nov 2023 10:24:13 +0000 Subject: [PATCH 25/27] Update docs/source/starters/starters.md Co-authored-by: Merel Theisen <49397448+merelcht@users.noreply.github.com> Signed-off-by: Jo Stichbury --- docs/source/starters/starters.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/starters/starters.md b/docs/source/starters/starters.md index d66b222f5a..afdfa62c11 100644 --- a/docs/source/starters/starters.md +++ b/docs/source/starters/starters.md @@ -51,7 +51,7 @@ The following Kedro starters have been archived and are unavailable in Kedro ver The latest version of Kedro that supports these starters is Kedro 0.18.14. * To check the version of Kedro you have installed, type `kedro -V` in your terminal window. -* To install a specific version of Kedro, e.g. 0.18.14, type `pip install example-package<=0.18.14`. +* To install a specific version of Kedro, e.g. 0.18.14, type `pip install kedro==0.18.14`. * To create a project with one of these starters using `kedro new`, type the following (assuming Kedro version 0.18.14) `kedro new --starter=pandas-iris --checkout=0.18.14` (for example, to use the `pandas-iris` starter). From 735ed4f4dcaaf82070bf7ac4fc556c855d306e27 Mon Sep 17 00:00:00 2001 From: Jo Stichbury Date: Mon, 27 Nov 2023 10:35:51 +0000 Subject: [PATCH 26/27] Update FAQ Signed-off-by: Jo Stichbury --- docs/source/faq/faq.md | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/docs/source/faq/faq.md b/docs/source/faq/faq.md index 8eb27eca9e..14194f8279 100644 --- a/docs/source/faq/faq.md +++ b/docs/source/faq/faq.md @@ -2,6 +2,16 @@ This is a growing set of technical FAQs. The [product FAQs on the Kedro website](https://kedro.org/#faq) explain how Kedro can answer the typical use cases and requirements of data scientists, data engineers, machine learning engineers and product owners. + +## Installing Kedro +* [How do I install a development version of Kedro](https://github.com/kedro-org/kedro/wiki/Guidelines-for-contributing-developers)? + +* How can I check the version of Kedro installed? To check the version installed, type `kedro -V` in your terminal window. + +* How can I update my version of Kedro? + +* How can I use an older version of Kedro than 0.19.0? + ## Kedro documentation * {doc}`Where can I find the documentation about Kedro-Viz`? * {doc}`Where can I find the documentation for Kedro's datasets`? @@ -68,8 +78,3 @@ Refer to the following table below for a high level guide to each layer's purpos | Model output | Analytics specific data model(s) containing the results generated by the model based on the `model input` data | | Reporting | Reporting data model(s) that are used to combine a set of `primary`, `feature`, `model input` and `model output` data used to drive the dashboard and the views constructed. It encapsulates and removes the need to define any blending or joining of data, improve performance and replacement of presentation layer without having to redefine the data models | - -## Installing Kedro -* [How do I install a development version of Kedro](https://github.com/kedro-org/kedro/wiki/Guidelines-for-contributing-developers)? - -* How can I check the version of Kedro installed? To check the version installed, type `kedro -V` in your terminal window. From 7cb1dd4973556a2bcd7fa788a5e91a523a63f5c5 Mon Sep 17 00:00:00 2001 From: Jo Stichbury Date: Mon, 27 Nov 2023 13:07:56 +0000 Subject: [PATCH 27/27] Updates following review Signed-off-by: Jo Stichbury --- docs/source/faq/faq.md | 7 +------ docs/source/get_started/new_project.md | 8 +++++--- docs/source/starters/create_a_starter.md | 6 +++--- docs/source/starters/index.md | 5 ++--- docs/source/starters/starters.md | 1 + 5 files changed, 12 insertions(+), 15 deletions(-) diff --git a/docs/source/faq/faq.md b/docs/source/faq/faq.md index 14194f8279..99b8f235b9 100644 --- a/docs/source/faq/faq.md +++ b/docs/source/faq/faq.md @@ -6,11 +6,7 @@ This is a growing set of technical FAQs. The [product FAQs on the Kedro website] ## Installing Kedro * [How do I install a development version of Kedro](https://github.com/kedro-org/kedro/wiki/Guidelines-for-contributing-developers)? -* How can I check the version of Kedro installed? To check the version installed, type `kedro -V` in your terminal window. - -* How can I update my version of Kedro? - -* How can I use an older version of Kedro than 0.19.0? +* **How can I check the version of Kedro installed?** To check the version installed, type `kedro -V` in your terminal window. ## Kedro documentation * {doc}`Where can I find the documentation about Kedro-Viz`? @@ -77,4 +73,3 @@ Refer to the following table below for a high level guide to each layer's purpos | Models | Stored, serialised pre-trained machine learning models | | Model output | Analytics specific data model(s) containing the results generated by the model based on the `model input` data | | Reporting | Reporting data model(s) that are used to combine a set of `primary`, `feature`, `model input` and `model output` data used to drive the dashboard and the views constructed. It encapsulates and removes the need to define any blending or joining of data, improve performance and replacement of presentation layer without having to redefine the data models | - diff --git a/docs/source/get_started/new_project.md b/docs/source/get_started/new_project.md index 7441e48035..4d4bb4fcd8 100644 --- a/docs/source/get_started/new_project.md +++ b/docs/source/get_started/new_project.md @@ -12,6 +12,8 @@ You can create a basic Kedro project containing the default code needed to set u kedro new ``` +### Project name + The command line interface then asks you to enter a name for the project. This is the human-readable name, and it may contain alphanumeric symbols, spaces, underscores, and hyphens. It must be at least two characters long. It's best to keep the name simple because the choice is set as the value of `project_name` and is also used to generate the folder and package names for the project automatically. @@ -24,7 +26,7 @@ So, if you enter "Get Started", the folder for the project (`repo_name`) is auto | Local directory to store the project | `repo_name` | `get-started` | | The Python package name for the project (short, all-lowercase) | `python_package` | `get_started` | -## Project tools +### Project tools The command line interface then asks which tools you'd like to include in the project. The options are as follows and described in more detail above in the [documentation about the new project tools](../starters/new_project_tools.md). @@ -38,7 +40,7 @@ You can add one or more of the options, or follow the default and add none at al * PySpark: Setup and configuration for working with PySpark * Kedro Viz: Kedro's native visualisation tool. -## Project examples +### Project examples TO DO @@ -80,7 +82,7 @@ This command automatically opens a browser tab to serve the visualisation at `ht To exit the visualisation, close the browser tab. To regain control of the terminal, enter `^+c` on Mac or `Ctrl+c` on Windows or Linux machines. -### Where next? +## Where next? You have completed the section on Kedro project creation for new users. Here are some useful resources to learn more: * Understand more about Kedro: The following page explains the [fundamental Kedro concepts](./kedro_concepts.md). diff --git a/docs/source/starters/create_a_starter.md b/docs/source/starters/create_a_starter.md index d44f1d1888..f988f0245d 100644 --- a/docs/source/starters/create_a_starter.md +++ b/docs/source/starters/create_a_starter.md @@ -69,7 +69,9 @@ Here is the layout of the project as a Cookiecutter template: ├── data # Local project data (not committed to version control) ├── docs # Project documentation ├── notebooks # Project related Jupyter notebooks (can be used for experimental code before moving the code to src) +├── pyproject.toml # ├── README.md # Project README +├── requirements.txt └── src # Project source code └── {{ cookiecutter.python_package }} ├── __init.py__ @@ -77,9 +79,7 @@ Here is the layout of the project as a Cookiecutter template: ├── pipeline_registry.py ├── __main__.py └── settings.py - ├── requirements.txt - ├── pyproject.toml - └── tests +└── tests ``` diff --git a/docs/source/starters/index.md b/docs/source/starters/index.md index ef48c3c13d..84a088a91d 100644 --- a/docs/source/starters/index.md +++ b/docs/source/starters/index.md @@ -1,7 +1,7 @@ -# New project tools +# New project tools (title TBD) As you saw from the [First steps](../get_started/new_project.md) section, once you have [set up Kedro](../get_started/install.md), you can use `kedro new` to create a basic Kedro project containing project directories and basic code, which you can configure depending on the tooling and example code you need. -There are several ways to create a new Kedro project, which the pages in this section describe in detail. +There are options to the code you include when you create a new Kedro project, which the pages in this section describe in detail. ```{toctree} :maxdepth: 1 @@ -39,6 +39,5 @@ project_name: My First Kedro Project repo_name: testing-kedro python_package: test_kedro ``` - **Use `kedro new` with a `--starter`**
Alternatively, you can create a new Kedro project with a [starter](./starters.md) that adds a set of code for a common project use case. diff --git a/docs/source/starters/starters.md b/docs/source/starters/starters.md index afdfa62c11..924db091c4 100644 --- a/docs/source/starters/starters.md +++ b/docs/source/starters/starters.md @@ -34,6 +34,7 @@ kedro starter list The Kedro team maintains the following starters for a range of Kedro projects: * [`astro-airflow-iris`](https://github.com/kedro-org/kedro-starters/tree/main/astro-airflow-iris): An example project using the [Iris dataset](https://www.kaggle.com/uciml/iris) with a minimal setup for deploying the pipeline on Airflow with [Astronomer](https://www.astronomer.io/). +* [`databricks-iris`](https://github.com/kedro-org/kedro-starters/tree/main/databricks-iris): An example project using the [Iris dataset](https://www.kaggle.com/uciml/iris) with a setup for [Databricks](https://docs.kedro.org/en/stable/deployment/databricks/index.html) deployment. * [`spaceflights-pandas`](https://github.com/kedro-org/kedro-starters/tree/main/spaceflights-pandas): The [spaceflights tutorial](../tutorial/spaceflights_tutorial.md) example code with `pandas` datasets. * [`spaceflights-pandas-viz`](https://github.com/kedro-org/kedro-starters/tree/main/spaceflights-pandas-viz): The [spaceflights tutorial](../tutorial/spaceflights_tutorial.md) example code with `pandas` datasets and visualisation and experiment tracking `kedro-viz` features. * [`spaceflights-pyspark`](https://github.com/kedro-org/kedro-starters/tree/main/spaceflights-pyspark): The [spaceflights tutorial](../tutorial/spaceflights_tutorial.md) example code with `pyspark` datasets.