From 685cb2a755721d38ec9f7eb4fb5e3fb37222b443 Mon Sep 17 00:00:00 2001 From: Mariusz Strzelecki Date: Wed, 8 Feb 2023 15:01:09 +0100 Subject: [PATCH 1/2] Support for common Mlflow run across pipeline nodes (#6) --- .gitignore | 10 +- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 3 + docs/images/pipeline_with_mlflow.gif | Bin 0 -> 231140 bytes docs/source/02_installation.md | 2 +- docs/source/03_quickstart.rst | 6 +- kedro_sagemaker/cli.py | 42 +- kedro_sagemaker/cli_functions.py | 28 ++ kedro_sagemaker/constants.py | 2 + kedro_sagemaker/generator.py | 64 ++- kedro_sagemaker/runner.py | 13 +- kedro_sagemaker/utils.py | 10 + poetry.lock | 591 ++++++++++++++++++++++++++- pyproject.toml | 1 + tests/conf/base/credentials.yml | 0 tests/conf/base/mlflow.yml | 0 tests/conf/base/parameters.yml | 0 tests/conftest.py | 6 + tests/test_cli.py | 158 ++++++- tests/test_generator.py | 56 ++- tests/test_runner.py | 23 ++ 21 files changed, 951 insertions(+), 66 deletions(-) create mode 100644 docs/images/pipeline_with_mlflow.gif create mode 100644 tests/conf/base/credentials.yml create mode 100644 tests/conf/base/mlflow.yml create mode 100644 tests/conf/base/parameters.yml diff --git a/.gitignore b/.gitignore index 198447e..498f135 100644 --- a/.gitignore +++ b/.gitignore @@ -164,13 +164,5 @@ credentials.json /mlruns/ /ga4/ -# terraform -terraform/terraform.tfstate.backup -terraform/.terraform.lock.hcl -terraform/.terraform/providers/registry.terraform.io/hashicorp/google-beta/4.21.0/darwin_amd64/terraform-provider-google-beta_v4.21.0_x5 -terraform/.terraform/providers/registry.terraform.io/hashicorp/google/4.21.0/darwin_amd64/terraform-provider-google_v4.21.0_x5 -terraform/terraform.tfstate - .idea -conf/azure/credentials.yml - +tests/mlruns diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 98cac3a..5bb94b6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,6 @@ repos: - repo: https://github.com/pycqa/isort - rev: 5.10.1 + rev: 5.12.0 hooks: - id: isort args: ["--profile", "black", "--line-length=79"] diff --git a/CHANGELOG.md b/CHANGELOG.md index faaa4cb..29d237c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ ## [Unreleased] +- Support for Mlflow with shared run across pipeline steps +- Fixed ability to overwrite docker image in `kedro sagemaker run` + ## [0.1.1] - 2022-12-30 - Pass missing environment to the internal entrypoint diff --git a/docs/images/pipeline_with_mlflow.gif b/docs/images/pipeline_with_mlflow.gif new file mode 100644 index 0000000000000000000000000000000000000000..9878fe6edcee24fac991b91b1efe7e8eefaff932 GIT binary patch literal 231140 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

JXRO$H5Kb~66?zo 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

#vpLuKqOC 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.18.3,<0.19" +$ pip install "kedro>=0.18.3,<0.19" ``` ## Plugin installation diff --git a/docs/source/03_quickstart.rst b/docs/source/03_quickstart.rst index 9fb0ad6..19623cf 100644 --- a/docs/source/03_quickstart.rst +++ b/docs/source/03_quickstart.rst @@ -5,7 +5,7 @@ Before you start, make sure that you have the following: - AWS CLI installed - AWS SageMaker domain -- SageMaker Execution role ARN (in a form `arn:aws:iam:::role/service-role/AmazonSageMaker-ExecutionRole-`) +- SageMaker Execution role ARN (in a form `arn:aws:iam:::role/service-role/AmazonSageMaker-ExecutionRole-`). If you don't have one, follow the [official AWS docs](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html#sagemaker-roles-create-execution-role). - S3 bucket that the above role has R/W access - Docker installed - Amazon Elastic Container Registry (`Amazon ECR `__) repository created that the above role has read access and you have write access @@ -100,6 +100,10 @@ Finally, you will see similar logs in your terminal: |Kedro SageMaker Pipelines execution| +Additionally, if you have (`kedro-mlflow `__) plugin installed, an additional node called `start-mlflow-run` will appear on execution graph. It's job is to log the SageMaker's Pipeline Execution ARN (so you can link runs with mlflow with runs in SageMaker) and make sure that all nodes use common Mlflow run. + +|Kedro SageMaker Pipeline with Mlflow| .. |Kedro SageMaker Pipelines execution| image:: ../images/sagemaker_running_pipeline.gif +.. |Kedro SageMaker Pipeline with Mlflow| image:: ../images/pipeline_with_mlflow.gif diff --git a/kedro_sagemaker/cli.py b/kedro_sagemaker/cli.py index 40f4118..f78af0a 100644 --- a/kedro_sagemaker/cli.py +++ b/kedro_sagemaker/cli.py @@ -12,6 +12,7 @@ from kedro_sagemaker.cli_functions import ( docker_autobuild, get_context_and_pipeline, + lookup_mlflow_run_id, parse_extra_params, write_file_and_confirm_overwrite, ) @@ -20,14 +21,17 @@ from kedro_sagemaker.constants import ( KEDRO_SAGEMAKER_ARGS, KEDRO_SAGEMAKER_DEBUG, + KEDRO_SAGEMAKER_EXECUTION_ARN, KEDRO_SAGEMAKER_S3_TEMP_DIR_NAME, KEDRO_SAGEMAKER_WORKING_DIRECTORY, + MLFLOW_TAG_EXECUTION_ARN, ) from kedro_sagemaker.docker import DOCKERFILE_TEMPLATE, DOCKERIGNORE_TEMPLATE from kedro_sagemaker.runner import SageMakerPipelinesRunner from kedro_sagemaker.utils import ( CliContext, KedroContextManager, + is_mlflow_enabled, parse_flat_parameters, ) @@ -196,9 +200,11 @@ def run( ) is_ok = client.run( - local, - wait_for_completion, - lambda p: click.echo(f"Pipeline ARN: {p.describe()['PipelineArn']}"), + is_local=local, + wait_for_completion=wait_for_completion, + on_pipeline_started=lambda p: click.echo( + f"Pipeline ARN: {p.describe()['PipelineArn']}" + ), ) if is_ok: @@ -341,5 +347,35 @@ def execute(ctx: CliContext, pipeline: str, node: str, params: str): with KedroContextManager( ctx.metadata.package_name, env=ctx.env, extra_params=parameters ) as mgr: + if is_mlflow_enabled(): + env_key, env_value = lookup_mlflow_run_id( + mgr.context, os.getenv(KEDRO_SAGEMAKER_EXECUTION_ARN) + ) + if env_value is not None: + click.echo(f"Mlflow run id: {env_value}") + os.environ[env_key] = env_value + runner = SageMakerPipelinesRunner() mgr.session.run(pipeline, node_names=[node], runner=runner) + + +@sagemaker_group.command(hidden=True) +@click.pass_obj +def mlflow_start(ctx: CliContext): + """ + Registers new mlflow run with Sagemaker Execution ARN inside the tags + """ + import mlflow + from kedro_mlflow.config.kedro_mlflow_config import KedroMlflowConfig + + with KedroContextManager(ctx.metadata.package_name, env=ctx.env) as mgr: + mlflow_conf: KedroMlflowConfig = mgr.context.mlflow + + run = mlflow.start_run( + experiment_id=mlflow.get_experiment_by_name( + mlflow_conf.tracking.experiment.name + ).experiment_id, + nested=False, + ) + mlflow.set_tag(MLFLOW_TAG_EXECUTION_ARN, os.environ[KEDRO_SAGEMAKER_EXECUTION_ARN]) + click.echo(f"Started run: {run.info.run_id}") diff --git a/kedro_sagemaker/cli_functions.py b/kedro_sagemaker/cli_functions.py index fb48247..256f683 100644 --- a/kedro_sagemaker/cli_functions.py +++ b/kedro_sagemaker/cli_functions.py @@ -1,4 +1,6 @@ +import importlib import json +import logging from contextlib import contextmanager from pathlib import Path from typing import Callable, Iterator, Optional, Tuple @@ -6,6 +8,7 @@ import click from sagemaker.workflow.pipeline import Pipeline as SageMakerPipeline +from kedro_sagemaker.constants import MLFLOW_TAG_EXECUTION_ARN from kedro_sagemaker.generator import KedroSageMakerGenerator from kedro_sagemaker.utils import ( CliContext, @@ -14,6 +17,8 @@ docker_push, ) +logger = logging.getLogger() + def parse_extra_params(params, silent=False): if params and (parameters := json.loads(params.strip("'"))): @@ -94,3 +99,26 @@ def write_file_and_confirm_overwrite( filepath.write_text(contents) elif on_denied_overwrite: on_denied_overwrite(filepath) + + +def lookup_mlflow_run_id(context, sagemaker_execution_arn: str): + import mlflow + from kedro_mlflow.config.kedro_mlflow_config import KedroMlflowConfig + + mlflow_conf: KedroMlflowConfig = context.mlflow + mlflow_runs = mlflow.search_runs( + experiment_names=[mlflow_conf.tracking.experiment.name], + filter_string=f'tags.`{MLFLOW_TAG_EXECUTION_ARN}` = "{sagemaker_execution_arn}"', + max_results=1, + output_format="list", + ) + importlib.reload(mlflow.tracking.request_header.registry) + + if len(mlflow_runs) == 0: + logger.warning( + "Unable to find parent mlflow run id for the current execution (%s)", + sagemaker_execution_arn, + ) + return mlflow.tracking._RUN_ID_ENV_VAR, None + + return mlflow.tracking._RUN_ID_ENV_VAR, mlflow_runs[0].info.run_id diff --git a/kedro_sagemaker/constants.py b/kedro_sagemaker/constants.py index be4075f..b43622d 100644 --- a/kedro_sagemaker/constants.py +++ b/kedro_sagemaker/constants.py @@ -5,6 +5,8 @@ KEDRO_SAGEMAKER_DEBUG = f"{KEDRO_SAGEMAKER}_DEBUG" KEDRO_SAGEMAKER_WORKING_DIRECTORY = f"{KEDRO_SAGEMAKER}_WD" KEDRO_SAGEMAKER_PARAMETERS = f"{KEDRO_SAGEMAKER}_PARAMETERS" +KEDRO_SAGEMAKER_EXECUTION_ARN = f"{KEDRO_SAGEMAKER}_EXECUTION_ARN" KEDRO_SAGEMAKER_PARAM_KEY_PREFIX = f"{KEDRO_SAGEMAKER}_PARAM_KEY_" KEDRO_SAGEMAKER_PARAM_VALUE_PREFIX = f"{KEDRO_SAGEMAKER}_PARAM_VALUE_" KEDRO_SAGEMAKER_S3_TEMP_DIR_NAME = "kedro-sagemaker-tmp" +MLFLOW_TAG_EXECUTION_ARN = "sagemaker_execution_arn" diff --git a/kedro_sagemaker/generator.py b/kedro_sagemaker/generator.py index c240586..2c26a0c 100644 --- a/kedro_sagemaker/generator.py +++ b/kedro_sagemaker/generator.py @@ -1,7 +1,7 @@ import json from itertools import chain +from types import SimpleNamespace from typing import Dict, Iterator, List, Optional, Tuple, Union -from uuid import uuid4 from kedro.framework.context import KedroContext from kedro.io import DataCatalog @@ -9,6 +9,7 @@ from kedro.pipeline.node import Node as KedroNode from sagemaker import Model, Processor from sagemaker.estimator import Estimator +from sagemaker.workflow.execution_variables import ExecutionVariables from sagemaker.workflow.model_step import ModelStep from sagemaker.workflow.parameters import ( ParameterBoolean, @@ -21,7 +22,7 @@ LocalPipelineSession, PipelineSession, ) -from sagemaker.workflow.steps import ProcessingStep, TrainingStep +from sagemaker.workflow.steps import ProcessingStep, StepTypeEnum, TrainingStep from kedro_sagemaker.config import ( KedroSageMakerPluginConfig, @@ -30,6 +31,7 @@ ) from kedro_sagemaker.constants import ( KEDRO_SAGEMAKER_ARGS, + KEDRO_SAGEMAKER_EXECUTION_ARN, KEDRO_SAGEMAKER_METRICS, KEDRO_SAGEMAKER_PARAM_KEY_PREFIX, KEDRO_SAGEMAKER_PARAM_VALUE_PREFIX, @@ -38,7 +40,7 @@ ) from kedro_sagemaker.datasets import SageMakerModelDataset from kedro_sagemaker.runner import KedroSageMakerRunnerConfig -from kedro_sagemaker.utils import flatten_dict +from kedro_sagemaker.utils import flatten_dict, is_mlflow_enabled SageMakerStepType = Union[ProcessingStep, TrainingStep, ModelStep] @@ -54,7 +56,7 @@ def __init__( execution_role_arn: Optional[str] = None, ): self.is_local = is_local - self.docker_image = docker_image + self.docker_image = docker_image or config.docker.image self.config = config self.kedro_context = kedro_context self.pipeline_name = pipeline_name @@ -142,10 +144,7 @@ def _get_resources_for_node(self, node: KedroNode): return defaults def generate(self) -> SageMakerPipeline: - run_id = uuid4().hex - runner_config = KedroSageMakerRunnerConfig( - bucket=self.config.aws.bucket, run_id=run_id - ) + runner_config = KedroSageMakerRunnerConfig(bucket=self.config.aws.bucket) sagemaker_session = ( LocalPipelineSession() if self.is_local else PipelineSession() @@ -216,7 +215,9 @@ def generate(self) -> SageMakerPipeline: ) steps[node.name] = step - steps = self._add_step_dependencies(pipeline, steps) + self._add_step_dependencies(pipeline, steps) + if is_mlflow_enabled(): + self._add_mlflow_support(steps, runner_config) smp = SageMakerPipeline( self._get_sagemaker_pipeline_name(), @@ -226,6 +227,31 @@ def generate(self) -> SageMakerPipeline: ) return smp + def _add_mlflow_support(self, steps, runner_config): + mlflow_start_run = self._create_processing_step( + node=SimpleNamespace(name="start-mlflow-run"), + node_resources=ResourceConfig(instance_type="ml.t3.medium"), + runner_config=runner_config, + sm_node_name="start-mlflow-run", + sm_param_envs={}, + entrypoint=[ + "kedro", + "sagemaker", + "-e", + self.kedro_context.env or "local", + "mlflow-start", + ], + ) + for step in steps.values(): + if step.depends_on is not None: + continue + if step.step_type not in (StepTypeEnum.TRAINING, StepTypeEnum.PROCESSING): + continue + + step.add_depends_on([mlflow_start_run]) + + steps["start-mlflow-run"] = mlflow_start_run + def _add_step_dependencies( self, pipeline, steps: Dict[str, SageMakerStepType] ) -> Dict[str, SageMakerStepType]: @@ -237,19 +263,26 @@ def _add_step_dependencies( return steps def _create_processing_step( - self, node, node_resources, runner_config, sm_node_name, sm_param_envs + self, + node, + node_resources, + runner_config, + sm_node_name, + sm_param_envs, + entrypoint=None, ): step = ProcessingStep( sm_node_name, processor=Processor( - entrypoint=self._get_kedro_command(node), + entrypoint=entrypoint or self._get_kedro_command(node), role=self._execution_role, - image_uri=self.config.docker.image, + image_uri=self.docker_image, instance_count=node_resources.instance_count, instance_type=node_resources.instance_type, max_runtime_in_seconds=node_resources.timeout_seconds, env={ KEDRO_SAGEMAKER_RUNNER_CONFIG: runner_config.json(), + KEDRO_SAGEMAKER_EXECUTION_ARN: ExecutionVariables.PIPELINE_EXECUTION_ARN, **sm_param_envs, }, ), @@ -283,7 +316,7 @@ def _create_model_register_steps( ) -> Union[Tuple[ModelStep], Tuple[ModelStep, ModelStep]]: model_output_name = sagemaker_model_outputs[0].replace(".", "__") model = Model( - image_uri=self.config.docker.image, + image_uri=self.docker_image, model_data=step.properties.ModelArtifacts.S3ModelArtifacts, role=self._execution_role, name=model_output_name, @@ -303,7 +336,7 @@ def _create_model_register_steps( response_types=["application/json"], domain="MACHINE_LEARNING", task="OTHER", - image_uri=self.config.docker.image, + image_uri=self.docker_image, ) # TODO - maybe model metrics from https://docs.aws.amazon.com/sagemaker/latest/dg/define-pipeline.html ? @@ -335,7 +368,7 @@ def _create_training_step( return TrainingStep( sm_node_name, estimator=Estimator( - image_uri=self.config.docker.image, + image_uri=self.docker_image, role=self._execution_role, instance_count=node_resources.instance_count, instance_type=node_resources.instance_type, @@ -348,6 +381,7 @@ def _create_training_step( KEDRO_SAGEMAKER_ARGS: self._get_kedro_command(node, as_string=True), KEDRO_SAGEMAKER_RUNNER_CONFIG: runner_config.json(), KEDRO_SAGEMAKER_WORKING_DIRECTORY: self.config.docker.working_directory, + KEDRO_SAGEMAKER_EXECUTION_ARN: ExecutionVariables.PIPELINE_EXECUTION_ARN, # "PYTHONPATH": "/home/kedro/src", # # TODO - this will not be needed if plugin is installed, I hope :D, **sm_param_envs, diff --git a/kedro_sagemaker/runner.py b/kedro_sagemaker/runner.py index b8d755c..94e6602 100644 --- a/kedro_sagemaker/runner.py +++ b/kedro_sagemaker/runner.py @@ -8,7 +8,10 @@ from pluggy import PluginManager from pydantic import BaseModel -from kedro_sagemaker.constants import KEDRO_SAGEMAKER_RUNNER_CONFIG +from kedro_sagemaker.constants import ( + KEDRO_SAGEMAKER_EXECUTION_ARN, + KEDRO_SAGEMAKER_RUNNER_CONFIG, +) from kedro_sagemaker.datasets import ( CloudpickleDataset, DistributedCloudpickleDataset, @@ -20,7 +23,6 @@ class KedroSageMakerRunnerConfig(BaseModel): bucket: str - run_id: str class SageMakerPipelinesRunner(SequentialRunner): @@ -34,6 +36,7 @@ def __init__(self, is_async: bool = False): self.runner_config = KedroSageMakerRunnerConfig.parse_raw( self.runner_config_raw ) + self.run_id = os.getenv(KEDRO_SAGEMAKER_EXECUTION_ARN, "local").split(":")[-1] def run( self, @@ -58,7 +61,7 @@ def create_default_data_set(self, ds_name: str) -> AbstractDataSet: dataset_cls = DistributedCloudpickleDataset return dataset_cls( - self.runner_config.bucket, - ds_name, - self.runner_config.run_id, + bucket=self.runner_config.bucket, + dataset_name=ds_name, + run_id=self.run_id, ) diff --git a/kedro_sagemaker/utils.py b/kedro_sagemaker/utils.py index 29f1966..7033776 100644 --- a/kedro_sagemaker/utils.py +++ b/kedro_sagemaker/utils.py @@ -171,3 +171,13 @@ def docker_push(image: str) -> int: if rv: logger.error("Docker push has failed.") return rv + + +def is_mlflow_enabled() -> bool: + try: + import kedro_mlflow # NOQA + import mlflow # NOQA + + return True + except ImportError: + return False diff --git a/poetry.lock b/poetry.lock index b675130..67620a6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -173,6 +173,27 @@ files = [ {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, ] +[[package]] +name = "alembic" +version = "1.9.2" +description = "A database migration tool for SQLAlchemy." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "alembic-1.9.2-py3-none-any.whl", hash = "sha256:e8a6ff9f3b1887e1fed68bfb8fb9a000d8f61c21bdcc85b67bb9f87fcbc4fce3"}, + {file = "alembic-1.9.2.tar.gz", hash = "sha256:6880dec4f28dd7bd999d2ed13fbe7c9d4337700a44d11a524c0ce0c59aaf0dbd"}, +] + +[package.dependencies] +importlib-metadata = {version = "*", markers = "python_version < \"3.9\""} +importlib-resources = {version = "*", markers = "python_version < \"3.9\""} +Mako = "*" +SQLAlchemy = ">=1.3.0" + +[package.extras] +tz = ["python-dateutil"] + [[package]] name = "anyconfig" version = "0.10.1" @@ -653,6 +674,26 @@ tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.1 [package.extras] toml = ["tomli"] +[[package]] +name = "databricks-cli" +version = "0.17.4" +description = "A command line interface for Databricks" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "databricks-cli-0.17.4.tar.gz", hash = "sha256:bc0c4dd082f033cb6d7978cacaca5261698efe3a4c70f52f98762c38db925ce0"}, + {file = "databricks_cli-0.17.4-py2-none-any.whl", hash = "sha256:bbd57bc21c88ac6d1f8f0b250db986e500490c4d3cb69664229384632eaeed81"}, +] + +[package.dependencies] +click = ">=7.0" +oauthlib = ">=3.1.0" +pyjwt = ">=1.7.0" +requests = ">=2.17.3" +six = ">=1.10.0" +tabulate = ">=0.7.7" + [[package]] name = "dill" version = "0.3.6" @@ -680,6 +721,28 @@ files = [ {file = "distlib-0.3.6.tar.gz", hash = "sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46"}, ] +[[package]] +name = "docker" +version = "6.0.1" +description = "A Python library for the Docker Engine API." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "docker-6.0.1-py3-none-any.whl", hash = "sha256:dbcb3bd2fa80dca0788ed908218bf43972772009b881ed1e20dfc29a65e49782"}, + {file = "docker-6.0.1.tar.gz", hash = "sha256:896c4282e5c7af5c45e8b683b0b0c33932974fe6e50fc6906a0a83616ab3da97"}, +] + +[package.dependencies] +packaging = ">=14.0" +pywin32 = {version = ">=304", markers = "sys_platform == \"win32\""} +requests = ">=2.26.0" +urllib3 = ">=1.26.0" +websocket-client = ">=0.32.0" + +[package.extras] +ssh = ["paramiko (>=2.4.3)"] + [[package]] name = "docutils" version = "0.19" @@ -714,6 +777,18 @@ toml = ["toml"] vault = ["hvac"] yaml = ["ruamel.yaml"] +[[package]] +name = "entrypoints" +version = "0.4" +description = "Discover and load entry points from installed packages." +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "entrypoints-0.4-py3-none-any.whl", hash = "sha256:f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f"}, + {file = "entrypoints-0.4.tar.gz", hash = "sha256:b706eddaa9218a19ebcd67b56818f05bb27589b1ca9e8d797b74affad4ccacd4"}, +] + [[package]] name = "filelock" version = "3.8.2" @@ -730,6 +805,29 @@ files = [ docs = ["furo (>=2022.9.29)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.5)"] testing = ["covdefaults (>=2.2.2)", "coverage (>=6.5)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-timeout (>=2.1)"] +[[package]] +name = "flask" +version = "2.2.2" +description = "A simple framework for building complex web applications." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "Flask-2.2.2-py3-none-any.whl", hash = "sha256:b9c46cc36662a7949f34b52d8ec7bb59c0d74ba08ba6cb9ce9adc1d8676d9526"}, + {file = "Flask-2.2.2.tar.gz", hash = "sha256:642c450d19c4ad482f96729bd2a8f6d32554aa1e231f4f6b4e7e5264b16cca2b"}, +] + +[package.dependencies] +click = ">=8.0" +importlib-metadata = {version = ">=3.6.0", markers = "python_version < \"3.10\""} +itsdangerous = ">=2.0" +Jinja2 = ">=3.0" +Werkzeug = ">=2.2.2" + +[package.extras] +async = ["asgiref (>=3.2)"] +dotenv = ["python-dotenv"] + [[package]] name = "frozenlist" version = "1.3.3" @@ -895,6 +993,101 @@ files = [ [package.dependencies] six = "*" +[[package]] +name = "greenlet" +version = "2.0.2" +description = "Lightweight in-process concurrent programming" +category = "dev" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" +files = [ + {file = "greenlet-2.0.2-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:bdfea8c661e80d3c1c99ad7c3ff74e6e87184895bbaca6ee8cc61209f8b9b85d"}, + {file = "greenlet-2.0.2-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:9d14b83fab60d5e8abe587d51c75b252bcc21683f24699ada8fb275d7712f5a9"}, + {file = "greenlet-2.0.2-cp27-cp27m-win32.whl", hash = "sha256:6c3acb79b0bfd4fe733dff8bc62695283b57949ebcca05ae5c129eb606ff2d74"}, + {file = "greenlet-2.0.2-cp27-cp27m-win_amd64.whl", hash = "sha256:283737e0da3f08bd637b5ad058507e578dd462db259f7f6e4c5c365ba4ee9343"}, + {file = "greenlet-2.0.2-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:d27ec7509b9c18b6d73f2f5ede2622441de812e7b1a80bbd446cb0633bd3d5ae"}, + {file = "greenlet-2.0.2-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:30bcf80dda7f15ac77ba5af2b961bdd9dbc77fd4ac6105cee85b0d0a5fcf74df"}, + {file = "greenlet-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26fbfce90728d82bc9e6c38ea4d038cba20b7faf8a0ca53a9c07b67318d46088"}, + {file = "greenlet-2.0.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9190f09060ea4debddd24665d6804b995a9c122ef5917ab26e1566dcc712ceeb"}, + {file = "greenlet-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d75209eed723105f9596807495d58d10b3470fa6732dd6756595e89925ce2470"}, + {file = "greenlet-2.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3a51c9751078733d88e013587b108f1b7a1fb106d402fb390740f002b6f6551a"}, + {file = "greenlet-2.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:76ae285c8104046b3a7f06b42f29c7b73f77683df18c49ab5af7983994c2dd91"}, + {file = "greenlet-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:2d4686f195e32d36b4d7cf2d166857dbd0ee9f3d20ae349b6bf8afc8485b3645"}, + {file = "greenlet-2.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c4302695ad8027363e96311df24ee28978162cdcdd2006476c43970b384a244c"}, + {file = "greenlet-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c48f54ef8e05f04d6eff74b8233f6063cb1ed960243eacc474ee73a2ea8573ca"}, + {file = "greenlet-2.0.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a1846f1b999e78e13837c93c778dcfc3365902cfb8d1bdb7dd73ead37059f0d0"}, + {file = "greenlet-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a06ad5312349fec0ab944664b01d26f8d1f05009566339ac6f63f56589bc1a2"}, + {file = "greenlet-2.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:eff4eb9b7eb3e4d0cae3d28c283dc16d9bed6b193c2e1ace3ed86ce48ea8df19"}, + {file = "greenlet-2.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5454276c07d27a740c5892f4907c86327b632127dd9abec42ee62e12427ff7e3"}, + {file = "greenlet-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:7cafd1208fdbe93b67c7086876f061f660cfddc44f404279c1585bbf3cdc64c5"}, + {file = "greenlet-2.0.2-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:910841381caba4f744a44bf81bfd573c94e10b3045ee00de0cbf436fe50673a6"}, + {file = "greenlet-2.0.2-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:18a7f18b82b52ee85322d7a7874e676f34ab319b9f8cce5de06067384aa8ff43"}, + {file = "greenlet-2.0.2-cp35-cp35m-win32.whl", hash = "sha256:03a8f4f3430c3b3ff8d10a2a86028c660355ab637cee9333d63d66b56f09d52a"}, + {file = "greenlet-2.0.2-cp35-cp35m-win_amd64.whl", hash = "sha256:4b58adb399c4d61d912c4c331984d60eb66565175cdf4a34792cd9600f21b394"}, + {file = "greenlet-2.0.2-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:703f18f3fda276b9a916f0934d2fb6d989bf0b4fb5a64825260eb9bfd52d78f0"}, + {file = "greenlet-2.0.2-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:32e5b64b148966d9cccc2c8d35a671409e45f195864560829f395a54226408d3"}, + {file = "greenlet-2.0.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2dd11f291565a81d71dab10b7033395b7a3a5456e637cf997a6f33ebdf06f8db"}, + {file = "greenlet-2.0.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e0f72c9ddb8cd28532185f54cc1453f2c16fb417a08b53a855c4e6a418edd099"}, + {file = "greenlet-2.0.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd021c754b162c0fb55ad5d6b9d960db667faad0fa2ff25bb6e1301b0b6e6a75"}, + {file = "greenlet-2.0.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:3c9b12575734155d0c09d6c3e10dbd81665d5c18e1a7c6597df72fd05990c8cf"}, + {file = "greenlet-2.0.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b9ec052b06a0524f0e35bd8790686a1da006bd911dd1ef7d50b77bfbad74e292"}, + {file = "greenlet-2.0.2-cp36-cp36m-win32.whl", hash = "sha256:dbfcfc0218093a19c252ca8eb9aee3d29cfdcb586df21049b9d777fd32c14fd9"}, + {file = "greenlet-2.0.2-cp36-cp36m-win_amd64.whl", hash = "sha256:9f35ec95538f50292f6d8f2c9c9f8a3c6540bbfec21c9e5b4b751e0a7c20864f"}, + {file = "greenlet-2.0.2-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:d5508f0b173e6aa47273bdc0a0b5ba055b59662ba7c7ee5119528f466585526b"}, + {file = "greenlet-2.0.2-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:f82d4d717d8ef19188687aa32b8363e96062911e63ba22a0cff7802a8e58e5f1"}, + {file = "greenlet-2.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9c59a2120b55788e800d82dfa99b9e156ff8f2227f07c5e3012a45a399620b7"}, + {file = "greenlet-2.0.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2780572ec463d44c1d3ae850239508dbeb9fed38e294c68d19a24d925d9223ca"}, + {file = "greenlet-2.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:937e9020b514ceedb9c830c55d5c9872abc90f4b5862f89c0887033ae33c6f73"}, + {file = "greenlet-2.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:36abbf031e1c0f79dd5d596bfaf8e921c41df2bdf54ee1eed921ce1f52999a86"}, + {file = "greenlet-2.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:18e98fb3de7dba1c0a852731c3070cf022d14f0d68b4c87a19cc1016f3bb8b33"}, + {file = "greenlet-2.0.2-cp37-cp37m-win32.whl", hash = "sha256:3f6ea9bd35eb450837a3d80e77b517ea5bc56b4647f5502cd28de13675ee12f7"}, + {file = "greenlet-2.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:7492e2b7bd7c9b9916388d9df23fa49d9b88ac0640db0a5b4ecc2b653bf451e3"}, + {file = "greenlet-2.0.2-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:b864ba53912b6c3ab6bcb2beb19f19edd01a6bfcbdfe1f37ddd1778abfe75a30"}, + {file = "greenlet-2.0.2-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:ba2956617f1c42598a308a84c6cf021a90ff3862eddafd20c3333d50f0edb45b"}, + {file = "greenlet-2.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc3a569657468b6f3fb60587e48356fe512c1754ca05a564f11366ac9e306526"}, + {file = "greenlet-2.0.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8eab883b3b2a38cc1e050819ef06a7e6344d4a990d24d45bc6f2cf959045a45b"}, + {file = "greenlet-2.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acd2162a36d3de67ee896c43effcd5ee3de247eb00354db411feb025aa319857"}, + {file = "greenlet-2.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0bf60faf0bc2468089bdc5edd10555bab6e85152191df713e2ab1fcc86382b5a"}, + {file = "greenlet-2.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b0ef99cdbe2b682b9ccbb964743a6aca37905fda5e0452e5ee239b1654d37f2a"}, + {file = "greenlet-2.0.2-cp38-cp38-win32.whl", hash = "sha256:b80f600eddddce72320dbbc8e3784d16bd3fb7b517e82476d8da921f27d4b249"}, + {file = "greenlet-2.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:4d2e11331fc0c02b6e84b0d28ece3a36e0548ee1a1ce9ddde03752d9b79bba40"}, + {file = "greenlet-2.0.2-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:88d9ab96491d38a5ab7c56dd7a3cc37d83336ecc564e4e8816dbed12e5aaefc8"}, + {file = "greenlet-2.0.2-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:561091a7be172ab497a3527602d467e2b3fbe75f9e783d8b8ce403fa414f71a6"}, + {file = "greenlet-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:971ce5e14dc5e73715755d0ca2975ac88cfdaefcaab078a284fea6cfabf866df"}, + {file = "greenlet-2.0.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be4ed120b52ae4d974aa40215fcdfde9194d63541c7ded40ee12eb4dda57b76b"}, + {file = "greenlet-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94c817e84245513926588caf1152e3b559ff794d505555211ca041f032abbb6b"}, + {file = "greenlet-2.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1a819eef4b0e0b96bb0d98d797bef17dc1b4a10e8d7446be32d1da33e095dbb8"}, + {file = "greenlet-2.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7efde645ca1cc441d6dc4b48c0f7101e8d86b54c8530141b09fd31cef5149ec9"}, + {file = "greenlet-2.0.2-cp39-cp39-win32.whl", hash = "sha256:ea9872c80c132f4663822dd2a08d404073a5a9b5ba6155bea72fb2a79d1093b5"}, + {file = "greenlet-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:db1a39669102a1d8d12b57de2bb7e2ec9066a6f2b3da35ae511ff93b01b5d564"}, + {file = "greenlet-2.0.2.tar.gz", hash = "sha256:e7c8dc13af7db097bed64a051d2dd49e9f0af495c26995c00a9ee842690d34c0"}, +] + +[package.extras] +docs = ["Sphinx", "docutils (<0.18)"] +test = ["objgraph", "psutil"] + +[[package]] +name = "gunicorn" +version = "20.1.0" +description = "WSGI HTTP Server for UNIX" +category = "dev" +optional = false +python-versions = ">=3.5" +files = [ + {file = "gunicorn-20.1.0-py3-none-any.whl", hash = "sha256:9dcc4547dbb1cb284accfb15ab5667a0e5d1881cc443e0677b4882a4067a807e"}, + {file = "gunicorn-20.1.0.tar.gz", hash = "sha256:e0a968b5ba15f8a328fdfd7ab1fcb5af4470c28aaf7e55df02a99bc13138e6e8"}, +] + +[package.dependencies] +setuptools = ">=3.0" + +[package.extras] +eventlet = ["eventlet (>=0.24.1)"] +gevent = ["gevent (>=1.4.0)"] +setproctitle = ["setproctitle"] +tornado = ["tornado (>=0.2)"] + [[package]] name = "identify" version = "2.5.11" @@ -985,6 +1178,18 @@ files = [ {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, ] +[[package]] +name = "itsdangerous" +version = "2.1.2" +description = "Safely pass data to untrusted environments and back." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "itsdangerous-2.1.2-py3-none-any.whl", hash = "sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44"}, + {file = "itsdangerous-2.1.2.tar.gz", hash = "sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a"}, +] + [[package]] name = "jinja2" version = "3.1.2" @@ -1116,6 +1321,47 @@ video-videodataset = ["opencv-python (>=4.5.5.64,<4.6.0.0)"] yaml = ["PyYAML (>=4.2,<7.0)", "pandas (>=1.3,<2.0)"] yaml-yamldataset = ["PyYAML (>=4.2,<7.0)", "pandas (>=1.3,<2.0)"] +[[package]] +name = "kedro-mlflow" +version = "0.11.7" +description = "A kedro-plugin to use mlflow in your kedro projects" +category = "dev" +optional = false +python-versions = ">=3.7, <3.11" +files = [ + {file = "kedro_mlflow-0.11.7.tar.gz", hash = "sha256:0dab6d7ba49ab4bb748de967b03736e47c694408dff746c38fd2931ae3b2aef8"}, +] + +[package.dependencies] +kedro = ">=0.18.1,<0.19.0" +mlflow = ">=1.0.0,<2.0.0" +pydantic = ">=1.0.0,<2.0.0" + +[package.extras] +dev = ["jupyter (>=1.0.0,<2.0.0)", "pre-commit (>=2.0.0,<3.0.0)"] +doc = ["myst-parser (>=0.17.2,<0.19.0)", "sphinx (>=4.5.0,<7.0.0)", "sphinx-click (>=3.1,<4.5)", "sphinx-markdown-tables (>=0.0.15,<0.1.0)", "sphinx_copybutton (>=0.5.0,<0.6.0)", "sphinx_rtd_theme (>=1.0,<1.2)"] +test = ["black (==22.12.0)", "flake8 (==5.0.4)", "isort (==5.11.4)", "pytest (>=5.4.0,<8.0.0)", "pytest-cov (>=2.8.0,<5.0.0)", "pytest-lazy-fixture (>=0.6.0,<1.0.0)", "pytest-mock (>=3.1.0,<4.0.0)", "scikit-learn (>=0.23.0,<1.3.0)"] + +[[package]] +name = "mako" +version = "1.2.4" +description = "A super-fast templating language that borrows the best ideas from the existing templating languages." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "Mako-1.2.4-py3-none-any.whl", hash = "sha256:c97c79c018b9165ac9922ae4f32da095ffd3c4e6872b45eded42926deea46818"}, + {file = "Mako-1.2.4.tar.gz", hash = "sha256:d60a3903dc3bb01a18ad6a89cdbe2e4eadc69c0bc8ef1e3773ba53d44c3f7a34"}, +] + +[package.dependencies] +MarkupSafe = ">=0.9.2" + +[package.extras] +babel = ["Babel"] +lingua = ["lingua"] +testing = ["pytest"] + [[package]] name = "markupsafe" version = "2.1.1" @@ -1166,6 +1412,49 @@ files = [ {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, ] +[[package]] +name = "mlflow" +version = "1.27.0" +description = "MLflow: A Platform for ML Development and Productionization" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mlflow-1.27.0-py3-none-any.whl", hash = "sha256:d759f3eefad2ff509a0fbc10507224204c6f6bb8d7f437bbf0bb9961cf74ff95"}, + {file = "mlflow-1.27.0.tar.gz", hash = "sha256:6a1e34d6be266725e41d4547572a8425d86d6623e1c8888cf3f22b90019be0aa"}, +] + +[package.dependencies] +alembic = "*" +click = ">=7.0" +cloudpickle = "*" +databricks-cli = ">=0.8.7" +docker = ">=4.0.0" +entrypoints = "*" +Flask = "*" +gitpython = ">=2.1.0" +gunicorn = {version = "*", markers = "platform_system != \"Windows\""} +importlib-metadata = ">=3.7.0,<4.7.0 || >4.7.0" +numpy = "*" +packaging = "*" +pandas = "*" +prometheus-flask-exporter = "*" +protobuf = ">=3.12.0" +pytz = "*" +pyyaml = ">=5.1" +querystring-parser = "*" +requests = ">=2.17.3" +scipy = "*" +sqlalchemy = ">=1.4.0" +sqlparse = ">=0.3.1" +waitress = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +aliyun-oss = ["aliyunstoreplugin"] +extras = ["azureml-core (>=1.2.0)", "boto3", "google-cloud-storage (>=1.30.0)", "kubernetes", "mlserver (>=0.5.3)", "mlserver-mlflow (>=0.5.3)", "pyarrow", "pysftp", "scikit-learn", "virtualenv"] +pipelines = ["Jinja2 (>=3.0)", "ipython (>=7.0)", "markdown (>=3.3)", "pandas-profiling (>=3.1)", "pyarrow (>=7.0)", "scikit-learn (>=1.0)", "shap (>=0.40)"] +sqlserver = ["mlflow-dbstore"] + [[package]] name = "multidict" version = "6.0.4" @@ -1330,6 +1619,23 @@ files = [ {file = "numpy-1.24.1.tar.gz", hash = "sha256:2386da9a471cc00a1f47845e27d916d5ec5346ae9696e01a8a34760858fe9dd2"}, ] +[[package]] +name = "oauthlib" +version = "3.2.2" +description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "oauthlib-3.2.2-py3-none-any.whl", hash = "sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca"}, + {file = "oauthlib-3.2.2.tar.gz", hash = "sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918"}, +] + +[package.extras] +rsa = ["cryptography (>=3.0.0)"] +signals = ["blinker (>=1.4.0)"] +signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] + [[package]] name = "packaging" version = "22.0" @@ -1536,6 +1842,37 @@ nodeenv = ">=0.11.1" pyyaml = ">=5.1" virtualenv = ">=20.10.0" +[[package]] +name = "prometheus-client" +version = "0.16.0" +description = "Python client for the Prometheus monitoring system." +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "prometheus_client-0.16.0-py3-none-any.whl", hash = "sha256:0836af6eb2c8f4fed712b2f279f6c0a8bbab29f9f4aa15276b91c7cb0d1616ab"}, + {file = "prometheus_client-0.16.0.tar.gz", hash = "sha256:a03e35b359f14dd1630898543e2120addfdeacd1a6069c1367ae90fd93ad3f48"}, +] + +[package.extras] +twisted = ["twisted"] + +[[package]] +name = "prometheus-flask-exporter" +version = "0.21.0" +description = "Prometheus metrics exporter for Flask" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "prometheus_flask_exporter-0.21.0-py3-none-any.whl", hash = "sha256:6dc4a010c299d1ed94b6151d91f129c4513fb8aa04310db00be4ccb0006de400"}, + {file = "prometheus_flask_exporter-0.21.0.tar.gz", hash = "sha256:ebbc016c1e3d16e7cd39fe651a6c52ac68779858b2d5d1be6ddbc9e66f7fc29f"}, +] + +[package.dependencies] +flask = "*" +prometheus-client = "*" + [[package]] name = "protobuf" version = "3.20.3" @@ -1675,6 +2012,24 @@ files = [ [package.extras] plugins = ["importlib-metadata"] +[[package]] +name = "pyjwt" +version = "2.6.0" +description = "JSON Web Token implementation in Python" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "PyJWT-2.6.0-py3-none-any.whl", hash = "sha256:d83c3d892a77bbb74d3e1a2cfa90afaadb60945205d1095d9221f04466f64c14"}, + {file = "PyJWT-2.6.0.tar.gz", hash = "sha256:69285c7e31fc44f68a1feb309e948e0df53259d579295e6cfe2b1792329f05fd"}, +] + +[package.extras] +crypto = ["cryptography (>=3.4.0)"] +dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] +docs = ["sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] +tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] + [[package]] name = "pytest" version = "6.2.5" @@ -1787,6 +2142,30 @@ files = [ {file = "pytz-2022.7.tar.gz", hash = "sha256:7ccfae7b4b2c067464a6733c6261673fdb8fd1be905460396b97a073e9fa683a"}, ] +[[package]] +name = "pywin32" +version = "305" +description = "Python for Window Extensions" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "pywin32-305-cp310-cp310-win32.whl", hash = "sha256:421f6cd86e84bbb696d54563c48014b12a23ef95a14e0bdba526be756d89f116"}, + {file = "pywin32-305-cp310-cp310-win_amd64.whl", hash = "sha256:73e819c6bed89f44ff1d690498c0a811948f73777e5f97c494c152b850fad478"}, + {file = "pywin32-305-cp310-cp310-win_arm64.whl", hash = "sha256:742eb905ce2187133a29365b428e6c3b9001d79accdc30aa8969afba1d8470f4"}, + {file = "pywin32-305-cp311-cp311-win32.whl", hash = "sha256:19ca459cd2e66c0e2cc9a09d589f71d827f26d47fe4a9d09175f6aa0256b51c2"}, + {file = "pywin32-305-cp311-cp311-win_amd64.whl", hash = "sha256:326f42ab4cfff56e77e3e595aeaf6c216712bbdd91e464d167c6434b28d65990"}, + {file = "pywin32-305-cp311-cp311-win_arm64.whl", hash = "sha256:4ecd404b2c6eceaca52f8b2e3e91b2187850a1ad3f8b746d0796a98b4cea04db"}, + {file = "pywin32-305-cp36-cp36m-win32.whl", hash = "sha256:48d8b1659284f3c17b68587af047d110d8c44837736b8932c034091683e05863"}, + {file = "pywin32-305-cp36-cp36m-win_amd64.whl", hash = "sha256:13362cc5aa93c2beaf489c9c9017c793722aeb56d3e5166dadd5ef82da021fe1"}, + {file = "pywin32-305-cp37-cp37m-win32.whl", hash = "sha256:a55db448124d1c1484df22fa8bbcbc45c64da5e6eae74ab095b9ea62e6d00496"}, + {file = "pywin32-305-cp37-cp37m-win_amd64.whl", hash = "sha256:109f98980bfb27e78f4df8a51a8198e10b0f347257d1e265bb1a32993d0c973d"}, + {file = "pywin32-305-cp38-cp38-win32.whl", hash = "sha256:9dd98384da775afa009bc04863426cb30596fd78c6f8e4e2e5bbf4edf8029504"}, + {file = "pywin32-305-cp38-cp38-win_amd64.whl", hash = "sha256:56d7a9c6e1a6835f521788f53b5af7912090674bb84ef5611663ee1595860fc7"}, + {file = "pywin32-305-cp39-cp39-win32.whl", hash = "sha256:9d968c677ac4d5cbdaa62fd3014ab241718e619d8e36ef8e11fb930515a1e918"}, + {file = "pywin32-305-cp39-cp39-win_amd64.whl", hash = "sha256:50768c6b7c3f0b38b7fb14dd4104da93ebced5f1a50dc0e834594bff6fbe1271"}, +] + [[package]] name = "pyyaml" version = "6.0" @@ -1837,6 +2216,21 @@ files = [ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, ] +[[package]] +name = "querystring-parser" +version = "1.2.4" +description = "QueryString parser for Python/Django that correctly handles nested dictionaries" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "querystring_parser-1.2.4-py2.py3-none-any.whl", hash = "sha256:d2fa90765eaf0de96c8b087872991a10238e89ba015ae59fedfed6bd61c242a0"}, + {file = "querystring_parser-1.2.4.tar.gz", hash = "sha256:644fce1cffe0530453b43a83a38094dbe422ccba8c9b2f2a1c00280e14ca8a62"}, +] + +[package.dependencies] +six = "*" + [[package]] name = "recommonmark" version = "0.7.1" @@ -2000,6 +2394,45 @@ files = [ [package.dependencies] contextlib2 = ">=0.5.5" +[[package]] +name = "scipy" +version = "1.10.0" +description = "Fundamental algorithms for scientific computing in Python" +category = "dev" +optional = false +python-versions = "<3.12,>=3.8" +files = [ + {file = "scipy-1.10.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:b901b423c91281a974f6cd1c36f5c6c523e665b5a6d5e80fcb2334e14670eefd"}, + {file = "scipy-1.10.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:16ba05d3d1b9f2141004f3f36888e05894a525960b07f4c2bfc0456b955a00be"}, + {file = "scipy-1.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:151f066fe7d6653c3ffefd489497b8fa66d7316e3e0d0c0f7ff6acca1b802809"}, + {file = "scipy-1.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f9ea0a37aca111a407cb98aa4e8dfde6e5d9333bae06dfa5d938d14c80bb5c3"}, + {file = "scipy-1.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:27e548276b5a88b51212b61f6dda49a24acf5d770dff940bd372b3f7ced8c6c2"}, + {file = "scipy-1.10.0-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:42ab8b9e7dc1ebe248e55f54eea5307b6ab15011a7883367af48dd781d1312e4"}, + {file = "scipy-1.10.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:e096b062d2efdea57f972d232358cb068413dc54eec4f24158bcbb5cb8bddfd8"}, + {file = "scipy-1.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4df25a28bd22c990b22129d3c637fd5c3be4b7c94f975dca909d8bab3309b694"}, + {file = "scipy-1.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ad449db4e0820e4b42baccefc98ec772ad7818dcbc9e28b85aa05a536b0f1a2"}, + {file = "scipy-1.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:6faf86ef7717891195ae0537e48da7524d30bc3b828b30c9b115d04ea42f076f"}, + {file = "scipy-1.10.0-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:4bd0e3278126bc882d10414436e58fa3f1eca0aa88b534fcbf80ed47e854f46c"}, + {file = "scipy-1.10.0-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:38bfbd18dcc69eeb589811e77fae552fa923067fdfbb2e171c9eac749885f210"}, + {file = "scipy-1.10.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ab2a58064836632e2cec31ca197d3695c86b066bc4818052b3f5381bfd2a728"}, + {file = "scipy-1.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5cd7a30970c29d9768a7164f564d1fbf2842bfc77b7d114a99bc32703ce0bf48"}, + {file = "scipy-1.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:9b878c671655864af59c108c20e4da1e796154bd78c0ed6bb02bc41c84625686"}, + {file = "scipy-1.10.0-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:3afcbddb4488ac950ce1147e7580178b333a29cd43524c689b2e3543a080a2c8"}, + {file = "scipy-1.10.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:6e4497e5142f325a5423ff5fda2fff5b5d953da028637ff7c704378c8c284ea7"}, + {file = "scipy-1.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:441cab2166607c82e6d7a8683779cb89ba0f475b983c7e4ab88f3668e268c143"}, + {file = "scipy-1.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0490dc499fe23e4be35b8b6dd1e60a4a34f0c4adb30ac671e6332446b3cbbb5a"}, + {file = "scipy-1.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:954ff69d2d1bf666b794c1d7216e0a746c9d9289096a64ab3355a17c7c59db54"}, + {file = "scipy-1.10.0.tar.gz", hash = "sha256:c8b3cbc636a87a89b770c6afc999baa6bcbb01691b5ccbbc1b1791c7c0a07540"}, +] + +[package.dependencies] +numpy = ">=1.19.5,<1.27.0" + +[package.extras] +dev = ["click", "doit (>=0.36.0)", "flake8", "mypy", "pycodestyle", "pydevtool", "rich-click", "typing_extensions"] +doc = ["matplotlib (>2)", "numpydoc", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-design (>=0.2.0)"] +test = ["asv", "gmpy2", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] + [[package]] name = "setuptools" version = "65.6.3" @@ -2196,6 +2629,111 @@ files = [ lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] +[[package]] +name = "sqlalchemy" +version = "2.0.0" +description = "Database Abstraction Library" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "SQLAlchemy-2.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:807d4f83dcf0b7fd60b7af5f677e3d20151083c3454304813e450f6f6e4b4a5c"}, + {file = "SQLAlchemy-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:419228c073060face5e35388ddf00229f1be3664c91143f6e6897d67254589f7"}, + {file = "SQLAlchemy-2.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e052ae0c2a887472a74405e3afa5aa5c75cddc8a98a49bbf4a84a09dbc1cb896"}, + {file = "SQLAlchemy-2.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0bc643a0228179bfcbc8df81c8d197b843e48d97073f41f90ada8f6aad1614d"}, + {file = "SQLAlchemy-2.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:492dfab60c3df7105c97474a08408f15a506966340643eeaf40f59daa08a516e"}, + {file = "SQLAlchemy-2.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:20ef6ed15ecc17036523157e1f9900f0fa9163c29ce793d441b0bdd337057354"}, + {file = "SQLAlchemy-2.0.0-cp310-cp310-win32.whl", hash = "sha256:86bc43f80b3fdae55f2dc6a3b0a9fe6f5c69001763e4095998e467b068a037d2"}, + {file = "SQLAlchemy-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:6e6cb16419328100fc92ee676bcb09846034586461aeb96c89a072feb48c9a6d"}, + {file = "SQLAlchemy-2.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a0b4047d7d9405005637fbfd70122746c78f2dada934067bfdd439bc934cb5fb"}, + {file = "SQLAlchemy-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b850d709cddfe0fa03f0ce7d58389947813053a3cfd5c7cc2fa5a49b77b7f7b5"}, + {file = "SQLAlchemy-2.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:176ddfce8d720f90ffccfecfe66f41b1af8906bb74acc536068d067bdb0fd080"}, + {file = "SQLAlchemy-2.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef0794ed9ed2cc3c42475998baf3ead135ce3849e72993fd61c82722a1def8a5"}, + {file = "SQLAlchemy-2.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3758f3e12dd7a1448d8d2c5d4d36dc32a504a0ff6dded23b06d955c73f1b71b4"}, + {file = "SQLAlchemy-2.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7a2709d68ec901add77aa378253568905ba8112ae82ae8b3d3e85fd56b06f44d"}, + {file = "SQLAlchemy-2.0.0-cp311-cp311-win32.whl", hash = "sha256:c658c985830d4d80598387b2eca5944507acc9d52af8ec867d4c9fa0d4e27fd7"}, + {file = "SQLAlchemy-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:92b828f195bb967f85bda508bed5b4fe24b4ef0cac9ac2d9e403584ba504a304"}, + {file = "SQLAlchemy-2.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7b2231470060cd55b870806fb654f2ba66f7fc822f56fe594fa1fbd95e646da5"}, + {file = "SQLAlchemy-2.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:228851937becdbaeefdc937a3b43e9711b0a094eccc745f00b993ecd860a913b"}, + {file = "SQLAlchemy-2.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b4428bf59a5f12549f92f4274c8b2667313f105e36a7822c47727ea5572e0f7"}, + {file = "SQLAlchemy-2.0.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d1b1004e00023b37cc2385da670db28cb3dd96b9f01aafc3f9c437c030bf73f8"}, + {file = "SQLAlchemy-2.0.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a0f6d402a12ce2dc9243553ae8088459e94540b2afc4b4c3fc3a0272b9aa2827"}, + {file = "SQLAlchemy-2.0.0-cp37-cp37m-win32.whl", hash = "sha256:c1cae76f84755527c269ceb49e3a79ff370101bfd93d3f9d298bd7951e1b5e41"}, + {file = "SQLAlchemy-2.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:83db15a39539c6acb92075215aa68b9757085717d222ef678b0040cdf192adbb"}, + {file = "SQLAlchemy-2.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7c6934dfa9ab53853b1d31723ea2b8ea494de73ad3f36ea42f5859b74cb3afc3"}, + {file = "SQLAlchemy-2.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:05923707b416b7034c0b14e59e14614cb1432647188ba46bcfd911998cdea48d"}, + {file = "SQLAlchemy-2.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33a05cc9533a580f94a69852c8dea26d7dec0bc8182bb8d68180a5103c0b0add"}, + {file = "SQLAlchemy-2.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c6e4a17bbcb882fcff597d6ffdf113144383ea346bcae97079b96faaf7d460fb"}, + {file = "SQLAlchemy-2.0.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:54fa0308430ea13239557b6b38a41988ab9d0356420879b2e8b976f58c8b8229"}, + {file = "SQLAlchemy-2.0.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6c75b77de2fd99bd19a609c00e870325574000c441f7bdb0cd33d15961ed93bc"}, + {file = "SQLAlchemy-2.0.0-cp38-cp38-win32.whl", hash = "sha256:28f8371e07c66f7bd8d665c0532e68986e1616f0505bef05a9bcb384889f94f2"}, + {file = "SQLAlchemy-2.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:2051899b520a4332da0fe7098d155e0981044aed91567623c7aff4bd4addddc8"}, + {file = "SQLAlchemy-2.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0fb3b58ba21898b94255e86da5e3bfc15cf99e039babcaccaa2ce10b6322929e"}, + {file = "SQLAlchemy-2.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:77666361fdd70868a414762d0eead141183caf1e0cb6735484c0cad6d41ac869"}, + {file = "SQLAlchemy-2.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2dc81c03d4bccc82c81e4e21da5cea2071eca2fcddb248b462b151911c4b47b8"}, + {file = "SQLAlchemy-2.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b17bc162c317973d87613eac869cc50c1fef7a8b9d657b7d7f764ab5d9fee72"}, + {file = "SQLAlchemy-2.0.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7809546951b4a5ad1f0b5d5c87b42218af8c0574f50e89d141dfff531c069389"}, + {file = "SQLAlchemy-2.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:606f55614af6777261e54cb5d541a5c555539c5abc5e0b40d299c9a3bd06fae5"}, + {file = "SQLAlchemy-2.0.0-cp39-cp39-win32.whl", hash = "sha256:47348dad936e0899e2910853df1af736a84b3bddbd5dfe6471a5a39e00b32f06"}, + {file = "SQLAlchemy-2.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:13929b9806b002e3018a2f4d6666466298f43043c53b037a27520d8e8dad238d"}, + {file = "SQLAlchemy-2.0.0-py3-none-any.whl", hash = "sha256:192210daec1062e93fcc732de0c602c4b58097257c56874baa6e491849e82ceb"}, + {file = "SQLAlchemy-2.0.0.tar.gz", hash = "sha256:92388d03220eda6d744277a4d2cbcbb557509c7f7582215f61f8a04ec264be59"}, +] + +[package.dependencies] +greenlet = {version = "!=0.4.17", markers = "platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\""} +typing-extensions = ">=4.2.0" + +[package.extras] +aiomysql = ["aiomysql", "greenlet (!=0.4.17)"] +aiosqlite = ["aiosqlite", "greenlet (!=0.4.17)", "typing-extensions (!=3.10.0.1)"] +asyncio = ["greenlet (!=0.4.17)"] +asyncmy = ["asyncmy (>=0.2.3,!=0.2.4)", "greenlet (!=0.4.17)"] +mariadb-connector = ["mariadb (>=1.0.1,!=1.1.2,!=1.1.5)"] +mssql = ["pyodbc"] +mssql-pymssql = ["pymssql"] +mssql-pyodbc = ["pyodbc"] +mypy = ["mypy (>=0.910)"] +mysql = ["mysqlclient (>=1.4.0)"] +mysql-connector = ["mysql-connector-python"] +oracle = ["cx-oracle (>=7)"] +oracle-oracledb = ["oracledb (>=1.0.1)"] +postgresql = ["psycopg2 (>=2.7)"] +postgresql-asyncpg = ["asyncpg", "greenlet (!=0.4.17)"] +postgresql-pg8000 = ["pg8000 (>=1.29.1)"] +postgresql-psycopg = ["psycopg (>=3.0.7)"] +postgresql-psycopg2binary = ["psycopg2-binary"] +postgresql-psycopg2cffi = ["psycopg2cffi"] +pymysql = ["pymysql"] +sqlcipher = ["sqlcipher3-binary"] + +[[package]] +name = "sqlparse" +version = "0.4.3" +description = "A non-validating SQL parser." +category = "dev" +optional = false +python-versions = ">=3.5" +files = [ + {file = "sqlparse-0.4.3-py3-none-any.whl", hash = "sha256:0323c0ec29cd52bceabc1b4d9d579e311f3e4961b98d174201d5622a23b85e34"}, + {file = "sqlparse-0.4.3.tar.gz", hash = "sha256:69ca804846bb114d2ec380e4360a8a340db83f0ccf3afceeb1404df028f57268"}, +] + +[[package]] +name = "tabulate" +version = "0.9.0" +description = "Pretty-print tabular data" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f"}, + {file = "tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c"}, +] + +[package.extras] +widechars = ["wcwidth"] + [[package]] name = "tarsafe" version = "0.0.4" @@ -2332,6 +2870,57 @@ platformdirs = ">=2.4,<3" docs = ["proselint (>=0.13)", "sphinx (>=5.3)", "sphinx-argparse (>=0.3.2)", "sphinx-rtd-theme (>=1)", "towncrier (>=22.8)"] testing = ["coverage (>=6.2)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=21.3)", "pytest (>=7.0.1)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.2)", "pytest-mock (>=3.6.1)", "pytest-randomly (>=3.10.3)", "pytest-timeout (>=2.1)"] +[[package]] +name = "waitress" +version = "2.1.2" +description = "Waitress WSGI server" +category = "dev" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "waitress-2.1.2-py3-none-any.whl", hash = "sha256:7500c9625927c8ec60f54377d590f67b30c8e70ef4b8894214ac6e4cad233d2a"}, + {file = "waitress-2.1.2.tar.gz", hash = "sha256:780a4082c5fbc0fde6a2fcfe5e26e6efc1e8f425730863c04085769781f51eba"}, +] + +[package.extras] +docs = ["Sphinx (>=1.8.1)", "docutils", "pylons-sphinx-themes (>=1.0.9)"] +testing = ["coverage (>=5.0)", "pytest", "pytest-cover"] + +[[package]] +name = "websocket-client" +version = "1.5.0" +description = "WebSocket client for Python with low level API options" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "websocket-client-1.5.0.tar.gz", hash = "sha256:561ca949e5bbb5d33409a37235db55c279235c78ee407802f1d2314fff8a8536"}, + {file = "websocket_client-1.5.0-py3-none-any.whl", hash = "sha256:fb5d81b95d350f3a54838ebcb4c68a5353bbd1412ae8f068b1e5280faeb13074"}, +] + +[package.extras] +docs = ["Sphinx (>=3.4)", "sphinx-rtd-theme (>=0.5)"] +optional = ["python-socks", "wsaccel"] +test = ["websockets"] + +[[package]] +name = "werkzeug" +version = "2.2.2" +description = "The comprehensive WSGI web application library." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "Werkzeug-2.2.2-py3-none-any.whl", hash = "sha256:f979ab81f58d7318e064e99c4506445d60135ac5cd2e177a2de0089bfd4c9bd5"}, + {file = "Werkzeug-2.2.2.tar.gz", hash = "sha256:7ea2d48322cc7c0f8b3a215ed73eabd7b5d75d0b50e31ab006286ccff9e00b8f"}, +] + +[package.dependencies] +MarkupSafe = ">=2.1.1" + +[package.extras] +watchdog = ["watchdog"] + [[package]] name = "wheel" version = "0.38.4" @@ -2595,4 +3184,4 @@ cffi = ["cffi (>=1.11)"] [metadata] lock-version = "2.0" python-versions = ">=3.8,<3.11" -content-hash = "74580fef5b6710a35ca497fe35f2480500b798465e06113e9b2fb3feb19f9182" +content-hash = "6c85923ce54d48162085ecb19116c3cf30eafd2426999b856e17e0f751425314" diff --git a/pyproject.toml b/pyproject.toml index a2d9973..dfb4ce1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -21,6 +21,7 @@ numpy = "^1.23.5" pandas = "^1.5.2" pre-commit = "^2.20.0" recommonmark = "^0.7.1" +kedro-mlflow = "^0.11.6" [build-system] diff --git a/tests/conf/base/credentials.yml b/tests/conf/base/credentials.yml new file mode 100644 index 0000000..e69de29 diff --git a/tests/conf/base/mlflow.yml b/tests/conf/base/mlflow.yml new file mode 100644 index 0000000..e69de29 diff --git a/tests/conf/base/parameters.yml b/tests/conf/base/parameters.yml new file mode 100644 index 0000000..e69de29 diff --git a/tests/conftest.py b/tests/conftest.py index 5fc5f56..eda3802 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -95,3 +95,9 @@ def dummy_pipeline() -> Pipeline: node(identity, inputs="i3", outputs="output_data", name="node3"), ] ) + + +@pytest.fixture() +def no_mlflow(): + with patch.dict("sys.modules", {"mlflow": None}): + yield diff --git a/tests/test_cli.py b/tests/test_cli.py index c3c12fa..909cbbb 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -1,4 +1,5 @@ import json +import logging import os from pathlib import Path from unittest.mock import MagicMock, Mock, patch @@ -7,16 +8,17 @@ import pytest import yaml from click.testing import CliRunner -from sagemaker.workflow.pipeline import Pipeline as SageMakerPipeline from kedro_sagemaker import cli from kedro_sagemaker.config import KedroSageMakerPluginConfig from kedro_sagemaker.constants import ( KEDRO_SAGEMAKER_ARGS, KEDRO_SAGEMAKER_DEBUG, + KEDRO_SAGEMAKER_EXECUTION_ARN, KEDRO_SAGEMAKER_PARAM_KEY_PREFIX, KEDRO_SAGEMAKER_PARAM_VALUE_PREFIX, KEDRO_SAGEMAKER_WORKING_DIRECTORY, + MLFLOW_TAG_EXECUTION_ARN, ) from kedro_sagemaker.generator import KedroSageMakerGenerator from tests.utils import assert_has_any_call_with_args @@ -99,7 +101,7 @@ def test_can_compile_the_pipeline( @patch("click.confirm") @patch("subprocess.run", return_value=Mock(returncode=0)) -@patch("kedro_sagemaker.client.SageMakerClient") +@patch("kedro_sagemaker.cli.SageMakerClient") @pytest.mark.parametrize( "wait_for_completion", (False, True), ids=("no wait", "wait for completion") ) @@ -112,6 +114,14 @@ def test_can_compile_the_pipeline( "auto_build", (False, True), ids=("no auto-build", "with auto-build") ) @pytest.mark.parametrize("yes", (False, True), ids=("without --yes", "with --yes")) +@pytest.mark.parametrize( + "image", (None, "custom-image"), ids=("with default image", "with custom image") +) +@pytest.mark.parametrize( + "execution_role", + (None, "arn::yo"), + ids=("with default execution role", "with custom execution_role"), +) def test_can_run_the_pipeline( sagemaker_client, subprocess_run, @@ -122,20 +132,16 @@ def test_can_run_the_pipeline( cli_context, dummy_pipeline, yes: bool, + image: str, + execution_role: str, tmp_path: Path, wait_for_completion: bool, ): - mock_image = f"docker_image:{uuid4().hex}" - started_pipeline = MagicMock() + expected_image = image or "docker:image" + expected_execution_role = execution_role or "arn::unit/tests/role/arn" with patch.object( KedroSageMakerGenerator, "get_kedro_pipeline", return_value=dummy_pipeline - ), patch.object(SageMakerPipeline, "upsert") as upsert, patch.object( - SageMakerPipeline, "start", return_value=started_pipeline - ) as start, patch( - "sagemaker.model.Model" - ), patch( - "sagemaker.workflow.model_step.ModelStep" - ): + ), patch("sagemaker.model.Model"), patch("sagemaker.workflow.model_step.ModelStep"): runner = CliRunner() result = runner.invoke( cli.run, @@ -143,23 +149,26 @@ def test_can_run_the_pipeline( + (["--auto-build"] if auto_build else []) + (["--yes"] if yes else []) + (["--wait-for-completion"] if wait_for_completion else []) - + ["-i", mock_image], + + ["-i", image] + + ["--execution-role", execution_role], obj=cli_context, catch_exceptions=False, ) assert result.exit_code == 0 - sagemaker_client.run.asset_called_once() - upsert.assert_called_once() - start.assert_called_once() + sagemaker_client.return_value.run.asset_called_once() + sm_pipeline = sagemaker_client.call_args.args[0] + execution_role = sagemaker_client.call_args.args[1] + assert execution_role == expected_execution_role + assert sm_pipeline.steps[0].processor.image_uri == expected_image assert_docker_build = lambda: assert_has_any_call_with_args( # noqa: E731 subprocess_run, - ["docker", "build", str(Path.cwd().absolute()), "-t", mock_image], + ["docker", "build", str(Path.cwd().absolute()), "-t", expected_image], ) assert_docker_push = lambda: assert_has_any_call_with_args( # noqa: E731 - subprocess_run, ["docker", "push", mock_image] + subprocess_run, ["docker", "push", expected_image] ) # noqa: E731 if auto_build: @@ -175,10 +184,117 @@ def test_can_run_the_pipeline( with pytest.raises(AssertionError): assert_docker_push() - if wait_for_completion: - started_pipeline.wait.assert_called_once() - else: - started_pipeline.wait.assert_not_called() + assert ( + sagemaker_client.return_value.run.call_args.kwargs["wait_for_completion"] + == wait_for_completion + ) + + +@patch("mlflow.start_run") +@patch("mlflow.set_tag") +@patch("mlflow.get_experiment_by_name") +def test_mlflow_start( + mlflow_get_experiment_by_name, + mlflow_set_tag, + mlflow_start_run, + cli_context, + patched_kedro_package, +): + mlflow_get_experiment_by_name.return_value.experiment_id = 42 + runner = CliRunner() + with patch.dict( + os.environ, + {KEDRO_SAGEMAKER_EXECUTION_ARN: "execution-arn"}, + ): + result = runner.invoke( + cli.mlflow_start, obj=cli_context, catch_exceptions=False + ) + assert result.exit_code == 0 + + mlflow_start_run.assert_called_with(experiment_id=42, nested=False) + mlflow_set_tag.assert_called_with(MLFLOW_TAG_EXECUTION_ARN, "execution-arn") + + +@patch("kedro_sagemaker.cli.SageMakerPipelinesRunner") +@patch("mlflow.search_runs") +@patch("kedro_sagemaker.utils.KedroSession.run") +def test_mlflow_run_id_injection_in_execute( + kedro_session_run, + mlflow_search_runs, + sagemaker_pipelines_runner, + cli_context, + patched_kedro_package, +): + runner = CliRunner() + mlflow_search_runs.return_value = [MagicMock(info=MagicMock(run_id="abcdef"))] + with patch.dict( + os.environ, + {KEDRO_SAGEMAKER_EXECUTION_ARN: "execution-arn"}, + ): + + result = runner.invoke( + cli.execute, ["-n", "node"], obj=cli_context, catch_exceptions=False + ) + assert result.exit_code == 0 + assert os.environ["MLFLOW_RUN_ID"] == "abcdef" + + assert kedro_session_run.called_with("__default__", node_names=["node"]) + + +@patch("kedro_sagemaker.cli.SageMakerPipelinesRunner") +@patch("mlflow.search_runs") +@patch("kedro_sagemaker.utils.KedroSession.run") +def test_warn_if_unable_to_lookup_mlflow_run_id_in_execute( + kedro_session_run, + mlflow_search_runs, + sagemaker_pipelines_runner, + cli_context, + patched_kedro_package, + caplog, +): + runner = CliRunner() + mlflow_search_runs.return_value = [] + execution_arn = "pipeline/execution/arn" + with patch.dict( + os.environ, + {KEDRO_SAGEMAKER_EXECUTION_ARN: execution_arn}, + ), caplog.at_level(logging.WARN): + + result = runner.invoke( + cli.execute, ["-n", "node"], obj=cli_context, catch_exceptions=False + ) + assert result.exit_code == 0 + assert "MLFLOW_RUN_ID" not in os.environ + + assert ( + f"Unable to find parent mlflow run id for the current execution ({execution_arn})" + in caplog.text + ) + assert kedro_session_run.called_with("__default__", node_names=["node"]) + + +@patch("kedro_sagemaker.cli.SageMakerPipelinesRunner") +@patch("kedro_sagemaker.utils.KedroSession.run") +def test_no_mlflow_run_id_injected_if_mlflow_support_not_enabled( + kedro_session_run, + sagemaker_pipelines_runner, + cli_context, + patched_kedro_package, + no_mlflow, +): + runner = CliRunner() + with patch.dict( + os.environ, + {KEDRO_SAGEMAKER_EXECUTION_ARN: "execution-arn"}, + ): + + result = runner.invoke( + cli.execute, ["-n", "node"], obj=cli_context, catch_exceptions=False + ) + assert result.exit_code == 0 + assert "MLFLOW_RUN_ID" not in os.environ + + assert kedro_session_run.called_with("__default__", node_names=["node"]) @pytest.mark.parametrize("kedro_sagemaker_debug", ("0", "1")) diff --git a/tests/test_generator.py b/tests/test_generator.py index 9a0280d..9dab5e4 100644 --- a/tests/test_generator.py +++ b/tests/test_generator.py @@ -5,6 +5,7 @@ from kedro.io import DataCatalog from kedro.pipeline import node, pipeline from sagemaker.workflow import pipeline_context +from sagemaker.workflow.execution_variables import ExecutionVariables from sagemaker.workflow.steps import StepTypeEnum from kedro_sagemaker.config import _CONFIG_TEMPLATE, ResourceConfig @@ -23,7 +24,7 @@ @patch("kedro.framework.project.pipelines", {"__default__": sample_pipeline}) @patch("kedro.framework.context.KedroContext") -def test_should_generate_pipeline_with_processing_steps(context_mock): +def test_should_generate_pipeline_with_processing_steps(context_mock, no_mlflow): # given config = _CONFIG_TEMPLATE.copy(deep=True) generator = KedroSageMakerGenerator( @@ -152,7 +153,10 @@ def test_should_create_processor_based_on_the_config(context_mock): json.loads(processor.env["KEDRO_SAGEMAKER_RUNNER_CONFIG"])["bucket"] == "__bucket_name__" ) - assert "run_id" in json.loads(processor.env["KEDRO_SAGEMAKER_RUNNER_CONFIG"]) + assert ( + processor.env["KEDRO_SAGEMAKER_EXECUTION_ARN"] + == ExecutionVariables.PIPELINE_EXECUTION_ARN + ) @patch("kedro.framework.project.pipelines", {"__default__": sample_pipeline}) @@ -182,7 +186,7 @@ def test_should_use_default_resources_spec_in_processing_step(context_mock): @patch("kedro_sagemaker.generator.Model") @patch("kedro_sagemaker.generator.ModelStep") def test_should_generate_training_steps_and_register_model( - model_step_mock, model_mock, context_mock + model_step_mock, model_mock, context_mock, no_mlflow ): # given config = _CONFIG_TEMPLATE.copy(deep=True) @@ -211,8 +215,41 @@ def test_should_generate_training_steps_and_register_model( @patch("kedro.framework.context.KedroContext") @patch("kedro_sagemaker.generator.Model") @patch("kedro_sagemaker.generator.ModelStep") -def test_should_generate_training_steps_and_skip_model_registration( +def test_should_generate_training_steps_and_register_model_with_mlflow( model_step_mock, model_mock, context_mock +): + # given + config = _CONFIG_TEMPLATE.copy(deep=True) + config.docker.image = "__image_uri__" + context_mock.catalog = DataCatalog({"i2": SageMakerModelDataset()}) + context_mock.env = "base" + generator = KedroSageMakerGenerator( + "__default__", context_mock, config, is_local=False + ) + + # when + pipeline = generator.generate() + + # then + steps = {step.name: step for step in pipeline.steps} + assert len(steps) == 4 + assert "start-mlflow-run" in steps + assert steps["start-mlflow-run"].processor.entrypoint == [ + "kedro", + "sagemaker", + "-e", + "base", + "mlflow-start", + ] + assert steps["node1"].depends_on[0].name == "start-mlflow-run" + + +@patch("kedro.framework.project.pipelines", {"__default__": sample_pipeline}) +@patch("kedro.framework.context.KedroContext") +@patch("kedro_sagemaker.generator.Model") +@patch("kedro_sagemaker.generator.ModelStep") +def test_should_generate_training_steps_and_skip_model_registration( + model_step_mock, model_mock, context_mock, no_mlflow ): # given config = _CONFIG_TEMPLATE.copy(deep=True) @@ -236,7 +273,7 @@ def test_should_generate_training_steps_and_skip_model_registration( @patch("kedro_sagemaker.generator.Model") @patch("kedro_sagemaker.generator.ModelStep") def test_should_create_estimator_based_on_the_config( - model_step_mock, model_mock, context_mock + model_step_mock, model_mock, context_mock, no_mlflow ): # given config = _CONFIG_TEMPLATE.copy(deep=True) @@ -267,18 +304,19 @@ def test_should_create_estimator_based_on_the_config( == f"kedro sagemaker -e {env} execute --pipeline=__default__ --node=node1" ) assert estimator.environment["KEDRO_SAGEMAKER_WD"] == "/home/kedro" + assert ( + estimator.environment["KEDRO_SAGEMAKER_EXECUTION_ARN"] + == ExecutionVariables.PIPELINE_EXECUTION_ARN + ) assert ( json.loads(estimator.environment["KEDRO_SAGEMAKER_RUNNER_CONFIG"])["bucket"] == "__bucket_name__" ) - assert "run_id" in json.loads( - estimator.environment["KEDRO_SAGEMAKER_RUNNER_CONFIG"] - ) @patch("kedro.framework.project.pipelines", {"__default__": sample_pipeline}) @patch("kedro.framework.context.KedroContext") -def test_should_mark_node_as_estimator_if_it_exposes_metrics(context_mock): +def test_should_mark_node_as_estimator_if_it_exposes_metrics(context_mock, no_mlflow): # given context_mock.env = uuid4().hex config = _CONFIG_TEMPLATE.copy(deep=True) diff --git a/tests/test_runner.py b/tests/test_runner.py index ec2da29..35152ae 100644 --- a/tests/test_runner.py +++ b/tests/test_runner.py @@ -1,6 +1,13 @@ +import os +from unittest.mock import patch + from kedro.io import DataCatalog, MemoryDataSet from kedro.pipeline import Pipeline +from kedro_sagemaker.constants import ( + KEDRO_SAGEMAKER_EXECUTION_ARN, + KEDRO_SAGEMAKER_RUNNER_CONFIG, +) from kedro_sagemaker.runner import SageMakerPipelinesRunner @@ -32,3 +39,19 @@ def test_runner_fills_missing_datasets( catalog, ) assert results["output_data"] == input_data, "Invalid output data" + + +def test_runner_creating_default_datasets_based_on_execution_arn(): + with patch.dict( + os.environ, + { + KEDRO_SAGEMAKER_EXECUTION_ARN: "execution-arn", + KEDRO_SAGEMAKER_RUNNER_CONFIG: '{"bucket": "s3-bucket"}', + }, + ): + runner = SageMakerPipelinesRunner() + dataset = runner.create_default_data_set("output_data") + assert ( + dataset._get_target_path() + == "s3://s3-bucket/kedro-sagemaker-tmp/execution-arn/output_data.bin" + ) From c310093e78ae04f964503322c7d2b77350d5c5c7 Mon Sep 17 00:00:00 2001 From: github-actions Date: Wed, 8 Feb 2023 14:27:04 +0000 Subject: [PATCH 2/2] FIX #7 - Bump version and CHANGELOG for release 0.2.0 --- .bumpversion.cfg | 2 +- .copier-answers.yml | 2 +- CHANGELOG.md | 6 +++++- kedro_sagemaker/__init__.py | 2 +- pyproject.toml | 2 +- sonar-project.properties | 2 +- 6 files changed, 10 insertions(+), 6 deletions(-) diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 5645b11..bb36185 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.1.1 +current_version = 0.2.0 [bumpversion:file:pyproject.toml] diff --git a/.copier-answers.yml b/.copier-answers.yml index b438428..8dacc71 100644 --- a/.copier-answers.yml +++ b/.copier-answers.yml @@ -7,7 +7,7 @@ description: Kedro plugin with AWS SageMaker Pipelines support docs_url: https://kedro-sagemaker.readthedocs.io/ full_name: Kedro SageMaker Pipelines plugin github_url: https://github.com/getindata/kedro-sagemaker -initial_version: 0.1.1 +initial_version: 0.2.0 keywords: - kedro - sagemaker diff --git a/CHANGELOG.md b/CHANGELOG.md index 29d237c..1c65e6c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## [Unreleased] +## [0.2.0] - 2023-02-08 + - Support for Mlflow with shared run across pipeline steps - Fixed ability to overwrite docker image in `kedro sagemaker run` @@ -18,7 +20,9 @@ - Project seed prepared -[Unreleased]: https://github.com/getindata/kedro-sagemaker/compare/0.1.1...HEAD +[Unreleased]: https://github.com/getindata/kedro-sagemaker/compare/0.2.0...HEAD + +[0.2.0]: https://github.com/getindata/kedro-sagemaker/compare/0.1.1...0.2.0 [0.1.1]: https://github.com/getindata/kedro-sagemaker/compare/0.1.0...0.1.1 diff --git a/kedro_sagemaker/__init__.py b/kedro_sagemaker/__init__.py index 485f44a..d3ec452 100644 --- a/kedro_sagemaker/__init__.py +++ b/kedro_sagemaker/__init__.py @@ -1 +1 @@ -__version__ = "0.1.1" +__version__ = "0.2.0" diff --git a/pyproject.toml b/pyproject.toml index dfb4ce1..5914d25 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "kedro-sagemaker" -version = "0.1.1" +version = "0.2.0" description = "Kedro plugin with AWS SageMaker Pipelines support" readme = "README.md" authors = ['Marcin Zabłocki '] diff --git a/sonar-project.properties b/sonar-project.properties index 234a64d..3665699 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -6,7 +6,7 @@ sonar.tests=tests/ sonar.python.coverage.reportPaths=coverage.xml sonar.python.version=3.9 -sonar.projectVersion=0.1.1 +sonar.projectVersion=0.2.0 sonar.projectDescription=Kedro plugin with AWS SageMaker Pipelines support sonar.links.homepage=https://kedro-sagemaker.readthedocs.io/ sonar.links.ci=https://github.com/getindata/kedro-sagemaker/actions