ob-metaflow 2.12.36.3__tar.gz → 2.13.0.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of ob-metaflow might be problematic. Click here for more details.
- {ob_metaflow-2.12.36.3/ob_metaflow.egg-info → ob_metaflow-2.13.0.1}/PKG-INFO +3 -2
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/README.md +1 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/__init__.py +3 -0
- ob_metaflow-2.13.0.1/metaflow/cli.py +651 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/cli_args.py +17 -0
- ob_metaflow-2.13.0.1/metaflow/cli_components/dump_cmd.py +96 -0
- ob_metaflow-2.13.0.1/metaflow/cli_components/init_cmd.py +51 -0
- ob_metaflow-2.13.0.1/metaflow/cli_components/run_cmds.py +360 -0
- ob_metaflow-2.13.0.1/metaflow/cli_components/step_cmd.py +189 -0
- ob_metaflow-2.13.0.1/metaflow/cli_components/utils.py +140 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/cmd/develop/stub_generator.py +9 -2
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/datastore/flow_datastore.py +2 -2
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/decorators.py +63 -2
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/exception.py +8 -2
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/extension_support/plugins.py +41 -27
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/flowspec.py +175 -23
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/graph.py +28 -27
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/includefile.py +50 -22
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/lint.py +35 -20
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/metaflow_config.py +6 -1
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/package.py +17 -3
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/parameters.py +87 -23
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/__init__.py +4 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/airflow/airflow_cli.py +1 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/argo/argo_workflows.py +41 -1
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/argo/argo_workflows_cli.py +1 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/argo/argo_workflows_deployer_objects.py +47 -1
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/aws/batch/batch_decorator.py +2 -2
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/aws/secrets_manager/aws_secrets_manager_secrets_provider.py +13 -10
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/aws/step_functions/step_functions.py +32 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/aws/step_functions/step_functions_cli.py +1 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/aws/step_functions/step_functions_deployer_objects.py +3 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_creator.py +1 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_decorator.py +46 -8
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/kubernetes/kubernetes_decorator.py +2 -2
- ob_metaflow-2.13.0.1/metaflow/plugins/pypi/bootstrap.py +275 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/pypi/conda_decorator.py +20 -10
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/pypi/conda_environment.py +76 -21
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/pypi/micromamba.py +42 -15
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/pypi/pip.py +8 -3
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/pypi/pypi_decorator.py +11 -9
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/timeout_decorator.py +2 -2
- ob_metaflow-2.13.0.1/metaflow/runner/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/runner/click_api.py +240 -50
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/runner/deployer.py +1 -1
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/runner/deployer_impl.py +8 -3
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/runner/metaflow_runner.py +10 -2
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/runner/nbdeploy.py +2 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/runner/nbrun.py +1 -1
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/runner/subprocess_manager.py +3 -1
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/runner/utils.py +41 -19
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/runtime.py +111 -73
- ob_metaflow-2.13.0.1/metaflow/user_configs/__init__.py +0 -0
- ob_metaflow-2.13.0.1/metaflow/user_configs/config_decorators.py +563 -0
- ob_metaflow-2.13.0.1/metaflow/user_configs/config_options.py +548 -0
- ob_metaflow-2.13.0.1/metaflow/user_configs/config_parameters.py +405 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/util.py +17 -0
- ob_metaflow-2.13.0.1/metaflow/version.py +1 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1/ob_metaflow.egg-info}/PKG-INFO +3 -2
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/ob_metaflow.egg-info/SOURCES.txt +10 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/ob_metaflow.egg-info/requires.txt +1 -1
- ob_metaflow-2.12.36.3/metaflow/cli.py +0 -1189
- ob_metaflow-2.12.36.3/metaflow/plugins/pypi/bootstrap.py +0 -140
- ob_metaflow-2.12.36.3/metaflow/version.py +0 -1
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/LICENSE +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/MANIFEST.in +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/R.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/click/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/click/_bashcomplete.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/click/_compat.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/click/_termui_impl.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/click/_textwrap.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/click/_unicodefun.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/click/_winconsole.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/click/core.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/click/decorators.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/click/exceptions.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/click/formatting.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/click/globals.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/click/parser.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/click/termui.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/click/testing.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/click/types.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/click/utils.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/importlib_metadata/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/importlib_metadata/_adapters.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/importlib_metadata/_collections.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/importlib_metadata/_compat.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/importlib_metadata/_functools.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/importlib_metadata/_itertools.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/importlib_metadata/_meta.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/importlib_metadata/_text.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/importlib_metadata/py.typed +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/packaging/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/packaging/_elffile.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/packaging/_manylinux.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/packaging/_musllinux.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/packaging/_parser.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/packaging/_structures.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/packaging/_tokenizer.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/packaging/markers.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/packaging/py.typed +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/packaging/requirements.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/packaging/specifiers.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/packaging/tags.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/packaging/utils.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/packaging/version.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/typeguard/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/typeguard/_checkers.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/typeguard/_config.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/typeguard/_decorators.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/typeguard/_exceptions.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/typeguard/_functions.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/typeguard/_importhook.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/typeguard/_memo.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/typeguard/_pytest_plugin.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/typeguard/_suppression.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/typeguard/_transformer.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/typeguard/_union_transformer.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/typeguard/_utils.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/typeguard/py.typed +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/typing_extensions.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/v3_5/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/v3_5/importlib_metadata/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/v3_5/importlib_metadata/_compat.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/v3_5/zipp.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/v3_6/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/v3_6/importlib_metadata/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/v3_6/importlib_metadata/_adapters.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/v3_6/importlib_metadata/_collections.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/v3_6/importlib_metadata/_compat.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/v3_6/importlib_metadata/_functools.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/v3_6/importlib_metadata/_itertools.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/v3_6/importlib_metadata/_meta.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/v3_6/importlib_metadata/_text.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/v3_6/importlib_metadata/py.typed +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/v3_6/typing_extensions.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/v3_6/zipp.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/zipp.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/cards.py +0 -0
- {ob_metaflow-2.12.36.3/metaflow/plugins/airflow → ob_metaflow-2.13.0.1/metaflow/cli_components}/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/client/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/client/core.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/client/filecache.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/clone_util.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/cmd/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/cmd/configure_cmd.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/cmd/develop/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/cmd/develop/stubs.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/cmd/main_cli.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/cmd/tutorials_cmd.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/cmd/util.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/cmd_with_io.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/datastore/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/datastore/content_addressed_store.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/datastore/datastore_set.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/datastore/datastore_storage.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/datastore/exceptions.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/datastore/inputs.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/datastore/task_datastore.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/debug.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/event_logger.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/events.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/extension_support/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/extension_support/_empty_file.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/extension_support/cmd.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/extension_support/integrations.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/info_file.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/integrations.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/metadata_provider/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/metadata_provider/heartbeat.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/metadata_provider/metadata.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/metadata_provider/util.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/metaflow_config_funcs.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/metaflow_current.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/metaflow_environment.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/metaflow_profile.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/metaflow_version.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/mflog/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/mflog/mflog.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/mflog/save_logs.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/mflog/save_logs_periodically.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/mflog/tee.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/monitor.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/multicore_utils.py +0 -0
- {ob_metaflow-2.12.36.3/metaflow/plugins/airflow/plumbing → ob_metaflow-2.13.0.1/metaflow/plugins/airflow}/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/airflow/airflow.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/airflow/airflow_decorator.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/airflow/airflow_utils.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/airflow/dag.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/airflow/exception.py +0 -0
- {ob_metaflow-2.12.36.3/metaflow/plugins/argo → ob_metaflow-2.13.0.1/metaflow/plugins/airflow/plumbing}/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/airflow/plumbing/set_parameters.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/airflow/sensors/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/airflow/sensors/base_sensor.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/airflow/sensors/external_task_sensor.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/airflow/sensors/s3_sensor.py +0 -0
- {ob_metaflow-2.12.36.3/metaflow/plugins/aws → ob_metaflow-2.13.0.1/metaflow/plugins/argo}/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/argo/argo_client.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/argo/argo_events.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/argo/argo_workflows_decorator.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/argo/argo_workflows_deployer.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/argo/capture_error.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/argo/generate_input_paths.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/argo/jobset_input_paths.py +0 -0
- {ob_metaflow-2.12.36.3/metaflow/plugins/aws/batch → ob_metaflow-2.13.0.1/metaflow/plugins/aws}/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/aws/aws_client.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/aws/aws_utils.py +0 -0
- {ob_metaflow-2.12.36.3/metaflow/plugins/aws/secrets_manager → ob_metaflow-2.13.0.1/metaflow/plugins/aws/batch}/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/aws/batch/batch.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/aws/batch/batch_cli.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/aws/batch/batch_client.py +0 -0
- {ob_metaflow-2.12.36.3/metaflow/plugins/aws/step_functions → ob_metaflow-2.13.0.1/metaflow/plugins/aws/secrets_manager}/__init__.py +0 -0
- {ob_metaflow-2.12.36.3/metaflow/plugins/cards → ob_metaflow-2.13.0.1/metaflow/plugins/aws/step_functions}/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/aws/step_functions/dynamo_db_client.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/aws/step_functions/event_bridge_client.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/aws/step_functions/production_token.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/aws/step_functions/schedule_decorator.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/aws/step_functions/set_batch_environment.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/aws/step_functions/step_functions_client.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/aws/step_functions/step_functions_decorator.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/aws/step_functions/step_functions_deployer.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/azure/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/azure/azure_credential.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/azure/azure_exceptions.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/azure/azure_secret_manager_secrets_provider.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/azure/azure_tail.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/azure/azure_utils.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/azure/blob_service_client_factory.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/azure/includefile_support.py +0 -0
- {ob_metaflow-2.12.36.3/metaflow/plugins/datastores → ob_metaflow-2.13.0.1/metaflow/plugins/cards}/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_cli.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_client.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_datastore.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_modules/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_modules/base.html +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_modules/basic.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_modules/bundle.css +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_modules/card.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_modules/chevron/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_modules/chevron/main.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_modules/chevron/metadata.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_modules/chevron/renderer.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_modules/chevron/tokenizer.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_modules/components.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_modules/convert_to_native_type.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_modules/main.js +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_modules/renderer_tools.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_modules/test_cards.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_resolver.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_server.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_viewer/viewer.html +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/component_serializer.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/exception.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/catch_decorator.py +0 -0
- {ob_metaflow-2.12.36.3/metaflow/plugins/env_escape/configurations/emulate_test_lib → ob_metaflow-2.13.0.1/metaflow/plugins/datastores}/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/datastores/azure_storage.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/datastores/gs_storage.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/datastores/local_storage.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/datastores/s3_storage.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/datatools/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/datatools/local.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/datatools/s3/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/datatools/s3/s3.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/datatools/s3/s3op.py +3 -3
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/datatools/s3/s3tail.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/datatools/s3/s3util.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/debug_logger.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/debug_monitor.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/env_escape/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/env_escape/client.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/env_escape/client_modules.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/env_escape/communication/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/env_escape/communication/bytestream.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/env_escape/communication/channel.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/env_escape/communication/socket_bytestream.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/env_escape/communication/utils.py +0 -0
- {ob_metaflow-2.12.36.3/metaflow/plugins/frameworks → ob_metaflow-2.13.0.1/metaflow/plugins/env_escape/configurations/emulate_test_lib}/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/env_escape/configurations/emulate_test_lib/overrides.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/env_escape/configurations/emulate_test_lib/server_mappings.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/env_escape/configurations/test_lib_impl/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/env_escape/configurations/test_lib_impl/test_lib.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/env_escape/consts.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/env_escape/data_transferer.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/env_escape/exception_transferer.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/env_escape/override_decorators.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/env_escape/server.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/env_escape/stub.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/env_escape/utils.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/environment_decorator.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/events_decorator.py +0 -0
- {ob_metaflow-2.12.36.3/metaflow/plugins/kubernetes → ob_metaflow-2.13.0.1/metaflow/plugins/frameworks}/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/frameworks/pytorch.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/gcp/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/gcp/gcp_secret_manager_secrets_provider.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/gcp/gs_exceptions.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/gcp/gs_storage_client_factory.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/gcp/gs_tail.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/gcp/gs_utils.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/gcp/includefile_support.py +0 -0
- {ob_metaflow-2.12.36.3/metaflow/runner → ob_metaflow-2.13.0.1/metaflow/plugins/kubernetes}/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/kubernetes/kube_utils.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/kubernetes/kubernetes.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/kubernetes/kubernetes_cli.py +1 -1
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/kubernetes/kubernetes_client.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/kubernetes/kubernetes_job.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/kubernetes/kubernetes_jobsets.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/logs_cli.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/metadata_providers/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/metadata_providers/local.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/metadata_providers/service.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/package_cli.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/parallel_decorator.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/project_decorator.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/pypi/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/pypi/pypi_environment.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/pypi/utils.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/resources_decorator.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/retry_decorator.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/secrets/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/secrets/inline_secrets_provider.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/secrets/secrets_decorator.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/storage_executor.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/tag_cli.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/test_unbounded_foreach_decorator.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/procpoll.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/py.typed +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/pylint_wrapper.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/sidecar/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/sidecar/sidecar.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/sidecar/sidecar_messages.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/sidecar/sidecar_subprocess.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/sidecar/sidecar_worker.py +1 -1
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/system/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/system/system_logger.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/system/system_monitor.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/system/system_utils.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tagging_util.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/task.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tracing/__init__.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tracing/propagator.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tracing/span_exporter.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tracing/tracing_modules.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tuple_util.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/00-helloworld/README.md +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/00-helloworld/helloworld.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/01-playlist/README.md +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/01-playlist/movies.csv +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/01-playlist/playlist.ipynb +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/01-playlist/playlist.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/02-statistics/README.md +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/02-statistics/movies.csv +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/02-statistics/stats.ipynb +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/02-statistics/stats.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/03-playlist-redux/README.md +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/03-playlist-redux/playlist.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/04-playlist-plus/README.md +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/04-playlist-plus/playlist.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/05-hello-cloud/README.md +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/05-hello-cloud/hello-cloud.ipynb +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/05-hello-cloud/hello-cloud.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/06-statistics-redux/README.md +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/06-statistics-redux/stats.ipynb +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/07-worldview/README.md +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/07-worldview/worldview.ipynb +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/08-autopilot/README.md +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/08-autopilot/autopilot.ipynb +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/unbounded_foreach.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/vendor.py +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/ob_metaflow.egg-info/dependency_links.txt +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/ob_metaflow.egg-info/entry_points.txt +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/ob_metaflow.egg-info/top_level.txt +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/setup.cfg +0 -0
- {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ob-metaflow
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.13.0.1
|
|
4
4
|
Summary: Metaflow: More Data Science, Less Engineering
|
|
5
5
|
Author: Netflix, Outerbounds & the Metaflow Community
|
|
6
6
|
Author-email: help@outerbounds.co
|
|
@@ -12,7 +12,7 @@ Requires-Dist: boto3
|
|
|
12
12
|
Requires-Dist: pylint
|
|
13
13
|
Requires-Dist: kubernetes
|
|
14
14
|
Provides-Extra: stubs
|
|
15
|
-
Requires-Dist: metaflow-stubs==2.
|
|
15
|
+
Requires-Dist: metaflow-stubs==2.13.0.1; extra == "stubs"
|
|
16
16
|
|
|
17
17
|

|
|
18
18
|
|
|
@@ -83,3 +83,4 @@ There are several ways to get in touch with us:
|
|
|
83
83
|
|
|
84
84
|
## Contributing
|
|
85
85
|
We welcome contributions to Metaflow. Please see our [contribution guide](https://docs.metaflow.org/introduction/contributing-to-metaflow) for more details.
|
|
86
|
+
|
|
@@ -103,6 +103,9 @@ from .flowspec import FlowSpec
|
|
|
103
103
|
|
|
104
104
|
from .parameters import Parameter, JSONTypeClass, JSONType
|
|
105
105
|
|
|
106
|
+
from .user_configs.config_parameters import Config, ConfigValue, config_expr
|
|
107
|
+
from .user_configs.config_decorators import CustomFlowDecorator, CustomStepDecorator
|
|
108
|
+
|
|
106
109
|
# data layer
|
|
107
110
|
# For historical reasons, we make metaflow.plugins.datatools accessible as
|
|
108
111
|
# metaflow.datatools. S3 is also a tool that has historically been available at the
|
|
@@ -0,0 +1,651 @@
|
|
|
1
|
+
import functools
|
|
2
|
+
import inspect
|
|
3
|
+
import sys
|
|
4
|
+
import traceback
|
|
5
|
+
from datetime import datetime
|
|
6
|
+
|
|
7
|
+
import metaflow.tracing as tracing
|
|
8
|
+
from metaflow._vendor import click
|
|
9
|
+
|
|
10
|
+
from . import decorators, lint, metaflow_version, parameters, plugins
|
|
11
|
+
from .cli_args import cli_args
|
|
12
|
+
from .cli_components.utils import LazyGroup, LazyPluginCommandCollection
|
|
13
|
+
from .datastore import FlowDataStore, TaskDataStoreSet
|
|
14
|
+
from .debug import debug
|
|
15
|
+
from .exception import CommandException, MetaflowException
|
|
16
|
+
from .flowspec import _FlowState
|
|
17
|
+
from .graph import FlowGraph
|
|
18
|
+
from .metaflow_config import (
|
|
19
|
+
DECOSPECS,
|
|
20
|
+
DEFAULT_DATASTORE,
|
|
21
|
+
DEFAULT_ENVIRONMENT,
|
|
22
|
+
DEFAULT_EVENT_LOGGER,
|
|
23
|
+
DEFAULT_METADATA,
|
|
24
|
+
DEFAULT_MONITOR,
|
|
25
|
+
DEFAULT_PACKAGE_SUFFIXES,
|
|
26
|
+
)
|
|
27
|
+
from .metaflow_current import current
|
|
28
|
+
from metaflow.system import _system_monitor, _system_logger
|
|
29
|
+
from .metaflow_environment import MetaflowEnvironment
|
|
30
|
+
from .plugins import (
|
|
31
|
+
DATASTORES,
|
|
32
|
+
ENVIRONMENTS,
|
|
33
|
+
LOGGING_SIDECARS,
|
|
34
|
+
METADATA_PROVIDERS,
|
|
35
|
+
MONITOR_SIDECARS,
|
|
36
|
+
)
|
|
37
|
+
from .pylint_wrapper import PyLint
|
|
38
|
+
from .R import metaflow_r_version, use_r
|
|
39
|
+
from .util import get_latest_run_id, resolve_identity
|
|
40
|
+
from .user_configs.config_options import LocalFileInput, config_options
|
|
41
|
+
from .user_configs.config_parameters import ConfigValue
|
|
42
|
+
|
|
43
|
+
ERASE_TO_EOL = "\033[K"
|
|
44
|
+
HIGHLIGHT = "red"
|
|
45
|
+
INDENT = " " * 4
|
|
46
|
+
|
|
47
|
+
LOGGER_TIMESTAMP = "magenta"
|
|
48
|
+
LOGGER_COLOR = "green"
|
|
49
|
+
LOGGER_BAD_COLOR = "red"
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def echo_dev_null(*args, **kwargs):
|
|
53
|
+
pass
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def echo_always(line, **kwargs):
|
|
57
|
+
kwargs["err"] = kwargs.get("err", True)
|
|
58
|
+
if kwargs.pop("indent", None):
|
|
59
|
+
line = "\n".join(INDENT + x for x in line.splitlines())
|
|
60
|
+
if "nl" not in kwargs or kwargs["nl"]:
|
|
61
|
+
line += ERASE_TO_EOL
|
|
62
|
+
top = kwargs.pop("padding_top", None)
|
|
63
|
+
bottom = kwargs.pop("padding_bottom", None)
|
|
64
|
+
highlight = kwargs.pop("highlight", HIGHLIGHT)
|
|
65
|
+
if top:
|
|
66
|
+
click.secho(ERASE_TO_EOL, **kwargs)
|
|
67
|
+
|
|
68
|
+
hl_bold = kwargs.pop("highlight_bold", True)
|
|
69
|
+
nl = kwargs.pop("nl", True)
|
|
70
|
+
fg = kwargs.pop("fg", None)
|
|
71
|
+
bold = kwargs.pop("bold", False)
|
|
72
|
+
kwargs["nl"] = False
|
|
73
|
+
hl = True
|
|
74
|
+
nobold = kwargs.pop("no_bold", False)
|
|
75
|
+
if nobold:
|
|
76
|
+
click.secho(line, **kwargs)
|
|
77
|
+
else:
|
|
78
|
+
for span in line.split("*"):
|
|
79
|
+
if hl:
|
|
80
|
+
hl = False
|
|
81
|
+
kwargs["fg"] = fg
|
|
82
|
+
kwargs["bold"] = bold
|
|
83
|
+
click.secho(span, **kwargs)
|
|
84
|
+
else:
|
|
85
|
+
hl = True
|
|
86
|
+
kwargs["fg"] = highlight
|
|
87
|
+
kwargs["bold"] = hl_bold
|
|
88
|
+
click.secho(span, **kwargs)
|
|
89
|
+
if nl:
|
|
90
|
+
kwargs["nl"] = True
|
|
91
|
+
click.secho("", **kwargs)
|
|
92
|
+
if bottom:
|
|
93
|
+
click.secho(ERASE_TO_EOL, **kwargs)
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def logger(body="", system_msg=False, head="", bad=False, timestamp=True, nl=True):
|
|
97
|
+
if timestamp:
|
|
98
|
+
if timestamp is True:
|
|
99
|
+
dt = datetime.now()
|
|
100
|
+
else:
|
|
101
|
+
dt = timestamp
|
|
102
|
+
tstamp = dt.strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]
|
|
103
|
+
click.secho(tstamp + " ", fg=LOGGER_TIMESTAMP, nl=False)
|
|
104
|
+
if head:
|
|
105
|
+
click.secho(head, fg=LOGGER_COLOR, nl=False)
|
|
106
|
+
click.secho(body, bold=system_msg, fg=LOGGER_BAD_COLOR if bad else None, nl=nl)
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def config_merge_cb(ctx, param, value):
|
|
110
|
+
# Callback to:
|
|
111
|
+
# - read the Click auto_envvar variable from both the
|
|
112
|
+
# environment AND the configuration
|
|
113
|
+
# - merge that value with the value passed in the command line (value)
|
|
114
|
+
# - return the value as a tuple
|
|
115
|
+
# Note that this function gets called even if there is no option passed on the
|
|
116
|
+
# command line.
|
|
117
|
+
# NOTE: Assumes that ctx.auto_envvar_prefix is set to METAFLOW (same as in
|
|
118
|
+
# from_conf)
|
|
119
|
+
|
|
120
|
+
# Special case where DECOSPECS and value are the same. This happens
|
|
121
|
+
# when there is no --with option at the TL and DECOSPECS is read from
|
|
122
|
+
# the env var. In this case, click also passes it as value
|
|
123
|
+
splits = DECOSPECS.split()
|
|
124
|
+
if len(splits) == len(value) and all([a == b for (a, b) in zip(splits, value)]):
|
|
125
|
+
return value
|
|
126
|
+
return tuple(list(value) + DECOSPECS.split())
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
@click.group(
|
|
130
|
+
cls=LazyGroup,
|
|
131
|
+
lazy_subcommands={
|
|
132
|
+
"init": "metaflow.cli_components.init_cmd.init",
|
|
133
|
+
"dump": "metaflow.cli_components.dump_cmd.dump",
|
|
134
|
+
"step": "metaflow.cli_components.step_cmd.step",
|
|
135
|
+
"run": "metaflow.cli_components.run_cmds.run",
|
|
136
|
+
"resume": "metaflow.cli_components.run_cmds.resume",
|
|
137
|
+
},
|
|
138
|
+
)
|
|
139
|
+
def cli(ctx):
|
|
140
|
+
pass
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
@cli.command(help="Check that the flow is valid (default).")
|
|
144
|
+
@click.option(
|
|
145
|
+
"--warnings/--no-warnings",
|
|
146
|
+
default=False,
|
|
147
|
+
show_default=True,
|
|
148
|
+
help="Show all Pylint warnings, not just errors.",
|
|
149
|
+
)
|
|
150
|
+
@click.pass_obj
|
|
151
|
+
def check(obj, warnings=False):
|
|
152
|
+
if obj.is_quiet:
|
|
153
|
+
echo = echo_dev_null
|
|
154
|
+
else:
|
|
155
|
+
echo = echo_always
|
|
156
|
+
_check(
|
|
157
|
+
echo, obj.graph, obj.flow, obj.environment, pylint=obj.pylint, warnings=warnings
|
|
158
|
+
)
|
|
159
|
+
fname = inspect.getfile(obj.flow.__class__)
|
|
160
|
+
echo(
|
|
161
|
+
"\n*'{cmd} show'* shows a description of this flow.\n"
|
|
162
|
+
"*'{cmd} run'* runs the flow locally.\n"
|
|
163
|
+
"*'{cmd} help'* shows all available commands and options.\n".format(cmd=fname),
|
|
164
|
+
highlight="magenta",
|
|
165
|
+
highlight_bold=False,
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
@cli.command(help="Show structure of the flow.")
|
|
170
|
+
@click.pass_obj
|
|
171
|
+
def show(obj):
|
|
172
|
+
echo_always("\n%s" % obj.graph.doc)
|
|
173
|
+
for node_name in obj.graph.sorted_nodes:
|
|
174
|
+
node = obj.graph[node_name]
|
|
175
|
+
echo_always("\nStep *%s*" % node.name, err=False)
|
|
176
|
+
echo_always(node.doc if node.doc else "?", indent=True, err=False)
|
|
177
|
+
if node.type != "end":
|
|
178
|
+
echo_always(
|
|
179
|
+
"*=>* %s" % ", ".join("*%s*" % n for n in node.out_funcs),
|
|
180
|
+
indent=True,
|
|
181
|
+
highlight="magenta",
|
|
182
|
+
highlight_bold=False,
|
|
183
|
+
err=False,
|
|
184
|
+
)
|
|
185
|
+
echo_always("")
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
@cli.command(help="Show all available commands.")
|
|
189
|
+
@click.pass_context
|
|
190
|
+
def help(ctx):
|
|
191
|
+
print(ctx.parent.get_help())
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
@cli.command(help="Output internal state of the flow graph.")
|
|
195
|
+
@click.option("--json", is_flag=True, help="Output the flow graph in JSON format.")
|
|
196
|
+
@click.pass_obj
|
|
197
|
+
def output_raw(obj, json):
|
|
198
|
+
if json:
|
|
199
|
+
import json as _json
|
|
200
|
+
|
|
201
|
+
_msg = "Internal representation of the flow in JSON format:"
|
|
202
|
+
_graph_dict, _graph_struct = obj.graph.output_steps()
|
|
203
|
+
_graph = _json.dumps(
|
|
204
|
+
dict(graph=_graph_dict, graph_structure=_graph_struct), indent=4
|
|
205
|
+
)
|
|
206
|
+
else:
|
|
207
|
+
_graph = str(obj.graph)
|
|
208
|
+
_msg = "Internal representation of the flow:"
|
|
209
|
+
echo(_msg, fg="magenta", bold=False)
|
|
210
|
+
echo_always(_graph, err=False)
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
@cli.command(help="Visualize the flow with Graphviz.")
|
|
214
|
+
@click.pass_obj
|
|
215
|
+
def output_dot(obj):
|
|
216
|
+
echo("Visualizing the flow as a GraphViz graph", fg="magenta", bold=False)
|
|
217
|
+
echo(
|
|
218
|
+
"Try piping the output to 'dot -Tpng -o graph.png' to produce "
|
|
219
|
+
"an actual image.",
|
|
220
|
+
indent=True,
|
|
221
|
+
)
|
|
222
|
+
echo_always(obj.graph.output_dot(), err=False)
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
@cli.command(help="Print the Metaflow version")
|
|
226
|
+
@click.pass_obj
|
|
227
|
+
def version(obj):
|
|
228
|
+
echo_always(obj.version)
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
# NOTE: add_decorator_options should be TL because it checks to make sure
|
|
232
|
+
# that no option conflict with the ones below
|
|
233
|
+
@decorators.add_decorator_options
|
|
234
|
+
@config_options
|
|
235
|
+
@click.command(
|
|
236
|
+
cls=LazyPluginCommandCollection,
|
|
237
|
+
sources=[cli],
|
|
238
|
+
lazy_sources=plugins.get_plugin_cli_path(),
|
|
239
|
+
invoke_without_command=True,
|
|
240
|
+
)
|
|
241
|
+
@tracing.cli_entrypoint("cli/start")
|
|
242
|
+
# Quiet is eager to make sure it is available when processing --config options since
|
|
243
|
+
# we need it to construct a context to pass to any DeployTimeField for the default
|
|
244
|
+
# value.
|
|
245
|
+
@click.option(
|
|
246
|
+
"--quiet/--not-quiet",
|
|
247
|
+
show_default=True,
|
|
248
|
+
default=False,
|
|
249
|
+
help="Suppress unnecessary messages",
|
|
250
|
+
is_eager=True,
|
|
251
|
+
)
|
|
252
|
+
@click.option(
|
|
253
|
+
"--metadata",
|
|
254
|
+
default=DEFAULT_METADATA,
|
|
255
|
+
show_default=True,
|
|
256
|
+
type=click.Choice([m.TYPE for m in METADATA_PROVIDERS]),
|
|
257
|
+
help="Metadata service type",
|
|
258
|
+
)
|
|
259
|
+
@click.option(
|
|
260
|
+
"--environment",
|
|
261
|
+
default=DEFAULT_ENVIRONMENT,
|
|
262
|
+
show_default=True,
|
|
263
|
+
type=click.Choice(["local"] + [m.TYPE for m in ENVIRONMENTS]),
|
|
264
|
+
help="Execution environment type",
|
|
265
|
+
)
|
|
266
|
+
# See comment for --quiet
|
|
267
|
+
@click.option(
|
|
268
|
+
"--datastore",
|
|
269
|
+
default=DEFAULT_DATASTORE,
|
|
270
|
+
show_default=True,
|
|
271
|
+
type=click.Choice([d.TYPE for d in DATASTORES]),
|
|
272
|
+
help="Data backend type",
|
|
273
|
+
is_eager=True,
|
|
274
|
+
)
|
|
275
|
+
@click.option("--datastore-root", help="Root path for datastore")
|
|
276
|
+
@click.option(
|
|
277
|
+
"--package-suffixes",
|
|
278
|
+
help="A comma-separated list of file suffixes to include in the code package.",
|
|
279
|
+
default=DEFAULT_PACKAGE_SUFFIXES,
|
|
280
|
+
show_default=True,
|
|
281
|
+
)
|
|
282
|
+
@click.option(
|
|
283
|
+
"--with",
|
|
284
|
+
"decospecs",
|
|
285
|
+
multiple=True,
|
|
286
|
+
help="Add a decorator to all steps. You can specify this option "
|
|
287
|
+
"multiple times to attach multiple decorators in steps.",
|
|
288
|
+
callback=config_merge_cb,
|
|
289
|
+
)
|
|
290
|
+
@click.option(
|
|
291
|
+
"--pylint/--no-pylint",
|
|
292
|
+
default=True,
|
|
293
|
+
show_default=True,
|
|
294
|
+
help="Run Pylint on the flow if pylint is installed.",
|
|
295
|
+
)
|
|
296
|
+
@click.option(
|
|
297
|
+
"--event-logger",
|
|
298
|
+
default=DEFAULT_EVENT_LOGGER,
|
|
299
|
+
show_default=True,
|
|
300
|
+
type=click.Choice(LOGGING_SIDECARS),
|
|
301
|
+
help="type of event logger used",
|
|
302
|
+
)
|
|
303
|
+
@click.option(
|
|
304
|
+
"--monitor",
|
|
305
|
+
default=DEFAULT_MONITOR,
|
|
306
|
+
show_default=True,
|
|
307
|
+
type=click.Choice(MONITOR_SIDECARS),
|
|
308
|
+
help="Monitoring backend type",
|
|
309
|
+
)
|
|
310
|
+
@click.option(
|
|
311
|
+
"--local-config-file",
|
|
312
|
+
type=LocalFileInput(exists=True, readable=True, dir_okay=False, resolve_path=True),
|
|
313
|
+
required=False,
|
|
314
|
+
default=None,
|
|
315
|
+
help="A filename containing the dumped configuration values. Internal use only.",
|
|
316
|
+
hidden=True,
|
|
317
|
+
is_eager=True,
|
|
318
|
+
)
|
|
319
|
+
@click.pass_context
|
|
320
|
+
def start(
|
|
321
|
+
ctx,
|
|
322
|
+
quiet=False,
|
|
323
|
+
metadata=None,
|
|
324
|
+
environment=None,
|
|
325
|
+
datastore=None,
|
|
326
|
+
datastore_root=None,
|
|
327
|
+
decospecs=None,
|
|
328
|
+
package_suffixes=None,
|
|
329
|
+
pylint=None,
|
|
330
|
+
event_logger=None,
|
|
331
|
+
monitor=None,
|
|
332
|
+
local_config_file=None,
|
|
333
|
+
config_file=None,
|
|
334
|
+
config_value=None,
|
|
335
|
+
**deco_options
|
|
336
|
+
):
|
|
337
|
+
if quiet:
|
|
338
|
+
echo = echo_dev_null
|
|
339
|
+
else:
|
|
340
|
+
echo = echo_always
|
|
341
|
+
|
|
342
|
+
ctx.obj.version = metaflow_version.get_version()
|
|
343
|
+
version = ctx.obj.version
|
|
344
|
+
if use_r():
|
|
345
|
+
version = metaflow_r_version()
|
|
346
|
+
|
|
347
|
+
echo("Metaflow %s" % version, fg="magenta", bold=True, nl=False)
|
|
348
|
+
echo(" executing *%s*" % ctx.obj.flow.name, fg="magenta", nl=False)
|
|
349
|
+
echo(" for *%s*" % resolve_identity(), fg="magenta")
|
|
350
|
+
|
|
351
|
+
# Setup the context
|
|
352
|
+
cli_args._set_top_kwargs(ctx.params)
|
|
353
|
+
ctx.obj.echo = echo
|
|
354
|
+
ctx.obj.echo_always = echo_always
|
|
355
|
+
ctx.obj.is_quiet = quiet
|
|
356
|
+
ctx.obj.logger = logger
|
|
357
|
+
ctx.obj.pylint = pylint
|
|
358
|
+
ctx.obj.check = functools.partial(_check, echo)
|
|
359
|
+
ctx.obj.top_cli = cli
|
|
360
|
+
ctx.obj.package_suffixes = package_suffixes.split(",")
|
|
361
|
+
|
|
362
|
+
ctx.obj.datastore_impl = [d for d in DATASTORES if d.TYPE == datastore][0]
|
|
363
|
+
|
|
364
|
+
if datastore_root is None:
|
|
365
|
+
datastore_root = ctx.obj.datastore_impl.get_datastore_root_from_config(
|
|
366
|
+
ctx.obj.echo
|
|
367
|
+
)
|
|
368
|
+
if datastore_root is None:
|
|
369
|
+
raise CommandException(
|
|
370
|
+
"Could not find the location of the datastore -- did you correctly set the "
|
|
371
|
+
"METAFLOW_DATASTORE_SYSROOT_%s environment variable?" % datastore.upper()
|
|
372
|
+
)
|
|
373
|
+
|
|
374
|
+
ctx.obj.datastore_impl.datastore_root = datastore_root
|
|
375
|
+
|
|
376
|
+
FlowDataStore.default_storage_impl = ctx.obj.datastore_impl
|
|
377
|
+
|
|
378
|
+
# At this point, we are able to resolve the user-configuration options so we can
|
|
379
|
+
# process all those decorators that the user added that will modify the flow based
|
|
380
|
+
# on those configurations. It is important to do this as early as possible since it
|
|
381
|
+
# actually modifies the flow itself
|
|
382
|
+
|
|
383
|
+
# When we process the options, the first one processed will return None and the
|
|
384
|
+
# second one processed will return the actual options. The order of processing
|
|
385
|
+
# depends on what (and in what order) the user specifies on the command line.
|
|
386
|
+
config_options = config_file or config_value
|
|
387
|
+
|
|
388
|
+
if (
|
|
389
|
+
hasattr(ctx, "saved_args")
|
|
390
|
+
and ctx.saved_args
|
|
391
|
+
and ctx.saved_args[0] == "resume"
|
|
392
|
+
and getattr(ctx.obj, "has_config_options", False)
|
|
393
|
+
):
|
|
394
|
+
# In the case of resume, we actually need to load the configurations
|
|
395
|
+
# from the resumed run to process them. This can be slightly onerous so check
|
|
396
|
+
# if we need to in the first place
|
|
397
|
+
if getattr(ctx.obj, "has_cl_config_options", False):
|
|
398
|
+
raise click.UsageError(
|
|
399
|
+
"Cannot specify --config-file or --config-value with 'resume'"
|
|
400
|
+
)
|
|
401
|
+
# We now load the config artifacts from the original run id
|
|
402
|
+
run_id = None
|
|
403
|
+
try:
|
|
404
|
+
idx = ctx.saved_args.index("--origin-run-id")
|
|
405
|
+
except ValueError:
|
|
406
|
+
idx = -1
|
|
407
|
+
if idx >= 0:
|
|
408
|
+
run_id = ctx.saved_args[idx + 1]
|
|
409
|
+
else:
|
|
410
|
+
run_id = get_latest_run_id(ctx.obj.echo, ctx.obj.flow.name)
|
|
411
|
+
if run_id is None:
|
|
412
|
+
raise CommandException(
|
|
413
|
+
"A previous run id was not found. Specify --origin-run-id."
|
|
414
|
+
)
|
|
415
|
+
# We get the name of the parameters we need to load from the datastore -- these
|
|
416
|
+
# are accessed using the *variable* name and not necessarily the *parameter* name
|
|
417
|
+
config_var_names = []
|
|
418
|
+
config_param_names = []
|
|
419
|
+
for name, param in ctx.obj.flow._get_parameters():
|
|
420
|
+
if not param.IS_CONFIG_PARAMETER:
|
|
421
|
+
continue
|
|
422
|
+
config_var_names.append(name)
|
|
423
|
+
config_param_names.append(param.name)
|
|
424
|
+
|
|
425
|
+
# We just need a task datastore that will be thrown away -- we do this so
|
|
426
|
+
# we don't have to create the logger, monitor, etc.
|
|
427
|
+
debug.userconf_exec("Loading config parameters from run %s" % run_id)
|
|
428
|
+
for d in TaskDataStoreSet(
|
|
429
|
+
FlowDataStore(ctx.obj.flow.name),
|
|
430
|
+
run_id,
|
|
431
|
+
steps=["_parameters"],
|
|
432
|
+
prefetch_data_artifacts=config_var_names,
|
|
433
|
+
):
|
|
434
|
+
param_ds = d
|
|
435
|
+
|
|
436
|
+
# We can now set the the CONFIGS value in the flow properly. This will overwrite
|
|
437
|
+
# anything that may have been passed in by default and we will use exactly what
|
|
438
|
+
# the original flow had. Note that these are accessed through the parameter name
|
|
439
|
+
ctx.obj.flow._flow_state[_FlowState.CONFIGS].clear()
|
|
440
|
+
d = ctx.obj.flow._flow_state[_FlowState.CONFIGS]
|
|
441
|
+
for param_name, var_name in zip(config_param_names, config_var_names):
|
|
442
|
+
val = param_ds[var_name]
|
|
443
|
+
debug.userconf_exec("Loaded config %s as: %s" % (param_name, val))
|
|
444
|
+
d[param_name] = val
|
|
445
|
+
|
|
446
|
+
elif getattr(ctx.obj, "delayed_config_exception", None):
|
|
447
|
+
# If we are not doing a resume, any exception we had parsing configs needs to
|
|
448
|
+
# be raised. For resume, since we ignore those options, we ignore the error.
|
|
449
|
+
raise ctx.obj.delayed_config_exception
|
|
450
|
+
|
|
451
|
+
new_cls = ctx.obj.flow._process_config_decorators(config_options)
|
|
452
|
+
if new_cls:
|
|
453
|
+
ctx.obj.flow = new_cls(use_cli=False)
|
|
454
|
+
|
|
455
|
+
ctx.obj.graph = ctx.obj.flow._graph
|
|
456
|
+
|
|
457
|
+
ctx.obj.environment = [
|
|
458
|
+
e for e in ENVIRONMENTS + [MetaflowEnvironment] if e.TYPE == environment
|
|
459
|
+
][0](ctx.obj.flow)
|
|
460
|
+
ctx.obj.environment.validate_environment(ctx.obj.logger, datastore)
|
|
461
|
+
|
|
462
|
+
ctx.obj.event_logger = LOGGING_SIDECARS[event_logger](
|
|
463
|
+
flow=ctx.obj.flow, env=ctx.obj.environment
|
|
464
|
+
)
|
|
465
|
+
ctx.obj.event_logger.start()
|
|
466
|
+
_system_logger.init_system_logger(ctx.obj.flow.name, ctx.obj.event_logger)
|
|
467
|
+
|
|
468
|
+
ctx.obj.monitor = MONITOR_SIDECARS[monitor](
|
|
469
|
+
flow=ctx.obj.flow, env=ctx.obj.environment
|
|
470
|
+
)
|
|
471
|
+
ctx.obj.monitor.start()
|
|
472
|
+
_system_monitor.init_system_monitor(ctx.obj.flow.name, ctx.obj.monitor)
|
|
473
|
+
|
|
474
|
+
ctx.obj.metadata = [m for m in METADATA_PROVIDERS if m.TYPE == metadata][0](
|
|
475
|
+
ctx.obj.environment, ctx.obj.flow, ctx.obj.event_logger, ctx.obj.monitor
|
|
476
|
+
)
|
|
477
|
+
|
|
478
|
+
ctx.obj.flow_datastore = FlowDataStore(
|
|
479
|
+
ctx.obj.flow.name,
|
|
480
|
+
ctx.obj.environment,
|
|
481
|
+
ctx.obj.metadata,
|
|
482
|
+
ctx.obj.event_logger,
|
|
483
|
+
ctx.obj.monitor,
|
|
484
|
+
)
|
|
485
|
+
|
|
486
|
+
ctx.obj.config_options = config_options
|
|
487
|
+
|
|
488
|
+
decorators._init(ctx.obj.flow)
|
|
489
|
+
|
|
490
|
+
# It is important to initialize flow decorators early as some of the
|
|
491
|
+
# things they provide may be used by some of the objects initialized after.
|
|
492
|
+
decorators._init_flow_decorators(
|
|
493
|
+
ctx.obj.flow,
|
|
494
|
+
ctx.obj.graph,
|
|
495
|
+
ctx.obj.environment,
|
|
496
|
+
ctx.obj.flow_datastore,
|
|
497
|
+
ctx.obj.metadata,
|
|
498
|
+
ctx.obj.logger,
|
|
499
|
+
echo,
|
|
500
|
+
deco_options,
|
|
501
|
+
)
|
|
502
|
+
|
|
503
|
+
# In the case of run/resume, we will want to apply the TL decospecs
|
|
504
|
+
# *after* the run decospecs so that they don't take precedence. In other
|
|
505
|
+
# words, for the same decorator, we want `myflow.py run --with foo` to
|
|
506
|
+
# take precedence over any other `foo` decospec
|
|
507
|
+
ctx.obj.tl_decospecs = list(decospecs or [])
|
|
508
|
+
|
|
509
|
+
# initialize current and parameter context for deploy-time parameters
|
|
510
|
+
current._set_env(flow=ctx.obj.flow, is_running=False)
|
|
511
|
+
parameters.set_parameter_context(
|
|
512
|
+
ctx.obj.flow.name,
|
|
513
|
+
ctx.obj.echo,
|
|
514
|
+
ctx.obj.flow_datastore,
|
|
515
|
+
{
|
|
516
|
+
k: ConfigValue(v)
|
|
517
|
+
for k, v in ctx.obj.flow.__class__._flow_state.get(
|
|
518
|
+
_FlowState.CONFIGS, {}
|
|
519
|
+
).items()
|
|
520
|
+
},
|
|
521
|
+
)
|
|
522
|
+
|
|
523
|
+
if (
|
|
524
|
+
hasattr(ctx, "saved_args")
|
|
525
|
+
and ctx.saved_args
|
|
526
|
+
and ctx.saved_args[0] not in ("run", "resume")
|
|
527
|
+
):
|
|
528
|
+
# run/resume are special cases because they can add more decorators with --with,
|
|
529
|
+
# so they have to take care of themselves.
|
|
530
|
+
all_decospecs = ctx.obj.tl_decospecs + list(
|
|
531
|
+
ctx.obj.environment.decospecs() or []
|
|
532
|
+
)
|
|
533
|
+
if all_decospecs:
|
|
534
|
+
decorators._attach_decorators(ctx.obj.flow, all_decospecs)
|
|
535
|
+
decorators._init(ctx.obj.flow)
|
|
536
|
+
# Regenerate graph if we attached more decorators
|
|
537
|
+
ctx.obj.flow.__class__._init_attrs()
|
|
538
|
+
ctx.obj.graph = ctx.obj.flow._graph
|
|
539
|
+
|
|
540
|
+
decorators._init_step_decorators(
|
|
541
|
+
ctx.obj.flow,
|
|
542
|
+
ctx.obj.graph,
|
|
543
|
+
ctx.obj.environment,
|
|
544
|
+
ctx.obj.flow_datastore,
|
|
545
|
+
ctx.obj.logger,
|
|
546
|
+
)
|
|
547
|
+
|
|
548
|
+
# TODO (savin): Enable lazy instantiation of package
|
|
549
|
+
ctx.obj.package = None
|
|
550
|
+
|
|
551
|
+
if ctx.invoked_subcommand is None:
|
|
552
|
+
ctx.invoke(check)
|
|
553
|
+
|
|
554
|
+
|
|
555
|
+
def _check(echo, graph, flow, environment, pylint=True, warnings=False, **kwargs):
|
|
556
|
+
echo("Validating your flow...", fg="magenta", bold=False)
|
|
557
|
+
linter = lint.linter
|
|
558
|
+
# TODO set linter settings
|
|
559
|
+
linter.run_checks(graph, **kwargs)
|
|
560
|
+
echo("The graph looks good!", fg="green", bold=True, indent=True)
|
|
561
|
+
if pylint:
|
|
562
|
+
echo("Running pylint...", fg="magenta", bold=False)
|
|
563
|
+
fname = inspect.getfile(flow.__class__)
|
|
564
|
+
pylint = PyLint(fname)
|
|
565
|
+
if pylint.has_pylint():
|
|
566
|
+
pylint_is_happy, pylint_exception_msg = pylint.run(
|
|
567
|
+
warnings=warnings,
|
|
568
|
+
pylint_config=environment.pylint_config(),
|
|
569
|
+
logger=echo_always,
|
|
570
|
+
)
|
|
571
|
+
|
|
572
|
+
if pylint_is_happy:
|
|
573
|
+
echo("Pylint is happy!", fg="green", bold=True, indent=True)
|
|
574
|
+
else:
|
|
575
|
+
echo(
|
|
576
|
+
"Pylint couldn't analyze your code.\n\tPylint exception: %s"
|
|
577
|
+
% pylint_exception_msg,
|
|
578
|
+
fg="red",
|
|
579
|
+
bold=True,
|
|
580
|
+
indent=True,
|
|
581
|
+
)
|
|
582
|
+
echo("Skipping Pylint checks.", fg="red", bold=True, indent=True)
|
|
583
|
+
else:
|
|
584
|
+
echo(
|
|
585
|
+
"Pylint not found, so extra checks are disabled.",
|
|
586
|
+
fg="green",
|
|
587
|
+
indent=True,
|
|
588
|
+
bold=False,
|
|
589
|
+
)
|
|
590
|
+
|
|
591
|
+
|
|
592
|
+
def print_metaflow_exception(ex):
|
|
593
|
+
echo_always(ex.headline, indent=True, nl=False, bold=True)
|
|
594
|
+
location = ""
|
|
595
|
+
if ex.source_file is not None:
|
|
596
|
+
location += " in file %s" % ex.source_file
|
|
597
|
+
if ex.line_no is not None:
|
|
598
|
+
location += " on line %d" % ex.line_no
|
|
599
|
+
location += ":"
|
|
600
|
+
echo_always(location, bold=True)
|
|
601
|
+
echo_always(ex.message, indent=True, bold=False, padding_bottom=True)
|
|
602
|
+
|
|
603
|
+
|
|
604
|
+
def print_unknown_exception(ex):
|
|
605
|
+
echo_always("Internal error", indent=True, bold=True)
|
|
606
|
+
echo_always(traceback.format_exc(), highlight=None, highlight_bold=False)
|
|
607
|
+
|
|
608
|
+
|
|
609
|
+
class CliState(object):
|
|
610
|
+
def __init__(self, flow):
|
|
611
|
+
self.flow = flow
|
|
612
|
+
|
|
613
|
+
|
|
614
|
+
def main(flow, args=None, handle_exceptions=True, entrypoint=None):
|
|
615
|
+
# Ignore warning(s) and prevent spamming the end-user.
|
|
616
|
+
# TODO: This serves as a short term workaround for RuntimeWarning(s) thrown
|
|
617
|
+
# in py3.8 related to log buffering (bufsize=1).
|
|
618
|
+
import warnings
|
|
619
|
+
|
|
620
|
+
warnings.filterwarnings("ignore")
|
|
621
|
+
if entrypoint is None:
|
|
622
|
+
entrypoint = [sys.executable, sys.argv[0]]
|
|
623
|
+
|
|
624
|
+
state = CliState(flow)
|
|
625
|
+
state.entrypoint = entrypoint
|
|
626
|
+
|
|
627
|
+
try:
|
|
628
|
+
if args is None:
|
|
629
|
+
start(auto_envvar_prefix="METAFLOW", obj=state)
|
|
630
|
+
else:
|
|
631
|
+
try:
|
|
632
|
+
start(args=args, obj=state, auto_envvar_prefix="METAFLOW")
|
|
633
|
+
except SystemExit as e:
|
|
634
|
+
return e.code
|
|
635
|
+
except MetaflowException as x:
|
|
636
|
+
if handle_exceptions:
|
|
637
|
+
print_metaflow_exception(x)
|
|
638
|
+
sys.exit(1)
|
|
639
|
+
else:
|
|
640
|
+
raise
|
|
641
|
+
except Exception as x:
|
|
642
|
+
if handle_exceptions:
|
|
643
|
+
print_unknown_exception(x)
|
|
644
|
+
sys.exit(1)
|
|
645
|
+
else:
|
|
646
|
+
raise
|
|
647
|
+
finally:
|
|
648
|
+
if hasattr(state, "monitor") and state.monitor is not None:
|
|
649
|
+
state.monitor.terminate()
|
|
650
|
+
if hasattr(state, "event_logger") and state.event_logger is not None:
|
|
651
|
+
state.event_logger.terminate()
|