From fb385ef06ed854413dedaceb7d8795cc1fc3b9c6 Mon Sep 17 00:00:00 2001 From: Ankita Katiyar <110245118+ankatiyar@users.noreply.github.com> Date: Fri, 18 Aug 2023 16:57:18 +0100 Subject: [PATCH 01/11] Automatically trigger `kedro-starters` release on the release of `kedro` (#2889) * Add GA for triggering starters release Signed-off-by: Ankita Katiyar * Update token name Signed-off-by: Ankita Katiyar --------- Signed-off-by: Ankita Katiyar --- .github/workflows/release-starters.yml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 .github/workflows/release-starters.yml diff --git a/.github/workflows/release-starters.yml b/.github/workflows/release-starters.yml new file mode 100644 index 0000000000..36526bf4bd --- /dev/null +++ b/.github/workflows/release-starters.yml @@ -0,0 +1,22 @@ +name: Trigger kedro-starters Release + +on: + release: + types: [published] + +jobs: + trigger-release: + runs-on: ubuntu-latest + + steps: + - name: Get Latest Release Version + id: get_version + run: echo "version=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT + + - name: Trigger release in kedro-starters + uses: peter-evans/repository-dispatch@v2 + with: + token: ${{ secrets.GA_STARTERS_RELEASE }} + repository: kedro-org/kedro-starters + event-type: release-triggered + client-payload: '{"version": "${{ steps.get_version.outputs.version }}"}' From df3910bdc0033f060f53f6d181a39405f466ee4c Mon Sep 17 00:00:00 2001 From: Nok Lam Chan Date: Fri, 18 Aug 2023 17:46:52 +0100 Subject: [PATCH 02/11] Create issues_metrics.yml (#2814) * Create issues_metrics.yml * Update issues_metrics.yml --- .github/workflows/issues_metrics.yml | 50 ++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 .github/workflows/issues_metrics.yml diff --git a/.github/workflows/issues_metrics.yml b/.github/workflows/issues_metrics.yml new file mode 100644 index 0000000000..f1b0889fd7 --- /dev/null +++ b/.github/workflows/issues_metrics.yml @@ -0,0 +1,50 @@ +name: Monthly issue metrics +on: + workflow_dispatch: + schedule: + - cron: '3 2 1 * *' + +permissions: + issues: write + +jobs: + build: + name: issue metrics + runs-on: ubuntu-latest + steps: + + - name: Get dates for last month + shell: bash + run: | + # Get the current date + current_date=$(date +'%Y-%m-%d') + + # Calculate the previous month + previous_date=$(date -d "$current_date -1 month" +'%Y-%m-%d') + + # Extract the year and month from the previous date + previous_year=$(date -d "$previous_date" +'%Y') + previous_month=$(date -d "$previous_date" +'%m') + + # Calculate the first day of the previous month + first_day=$(date -d "$previous_year-$previous_month-01" +'%Y-%m-%d') + + # Calculate the last day of the previous month + last_day=$(date -d "$first_day +1 month -1 day" +'%Y-%m-%d') + + echo "$first_day..$last_day" + echo "last_month=$first_day..$last_day" >> "$GITHUB_ENV" + + - name: Run issue-metrics tool + uses: github/issue-metrics@v2 + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SEARCH_QUERY: 'repo:kedro-org/kedro is:issue created:${{ env.last_month }} -reason:"not planned"' + + - name: Create issue + uses: peter-evans/create-issue-from-file@v4 + with: + title: Monthly issue metrics report + token: ${{ secrets.GITHUB_TOKEN }} + content-filepath: ./issue_metrics.md + assignees: noklam From fa0e83071743ddeeb3c0274a555ff75dffa5355c Mon Sep 17 00:00:00 2001 From: "L. R. Couto" <57910428+lrcouto@users.noreply.github.com> Date: Fri, 18 Aug 2023 20:17:20 -0300 Subject: [PATCH 03/11] Clean up setuptools and wheel requirements to align with PEP-518 (#2927) --- .circleci/continue_config.yml | 3 --- .github/workflows/e2e-tests.yml | 1 - .github/workflows/pip-compile.yml | 1 - .github/workflows/unit-tests.yml | 1 - Makefile | 3 --- features/environment.py | 2 -- tools/circleci/requirements.txt | 1 - 7 files changed, 12 deletions(-) diff --git a/.circleci/continue_config.yml b/.circleci/continue_config.yml index c83d6615cb..c26fb2fbc0 100644 --- a/.circleci/continue_config.yml +++ b/.circleci/continue_config.yml @@ -48,9 +48,6 @@ commands: setup_requirements: steps: - - run: - name: Install pip setuptools - command: make install-pip-setuptools - run: name: Install venv for some pre-commit hooks command: conda install -y virtualenv diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index 0369e4b134..911498a102 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -22,7 +22,6 @@ jobs: uses: actions/setup-python@v3 with: python-version: ${{inputs.python-version}} - - run: make install-pip-setuptools - name: Cache python packages for Linux if: inputs.os == 'ubuntu-latest' uses: actions/cache@v3 diff --git a/.github/workflows/pip-compile.yml b/.github/workflows/pip-compile.yml index b5b1453782..fb30b49b1d 100644 --- a/.github/workflows/pip-compile.yml +++ b/.github/workflows/pip-compile.yml @@ -18,7 +18,6 @@ jobs: uses: actions/setup-python@v3 with: python-version: ${{inputs.python-version}} - - run: make install-pip-setuptools - name: Cache python packages for Linux if: inputs.os == 'ubuntu-latest' uses: actions/cache@v3 diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml index c56a67c707..347940ea86 100644 --- a/.github/workflows/unit-tests.yml +++ b/.github/workflows/unit-tests.yml @@ -17,7 +17,6 @@ jobs: uses: actions/setup-python@v3 with: python-version: ${{inputs.python-version}} - - run: make install-pip-setuptools - name: Cache python packages for Linux if: inputs.os == 'ubuntu-latest' uses: actions/cache@v3 diff --git a/Makefile b/Makefile index 2e8436390b..1036151fe8 100644 --- a/Makefile +++ b/Makefile @@ -7,9 +7,6 @@ clean: find . -regex ".*\.egg-info" -exec rm -rf {} + pre-commit clean || true -install-pip-setuptools: - python -m pip install -U "pip>=21.2, <23.2" "setuptools>=65.5.1" wheel - lint: pre-commit run -a --hook-stage manual $(hook) test: diff --git a/features/environment.py b/features/environment.py index 172dfd006a..95cc11cee2 100644 --- a/features/environment.py +++ b/features/environment.py @@ -106,8 +106,6 @@ def _setup_minimal_env(context): # pip==23.2 breaks pip-tools<7.0, and pip-tools>=7.0 does not support Python 3.7 "pip>=21.2,<23.2; python_version < '3.8'", "pip>=21.2; python_version >= '3.8'", - "setuptools>=65.5.1", - "wheel", ], env=context.env, ) diff --git a/tools/circleci/requirements.txt b/tools/circleci/requirements.txt index 224e670115..4317e05e69 100644 --- a/tools/circleci/requirements.txt +++ b/tools/circleci/requirements.txt @@ -1,3 +1,2 @@ pip>=21.2 -setuptools>=65.5.1 twine~=3.0 From 74b2a884b232df7f72446cd049dae4aaad04ab88 Mon Sep 17 00:00:00 2001 From: Nok Lam Chan Date: Mon, 21 Aug 2023 13:04:13 +0100 Subject: [PATCH 04/11] Clean up `kedro pipeline create` outdated docs (#2945) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * remove the README template generate by kedro pipeline create Signed-off-by: Nok * fix docstring for kedro catalog create Signed-off-by: Nok * Fix broken link Signed-off-by: Nok * fix broken link Signed-off-by: Nok --------- Signed-off-by: Nok Co-authored-by: Juan Luis Cano Rodríguez --- kedro/framework/cli/catalog.py | 2 +- .../README.md | 21 ------------------- ...eters_{{ cookiecutter.pipeline_name }}.yml | 2 +- .../cli/micropkg/test_micropkg_package.py | 2 -- .../cli/micropkg/test_micropkg_pull.py | 1 - 5 files changed, 2 insertions(+), 26 deletions(-) delete mode 100644 kedro/templates/pipeline/{{ cookiecutter.pipeline_name }}/README.md diff --git a/kedro/framework/cli/catalog.py b/kedro/framework/cli/catalog.py index 39da4dd979..b8849b5843 100644 --- a/kedro/framework/cli/catalog.py +++ b/kedro/framework/cli/catalog.py @@ -137,7 +137,7 @@ def create_catalog(metadata: ProjectMetadata, pipeline_name, env): the ``DataCatalog``. The catalog configuration will be saved to - `//catalog/.yml` file. + `//catalog_.yml` file. """ env = env or "base" session = _create_session(metadata.package_name, env=env) diff --git a/kedro/templates/pipeline/{{ cookiecutter.pipeline_name }}/README.md b/kedro/templates/pipeline/{{ cookiecutter.pipeline_name }}/README.md deleted file mode 100644 index 2ed430c018..0000000000 --- a/kedro/templates/pipeline/{{ cookiecutter.pipeline_name }}/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# Pipeline {{ cookiecutter.pipeline_name }} - -> *Note:* This is a `README.md` boilerplate generated using `Kedro {{ cookiecutter.kedro_version }}`. - -## Overview - - - -## Pipeline inputs - - - -## Pipeline outputs - - diff --git a/kedro/templates/pipeline/{{ cookiecutter.pipeline_name }}/config/parameters_{{ cookiecutter.pipeline_name }}.yml b/kedro/templates/pipeline/{{ cookiecutter.pipeline_name }}/config/parameters_{{ cookiecutter.pipeline_name }}.yml index c4242b73e6..cf8f0d70d6 100644 --- a/kedro/templates/pipeline/{{ cookiecutter.pipeline_name }}/config/parameters_{{ cookiecutter.pipeline_name }}.yml +++ b/kedro/templates/pipeline/{{ cookiecutter.pipeline_name }}/config/parameters_{{ cookiecutter.pipeline_name }}.yml @@ -2,4 +2,4 @@ # using Kedro {{ cookiecutter.kedro_version }}. # # Documentation for this file format can be found in "Parameters" -# Link: https://docs.kedro.org/en/{{ cookiecutter.kedro_version }}/kedro_project_setup/configuration.html#parameters +# Link: https://docs.kedro.org/en/{{ cookiecutter.kedro_version }}/configuration/parameters.html diff --git a/tests/framework/cli/micropkg/test_micropkg_package.py b/tests/framework/cli/micropkg/test_micropkg_package.py index 3207bb15f5..7c0674c6e1 100644 --- a/tests/framework/cli/micropkg/test_micropkg_package.py +++ b/tests/framework/cli/micropkg/test_micropkg_package.py @@ -30,7 +30,6 @@ def assert_sdist_contents_correct( expected_files = { f"{package_name}-{version}/{package_name}/__init__.py", - f"{package_name}-{version}/{package_name}/README.md", f"{package_name}-{version}/{package_name}/nodes.py", f"{package_name}-{version}/{package_name}/pipeline.py", f"{package_name}-{version}/{package_name}/config/parameters_{package_name}.yml", @@ -264,7 +263,6 @@ def test_package_micropkg_no_config( expected_files = { f"{PIPELINE_NAME}-{version}/{PIPELINE_NAME}/__init__.py", - f"{PIPELINE_NAME}-{version}/{PIPELINE_NAME}/README.md", f"{PIPELINE_NAME}-{version}/{PIPELINE_NAME}/nodes.py", f"{PIPELINE_NAME}-{version}/{PIPELINE_NAME}/pipeline.py", f"{PIPELINE_NAME}-{version}/tests/__init__.py", diff --git a/tests/framework/cli/micropkg/test_micropkg_pull.py b/tests/framework/cli/micropkg/test_micropkg_pull.py index 6a9a4073ae..3e40843449 100644 --- a/tests/framework/cli/micropkg/test_micropkg_pull.py +++ b/tests/framework/cli/micropkg/test_micropkg_pull.py @@ -51,7 +51,6 @@ def assert_package_files_exist(self, source_path): "__init__.py", "nodes.py", "pipeline.py", - "README.md", } @pytest.mark.parametrize("env", [None, "local"]) From c9fc80a2ba14d24910de904837b802db3f6c1283 Mon Sep 17 00:00:00 2001 From: Ankita Katiyar <110245118+ankatiyar@users.noreply.github.com> Date: Mon, 21 Aug 2023 16:06:15 +0100 Subject: [PATCH 05/11] Add globals feature for `OmegaConfigLoader` using a globals resolver (#2921) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Refactor load_and_merge_dir() Signed-off-by: Ankita Katiyar * Try adding globals resolver Signed-off-by: Ankita Katiyar * Minor change Signed-off-by: Ankita Katiyar * Add globals resolver Signed-off-by: Ankita Katiyar * Revert refactoring Signed-off-by: Ankita Katiyar * Add test + remove self.globals Signed-off-by: Ankita Katiyar * Allow for nested variables in globals Signed-off-by: Ankita Katiyar * Add documentation Signed-off-by: Ankita Katiyar * Typo Signed-off-by: Ankita Katiyar * Add error message + test Signed-off-by: Ankita Katiyar * Apply suggestions from code review Co-authored-by: Merel Theisen <49397448+merelcht@users.noreply.github.com> * Split test into multiple tests Signed-off-by: Ankita Katiyar * Restrict the globals config_patterns Signed-off-by: Ankita Katiyar * Release notes Signed-off-by: Ankita Katiyar * Update docs/source/configuration/advanced_configuration.md Co-authored-by: Merel Theisen <49397448+merelcht@users.noreply.github.com> * Add helpful error message for keys starting with _ Signed-off-by: Ankita Katiyar * Enable setting default value for globals resolver Signed-off-by: Ankita Katiyar * Typo Signed-off-by: Ankita Katiyar * Move test for keys starting with _ to the top Signed-off-by: Ankita Katiyar * Fix cross ref link in docs Signed-off-by: Ankita Katiyar --------- Signed-off-by: Ankita Katiyar Co-authored-by: Merel Theisen <49397448+merelcht@users.noreply.github.com> Co-authored-by: Juan Luis Cano Rodríguez Co-authored-by: Nok Lam Chan --- RELEASE.md | 2 + .../configuration/advanced_configuration.md | 35 ++++- .../configuration/configuration_basics.md | 5 +- docs/source/faq/faq.md | 1 + kedro/config/omegaconf_config.py | 37 ++++- tests/config/test_omegaconf_config.py | 126 ++++++++++++++++++ 6 files changed, 201 insertions(+), 5 deletions(-) diff --git a/RELEASE.md b/RELEASE.md index 169485d03e..bd338addd5 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -14,6 +14,8 @@ * Allowed registering of custom resolvers to `OmegaConfigLoader` through `CONFIG_LOADER_ARGS`. * Added support for Python 3.11. This includes tackling challenges like dependency pinning and test adjustments to ensure a smooth experience. Detailed migration tips are provided below for further context. * Added `kedro catalog resolve` CLI command that resolves dataset factories in the catalog with any explicit entries in the project pipeline. +* Added support for global variables to `OmegaConfigLoader`. + ## Bug fixes and other changes * Updated `kedro pipeline create` and `kedro catalog create` to use new `/conf` file structure. diff --git a/docs/source/configuration/advanced_configuration.md b/docs/source/configuration/advanced_configuration.md index 8e703b5bc2..6bf78d487e 100644 --- a/docs/source/configuration/advanced_configuration.md +++ b/docs/source/configuration/advanced_configuration.md @@ -34,7 +34,7 @@ folders: fea: "04_feature" ``` -To point your `TemplatedConfigLoader` to the globals file, add it to the the `CONFIG_LOADER_ARGS` variable in [`src//settings.py`](../kedro_project_setup/settings.md): +To point your `TemplatedConfigLoader` to the globals file, add it to the `CONFIG_LOADER_ARGS` variable in [`src//settings.py`](../kedro_project_setup/settings.md): ```python CONFIG_LOADER_ARGS = {"globals_pattern": "*globals.yml"} @@ -124,6 +124,7 @@ This section contains a set of guidance for advanced configuration requirements * [How to bypass the configuration loading rules](#how-to-bypass-the-configuration-loading-rules) * [How to use Jinja2 syntax in configuration](#how-to-use-jinja2-syntax-in-configuration) * [How to do templating with the `OmegaConfigLoader`](#how-to-do-templating-with-the-omegaconfigloader) +* [How to use global variables with the `OmegaConfigLoader`](#how-to-use-global-variables-with-the-omegaconfigloader) * [How to use resolvers in the `OmegaConfigLoader`](#how-to-use-resolvers-in-the-omegaconfigloader) * [How to load credentials through environment variables](#how-to-load-credentials-through-environment-variables) @@ -262,6 +263,38 @@ Since both of the file names (`catalog.yml` and `catalog_globals.yml`) match the #### Other configuration files It's also possible to use variable interpolation in configuration files other than parameters and catalog, such as custom spark or mlflow configuration. This works in the same way as variable interpolation in parameter files. You can still use the underscore for the templated values if you want, but it's not mandatory like it is for catalog files. +### How to use global variables with the `OmegaConfigLoader` +From Kedro `0.18.13`, you can use variable interpolation in your configurations using "globals" with `OmegaConfigLoader`. +The benefit of using globals over regular variable interpolation is that the global variables are shared across different configuration types, such as catalog and parameters. +By default, these global variables are assumed to be in files called `globals.yml` in any of your environments. If you want to configure the naming patterns for the files that contain your global variables, +you can do so [by overwriting the `globals` key in `config_patterns`](#how-to-change-which-configuration-files-are-loaded). You can also [bypass the configuration loading](#how-to-bypass-the-configuration-loading-rules) +to directly set the global variables in `OmegaConfigLoader`. + +Suppose you have global variables located in the file `conf/base/globals.yml`: +```yaml +my_global_value: 45 +dataset_type: + csv: pandas.CSVDataSet +``` +You can access these global variables in your catalog or parameters config files with a `globals` resolver like this: +`conf/base/parameters.yml`: +```yaml +my_param : "${globals:my_global_value}" +``` +`conf/base/catalog.yml`: +```yaml +companies: + filepath: data/01_raw/companies.csv + type: "${globals:dataset_type.csv}" +``` +You can also provide a default value to be used in case the global variable does not exist: +```yaml +my_param: "${globals: nonexistent_global, 23}" +``` +If there are duplicate keys in the globals files in your base and run time environments, the values in the run time environment +will overwrite the values in your base environment. + + ### How to use resolvers in the `OmegaConfigLoader` Instead of hard-coding values in your configuration files, you can also dynamically compute them using [`OmegaConf`'s resolvers functionality](https://omegaconf.readthedocs.io/en/2.3_branch/custom_resolvers.html#resolvers). You use resolvers to define custom diff --git a/docs/source/configuration/configuration_basics.md b/docs/source/configuration/configuration_basics.md index 2e964b512f..9e133f0e5e 100644 --- a/docs/source/configuration/configuration_basics.md +++ b/docs/source/configuration/configuration_basics.md @@ -61,7 +61,7 @@ Configuration files will be matched according to file name and type rules. Suppo ### Configuration patterns Under the hood, the Kedro configuration loader loads files based on regex patterns that specify the naming convention for configuration files. These patterns are specified by `config_patterns` in the configuration loader classes. -By default those patterns are set as follows for the configuration of catalog, parameters, logging and credentials: +By default those patterns are set as follows for the configuration of catalog, parameters, logging, credentials, and globals: ```python config_patterns = { @@ -69,10 +69,11 @@ config_patterns = { "parameters": ["parameters*", "parameters*/**", "**/parameters*"], "credentials": ["credentials*", "credentials*/**", "**/credentials*"], "logging": ["logging*", "logging*/**", "**/logging*"], + "globals": ["globals*", "globals*/**", "**/globals*"], } ``` -If you want to change change the way configuration is loaded, you can either [customise the config patterns](advanced_configuration.md#how-to-change-which-configuration-files-are-loaded) or [bypass the configuration loading](advanced_configuration.md#how-to-bypass-the-configuration-loading-rules) as described in the advanced configuration chapter. +If you want to change the way configuration is loaded, you can either [customise the config patterns](advanced_configuration.md#how-to-change-which-configuration-files-are-loaded) or [bypass the configuration loading](advanced_configuration.md#how-to-bypass-the-configuration-loading-rules) as described in the advanced configuration chapter. ## How to use Kedro configuration diff --git a/docs/source/faq/faq.md b/docs/source/faq/faq.md index 23cfa6b094..30bd2a1929 100644 --- a/docs/source/faq/faq.md +++ b/docs/source/faq/faq.md @@ -36,6 +36,7 @@ This is a growing set of technical FAQs. The [product FAQs on the Kedro website] * [How do I bypass the configuration loading rules](../configuration/advanced_configuration.md#how-to-bypass-the-configuration-loading-rules)? * [How do I use Jinja2 syntax in configuration](../configuration/advanced_configuration.md#how-to-use-jinja2-syntax-in-configuration)? * [How do I do templating with the `OmegaConfigLoader`](../configuration/advanced_configuration.md#how-to-do-templating-with-the-omegaconfigloader)? +* [How to use global variables with the `OmegaConfigLoader`](../configuration/advanced_configuration.md#how-to-use-global-variables-with-the-omegaconfigloader)? * [How do I use resolvers in the `OmegaConfigLoader`](../configuration/advanced_configuration.md#how-to-use-resolvers-in-the-omegaconfigloader)? * [How do I load credentials through environment variables](../configuration/advanced_configuration.md#how-to-load-credentials-through-environment-variables)? diff --git a/kedro/config/omegaconf_config.py b/kedro/config/omegaconf_config.py index 4d2ace59d4..0d7b5d740c 100644 --- a/kedro/config/omegaconf_config.py +++ b/kedro/config/omegaconf_config.py @@ -11,6 +11,7 @@ import fsspec from omegaconf import OmegaConf +from omegaconf.errors import InterpolationResolutionError from omegaconf.resolvers import oc from yaml.parser import ParserError from yaml.scanner import ScannerError @@ -109,6 +110,7 @@ def __init__( # noqa: too-many-arguments "parameters": ["parameters*", "parameters*/**", "**/parameters*"], "credentials": ["credentials*", "credentials*/**", "**/credentials*"], "logging": ["logging*", "logging*/**", "**/logging*"], + "globals": ["globals.yml"], } self.config_patterns.update(config_patterns or {}) @@ -117,7 +119,8 @@ def __init__( # noqa: too-many-arguments # Register user provided custom resolvers if custom_resolvers: self._register_new_resolvers(custom_resolvers) - + # Register globals resolver + self._register_globals_resolver() file_mimetype, _ = mimetypes.guess_type(conf_source) if file_mimetype == "application/x-tar": self._protocol = "tar" @@ -199,7 +202,7 @@ def __getitem__(self, key) -> dict[str, Any]: config.update(env_config) - if not processed_files: + if not processed_files and key != "globals": raise MissingConfigException( f"No files of YAML or JSON format found in {base_path} or {env_path} matching" f" the glob pattern(s): {[*self.config_patterns[key]]}" @@ -308,6 +311,36 @@ def _is_valid_config_path(self, path): ".json", ] + def _register_globals_resolver(self): + """Register the globals resolver""" + OmegaConf.register_new_resolver( + "globals", + lambda variable, default_value=None: self._get_globals_value( + variable, default_value + ), + replace=True, + ) + + def _get_globals_value(self, variable, default_value): + """Return the globals values to the resolver""" + if variable.startswith("_"): + raise InterpolationResolutionError( + "Keys starting with '_' are not supported for globals." + ) + keys = variable.split(".") + value = self["globals"] + for k in keys: + value = value.get(k) + if not value: + if default_value: + _config_logger.debug( + f"Using the default value for the global variable {variable}." + ) + return default_value + msg = f"Globals key '{variable}' not found and no default value provided. " + raise InterpolationResolutionError(msg) + return value + @staticmethod def _register_new_resolvers(resolvers: dict[str, Callable]): """Register custom resolvers""" diff --git a/tests/config/test_omegaconf_config.py b/tests/config/test_omegaconf_config.py index af57b52224..948aac7372 100644 --- a/tests/config/test_omegaconf_config.py +++ b/tests/config/test_omegaconf_config.py @@ -12,6 +12,7 @@ import pytest import yaml from omegaconf import OmegaConf, errors +from omegaconf.errors import InterpolationResolutionError from omegaconf.resolvers import oc from yaml.parser import ParserError @@ -671,3 +672,128 @@ def test_custom_resolvers(self, tmp_path): assert conf["parameters"]["model_options"]["param1"] == 7 assert conf["parameters"]["model_options"]["param2"] == 3 assert conf["parameters"]["model_options"]["param3"] == "my_env_variable" + + def test_globals(self, tmp_path): + globals_params = tmp_path / _BASE_ENV / "globals.yml" + globals_config = { + "x": 34, + } + _write_yaml(globals_params, globals_config) + conf = OmegaConfigLoader(tmp_path, default_run_env="") + # OmegaConfigLoader has globals resolver + assert OmegaConf.has_resolver("globals") + # Globals is readable in a dict way + assert conf["globals"] == globals_config + + def test_globals_resolution(self, tmp_path): + base_params = tmp_path / _BASE_ENV / "parameters.yml" + base_catalog = tmp_path / _BASE_ENV / "catalog.yml" + globals_params = tmp_path / _BASE_ENV / "globals.yml" + param_config = { + "my_param": "${globals:x}", + "my_param_default": "${globals:y,34}", # y does not exist in globals + } + catalog_config = { + "companies": { + "type": "${globals:dataset_type}", + "filepath": "data/01_raw/companies.csv", + }, + } + globals_config = {"x": 34, "dataset_type": "pandas.CSVDataSet"} + _write_yaml(base_params, param_config) + _write_yaml(globals_params, globals_config) + _write_yaml(base_catalog, catalog_config) + conf = OmegaConfigLoader(tmp_path, default_run_env="") + assert OmegaConf.has_resolver("globals") + # Globals are resolved correctly in parameter + assert conf["parameters"]["my_param"] == globals_config["x"] + # The default value is used if the key does not exist + assert conf["parameters"]["my_param_default"] == 34 + # Globals are resolved correctly in catalog + assert conf["catalog"]["companies"]["type"] == globals_config["dataset_type"] + + def test_globals_nested(self, tmp_path): + base_params = tmp_path / _BASE_ENV / "parameters.yml" + globals_params = tmp_path / _BASE_ENV / "globals.yml" + param_config = { + "my_param": "${globals:x}", + "my_nested_param": "${globals:nested.y}", + } + globals_config = { + "x": 34, + "nested": { + "y": 42, + }, + } + _write_yaml(base_params, param_config) + _write_yaml(globals_params, globals_config) + conf = OmegaConfigLoader(tmp_path, default_run_env="") + assert conf["parameters"]["my_param"] == globals_config["x"] + # Nested globals are accessible with dot notation + assert conf["parameters"]["my_nested_param"] == globals_config["nested"]["y"] + + def test_globals_across_env(self, tmp_path): + base_params = tmp_path / _BASE_ENV / "parameters.yml" + local_params = tmp_path / _DEFAULT_RUN_ENV / "parameters.yml" + base_globals = tmp_path / _BASE_ENV / "globals.yml" + local_globals = tmp_path / _DEFAULT_RUN_ENV / "globals.yml" + base_param_config = { + "param1": "${globals:y}", + } + local_param_config = { + "param2": "${globals:x}", + } + base_globals_config = { + "x": 34, + "y": 25, + } + local_globals_config = { + "y": 99, + } + _write_yaml(base_params, base_param_config) + _write_yaml(local_params, local_param_config) + _write_yaml(base_globals, base_globals_config) + _write_yaml(local_globals, local_globals_config) + conf = OmegaConfigLoader(tmp_path) + # Local global overwrites the base global value + assert conf["parameters"]["param1"] == local_globals_config["y"] + # Base global value is accessible to local params + assert conf["parameters"]["param2"] == base_globals_config["x"] + + def test_bad_globals(self, tmp_path): + base_params = tmp_path / _BASE_ENV / "parameters.yml" + base_globals = tmp_path / _BASE_ENV / "globals.yml" + base_param_config = { + "param1": "${globals:x.y}", + } + base_globals_config = { + "x": { + "z": 23, + }, + } + _write_yaml(base_params, base_param_config) + _write_yaml(base_globals, base_globals_config) + conf = OmegaConfigLoader(tmp_path, default_run_env="") + with pytest.raises( + InterpolationResolutionError, + match=r"Globals key 'x.y' not found and no default value provided.", + ): + conf["parameters"]["param1"] + + def test_bad_globals_underscore(self, tmp_path): + base_params = tmp_path / _BASE_ENV / "parameters.yml" + base_globals = tmp_path / _BASE_ENV / "globals.yml" + base_param_config = { + "param2": "${globals:_ignore}", + } + base_globals_config = { + "_ignore": 45, + } + _write_yaml(base_params, base_param_config) + _write_yaml(base_globals, base_globals_config) + conf = OmegaConfigLoader(tmp_path, default_run_env="") + with pytest.raises( + InterpolationResolutionError, + match=r"Keys starting with '_' are not supported for globals.", + ): + conf["parameters"]["param2"] From 4563a4c609cf808e9087561af5619f143ba3fcff Mon Sep 17 00:00:00 2001 From: Deepyaman Datta Date: Tue, 22 Aug 2023 03:06:45 -0600 Subject: [PATCH 06/11] Consolidate two `ruff-pre-commit` entries into one (#2881) * Clean up Ruff configuration in base pyproject.toml Signed-off-by: Deepyaman Datta * Consolidate two `ruff-pre-commit` entries into one Signed-off-by: Deepyaman Datta * Move Ruff hook to the top, because it's aggressive Signed-off-by: Deepyaman Datta * Add `kedro` as `known-first-party` for `isort` run Signed-off-by: Deepyaman Datta * Add noqa in docs/source/conf.py Signed-off-by: Deepyaman Datta * Fix ruff linter precommit config Signed-off-by: Nok --------- Signed-off-by: Deepyaman Datta Signed-off-by: Nok Co-authored-by: Nok --- .pre-commit-config.yaml | 29 +++++++++-------------------- docs/source/conf.py | 2 +- kedro/framework/cli/micropkg.py | 2 +- pyproject.toml | 20 ++++++++++++-------- 4 files changed, 23 insertions(+), 30 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 57bafd2416..ba9bf87df2 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -4,6 +4,15 @@ default_stages: [commit, manual] repos: + - repo: https://github.com/astral-sh/ruff-pre-commit + # Ruff version. + rev: v0.0.277 + hooks: + - id: ruff + name: "ruff on kedro/, tests/ and docs/" + args: ["--fix", "--exit-non-zero-on-fix"] + exclude: "^kedro/templates/|^features/steps/test_starter/" + - repo: https://github.com/pre-commit/pre-commit-hooks rev: v2.2.3 hooks: @@ -48,26 +57,6 @@ repos: additional_dependencies: [black~=22.0] entry: blacken-docs --skip-errors - - repo: https://github.com/astral-sh/ruff-pre-commit - # Ruff version. - rev: v0.0.277 - hooks: - - id: ruff - name: "ruff on kedro/" - args: ["--fix", "--show-fixes", "--exit-non-zero-on-fix"] - exclude: "^kedro/templates/|^features/steps/test_starter/|tests|docs" - - repo: https://github.com/astral-sh/ruff-pre-commit - # Ruff version. - rev: v0.0.277 - hooks: - - id: ruff - name: "ruff on tests/ and docs/" - # PLR2004: Magic value used - # PLR0913: Too many arguments - args: ["--fix", "--show-fixes", "--exit-non-zero-on-fix", "--ignore=PLR2004,PLR0913"] - # include: "tests" - exclude: "^kedro/templates/|^features/steps/test_starter/|kedro" - - repo: local hooks: - id: black diff --git a/docs/source/conf.py b/docs/source/conf.py index 804bbbbfa9..4519143968 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -464,7 +464,7 @@ def autolink_classes_and_methods(lines): lines[i] = re.sub(existing, rf"{replacement}", lines[i]) -def autodoc_process_docstring(app, what, name, obj, options, lines): +def autodoc_process_docstring(app, what, name, obj, options, lines): # noqa: PLR0913 try: # guarded method to make sure build never fails log_suggestions(lines, name) diff --git a/kedro/framework/cli/micropkg.py b/kedro/framework/cli/micropkg.py index 36d103a332..f42ea0edbf 100644 --- a/kedro/framework/cli/micropkg.py +++ b/kedro/framework/cli/micropkg.py @@ -1,5 +1,5 @@ """A collection of CLI commands for working with Kedro micro-packages.""" -# ruff: noqa: I001 # https://github.com/kedro-org/kedro/pull/2634 +# ruff: noqa: I001 from __future__ import annotations import logging diff --git a/pyproject.toml b/pyproject.toml index df3bf4a2fe..0421e10093 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -206,14 +206,18 @@ ignore_imports = [ [tool.ruff] line-length = 88 show-fixes = true -# select = ["A", "B", "C", "E", "F", "G", "I", "N", "Q", "S", "T", "W", "ARG", "BLE", "COM", "DJ", "DTZ", "EM", "ERA", "EXE", "FBT", "ICN", "INP", "ISC", "NPY", "PD", "PGH", "PIE", "PL", "PT", "PTH", "PYI", "RET", "RSE", "RUF", "SIM", "SLF", "TCH", "TID", "TRY", "UP", "YTT"] select = [ - "F", # Pyflakes - "E", # Pycodestyle - "W", # Pycodestyle + "F", # Pyflakes + "W", # pycodestyle + "E", # pycodestyle + "I", # isort "UP", # pyupgrade - "I", # isort - "PL", # Pylint + "PL", # Pylint ] -ignore = ["E501"] # Black take care off line-too-long -unfixable = [] +ignore = ["E501"] # Black takes care of line-too-long + +[tool.ruff.isort] +known-first-party = ["kedro"] + +[tool.ruff.per-file-ignores] +"{tests,docs}/*" = ["PLR2004","PLR0913"] From ce24b3db4a70611feeca19f6cb07418d55c661ef Mon Sep 17 00:00:00 2001 From: Ankita Katiyar <110245118+ankatiyar@users.noreply.github.com> Date: Tue, 22 Aug 2023 14:46:10 +0100 Subject: [PATCH 07/11] Fix typos across the documentation (#2956) * Fix typos across docs Signed-off-by: Ankita Katiyar * Capitalisation stuff Signed-off-by: Ankita Katiyar --------- Signed-off-by: Ankita Katiyar --- docs/source/data/index.md | 2 +- docs/source/data/partitioned_and_incremental_datasets.md | 4 ++-- .../deployment/databricks/databricks_deployment_workflow.md | 6 +++--- .../databricks/databricks_notebooks_development_workflow.md | 4 ++-- docs/source/development/commands_reference.md | 2 +- docs/source/experiment_tracking/index.md | 2 +- docs/source/extend_kedro/architecture_overview.md | 2 +- 7 files changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/source/data/index.md b/docs/source/data/index.md index b90a3d9961..a6196bcc13 100644 --- a/docs/source/data/index.md +++ b/docs/source/data/index.md @@ -22,7 +22,7 @@ The following page offers a range of examples of YAML specification for various data_catalog_yaml_examples ``` -Once you are familiar with the format of `catalog.yml`, you may find your catalog gets repetitive if you need to load multiple datasets with similar configuration. From Kedro 0.18.12 you can use dataset factories to generalise the configuration and reduce the number of similar catalog entries. This works by by matching datasets used in your project’s pipelines to dataset factory patterns and is explained in a new page about Kedro dataset factories: +Once you are familiar with the format of `catalog.yml`, you may find your catalog gets repetitive if you need to load multiple datasets with similar configuration. From Kedro 0.18.12 you can use dataset factories to generalise the configuration and reduce the number of similar catalog entries. This works by matching datasets used in your project’s pipelines to dataset factory patterns and is explained in a new page about Kedro dataset factories: ```{toctree} diff --git a/docs/source/data/partitioned_and_incremental_datasets.md b/docs/source/data/partitioned_and_incremental_datasets.md index fde9dfd90a..a57b56d2a4 100644 --- a/docs/source/data/partitioned_and_incremental_datasets.md +++ b/docs/source/data/partitioned_and_incremental_datasets.md @@ -75,12 +75,12 @@ my_partitioned_dataset: Here is an exhaustive list of the arguments supported by `PartitionedDataset`: | Argument | Required | Supported types | Description | -| ----------------- | ------------------------------ | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| ----------------- | ------------------------------ | ------------------------------------------------ |-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `path` | Yes | `str` | Path to the folder containing partitioned data. If path starts with the protocol (e.g., `s3://`) then the corresponding `fsspec` concrete filesystem implementation will be used. If protocol is not specified, local filesystem will be used | | `dataset` | Yes | `str`, `Type[AbstractDataset]`, `Dict[str, Any]` | Underlying dataset definition, for more details see the section below | | `credentials` | No | `Dict[str, Any]` | Protocol-specific options that will be passed to `fsspec.filesystemcall`, for more details see the section below | | `load_args` | No | `Dict[str, Any]` | Keyword arguments to be passed into `find()` method of the corresponding filesystem implementation | -| `filepath_arg` | No | `str` (defaults to `filepath`) | Argument name of the underlying dataset initializer that will contain a path to an individual partition | +| `filepath_arg` | No | `str` (defaults to `filepath`) | Argument name of the underlying dataset initialiser that will contain a path to an individual partition | | `filename_suffix` | No | `str` (defaults to an empty string) | If specified, partitions that don't end with this string will be ignored | ### Dataset definition diff --git a/docs/source/deployment/databricks/databricks_deployment_workflow.md b/docs/source/deployment/databricks/databricks_deployment_workflow.md index 245708e6bf..26c7a1634b 100644 --- a/docs/source/deployment/databricks/databricks_deployment_workflow.md +++ b/docs/source/deployment/databricks/databricks_deployment_workflow.md @@ -33,7 +33,7 @@ For those reasons, the packaging approach is unsuitable for development projects The sequence of steps described in this section is as follows: 1. [Note your Databricks username and host](#note-your-databricks-username-and-host) -2. [Install Kedro and the databricks CLI in a new virtual environment](#install-kedro-and-the-databricks-cli-in-a-new-virtual-environment) +2. [Install Kedro and the Databricks CLI in a new virtual environment](#install-kedro-and-the-databricks-cli-in-a-new-virtual-environment) 3. [Authenticate the Databricks CLI](#authenticate-the-databricks-cli) 4. [Create a new Kedro project](#create-a-new-kedro-project) 5. [Create an entry point for Databricks](#create-an-entry-point-for-databricks) @@ -49,10 +49,10 @@ Find your Databricks username in the top right of the workspace UI and the host ![Find Databricks host and username](../../meta/images/find_databricks_host_and_username.png) ```{note} -Your databricks host must include the protocol (`https://`). +Your Databricks host must include the protocol (`https://`). ``` -### Install Kedro and the databricks CLI in a new virtual environment +### Install Kedro and the Databricks CLI in a new virtual environment The following commands will create a new `conda` environment, activate it, and then install Kedro and the Databricks CLI. diff --git a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md index 5867163ab9..ef2081a28a 100644 --- a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md +++ b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md @@ -4,7 +4,7 @@ This guide demonstrates a workflow for developing Kedro projects on Databricks u This method of developing a Kedro project for use on Databricks is ideal for developers who prefer developing their projects in notebooks rather than an in an IDE. It also avoids the overhead of setting up and syncing a local environment with Databricks. If you want to take advantage of the powerful features of an IDE to develop your project, consider following the [guide for developing a Kedro project for Databricks using your local environment](./databricks_ide_development_workflow.md). -In this guide, you will store your project's code in a repository on [GitHub](https://github.com/). Databricks integrates with many [Git providers](https://docs.databricks.com/repos/index.html#supported-git-providers), including GitLab and Azure Devops. The steps to create a Git repository and sync it with Databricks also generally apply to these Git providers, though the exact details may vary. +In this guide, you will store your project's code in a repository on [GitHub](https://github.com/). Databricks integrates with many [Git providers](https://docs.databricks.com/repos/index.html#supported-git-providers), including GitLab and Azure DevOps. The steps to create a Git repository and sync it with Databricks also generally apply to these Git providers, though the exact details may vary. ## What this page covers @@ -263,7 +263,7 @@ Now that your project has run successfully once, you can make changes using the The `databricks-iris` starter uses a default 80-20 ratio of training data to test data when training the classifier. You will edit this ratio to 70-30 and re-run your project to view the different result. -In the Databricks workspace, click on the `Repos` tab in the side bar and navigate to `/iris-databricks/conf/base/`. Open the the file `parameters.yml` by double-clicking it. This will take you to a built-in file editor. Edit the line `train_fraction: 0.8` to `train_fraction: 0.7`, your changes will automatically be saved. +In the Databricks workspace, click on the `Repos` tab in the side bar and navigate to `/iris-databricks/conf/base/`. Open the file `parameters.yml` by double-clicking it. This will take you to a built-in file editor. Edit the line `train_fraction: 0.8` to `train_fraction: 0.7`, your changes will automatically be saved. ![Databricks edit file](../../meta/images/databricks_edit_file.png) diff --git a/docs/source/development/commands_reference.md b/docs/source/development/commands_reference.md index adf3db84c3..ded8da9dcc 100644 --- a/docs/source/development/commands_reference.md +++ b/docs/source/development/commands_reference.md @@ -446,7 +446,7 @@ kedro micropkg package Further information is available in the [micro-packaging documentation](../nodes_and_pipelines/micro_packaging.md). ##### Pull a micro-package in your project -The following command pulls all the files related to a micro-package, e.g. a modular pipeline, from either [Pypi](https://pypi.org/) or a storage location of a [Python source distribution file](https://packaging.python.org/overview/#python-source-distributions). +The following command pulls all the files related to a micro-package, e.g. a modular pipeline, from either [PyPI](https://pypi.org/) or a storage location of a [Python source distribution file](https://packaging.python.org/overview/#python-source-distributions). ```bash kedro micropkg pull (or path to a sdist file) diff --git a/docs/source/experiment_tracking/index.md b/docs/source/experiment_tracking/index.md index 31bff89ee2..3004fe28e0 100644 --- a/docs/source/experiment_tracking/index.md +++ b/docs/source/experiment_tracking/index.md @@ -32,7 +32,7 @@ Kedro-Viz version 6.2 includes support for collaborative experiment tracking usi The choice of experiment tracking tool depends on your use case and choice of complementary tools, such as MLflow and Neptune: - **Kedro** - If you need experiment tracking, are looking for improved metrics visualisation and want a lightweight tool to work alongside existing functionality in Kedro. Kedro does not support a model registry. -- **MLflow** - You can combine MLFlow with Kedro by using [`kedro-mlflow`](https://kedro-mlflow.readthedocs.io/en/stable/) if you require experiment tracking, model registry and/or model serving capabilities or have access to Managed MLflow within the Databricks ecosystem. +- **MLflow** - You can combine MLflow with Kedro by using [`kedro-mlflow`](https://kedro-mlflow.readthedocs.io/en/stable/) if you require experiment tracking, model registry and/or model serving capabilities or have access to Managed MLflow within the Databricks ecosystem. - **Neptune** - If you require experiment tracking and model registry functionality, improved visualisation of metrics and support for collaborative data science, you may consider [`kedro-neptune`](https://docs.neptune.ai/integrations/kedro/) for your workflow. [We support a growing list of integrations](../extend_kedro/plugins.md). diff --git a/docs/source/extend_kedro/architecture_overview.md b/docs/source/extend_kedro/architecture_overview.md index 272fcef572..44d046fd02 100644 --- a/docs/source/extend_kedro/architecture_overview.md +++ b/docs/source/extend_kedro/architecture_overview.md @@ -3,7 +3,7 @@ There are different ways to leverage Kedro in your work, you can: - Commit to using all of Kedro (framework, project, starters and library); which is preferable to take advantage of the full value proposition of Kedro - - You can leverage parts of Kedro, like the DataCatalog (I/O), ConfigLoader, Pipelines and Runner, by using it as a Python libary; this best supports a workflow where you don't want to adopt the Kedro project template + - You can leverage parts of Kedro, like the DataCatalog (I/O), ConfigLoader, Pipelines and Runner, by using it as a Python library; this best supports a workflow where you don't want to adopt the Kedro project template - Or, you can develop extensions for Kedro e.g. custom starters, plugins, Hooks and more At a high level, Kedro consists of five main parts: From 7065cac70b5ab128314aa9c7e2ec84b5a5b3b660 Mon Sep 17 00:00:00 2001 From: Ankita Katiyar <110245118+ankatiyar@users.noreply.github.com> Date: Tue, 22 Aug 2023 16:58:01 +0100 Subject: [PATCH 08/11] Setup Vale linter as a GHA workflow (#2953) * Add vale GHA Signed-off-by: Ankita Katiyar * Update condition Signed-off-by: Ankita Katiyar * Update .github/styles/Kedro/ignore.txt Co-authored-by: Jo Stichbury * add some styles Signed-off-by: Jo Stichbury * Remove styles for now Signed-off-by: Ankita Katiyar --------- Signed-off-by: Ankita Katiyar Signed-off-by: Jo Stichbury Co-authored-by: Jo Stichbury --- .github/styles/Kedro/Spellings.yml | 6 ++ .github/styles/Kedro/ignore-names.txt | 111 +++++++++++++++++++++ .github/styles/Kedro/ignore.txt | 31 ++++++ .github/workflows/docs-language-linter.yml | 16 +++ .github/workflows/docs-only-checks.yml | 2 +- .vale.ini | 7 ++ 6 files changed, 172 insertions(+), 1 deletion(-) create mode 100644 .github/styles/Kedro/Spellings.yml create mode 100644 .github/styles/Kedro/ignore-names.txt create mode 100644 .github/styles/Kedro/ignore.txt create mode 100644 .github/workflows/docs-language-linter.yml create mode 100644 .vale.ini diff --git a/.github/styles/Kedro/Spellings.yml b/.github/styles/Kedro/Spellings.yml new file mode 100644 index 0000000000..00a486ff0d --- /dev/null +++ b/.github/styles/Kedro/Spellings.yml @@ -0,0 +1,6 @@ +extends: spelling +message: "Did you really mean '%s'?" +level: warning +ignore: + - Kedro/ignore.txt + - Kedro/ignore-names.txt diff --git a/.github/styles/Kedro/ignore-names.txt b/.github/styles/Kedro/ignore-names.txt new file mode 100644 index 0000000000..6ab1616c02 --- /dev/null +++ b/.github/styles/Kedro/ignore-names.txt @@ -0,0 +1,111 @@ +Ahdra +Aris +Alves +Alam +Andrew +Andrii +Anton +Antony +Ankita +Batori +Braccialli +Brummitt +Cano +Carvalho +Cvetanka +Czakon +Chan +Comym +Couto +Daiha +Dada +Danov +Datta +DeBold +Deepyaman +Deriabin +Diaz +Dmitrii +Dmitry +Emamjome +Erins +Gabriel +Gundaniya +Guilherme +Hamza +Hoang +Holzer +Huong +Helmhold +Ignacio +Ivaniuk +Ivan +Jakub +Jannic +Jankowski +Jitendra +Jiri +Jo +Joel +Juan +Kadiri +Kaiser +Kaltsas +Kanchwala +Katiyar +Khan +Kirilenko +Kiyohito +Klein +Kunii +Kumar +Lais +Laura +Liam +Lim +Lorena +Machado +Mackay +Malte +Malloy +Marcin +Meisam +Merali +Merel +Milne +Nasef +Nechevska +Nero +Nguyen +Nikolaos +Nikolic +Nok +Okwa +Oza +Paricio +Patel +Peteris +Pilla +Rashida +Ravi +Richard +Schwarzmann +Sorokin +Stichbury +Susanna +Sajid +Stephanie +Takieddine +Theisen +Tynan +Tsaousis +Valtazanos +Vladimir +Waylon +Westenra +Wong +Wrigley +Yolan +Yetunde +Zablocki +Zain diff --git a/.github/styles/Kedro/ignore.txt b/.github/styles/Kedro/ignore.txt new file mode 100644 index 0000000000..6ede60d83b --- /dev/null +++ b/.github/styles/Kedro/ignore.txt @@ -0,0 +1,31 @@ +Kedro +Kedro's +Kubeflow +Databricks +Conda +conda +Cookiecutter +config +fsspec +Kaggle +namespace +namespaces +namespaced +regressors +repo +Repo +dbx +MLflow +csv +yaml +matplotlib +Matplotlib +IPython +APIs +networkx +Plotly +Pylint +SQLAlchemy +Astro +Xebia +pytest diff --git a/.github/workflows/docs-language-linter.yml b/.github/workflows/docs-language-linter.yml new file mode 100644 index 0000000000..02b60b7324 --- /dev/null +++ b/.github/workflows/docs-language-linter.yml @@ -0,0 +1,16 @@ +name: Language Linter for Kedro Docs +on: + pull_request: + paths: + - "docs/**" + - '**.md' + +jobs: + vale: + name: runner / vale + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: errata-ai/vale-action@reviewdog + with: + reporter: github-pr-review diff --git a/.github/workflows/docs-only-checks.yml b/.github/workflows/docs-only-checks.yml index b7940e85be..d13a76c589 100644 --- a/.github/workflows/docs-only-checks.yml +++ b/.github/workflows/docs-only-checks.yml @@ -17,7 +17,7 @@ on: - '**.md' jobs: - lint-tests: + lint: strategy: matrix: os: [ ubuntu-latest ] diff --git a/.vale.ini b/.vale.ini new file mode 100644 index 0000000000..7d486713e7 --- /dev/null +++ b/.vale.ini @@ -0,0 +1,7 @@ +StylesPath = .github/styles + +MinAlertLevel = suggestion + +[*.md] +BasedOnStyles = Vale, Kedro +Vale.Spelling = NO From 5925b0356ec2a3c922e042154d63725af25db3fa Mon Sep 17 00:00:00 2001 From: Jo Stichbury Date: Wed, 23 Aug 2023 12:50:24 +0100 Subject: [PATCH 09/11] Fix README to show graphics on PyPI (#2961) * Fix for PyPI Signed-off-by: Jo Stichbury * Few more tweaks Signed-off-by: Jo Stichbury * Few more tweaks Signed-off-by: Jo Stichbury * Few more tweaks Signed-off-by: Jo Stichbury * Few more tweaks Signed-off-by: Jo Stichbury * Update README.md * Update README.md --------- Signed-off-by: Jo Stichbury --- README.md | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index f329a8331f..cd3f8683ad 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -![Kedro Logo Banner - Light](.github/demo-dark.png#gh-dark-mode-only) -![Kedro Logo Banner - Dark](.github/demo-light.png#gh-light-mode-only) +![Kedro Logo Banner - Light](https://raw.githubusercontent.com/kedro-org/kedro/main/.github/demo-dark.png#gh-dark-mode-only) +![Kedro Logo Banner - Dark](https://raw.githubusercontent.com/kedro-org/kedro/main/.github/demo-light.png#gh-light-mode-only) [![Python version](https://img.shields.io/badge/python-3.7%20%7C%203.8%20%7C%203.9%20%7C%203.10%20%7C%203.11-blue.svg)](https://pypi.org/project/kedro/) [![PyPI version](https://badge.fury.io/py/kedro.svg)](https://pypi.org/project/kedro/) [![Conda version](https://img.shields.io/conda/vn/conda-forge/kedro.svg)](https://anaconda.org/conda-forge/kedro) @@ -37,9 +37,6 @@ Our [Get Started guide](https://docs.kedro.org/en/stable/get_started/install.htm ## What are the main features of Kedro? -![Kedro-Viz Pipeline Visualisation](https://github.com/kedro-org/kedro-viz/blob/main/.github/img/banner.png) -_A pipeline visualisation generated using [Kedro-Viz](https://github.com/kedro-org/kedro-viz)_ - | Feature | What is this? | | -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Project Template | A standard, modifiable and easy-to-use project template based on [Cookiecutter Data Science](https://github.com/drivendata/cookiecutter-data-science/). | @@ -54,7 +51,15 @@ The [Kedro documentation](https://docs.kedro.org/en/stable/) first explains [how You can then review the [spaceflights tutorial](https://docs.kedro.org/en/stable/tutorial/spaceflights_tutorial.html) to build a Kedro project for hands-on experience -For new and intermediate Kedro users, there's a comprehensive section on [how to visualise Kedro projects using Kedro-Viz](https://docs.kedro.org/en/stable/visualisation/index.html) and [how to work with Kedro and Jupyter notebooks](https://docs.kedro.org/en/stable/notebooks_and_ipython/index.html). We also recommend the [API reference documentation](/kedro) for additional information. +For new and intermediate Kedro users, there's a comprehensive section on [how to visualise Kedro projects using Kedro-Viz](https://docs.kedro.org/en/stable/visualisation/index.html). + + +

+ + A pipeline visualisation generated using Kedro-Viz +

+ +Additional documentation explains [how to work with Kedro and Jupyter notebooks](https://docs.kedro.org/en/stable/notebooks_and_ipython/index.html), and there are a set of advanced user guides for advanced for key Kedro features. We also recommend the [API reference documentation](/kedro) for further information. ## Why does Kedro exist? From 15bba0ee3bc1aa12fc88af31e917b5354a2a80c1 Mon Sep 17 00:00:00 2001 From: Jo Stichbury Date: Wed, 23 Aug 2023 17:10:27 +0100 Subject: [PATCH 10/11] Add some Vale styles (#2963) * add some styles Signed-off-by: Jo Stichbury * Tweaks to styles Signed-off-by: Jo Stichbury * more tweaks Signed-off-by: Jo Stichbury * Revise some styles Signed-off-by: Jo Stichbury * Revise severity of some styles Signed-off-by: Jo Stichbury * Update .github/styles/Kedro/words.yml Co-authored-by: Deepyaman Datta --------- Signed-off-by: Jo Stichbury Co-authored-by: Deepyaman Datta --- .github/styles/Kedro/abbreviations.yml | 11 ++ .github/styles/Kedro/gender.yml | 13 ++ .github/styles/Kedro/headings.yml | 56 ++++++ .github/styles/Kedro/inclusive.yml | 12 ++ .github/styles/Kedro/links.yml | 24 +++ .github/styles/Kedro/oxfordcomma.yml | 6 + .github/styles/Kedro/pronouns.yml | 11 ++ .github/styles/Kedro/quotes.yml | 10 ++ .github/styles/Kedro/sentencelength.yml | 11 ++ .github/styles/Kedro/toowordy.yml | 218 ++++++++++++++++++++++++ .github/styles/Kedro/ukspelling.yml | 25 +++ .github/styles/Kedro/weaselwords.yml | 207 ++++++++++++++++++++++ .github/styles/Kedro/words.yml | 53 ++++++ docs/source/data/data_catalog.md | 1 + 14 files changed, 658 insertions(+) create mode 100644 .github/styles/Kedro/abbreviations.yml create mode 100644 .github/styles/Kedro/gender.yml create mode 100644 .github/styles/Kedro/headings.yml create mode 100644 .github/styles/Kedro/inclusive.yml create mode 100644 .github/styles/Kedro/links.yml create mode 100644 .github/styles/Kedro/oxfordcomma.yml create mode 100644 .github/styles/Kedro/pronouns.yml create mode 100644 .github/styles/Kedro/quotes.yml create mode 100644 .github/styles/Kedro/sentencelength.yml create mode 100644 .github/styles/Kedro/toowordy.yml create mode 100644 .github/styles/Kedro/ukspelling.yml create mode 100644 .github/styles/Kedro/weaselwords.yml create mode 100644 .github/styles/Kedro/words.yml diff --git a/.github/styles/Kedro/abbreviations.yml b/.github/styles/Kedro/abbreviations.yml new file mode 100644 index 0000000000..345ecc31a4 --- /dev/null +++ b/.github/styles/Kedro/abbreviations.yml @@ -0,0 +1,11 @@ +extends: substitution +message: "Use '%s' instead of abbreviations like '%s'." +ignorecase: true +level: warning +nonword: true +action: + name: replace +swap: + '\b(?:eg|e\.g\.|eg\.)[\s,]': for example + '\b(?:ie|i\.e\.|ie\.)[\s,]': that is + '\b(?:etc)[\s\n,.]': and more diff --git a/.github/styles/Kedro/gender.yml b/.github/styles/Kedro/gender.yml new file mode 100644 index 0000000000..f06d0f9cc5 --- /dev/null +++ b/.github/styles/Kedro/gender.yml @@ -0,0 +1,13 @@ +extends: existence +message: "Use a gender-neutral pronoun instead of '%s'." +level: error +ignorecase: true +tokens: + - he/she + - s/he + - \(s\)he + - \bhe\b + - \bhim\b + - \bhis\b + - \bshe\b + - \bher\b diff --git a/.github/styles/Kedro/headings.yml b/.github/styles/Kedro/headings.yml new file mode 100644 index 0000000000..3c83043bd3 --- /dev/null +++ b/.github/styles/Kedro/headings.yml @@ -0,0 +1,56 @@ +extends: capitalization +message: "'%s' should use sentence-style capitalization." +level: warning +scope: heading +match: $sentence +exceptions: + - Kedro + - Kedro-Viz + - Airflow + - Amazon + - Amazon Web Services + - AWS Step Functions + - AWS Systems Manager + - Azure + - Azure App Service + - Azure App Service Plan + - Azure Blob Storage + - Azure Event Hub + - CI/CD + - DataCatalog + - Data Catalog + - Docker + - Docker Compose + - Docker Swarm + - Dockerfile + - GitHub + - GitHub Actions + - Google + - Google Analytics + - Google Cloud + - Google Cloud Functions + - GraphQL + - Hook + - Hooks + - IDs + - Jenkins + - JFrog + - JFrog Artifactory + - Jira + - Kafka + - Kubernetes + - Kubernetes Engine + - Kubernetes Pod + - Kubernetes Service + - Lambda + - Linux + - MySQL + - Python + - QuantumBlack + - QuantumBlack Labs + - Red Hat + - Redis + - Slack + - Ubuntu + - Unix + - URLs diff --git a/.github/styles/Kedro/inclusive.yml b/.github/styles/Kedro/inclusive.yml new file mode 100644 index 0000000000..21792cc49f --- /dev/null +++ b/.github/styles/Kedro/inclusive.yml @@ -0,0 +1,12 @@ +extends: substitution +message: "Use '%s' instead of '%s'." +ignorecase: true +level: error +action: + name: replace +swap: + # bad: good + 'black ?list': 'disallow list|exclude list' + 'master': primary + 'slave': secondary + 'white ?list': 'allow list|include list' diff --git a/.github/styles/Kedro/links.yml b/.github/styles/Kedro/links.yml new file mode 100644 index 0000000000..aa7597d554 --- /dev/null +++ b/.github/styles/Kedro/links.yml @@ -0,0 +1,24 @@ +extends: substitution +message: "Avoid vague text in links like '%s' unless you can pair it with more descriptive text." +link: 'https://github.com/kedro-org/kedro/wiki/Kedro-documentation-style-guide' +ignorecase: true +scope: raw +nonword: true +level: error + +swap: +# For the word 'here' in Markdown and HTML links + '\[here\]\(.*?\)': 'here' + '\s*here\s*': 'here' + +# For the word 'this' in Markdown and HTML links + '\[this\]\(.*?\)': 'this' + '\s*this\s*': 'this' + +# For the word 'page' in Markdown and HTML links + '\[page\]\(.*?\)': 'page' + '\s*page\s*': 'page' + +# For the phrase 'this page' in Markdown and HTML links + '\[this page\]\(.*?\)': 'this page' + '\s*this page\s*': 'this page' diff --git a/.github/styles/Kedro/oxfordcomma.yml b/.github/styles/Kedro/oxfordcomma.yml new file mode 100644 index 0000000000..464d6e6997 --- /dev/null +++ b/.github/styles/Kedro/oxfordcomma.yml @@ -0,0 +1,6 @@ +extends: existence +message: "Use the Oxford comma in '%s'." +scope: sentence +level: suggestion +tokens: + - '(?:[^,]+,){1,}\s\w+\s(?:and|or)' diff --git a/.github/styles/Kedro/pronouns.yml b/.github/styles/Kedro/pronouns.yml new file mode 100644 index 0000000000..cea1aca18e --- /dev/null +++ b/.github/styles/Kedro/pronouns.yml @@ -0,0 +1,11 @@ +extends: existence +message: "Avoid first-person singular pronouns such as '%s'." +level: warning +nonword: true +tokens: + - (?<=^|\s)I(?=\s) + - (?<=^|\s)I,(?=\s) + - \bI'm\b + - (?<=\s)[Mm]e\b + - (?<=\s)[Mm]y\b + - (?<=\s)[Mm]ine\b diff --git a/.github/styles/Kedro/quotes.yml b/.github/styles/Kedro/quotes.yml new file mode 100644 index 0000000000..7e4ed44be0 --- /dev/null +++ b/.github/styles/Kedro/quotes.yml @@ -0,0 +1,10 @@ +extends: existence +message: Use straight quotes instead of smart quotes. +level: warning +nonword: true +action: +tokens: + - “ + - ” + - ‘ + - ’ diff --git a/.github/styles/Kedro/sentencelength.yml b/.github/styles/Kedro/sentencelength.yml new file mode 100644 index 0000000000..6c135a84c5 --- /dev/null +++ b/.github/styles/Kedro/sentencelength.yml @@ -0,0 +1,11 @@ +extends: occurrence +message: "Try to keep your sentence length to 30 words or fewer." +level: suggestion +# Here, we're counting the number of words +# in a sentence. +# +# If there are more than 30, we'll flag it. +scope: sentence +ignorecase: false +max: 30 +token: (\w+) diff --git a/.github/styles/Kedro/toowordy.yml b/.github/styles/Kedro/toowordy.yml new file mode 100644 index 0000000000..262b5ca419 --- /dev/null +++ b/.github/styles/Kedro/toowordy.yml @@ -0,0 +1,218 @@ +# Write Good's "Too wordy" rule https://github.com/testthedocs/vale-styles/blob/master/write-good/TooWordy.yml +extends: existence +message: "'%s' is too wordy" +ignorecase: true +level: warning +tokens: + - a number of + - abundance + - accede to + - accelerate + - accentuate + - accompany + - accomplish + - accorded + - accrue + - acquiesce + - acquire + - adjacent to + - adjustment + - admissible + - advantageous + - adversely impact + - advise + - aforementioned + - aggregate + - aircraft + - all of + - all things considered + - alleviate + - allocate + - along the lines of + - already existing + - alternatively + - amazing + - ameliorate + - anticipate + - apparent + - appreciable + - as a matter of fact + - as a means of + - as far as I'm concerned + - as of yet + - as to + - as yet + - ascertain + - assistance + - at the present time + - at this time + - attain + - attributable to + - because of the fact that + - belated + - benefit from + - bestow + - by means of + - by virtue of the fact that + - by virtue of + - cease + - close proximity + - commence + - comply with + - concerning + - consequently + - consolidate + - constitutes + - demonstrate + - depart + - designate + - discontinue + - due to the fact that + - each and every + - economical + - eliminate + - elucidate + - employ + - endeavor + - enumerate + - equitable + - equivalent + - evaluate + - evidenced + - exclusively + - expedite + - expend + - expiration + - facilitate + - factual evidence + - feasible + - finalise + - first and foremost + - for all intents and purposes + - for the most part + - for the purpose of + - forfeit + - formulate + - have a tendency to + - honest truth + - however + - if and when + - impacted + - implement + - in a manner of speaking + - in a timely manner + - in a very real sense + - in accordance with + - in addition + - in all likelihood + - in an effort to + - in between + - in excess of + - in lieu of + - in light of the fact that + - in many cases + - in my opinion + - in order to + - in regard to + - in some instances + - in terms of + - in the case of + - in the event that + - in the final analysis + - in the nature of + - in the near future + - in the process of + - inception + - incumbent upon + - indicate + - indication + - initiate + - irregardless + - is applicable to + - is authorised to + - is responsible for + - it is essential + - it seems that + - it was + - magnitude + - maximum + - methodology + - minimise + - modify + - monitor + - multiple + - necessitate + - nevertheless + - not certain + - not many + - not often + - not unless + - not unlike + - notwithstanding + - null and void + - numerous + - objective + - obligate + - obtain + - on the contrary + - on the other hand + - one particular + - optimum + - overall + - owing to the fact that + - participate + - particulars + - pass away + - pertaining to + - point in time + - portion + - possess + - preclude + - previously + - prior to + - prioritise + - procure + - proficiency + - provided that + - purchase + - put simply + - readily apparent + - refer back + - regarding + - relocate + - remainder + - remuneration + - requirement + - reside + - residence + - retain + - satisfy + - shall + - should you wish + - similar to + - solicit + - span across + - strategise + - subsequent + - substantial + - successfully complete + - sufficient + - terminate + - the month of + - the point I am trying to make + - therefore + - time period + - took advantage of + - transmit + - transpire + - type of + - until such time as + - utilisation + - utilise + - validate + - various different + - what I mean to say is + - whether or not + - with respect to + - with the exception of + - witnessed diff --git a/.github/styles/Kedro/ukspelling.yml b/.github/styles/Kedro/ukspelling.yml new file mode 100644 index 0000000000..fbd59b50ec --- /dev/null +++ b/.github/styles/Kedro/ukspelling.yml @@ -0,0 +1,25 @@ +extends: existence +message: "In general, use UK English spelling instead of '%s'." +link: 'https://github.com/kedro-org/kedro/wiki/Kedro-documentation-style-guide' +ignorecase: true +level: warning +tokens: + - '(?:\w+)nized' + - '(?:\w+)ize' + - '(?:\w+)log' + - '(?:\w+)lor' + - '(?:\w+)lyze' +exceptions: + - backlog + - blog + - capsize + - catalog + - Catalog + - DataCatalog + - dialog + - log + - maize + - prize + - seize + - size + - tailor diff --git a/.github/styles/Kedro/weaselwords.yml b/.github/styles/Kedro/weaselwords.yml new file mode 100644 index 0000000000..d6c6f73e09 --- /dev/null +++ b/.github/styles/Kedro/weaselwords.yml @@ -0,0 +1,207 @@ +# Write Good's Weasel Words rule https://github.com/testthedocs/vale-styles/blob/master/write-good/Weasel.yml +extends: existence +message: "'%s' is a weasel word!" +ignorecase: true +level: warning +tokens: + - absolutely + - accidentally + - additionally + - allegedly + - alternatively + - angrily + - anxiously + - approximately + - awkwardly + - badly + - barely + - beautifully + - blindly + - boldly + - bravely + - brightly + - briskly + - bristly + - bubbly + - busily + - calmly + - carefully + - carelessly + - cautiously + - cheerfully + - clearly + - closely + - coldly + - completely + - consequently + - correctly + - courageously + - crinkly + - cruelly + - crumbly + - cuddly + - currently + - daily + - daringly + - deadly + - definitely + - deliberately + - doubtfully + - dumbly + - eagerly + - easily + - elegantly + - enormously + - enthusiastically + - equally + - especially + - eventually + - exactly + - exceedingly + - exclusively + - extremely + - fairly + - faithfully + - fatally + - fiercely + - finally + - fondly + - few + - foolishly + - fortunately + - frankly + - frantically + - generously + - gently + - giggly + - gladly + - gracefully + - greedily + - happily + - hardly + - hastily + - healthily + - heartily + - helpfully + - honestly + - hourly + - hungrily + - hurriedly + - immediately + - impatiently + - inadequately + - ingeniously + - innocently + - inquisitively + - interestingly + - irritably + - jiggly + - joyously + - justly + - kindly + - largely + - lately + - lazily + - likely + - literally + - lonely + - loosely + - loudly + - loudly + - luckily + - madly + - many + - mentally + - mildly + - monthly + - mortally + - mostly + - mysteriously + - neatly + - nervously + - nightly + - noisily + - normally + - obediently + - occasionally + - only + - openly + - painfully + - particularly + - patiently + - perfectly + - politely + - poorly + - powerfully + - presumably + - previously + - promptly + - punctually + - quarterly + - quickly + - quietly + - rapidly + - rarely + - really + - recently + - recklessly + - regularly + - remarkably + - relatively + - reluctantly + - repeatedly + - rightfully + - roughly + - rudely + - sadly + - safely + - selfishly + - sensibly + - seriously + - sharply + - shortly + - shyly + - significantly + - silently + - simply + - sleepily + - slowly + - smartly + - smelly + - smoothly + - softly + - solemnly + - sparkly + - speedily + - stealthily + - sternly + - stupidly + - substantially + - successfully + - suddenly + - surprisingly + - suspiciously + - swiftly + - tenderly + - tensely + - thoughtfully + - tightly + - timely + - truthfully + - unexpectedly + - unfortunately + - usually + - very + - victoriously + - violently + - vivaciously + - warmly + - waverly + - weakly + - wearily + - weekly + - wildly + - wisely + - worldly + - wrinkly + - yearly diff --git a/.github/styles/Kedro/words.yml b/.github/styles/Kedro/words.yml new file mode 100644 index 0000000000..5ed27dd319 --- /dev/null +++ b/.github/styles/Kedro/words.yml @@ -0,0 +1,53 @@ +extends: substitution +message: "Use '%s' instead of '%s'." +ignorecase: false +level: warning +action: + name: replace +swap: + # bad: good + 'acknowledgement': 'acknowledgment' + 'auto-complete': 'autocomplete' + 'a number of': 'few|several|many' + 'and/or': 'and|or|either or' + 'back end': 'backend' + 'bear in mind': 'keep in mind' + 'culprit': 'cause' + 'data set': 'dataset' + 'drill down|drilling down|drill into|drilling into': 'examine|investigate|analyze' + 'figure out': 'determine' + 'fine tune|fine-tune': 'customize|optimize|refine' + 'for the most part': 'generally|usually' + 'front end': 'frontend' + 'highly|very': '' + 'hit': 'click|select' + 'in order to': 'to' + 'keep in mind': 'consider' + 'left up to': 'determined by' + 'leverage': 'use' + 'multi-alert': 'multi alert' + 'Note that': '**Note**:' + 'obviously|obvious': '' + 'on the fly': 'real-time|real time' + 'once': 'after' + 'play a hand': 'influence' + 'please|just': '' + 'easily|easy': '' + 'quickly|quick': '' + 'screen board': 'screenboard' + 'simply|simple': '' + 'stand for': 'represents|means' + 'reenable': 're-enable' + 'run time': 'runtime' + 'refer to|visit': 'see|read|follow' + 'time board': 'timeboard' + 'time series': 'timeseries' + 'toplist': 'top list' + 'tradeoff': 'trade-off' + 'turnkey': 'ready to use' + 'under the hood': '' + 'utilize': 'use' + 'via': 'with|through' + 'visit': 'see|read' + 'webserver': 'web server' + 'web site': 'website' diff --git a/docs/source/data/data_catalog.md b/docs/source/data/data_catalog.md index 241e339635..b4a6c4d7da 100644 --- a/docs/source/data/data_catalog.md +++ b/docs/source/data/data_catalog.md @@ -1,5 +1,6 @@ # Introduction to the Data Catalog + In a Kedro project, the Data Catalog is a registry of all data sources available for use by the project. It is specified with a YAML catalog file that maps the names of node inputs and outputs as keys in the `DataCatalog` class. This page introduces the basic sections of `catalog.yml`, which is the file used to register data sources for a Kedro project. From e2bb4cd5cac9e25248046f2be2015f734b8d8d37 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 24 Aug 2023 13:28:24 +0100 Subject: [PATCH 11/11] Update anyconfig requirement from ~=0.10.0 to >=0.10,<0.14 (#2876) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Updates the requirements on [anyconfig](https://github.com/ssato/python-anyconfig) to permit the latest version. - [Changelog](https://github.com/ssato/python-anyconfig/blob/next/NEWS) - [Commits](https://github.com/ssato/python-anyconfig/compare/RELEASE_0.10.0...RELEASE_0.13.0) --- updated-dependencies: - dependency-name: anyconfig dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Juan Luis Cano Rodríguez --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 0421e10093..603c0837e5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,7 +12,7 @@ authors = [ description = "Kedro helps you build production-ready data and analytics pipelines" requires-python = ">=3.7" dependencies = [ - "anyconfig~=0.10.0", + "anyconfig>=0.10,<0.14", "attrs>=21.3", "build", "cachetools~=5.3",