ob-metaflow 2.15.15.1__tar.gz → 2.15.17.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.15.15.1/ob_metaflow.egg-info → ob_metaflow-2.15.17.1}/PKG-INFO +2 -2
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/cli.py +2 -2
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/cli_components/run_cmds.py +1 -1
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/cmd/develop/stub_generator.py +30 -16
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/flowspec.py +16 -4
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/metaflow_config.py +2 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/argo/argo_workflows.py +7 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/argo/argo_workflows_deployer_objects.py +6 -49
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/aws/aws_client.py +6 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/datatools/s3/s3op.py +1 -1
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/kubernetes/kubernetes.py +4 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/kubernetes/kubernetes_cli.py +8 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/kubernetes/kubernetes_decorator.py +11 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/kubernetes/kubernetes_job.py +4 -2
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/kubernetes/kubernetes_jobsets.py +5 -2
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/metadata_providers/service.py +12 -8
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/runner/deployer.py +49 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/user_configs/config_decorators.py +1 -1
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/user_configs/config_options.py +6 -2
- ob_metaflow-2.15.17.1/metaflow/version.py +1 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1/ob_metaflow.egg-info}/PKG-INFO +2 -2
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/ob_metaflow.egg-info/requires.txt +1 -1
- ob_metaflow-2.15.15.1/metaflow/version.py +0 -1
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/LICENSE +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/MANIFEST.in +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/README.md +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/devtools/Makefile +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/devtools/Tiltfile +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/devtools/pick_services.sh +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/R.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/click/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/click/_bashcomplete.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/click/_compat.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/click/_termui_impl.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/click/_textwrap.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/click/_unicodefun.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/click/_winconsole.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/click/core.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/click/decorators.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/click/exceptions.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/click/formatting.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/click/globals.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/click/parser.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/click/termui.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/click/testing.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/click/types.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/click/utils.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/importlib_metadata/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/importlib_metadata/_adapters.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/importlib_metadata/_collections.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/importlib_metadata/_compat.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/importlib_metadata/_functools.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/importlib_metadata/_itertools.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/importlib_metadata/_meta.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/importlib_metadata/_text.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/importlib_metadata/py.typed +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/packaging/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/packaging/_elffile.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/packaging/_manylinux.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/packaging/_musllinux.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/packaging/_parser.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/packaging/_structures.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/packaging/_tokenizer.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/packaging/markers.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/packaging/py.typed +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/packaging/requirements.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/packaging/specifiers.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/packaging/tags.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/packaging/utils.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/packaging/version.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/typeguard/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/typeguard/_checkers.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/typeguard/_config.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/typeguard/_decorators.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/typeguard/_exceptions.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/typeguard/_functions.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/typeguard/_importhook.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/typeguard/_memo.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/typeguard/_pytest_plugin.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/typeguard/_suppression.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/typeguard/_transformer.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/typeguard/_union_transformer.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/typeguard/_utils.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/typeguard/py.typed +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/typing_extensions.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/v3_6/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/v3_6/importlib_metadata/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/v3_6/importlib_metadata/_adapters.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/v3_6/importlib_metadata/_collections.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/v3_6/importlib_metadata/_compat.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/v3_6/importlib_metadata/_functools.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/v3_6/importlib_metadata/_itertools.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/v3_6/importlib_metadata/_meta.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/v3_6/importlib_metadata/_text.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/v3_6/importlib_metadata/py.typed +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/v3_6/typing_extensions.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/v3_6/zipp.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/v3_7/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/v3_7/importlib_metadata/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/v3_7/importlib_metadata/_adapters.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/v3_7/importlib_metadata/_collections.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/v3_7/importlib_metadata/_compat.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/v3_7/importlib_metadata/_functools.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/v3_7/importlib_metadata/_itertools.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/v3_7/importlib_metadata/_meta.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/v3_7/importlib_metadata/_text.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/v3_7/importlib_metadata/py.typed +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/v3_7/typeguard/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/v3_7/typeguard/_checkers.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/v3_7/typeguard/_config.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/v3_7/typeguard/_decorators.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/v3_7/typeguard/_exceptions.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/v3_7/typeguard/_functions.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/v3_7/typeguard/_importhook.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/v3_7/typeguard/_memo.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/v3_7/typeguard/_pytest_plugin.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/v3_7/typeguard/_suppression.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/v3_7/typeguard/_transformer.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/v3_7/typeguard/_union_transformer.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/v3_7/typeguard/_utils.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/v3_7/typeguard/py.typed +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/v3_7/typing_extensions.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/v3_7/zipp.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/_vendor/zipp.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/cards.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/cli_args.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/cli_components/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/cli_components/dump_cmd.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/cli_components/init_cmd.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/cli_components/step_cmd.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/cli_components/utils.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/client/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/client/core.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/client/filecache.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/clone_util.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/cmd/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/cmd/code/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/cmd/configure_cmd.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/cmd/develop/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/cmd/develop/stubs.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/cmd/main_cli.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/cmd/make_wrapper.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/cmd/tutorials_cmd.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/cmd/util.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/cmd_with_io.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/datastore/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/datastore/content_addressed_store.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/datastore/datastore_set.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/datastore/datastore_storage.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/datastore/exceptions.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/datastore/flow_datastore.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/datastore/inputs.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/datastore/task_datastore.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/debug.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/decorators.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/event_logger.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/events.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/exception.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/extension_support/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/extension_support/_empty_file.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/extension_support/cmd.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/extension_support/integrations.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/extension_support/plugins.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/graph.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/includefile.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/info_file.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/integrations.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/lint.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/metadata_provider/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/metadata_provider/heartbeat.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/metadata_provider/metadata.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/metadata_provider/util.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/metaflow_config_funcs.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/metaflow_current.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/metaflow_environment.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/metaflow_git.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/metaflow_profile.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/metaflow_version.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/mflog/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/mflog/mflog.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/mflog/save_logs.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/mflog/save_logs_periodically.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/mflog/tee.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/monitor.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/multicore_utils.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/package.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/parameters.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/airflow/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/airflow/airflow.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/airflow/airflow_cli.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/airflow/airflow_decorator.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/airflow/airflow_utils.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/airflow/dag.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/airflow/exception.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/airflow/plumbing/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/airflow/plumbing/set_parameters.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/airflow/sensors/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/airflow/sensors/base_sensor.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/airflow/sensors/external_task_sensor.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/airflow/sensors/s3_sensor.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/argo/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/argo/argo_client.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/argo/argo_events.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/argo/argo_workflows_cli.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/argo/argo_workflows_decorator.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/argo/argo_workflows_deployer.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/argo/capture_error.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/argo/generate_input_paths.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/argo/jobset_input_paths.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/aws/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/aws/aws_utils.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/aws/batch/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/aws/batch/batch.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/aws/batch/batch_cli.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/aws/batch/batch_client.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/aws/batch/batch_decorator.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/aws/secrets_manager/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/aws/secrets_manager/aws_secrets_manager_secrets_provider.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/aws/step_functions/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/aws/step_functions/dynamo_db_client.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/aws/step_functions/event_bridge_client.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/aws/step_functions/production_token.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/aws/step_functions/schedule_decorator.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/aws/step_functions/set_batch_environment.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/aws/step_functions/step_functions.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/aws/step_functions/step_functions_cli.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/aws/step_functions/step_functions_client.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/aws/step_functions/step_functions_decorator.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/aws/step_functions/step_functions_deployer.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/aws/step_functions/step_functions_deployer_objects.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/azure/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/azure/azure_credential.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/azure/azure_exceptions.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/azure/azure_secret_manager_secrets_provider.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/azure/azure_tail.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/azure/azure_utils.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/azure/blob_service_client_factory.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/azure/includefile_support.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/cards/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/cards/card_cli.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/cards/card_client.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/cards/card_creator.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/cards/card_datastore.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/cards/card_decorator.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/cards/card_modules/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/cards/card_modules/base.html +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/cards/card_modules/basic.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/cards/card_modules/bundle.css +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/cards/card_modules/card.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/cards/card_modules/chevron/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/cards/card_modules/chevron/main.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/cards/card_modules/chevron/metadata.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/cards/card_modules/chevron/renderer.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/cards/card_modules/chevron/tokenizer.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/cards/card_modules/components.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/cards/card_modules/convert_to_native_type.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/cards/card_modules/main.js +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/cards/card_modules/renderer_tools.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/cards/card_modules/test_cards.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/cards/card_resolver.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/cards/card_server.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/cards/card_viewer/viewer.html +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/cards/component_serializer.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/cards/exception.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/catch_decorator.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/datastores/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/datastores/azure_storage.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/datastores/gs_storage.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/datastores/local_storage.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/datastores/s3_storage.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/datatools/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/datatools/local.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/datatools/s3/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/datatools/s3/s3.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/datatools/s3/s3tail.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/datatools/s3/s3util.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/debug_logger.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/debug_monitor.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/env_escape/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/env_escape/client.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/env_escape/client_modules.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/env_escape/communication/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/env_escape/communication/bytestream.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/env_escape/communication/channel.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/env_escape/communication/socket_bytestream.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/env_escape/communication/utils.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/env_escape/configurations/emulate_test_lib/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/env_escape/configurations/emulate_test_lib/overrides.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/env_escape/configurations/emulate_test_lib/server_mappings.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/env_escape/configurations/test_lib_impl/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/env_escape/configurations/test_lib_impl/test_lib.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/env_escape/consts.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/env_escape/data_transferer.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/env_escape/exception_transferer.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/env_escape/override_decorators.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/env_escape/server.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/env_escape/stub.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/env_escape/utils.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/environment_decorator.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/events_decorator.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/frameworks/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/frameworks/pytorch.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/gcp/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/gcp/gcp_secret_manager_secrets_provider.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/gcp/gs_exceptions.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/gcp/gs_storage_client_factory.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/gcp/gs_tail.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/gcp/gs_utils.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/gcp/includefile_support.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/kubernetes/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/kubernetes/kube_utils.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/kubernetes/kubernetes_client.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/kubernetes/spot_metadata_cli.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/kubernetes/spot_monitor_sidecar.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/logs_cli.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/metadata_providers/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/metadata_providers/local.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/package_cli.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/parallel_decorator.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/project_decorator.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/pypi/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/pypi/bootstrap.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/pypi/conda_decorator.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/pypi/conda_environment.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/pypi/micromamba.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/pypi/parsers.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/pypi/pip.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/pypi/pypi_decorator.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/pypi/pypi_environment.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/pypi/utils.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/resources_decorator.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/retry_decorator.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/secrets/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/secrets/inline_secrets_provider.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/secrets/secrets_decorator.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/storage_executor.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/tag_cli.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/test_unbounded_foreach_decorator.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/timeout_decorator.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/uv/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/uv/bootstrap.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/uv/uv_environment.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/procpoll.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/py.typed +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/pylint_wrapper.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/runner/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/runner/click_api.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/runner/deployer_impl.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/runner/metaflow_runner.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/runner/nbdeploy.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/runner/nbrun.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/runner/subprocess_manager.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/runner/utils.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/runtime.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/sidecar/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/sidecar/sidecar.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/sidecar/sidecar_messages.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/sidecar/sidecar_subprocess.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/sidecar/sidecar_worker.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/system/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/system/system_logger.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/system/system_monitor.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/system/system_utils.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/tagging_util.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/task.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/tracing/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/tracing/propagator.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/tracing/span_exporter.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/tracing/tracing_modules.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/tuple_util.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/tutorials/00-helloworld/README.md +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/tutorials/00-helloworld/helloworld.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/tutorials/01-playlist/README.md +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/tutorials/01-playlist/movies.csv +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/tutorials/01-playlist/playlist.ipynb +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/tutorials/01-playlist/playlist.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/tutorials/02-statistics/README.md +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/tutorials/02-statistics/movies.csv +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/tutorials/02-statistics/stats.ipynb +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/tutorials/02-statistics/stats.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/tutorials/03-playlist-redux/README.md +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/tutorials/03-playlist-redux/playlist.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/tutorials/04-playlist-plus/README.md +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/tutorials/04-playlist-plus/playlist.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/tutorials/05-hello-cloud/README.md +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/tutorials/05-hello-cloud/hello-cloud.ipynb +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/tutorials/05-hello-cloud/hello-cloud.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/tutorials/06-statistics-redux/README.md +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/tutorials/06-statistics-redux/stats.ipynb +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/tutorials/07-worldview/README.md +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/tutorials/07-worldview/worldview.ipynb +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/tutorials/08-autopilot/README.md +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/tutorials/08-autopilot/autopilot.ipynb +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/unbounded_foreach.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/user_configs/__init__.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/user_configs/config_parameters.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/util.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/vendor.py +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/ob_metaflow.egg-info/SOURCES.txt +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/ob_metaflow.egg-info/dependency_links.txt +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/ob_metaflow.egg-info/entry_points.txt +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/ob_metaflow.egg-info/top_level.txt +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/setup.cfg +0 -0
- {ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ob-metaflow
|
|
3
|
-
Version: 2.15.
|
|
3
|
+
Version: 2.15.17.1
|
|
4
4
|
Summary: Metaflow: More AI and ML, 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.
|
|
15
|
+
Requires-Dist: metaflow-stubs==2.15.17.1; extra == "stubs"
|
|
16
16
|
Dynamic: author
|
|
17
17
|
Dynamic: author-email
|
|
18
18
|
Dynamic: description
|
|
@@ -496,7 +496,7 @@ def start(
|
|
|
496
496
|
ctx.obj.echo,
|
|
497
497
|
ctx.obj.flow_datastore,
|
|
498
498
|
{
|
|
499
|
-
k: ConfigValue(v)
|
|
499
|
+
k: ConfigValue(v) if v is not None else None
|
|
500
500
|
for k, v in ctx.obj.flow.__class__._flow_state.get(
|
|
501
501
|
_FlowState.CONFIGS, {}
|
|
502
502
|
).items()
|
|
@@ -524,7 +524,7 @@ def start(
|
|
|
524
524
|
decorators._attach_decorators(ctx.obj.flow, all_decospecs)
|
|
525
525
|
decorators._init(ctx.obj.flow)
|
|
526
526
|
# Regenerate graph if we attached more decorators
|
|
527
|
-
ctx.obj.flow.__class__.
|
|
527
|
+
ctx.obj.flow.__class__._init_graph()
|
|
528
528
|
ctx.obj.graph = ctx.obj.flow._graph
|
|
529
529
|
|
|
530
530
|
decorators._init_step_decorators(
|
|
@@ -45,7 +45,7 @@ def before_run(obj, tags, decospecs):
|
|
|
45
45
|
decorators._attach_decorators(obj.flow, all_decospecs)
|
|
46
46
|
decorators._init(obj.flow)
|
|
47
47
|
# Regenerate graph if we attached more decorators
|
|
48
|
-
obj.flow.__class__.
|
|
48
|
+
obj.flow.__class__._init_graph()
|
|
49
49
|
obj.graph = obj.flow._graph
|
|
50
50
|
|
|
51
51
|
obj.check(obj.graph, obj.flow, obj.environment, pylint=obj.pylint)
|
|
@@ -488,9 +488,6 @@ class StubGenerator:
|
|
|
488
488
|
self._imports.add(name)
|
|
489
489
|
|
|
490
490
|
def _add_to_typing_check(name, is_module=False):
|
|
491
|
-
# if name != self._current_module_name:
|
|
492
|
-
# self._typing_imports.add(name)
|
|
493
|
-
#
|
|
494
491
|
if name == "None":
|
|
495
492
|
return
|
|
496
493
|
if is_module:
|
|
@@ -504,6 +501,24 @@ class StubGenerator:
|
|
|
504
501
|
# the current file
|
|
505
502
|
self._typing_imports.add(splits[0])
|
|
506
503
|
|
|
504
|
+
def _format_qualified_class_name(cls: type) -> str:
|
|
505
|
+
"""Helper to format a class with its qualified module name"""
|
|
506
|
+
# Special case for NoneType - return None
|
|
507
|
+
if cls.__name__ == "NoneType":
|
|
508
|
+
return "None"
|
|
509
|
+
|
|
510
|
+
module = inspect.getmodule(cls)
|
|
511
|
+
if (
|
|
512
|
+
module
|
|
513
|
+
and module.__name__ != "builtins"
|
|
514
|
+
and module.__name__ != "__main__"
|
|
515
|
+
):
|
|
516
|
+
module_name = self._get_module_name_alias(module.__name__)
|
|
517
|
+
_add_to_typing_check(module_name, is_module=True)
|
|
518
|
+
return f"{module_name}.{cls.__name__}"
|
|
519
|
+
else:
|
|
520
|
+
return cls.__name__
|
|
521
|
+
|
|
507
522
|
if isinstance(element, str):
|
|
508
523
|
# Special case for self referential things (particularly in a class)
|
|
509
524
|
if element == self._current_name:
|
|
@@ -557,19 +572,15 @@ class StubGenerator:
|
|
|
557
572
|
return element.__name__
|
|
558
573
|
elif isinstance(element, type(Ellipsis)):
|
|
559
574
|
return "..."
|
|
560
|
-
# elif (
|
|
561
|
-
# isinstance(element, typing._GenericAlias)
|
|
562
|
-
# and hasattr(element, "_name")
|
|
563
|
-
# and element._name in ("List", "Tuple", "Dict", "Set")
|
|
564
|
-
# ):
|
|
565
|
-
# # 3.7 has these as _GenericAlias but they don't behave like the ones in 3.10
|
|
566
|
-
# _add_to_import("typing")
|
|
567
|
-
# return str(element)
|
|
568
575
|
elif isinstance(element, typing._GenericAlias):
|
|
569
576
|
# We need to check things recursively in __args__ if it exists
|
|
570
577
|
args_str = []
|
|
571
578
|
for arg in getattr(element, "__args__", []):
|
|
572
|
-
|
|
579
|
+
# Special handling for class objects in type arguments
|
|
580
|
+
if isinstance(arg, type):
|
|
581
|
+
args_str.append(_format_qualified_class_name(arg))
|
|
582
|
+
else:
|
|
583
|
+
args_str.append(self._get_element_name_with_module(arg))
|
|
573
584
|
|
|
574
585
|
_add_to_import("typing")
|
|
575
586
|
if element._name:
|
|
@@ -584,12 +595,15 @@ class StubGenerator:
|
|
|
584
595
|
args_str = [call_args, args_str[-1]]
|
|
585
596
|
return "typing.%s[%s]" % (element._name, ", ".join(args_str))
|
|
586
597
|
else:
|
|
587
|
-
|
|
598
|
+
# Handle the case where we have a generic type without a _name
|
|
599
|
+
origin = element.__origin__
|
|
600
|
+
if isinstance(origin, type):
|
|
601
|
+
origin_str = _format_qualified_class_name(origin)
|
|
602
|
+
else:
|
|
603
|
+
origin_str = str(origin)
|
|
604
|
+
return "%s[%s]" % (origin_str, ", ".join(args_str))
|
|
588
605
|
elif isinstance(element, ForwardRef):
|
|
589
606
|
f_arg = self._get_module_name_alias(element.__forward_arg__)
|
|
590
|
-
# if f_arg in ("Run", "Task"): # HACK -- forward references in current.py
|
|
591
|
-
# _add_to_import("metaflow")
|
|
592
|
-
# f_arg = "metaflow.%s" % f_arg
|
|
593
607
|
_add_to_typing_check(f_arg)
|
|
594
608
|
return '"%s"' % f_arg
|
|
595
609
|
elif inspect.getmodule(element) == inspect.getmodule(typing):
|
|
@@ -87,6 +87,9 @@ class FlowSpecMeta(type):
|
|
|
87
87
|
if name == "FlowSpec":
|
|
88
88
|
return
|
|
89
89
|
|
|
90
|
+
cls._init_attrs()
|
|
91
|
+
|
|
92
|
+
def _init_attrs(cls):
|
|
90
93
|
from .decorators import (
|
|
91
94
|
DuplicateFlowDecoratorException,
|
|
92
95
|
) # Prevent circular import
|
|
@@ -103,6 +106,12 @@ class FlowSpecMeta(type):
|
|
|
103
106
|
# Keys are _FlowState enum values
|
|
104
107
|
cls._flow_state = {}
|
|
105
108
|
|
|
109
|
+
# Keep track if configs have been processed -- this is particularly applicable
|
|
110
|
+
# for the Runner/Deployer where calling multiple APIs on the same flow could
|
|
111
|
+
# cause the configs to be processed multiple times. For a given flow, once
|
|
112
|
+
# the configs have been processed, we do not process them again.
|
|
113
|
+
cls._configs_processed = False
|
|
114
|
+
|
|
106
115
|
# We inherit stuff from our parent classes as well -- we need to be careful
|
|
107
116
|
# in terms of the order; we will follow the MRO with the following rules:
|
|
108
117
|
# - decorators (cls._flow_decorators) will cause an error if they do not
|
|
@@ -127,10 +136,9 @@ class FlowSpecMeta(type):
|
|
|
127
136
|
cls._flow_state.setdefault(_FlowState.CONFIG_DECORATORS, []).extend(
|
|
128
137
|
base_configs
|
|
129
138
|
)
|
|
139
|
+
cls._init_graph()
|
|
130
140
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
def _init_attrs(cls):
|
|
141
|
+
def _init_graph(cls):
|
|
134
142
|
# Graph and steps are specific to the class -- store here so we can access
|
|
135
143
|
# in class method _process_config_decorators
|
|
136
144
|
cls._graph = FlowGraph(cls)
|
|
@@ -225,6 +233,10 @@ class FlowSpec(metaclass=FlowSpecMeta):
|
|
|
225
233
|
@classmethod
|
|
226
234
|
def _process_config_decorators(cls, config_options, process_configs=True):
|
|
227
235
|
|
|
236
|
+
if cls._configs_processed:
|
|
237
|
+
return None
|
|
238
|
+
cls._configs_processed = True
|
|
239
|
+
|
|
228
240
|
# Fast path for no user configurations
|
|
229
241
|
if not process_configs or (
|
|
230
242
|
not cls._flow_state.get(_FlowState.CONFIG_DECORATORS)
|
|
@@ -325,7 +337,7 @@ class FlowSpec(metaclass=FlowSpecMeta):
|
|
|
325
337
|
parameters.replace_flow_context(cls)
|
|
326
338
|
|
|
327
339
|
# Re-calculate class level attributes after modifying the class
|
|
328
|
-
cls.
|
|
340
|
+
cls._init_graph()
|
|
329
341
|
return cls
|
|
330
342
|
|
|
331
343
|
def _set_constants(self, graph, kwargs, config_options):
|
|
@@ -371,6 +371,8 @@ KUBERNETES_CONTAINER_IMAGE = from_conf(
|
|
|
371
371
|
)
|
|
372
372
|
# Image pull policy for container images
|
|
373
373
|
KUBERNETES_IMAGE_PULL_POLICY = from_conf("KUBERNETES_IMAGE_PULL_POLICY", None)
|
|
374
|
+
# Image pull secrets for container images
|
|
375
|
+
KUBERNETES_IMAGE_PULL_SECRETS = from_conf("KUBERNETES_IMAGE_PULL_SECRETS", "")
|
|
374
376
|
# Default container registry for K8S
|
|
375
377
|
KUBERNETES_CONTAINER_REGISTRY = from_conf(
|
|
376
378
|
"KUBERNETES_CONTAINER_REGISTRY", DEFAULT_CONTAINER_REGISTRY
|
|
@@ -2021,6 +2021,7 @@ class ArgoWorkflows(object):
|
|
|
2021
2021
|
namespace=resources["namespace"],
|
|
2022
2022
|
image=resources["image"],
|
|
2023
2023
|
image_pull_policy=resources["image_pull_policy"],
|
|
2024
|
+
image_pull_secrets=resources["image_pull_secrets"],
|
|
2024
2025
|
service_account=resources["service_account"],
|
|
2025
2026
|
secrets=(
|
|
2026
2027
|
[
|
|
@@ -2209,6 +2210,8 @@ class ArgoWorkflows(object):
|
|
|
2209
2210
|
.node_selectors(resources.get("node_selector"))
|
|
2210
2211
|
# Set tolerations
|
|
2211
2212
|
.tolerations(resources.get("tolerations"))
|
|
2213
|
+
# Set image pull secrets
|
|
2214
|
+
.image_pull_secrets(resources.get("image_pull_secrets"))
|
|
2212
2215
|
# Set container
|
|
2213
2216
|
.container(
|
|
2214
2217
|
# TODO: Unify the logic with kubernetes.py
|
|
@@ -3785,6 +3788,10 @@ class Template(object):
|
|
|
3785
3788
|
self.payload["tolerations"] = tolerations
|
|
3786
3789
|
return self
|
|
3787
3790
|
|
|
3791
|
+
def image_pull_secrets(self, image_pull_secrets):
|
|
3792
|
+
self.payload["image_pull_secrets"] = image_pull_secrets
|
|
3793
|
+
return self
|
|
3794
|
+
|
|
3788
3795
|
def to_json(self):
|
|
3789
3796
|
return self.payload
|
|
3790
3797
|
|
|
@@ -9,59 +9,16 @@ from metaflow.exception import MetaflowException
|
|
|
9
9
|
from metaflow.plugins.argo.argo_client import ArgoClient
|
|
10
10
|
from metaflow.metaflow_config import KUBERNETES_NAMESPACE
|
|
11
11
|
from metaflow.plugins.argo.argo_workflows import ArgoWorkflows
|
|
12
|
-
from metaflow.runner.deployer import
|
|
12
|
+
from metaflow.runner.deployer import (
|
|
13
|
+
Deployer,
|
|
14
|
+
DeployedFlow,
|
|
15
|
+
TriggeredRun,
|
|
16
|
+
generate_fake_flow_file_contents,
|
|
17
|
+
)
|
|
13
18
|
|
|
14
19
|
from metaflow.runner.utils import get_lower_level_group, handle_timeout, temporary_fifo
|
|
15
20
|
|
|
16
21
|
|
|
17
|
-
def generate_fake_flow_file_contents(
|
|
18
|
-
flow_name: str, param_info: dict, project_name: Optional[str] = None
|
|
19
|
-
):
|
|
20
|
-
params_code = ""
|
|
21
|
-
for _, param_details in param_info.items():
|
|
22
|
-
param_python_var_name = param_details["python_var_name"]
|
|
23
|
-
param_name = param_details["name"]
|
|
24
|
-
param_type = param_details["type"]
|
|
25
|
-
param_help = param_details["description"]
|
|
26
|
-
param_required = param_details["is_required"]
|
|
27
|
-
|
|
28
|
-
if param_type == "JSON":
|
|
29
|
-
params_code += (
|
|
30
|
-
f" {param_python_var_name} = Parameter('{param_name}', "
|
|
31
|
-
f"type=JSONType, help='''{param_help}''', required={param_required})\n"
|
|
32
|
-
)
|
|
33
|
-
elif param_type == "FilePath":
|
|
34
|
-
is_text = param_details.get("is_text", True)
|
|
35
|
-
encoding = param_details.get("encoding", "utf-8")
|
|
36
|
-
params_code += (
|
|
37
|
-
f" {param_python_var_name} = IncludeFile('{param_name}', "
|
|
38
|
-
f"is_text={is_text}, encoding='{encoding}', help='''{param_help}''', "
|
|
39
|
-
f"required={param_required})\n"
|
|
40
|
-
)
|
|
41
|
-
else:
|
|
42
|
-
params_code += (
|
|
43
|
-
f" {param_python_var_name} = Parameter('{param_name}', "
|
|
44
|
-
f"type={param_type}, help='''{param_help}''', required={param_required})\n"
|
|
45
|
-
)
|
|
46
|
-
|
|
47
|
-
project_decorator = f"@project(name='{project_name}')\n" if project_name else ""
|
|
48
|
-
|
|
49
|
-
contents = f"""\
|
|
50
|
-
from metaflow import FlowSpec, Parameter, IncludeFile, JSONType, step, project
|
|
51
|
-
{project_decorator}class {flow_name}(FlowSpec):
|
|
52
|
-
{params_code}
|
|
53
|
-
@step
|
|
54
|
-
def start(self):
|
|
55
|
-
self.next(self.end)
|
|
56
|
-
@step
|
|
57
|
-
def end(self):
|
|
58
|
-
pass
|
|
59
|
-
if __name__ == '__main__':
|
|
60
|
-
{flow_name}()
|
|
61
|
-
"""
|
|
62
|
-
return contents
|
|
63
|
-
|
|
64
|
-
|
|
65
22
|
class ArgoWorkflowsTriggeredRun(TriggeredRun):
|
|
66
23
|
"""
|
|
67
24
|
A class representing a triggered Argo Workflow execution.
|
|
@@ -35,6 +35,12 @@ class Boto3ClientProvider(object):
|
|
|
35
35
|
"Could not import module 'boto3'. Install boto3 first."
|
|
36
36
|
)
|
|
37
37
|
|
|
38
|
+
# Convert dictionary config to Config object if needed
|
|
39
|
+
if "config" in client_params and not isinstance(
|
|
40
|
+
client_params["config"], Config
|
|
41
|
+
):
|
|
42
|
+
client_params["config"] = Config(**client_params["config"])
|
|
43
|
+
|
|
38
44
|
if module == "s3" and (
|
|
39
45
|
"config" not in client_params or client_params["config"].retries is None
|
|
40
46
|
):
|
|
@@ -131,7 +131,7 @@ def normalize_client_error(err):
|
|
|
131
131
|
except ValueError:
|
|
132
132
|
if error_code in ("AccessDenied", "AllAccessDisabled", "InvalidAccessKeyId"):
|
|
133
133
|
return 403
|
|
134
|
-
if error_code
|
|
134
|
+
if error_code in ("NoSuchKey", "NoSuchBucket"):
|
|
135
135
|
return 404
|
|
136
136
|
if error_code == "InvalidRange":
|
|
137
137
|
return 416
|
|
@@ -170,6 +170,7 @@ class Kubernetes(object):
|
|
|
170
170
|
code_package_ds,
|
|
171
171
|
docker_image,
|
|
172
172
|
docker_image_pull_policy,
|
|
173
|
+
image_pull_secrets=None,
|
|
173
174
|
step_cli=None,
|
|
174
175
|
service_account=None,
|
|
175
176
|
secrets=None,
|
|
@@ -206,6 +207,7 @@ class Kubernetes(object):
|
|
|
206
207
|
node_selector=node_selector,
|
|
207
208
|
image=docker_image,
|
|
208
209
|
image_pull_policy=docker_image_pull_policy,
|
|
210
|
+
image_pull_secrets=image_pull_secrets,
|
|
209
211
|
cpu=cpu,
|
|
210
212
|
memory=memory,
|
|
211
213
|
disk=disk,
|
|
@@ -483,6 +485,7 @@ class Kubernetes(object):
|
|
|
483
485
|
step_cli,
|
|
484
486
|
docker_image,
|
|
485
487
|
docker_image_pull_policy,
|
|
488
|
+
image_pull_secrets=None,
|
|
486
489
|
service_account=None,
|
|
487
490
|
secrets=None,
|
|
488
491
|
node_selector=None,
|
|
@@ -529,6 +532,7 @@ class Kubernetes(object):
|
|
|
529
532
|
),
|
|
530
533
|
image=docker_image,
|
|
531
534
|
image_pull_policy=docker_image_pull_policy,
|
|
535
|
+
image_pull_secrets=image_pull_secrets,
|
|
532
536
|
cpu=cpu,
|
|
533
537
|
memory=memory,
|
|
534
538
|
disk=disk,
|
{ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/kubernetes/kubernetes_cli.py
RENAMED
|
@@ -53,6 +53,12 @@ def kubernetes():
|
|
|
53
53
|
default=None,
|
|
54
54
|
help="Optional Docker Image Pull Policy for Kubernetes pod.",
|
|
55
55
|
)
|
|
56
|
+
@click.option(
|
|
57
|
+
"--image-pull-secrets",
|
|
58
|
+
default=None,
|
|
59
|
+
type=JSONTypeClass(),
|
|
60
|
+
multiple=False,
|
|
61
|
+
)
|
|
56
62
|
@click.option(
|
|
57
63
|
"--service-account",
|
|
58
64
|
help="IRSA requirement for Kubernetes pod.",
|
|
@@ -160,6 +166,7 @@ def step(
|
|
|
160
166
|
executable=None,
|
|
161
167
|
image=None,
|
|
162
168
|
image_pull_policy=None,
|
|
169
|
+
image_pull_secrets=None,
|
|
163
170
|
service_account=None,
|
|
164
171
|
secrets=None,
|
|
165
172
|
node_selector=None,
|
|
@@ -303,6 +310,7 @@ def step(
|
|
|
303
310
|
step_cli=step_cli,
|
|
304
311
|
docker_image=image,
|
|
305
312
|
docker_image_pull_policy=image_pull_policy,
|
|
313
|
+
image_pull_secrets=image_pull_secrets,
|
|
306
314
|
service_account=service_account,
|
|
307
315
|
secrets=secrets,
|
|
308
316
|
node_selector=node_selector,
|
{ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/kubernetes/kubernetes_decorator.py
RENAMED
|
@@ -18,6 +18,7 @@ from metaflow.metaflow_config import (
|
|
|
18
18
|
KUBERNETES_FETCH_EC2_METADATA,
|
|
19
19
|
KUBERNETES_GPU_VENDOR,
|
|
20
20
|
KUBERNETES_IMAGE_PULL_POLICY,
|
|
21
|
+
KUBERNETES_IMAGE_PULL_SECRETS,
|
|
21
22
|
KUBERNETES_MEMORY,
|
|
22
23
|
KUBERNETES_LABELS,
|
|
23
24
|
KUBERNETES_ANNOTATIONS,
|
|
@@ -74,6 +75,10 @@ class KubernetesDecorator(StepDecorator):
|
|
|
74
75
|
not, a default Docker image mapping to the current version of Python is used.
|
|
75
76
|
image_pull_policy: str, default KUBERNETES_IMAGE_PULL_POLICY
|
|
76
77
|
If given, the imagePullPolicy to be applied to the Docker image of the step.
|
|
78
|
+
image_pull_secrets: List[str], default []
|
|
79
|
+
The default is extracted from METAFLOW_KUBERNETES_IMAGE_PULL_SECRETS.
|
|
80
|
+
Kubernetes image pull secrets to use when pulling container images
|
|
81
|
+
in Kubernetes.
|
|
77
82
|
service_account : str, default METAFLOW_KUBERNETES_SERVICE_ACCOUNT
|
|
78
83
|
Kubernetes service account to use when launching pod in Kubernetes.
|
|
79
84
|
secrets : List[str], optional, default None
|
|
@@ -141,6 +146,7 @@ class KubernetesDecorator(StepDecorator):
|
|
|
141
146
|
"disk": "10240",
|
|
142
147
|
"image": None,
|
|
143
148
|
"image_pull_policy": None,
|
|
149
|
+
"image_pull_secrets": None, # e.g., ["regcred"]
|
|
144
150
|
"service_account": None,
|
|
145
151
|
"secrets": None, # e.g., mysecret
|
|
146
152
|
"node_selector": None, # e.g., kubernetes.io/os=linux
|
|
@@ -194,6 +200,10 @@ class KubernetesDecorator(StepDecorator):
|
|
|
194
200
|
)
|
|
195
201
|
if not self.attributes["image_pull_policy"] and KUBERNETES_IMAGE_PULL_POLICY:
|
|
196
202
|
self.attributes["image_pull_policy"] = KUBERNETES_IMAGE_PULL_POLICY
|
|
203
|
+
if not self.attributes["image_pull_secrets"] and KUBERNETES_IMAGE_PULL_SECRETS:
|
|
204
|
+
self.attributes["image_pull_secrets"] = json.loads(
|
|
205
|
+
KUBERNETES_IMAGE_PULL_SECRETS
|
|
206
|
+
)
|
|
197
207
|
|
|
198
208
|
if isinstance(self.attributes["node_selector"], str):
|
|
199
209
|
self.attributes["node_selector"] = parse_kube_keyvalue_list(
|
|
@@ -494,6 +504,7 @@ class KubernetesDecorator(StepDecorator):
|
|
|
494
504
|
for key, val in v.items()
|
|
495
505
|
]
|
|
496
506
|
elif k in [
|
|
507
|
+
"image_pull_secrets",
|
|
497
508
|
"tolerations",
|
|
498
509
|
"persistent_volume_claims",
|
|
499
510
|
"labels",
|
{ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/kubernetes/kubernetes_job.py
RENAMED
|
@@ -235,8 +235,10 @@ class KubernetesJob(object):
|
|
|
235
235
|
)
|
|
236
236
|
],
|
|
237
237
|
node_selector=self._kwargs.get("node_selector"),
|
|
238
|
-
|
|
239
|
-
|
|
238
|
+
image_pull_secrets=[
|
|
239
|
+
client.V1LocalObjectReference(secret)
|
|
240
|
+
for secret in self._kwargs.get("image_pull_secrets") or []
|
|
241
|
+
],
|
|
240
242
|
# TODO (savin): Support preemption policies
|
|
241
243
|
# preemption_policy=?,
|
|
242
244
|
#
|
{ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/kubernetes/kubernetes_jobsets.py
RENAMED
|
@@ -718,8 +718,11 @@ class JobSetSpec(object):
|
|
|
718
718
|
)
|
|
719
719
|
],
|
|
720
720
|
node_selector=self._kwargs.get("node_selector"),
|
|
721
|
-
|
|
722
|
-
|
|
721
|
+
image_pull_secrets=[
|
|
722
|
+
client.V1LocalObjectReference(secret)
|
|
723
|
+
for secret in self._kwargs.get("image_pull_secrets")
|
|
724
|
+
or []
|
|
725
|
+
],
|
|
723
726
|
# TODO (savin): Support preemption policies
|
|
724
727
|
# preemption_policy=?,
|
|
725
728
|
#
|
{ob_metaflow-2.15.15.1 → ob_metaflow-2.15.17.1}/metaflow/plugins/metadata_providers/service.py
RENAMED
|
@@ -72,14 +72,18 @@ class ServiceMetadataProvider(MetadataProvider):
|
|
|
72
72
|
@classmethod
|
|
73
73
|
def compute_info(cls, val):
|
|
74
74
|
v = val.rstrip("/")
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
75
|
+
for i in range(SERVICE_RETRY_COUNT):
|
|
76
|
+
try:
|
|
77
|
+
resp = cls._session.get(
|
|
78
|
+
os.path.join(v, "ping"), headers=SERVICE_HEADERS.copy()
|
|
79
|
+
)
|
|
80
|
+
resp.raise_for_status()
|
|
81
|
+
except: # noqa E722
|
|
82
|
+
time.sleep(2 ** (i - 1))
|
|
83
|
+
else:
|
|
84
|
+
return v
|
|
85
|
+
|
|
86
|
+
raise ValueError("Metaflow service [%s] unreachable." % v)
|
|
83
87
|
|
|
84
88
|
@classmethod
|
|
85
89
|
def default_info(cls):
|
|
@@ -7,6 +7,55 @@ from typing import ClassVar, Dict, Optional, TYPE_CHECKING
|
|
|
7
7
|
from metaflow.exception import MetaflowNotFound
|
|
8
8
|
from metaflow.metaflow_config import DEFAULT_FROM_DEPLOYMENT_IMPL
|
|
9
9
|
|
|
10
|
+
|
|
11
|
+
def generate_fake_flow_file_contents(
|
|
12
|
+
flow_name: str, param_info: dict, project_name: Optional[str] = None
|
|
13
|
+
):
|
|
14
|
+
params_code = ""
|
|
15
|
+
for _, param_details in param_info.items():
|
|
16
|
+
param_python_var_name = param_details["python_var_name"]
|
|
17
|
+
param_name = param_details["name"]
|
|
18
|
+
param_type = param_details["type"]
|
|
19
|
+
param_help = param_details["description"]
|
|
20
|
+
param_required = param_details["is_required"]
|
|
21
|
+
|
|
22
|
+
if param_type == "JSON":
|
|
23
|
+
params_code += (
|
|
24
|
+
f" {param_python_var_name} = Parameter('{param_name}', "
|
|
25
|
+
f"type=JSONType, help='''{param_help}''', required={param_required})\n"
|
|
26
|
+
)
|
|
27
|
+
elif param_type == "FilePath":
|
|
28
|
+
is_text = param_details.get("is_text", True)
|
|
29
|
+
encoding = param_details.get("encoding", "utf-8")
|
|
30
|
+
params_code += (
|
|
31
|
+
f" {param_python_var_name} = IncludeFile('{param_name}', "
|
|
32
|
+
f"is_text={is_text}, encoding='{encoding}', help='''{param_help}''', "
|
|
33
|
+
f"required={param_required})\n"
|
|
34
|
+
)
|
|
35
|
+
else:
|
|
36
|
+
params_code += (
|
|
37
|
+
f" {param_python_var_name} = Parameter('{param_name}', "
|
|
38
|
+
f"type={param_type}, help='''{param_help}''', required={param_required})\n"
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
project_decorator = f"@project(name='{project_name}')\n" if project_name else ""
|
|
42
|
+
|
|
43
|
+
contents = f"""\
|
|
44
|
+
from metaflow import FlowSpec, Parameter, IncludeFile, JSONType, step, project
|
|
45
|
+
{project_decorator}class {flow_name}(FlowSpec):
|
|
46
|
+
{params_code}
|
|
47
|
+
@step
|
|
48
|
+
def start(self):
|
|
49
|
+
self.next(self.end)
|
|
50
|
+
@step
|
|
51
|
+
def end(self):
|
|
52
|
+
pass
|
|
53
|
+
if __name__ == '__main__':
|
|
54
|
+
{flow_name}()
|
|
55
|
+
"""
|
|
56
|
+
return contents
|
|
57
|
+
|
|
58
|
+
|
|
10
59
|
if TYPE_CHECKING:
|
|
11
60
|
import metaflow
|
|
12
61
|
import metaflow.runner.deployer_impl
|
|
@@ -200,7 +200,7 @@ class MutableFlow:
|
|
|
200
200
|
for name, value in self._flow_cls._flow_state.get(
|
|
201
201
|
_FlowState.CONFIGS, {}
|
|
202
202
|
).items():
|
|
203
|
-
yield name, ConfigValue(value)
|
|
203
|
+
yield name, ConfigValue(value) if value is not None else None
|
|
204
204
|
|
|
205
205
|
@property
|
|
206
206
|
def parameters(self) -> Generator[Tuple[str, Any], None, None]:
|
|
@@ -352,7 +352,9 @@ class ConfigInput:
|
|
|
352
352
|
return None
|
|
353
353
|
raise exc from e
|
|
354
354
|
flow_cls._flow_state[_FlowState.CONFIGS][name] = read_value
|
|
355
|
-
to_return[name] =
|
|
355
|
+
to_return[name] = (
|
|
356
|
+
ConfigValue(read_value) if read_value is not None else None
|
|
357
|
+
)
|
|
356
358
|
else:
|
|
357
359
|
if self._parsers[name]:
|
|
358
360
|
read_value = self._call_parser(self._parsers[name], val)
|
|
@@ -367,7 +369,9 @@ class ConfigInput:
|
|
|
367
369
|
continue
|
|
368
370
|
# TODO: Support YAML
|
|
369
371
|
flow_cls._flow_state[_FlowState.CONFIGS][name] = read_value
|
|
370
|
-
to_return[name] =
|
|
372
|
+
to_return[name] = (
|
|
373
|
+
ConfigValue(read_value) if read_value is not None else None
|
|
374
|
+
)
|
|
371
375
|
|
|
372
376
|
reqs = missing_configs.intersection(self._req_configs)
|
|
373
377
|
for missing in reqs:
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
metaflow_version = "2.15.17.1"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ob-metaflow
|
|
3
|
-
Version: 2.15.
|
|
3
|
+
Version: 2.15.17.1
|
|
4
4
|
Summary: Metaflow: More AI and ML, 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.
|
|
15
|
+
Requires-Dist: metaflow-stubs==2.15.17.1; extra == "stubs"
|
|
16
16
|
Dynamic: author
|
|
17
17
|
Dynamic: author-email
|
|
18
18
|
Dynamic: description
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
metaflow_version = "2.15.15.1"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|