metaflow 2.18.0__tar.gz → 2.18.2__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.
- {metaflow-2.18.0/metaflow.egg-info → metaflow-2.18.2}/PKG-INFO +2 -2
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/metadata_provider/metadata.py +6 -1
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/metaflow_config.py +2 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/argo/argo_workflows_cli.py +7 -1
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/aws/aws_utils.py +32 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/aws/batch/batch.py +8 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/aws/batch/batch_cli.py +21 -3
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/aws/batch/batch_decorator.py +44 -1
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/aws/step_functions/step_functions.py +6 -1
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/aws/step_functions/step_functions_cli.py +22 -0
- metaflow-2.18.2/metaflow/plugins/cards/card_modules/bundle.css +1 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/cards/card_modules/main.js +25 -25
- metaflow-2.18.2/metaflow/version.py +1 -0
- {metaflow-2.18.0 → metaflow-2.18.2/metaflow.egg-info}/PKG-INFO +2 -2
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow.egg-info/requires.txt +1 -1
- metaflow-2.18.0/metaflow/plugins/cards/card_modules/bundle.css +0 -1
- metaflow-2.18.0/metaflow/version.py +0 -1
- {metaflow-2.18.0 → metaflow-2.18.2}/LICENSE +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/MANIFEST.in +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/README.md +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/devtools/Makefile +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/devtools/Tiltfile +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/devtools/pick_services.sh +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/R.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/click/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/click/_bashcomplete.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/click/_compat.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/click/_termui_impl.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/click/_textwrap.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/click/_unicodefun.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/click/_winconsole.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/click/core.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/click/decorators.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/click/exceptions.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/click/formatting.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/click/globals.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/click/parser.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/click/termui.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/click/testing.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/click/types.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/click/utils.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/imghdr/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/importlib_metadata/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/importlib_metadata/_adapters.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/importlib_metadata/_collections.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/importlib_metadata/_compat.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/importlib_metadata/_functools.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/importlib_metadata/_itertools.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/importlib_metadata/_meta.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/importlib_metadata/_text.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/importlib_metadata/py.typed +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/packaging/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/packaging/_elffile.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/packaging/_manylinux.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/packaging/_musllinux.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/packaging/_parser.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/packaging/_structures.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/packaging/_tokenizer.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/packaging/markers.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/packaging/py.typed +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/packaging/requirements.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/packaging/specifiers.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/packaging/tags.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/packaging/utils.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/packaging/version.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/typeguard/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/typeguard/_checkers.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/typeguard/_config.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/typeguard/_decorators.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/typeguard/_exceptions.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/typeguard/_functions.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/typeguard/_importhook.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/typeguard/_memo.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/typeguard/_pytest_plugin.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/typeguard/_suppression.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/typeguard/_transformer.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/typeguard/_union_transformer.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/typeguard/_utils.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/typeguard/py.typed +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/typing_extensions.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/v3_6/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/v3_6/importlib_metadata/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/v3_6/importlib_metadata/_adapters.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/v3_6/importlib_metadata/_collections.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/v3_6/importlib_metadata/_compat.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/v3_6/importlib_metadata/_functools.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/v3_6/importlib_metadata/_itertools.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/v3_6/importlib_metadata/_meta.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/v3_6/importlib_metadata/_text.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/v3_6/importlib_metadata/py.typed +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/v3_6/typing_extensions.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/v3_6/zipp.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/v3_7/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/v3_7/importlib_metadata/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/v3_7/importlib_metadata/_adapters.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/v3_7/importlib_metadata/_collections.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/v3_7/importlib_metadata/_compat.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/v3_7/importlib_metadata/_functools.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/v3_7/importlib_metadata/_itertools.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/v3_7/importlib_metadata/_meta.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/v3_7/importlib_metadata/_text.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/v3_7/importlib_metadata/py.typed +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/v3_7/typeguard/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/v3_7/typeguard/_checkers.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/v3_7/typeguard/_config.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/v3_7/typeguard/_decorators.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/v3_7/typeguard/_exceptions.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/v3_7/typeguard/_functions.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/v3_7/typeguard/_importhook.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/v3_7/typeguard/_memo.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/v3_7/typeguard/_pytest_plugin.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/v3_7/typeguard/_suppression.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/v3_7/typeguard/_transformer.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/v3_7/typeguard/_union_transformer.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/v3_7/typeguard/_utils.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/v3_7/typeguard/py.typed +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/v3_7/typing_extensions.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/v3_7/zipp.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/yaml/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/yaml/composer.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/yaml/constructor.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/yaml/cyaml.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/yaml/dumper.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/yaml/emitter.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/yaml/error.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/yaml/events.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/yaml/loader.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/yaml/nodes.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/yaml/parser.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/yaml/reader.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/yaml/representer.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/yaml/resolver.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/yaml/scanner.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/yaml/serializer.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/yaml/tokens.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/_vendor/zipp.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/cards.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/cli.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/cli_args.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/cli_components/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/cli_components/dump_cmd.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/cli_components/init_cmd.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/cli_components/run_cmds.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/cli_components/step_cmd.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/cli_components/utils.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/client/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/client/core.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/client/filecache.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/clone_util.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/cmd/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/cmd/code/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/cmd/configure_cmd.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/cmd/develop/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/cmd/develop/stub_generator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/cmd/develop/stubs.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/cmd/main_cli.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/cmd/make_wrapper.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/cmd/tutorials_cmd.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/cmd/util.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/cmd_with_io.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/datastore/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/datastore/content_addressed_store.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/datastore/datastore_set.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/datastore/datastore_storage.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/datastore/exceptions.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/datastore/flow_datastore.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/datastore/inputs.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/datastore/task_datastore.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/debug.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/decorators.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/event_logger.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/events.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/exception.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/extension_support/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/extension_support/_empty_file.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/extension_support/cmd.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/extension_support/integrations.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/extension_support/plugins.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/flowspec.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/graph.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/includefile.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/integrations.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/lint.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/meta_files.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/metadata_provider/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/metadata_provider/heartbeat.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/metadata_provider/util.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/metaflow_config_funcs.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/metaflow_current.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/metaflow_environment.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/metaflow_git.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/metaflow_profile.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/metaflow_version.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/mflog/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/mflog/mflog.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/mflog/save_logs.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/mflog/save_logs_periodically.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/mflog/tee.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/monitor.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/multicore_utils.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/package/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/packaging_sys/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/packaging_sys/backend.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/packaging_sys/distribution_support.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/packaging_sys/tar_backend.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/packaging_sys/utils.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/packaging_sys/v1.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/parameters.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/airflow/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/airflow/airflow.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/airflow/airflow_cli.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/airflow/airflow_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/airflow/airflow_utils.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/airflow/dag.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/airflow/exception.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/airflow/plumbing/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/airflow/plumbing/set_parameters.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/airflow/sensors/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/airflow/sensors/base_sensor.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/airflow/sensors/external_task_sensor.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/airflow/sensors/s3_sensor.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/argo/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/argo/argo_client.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/argo/argo_events.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/argo/argo_workflows.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/argo/argo_workflows_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/argo/argo_workflows_deployer.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/argo/argo_workflows_deployer_objects.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/argo/capture_error.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/argo/conditional_input_paths.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/argo/exit_hooks.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/argo/generate_input_paths.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/argo/jobset_input_paths.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/aws/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/aws/aws_client.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/aws/batch/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/aws/batch/batch_client.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/aws/secrets_manager/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/aws/secrets_manager/aws_secrets_manager_secrets_provider.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/aws/step_functions/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/aws/step_functions/dynamo_db_client.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/aws/step_functions/event_bridge_client.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/aws/step_functions/production_token.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/aws/step_functions/schedule_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/aws/step_functions/set_batch_environment.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/aws/step_functions/step_functions_client.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/aws/step_functions/step_functions_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/aws/step_functions/step_functions_deployer.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/aws/step_functions/step_functions_deployer_objects.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/azure/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/azure/azure_credential.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/azure/azure_exceptions.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/azure/azure_secret_manager_secrets_provider.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/azure/azure_tail.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/azure/azure_utils.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/azure/blob_service_client_factory.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/azure/includefile_support.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/cards/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/cards/card_cli.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/cards/card_client.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/cards/card_creator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/cards/card_datastore.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/cards/card_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/cards/card_modules/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/cards/card_modules/base.html +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/cards/card_modules/basic.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/cards/card_modules/card.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/cards/card_modules/chevron/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/cards/card_modules/chevron/main.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/cards/card_modules/chevron/metadata.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/cards/card_modules/chevron/renderer.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/cards/card_modules/chevron/tokenizer.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/cards/card_modules/components.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/cards/card_modules/convert_to_native_type.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/cards/card_modules/main.css +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/cards/card_modules/renderer_tools.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/cards/card_modules/test_cards.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/cards/card_resolver.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/cards/card_server.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/cards/card_viewer/viewer.html +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/cards/component_serializer.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/cards/exception.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/cards/metadata.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/catch_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/datastores/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/datastores/azure_storage.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/datastores/gs_storage.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/datastores/local_storage.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/datastores/s3_storage.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/datatools/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/datatools/local.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/datatools/s3/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/datatools/s3/s3.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/datatools/s3/s3op.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/datatools/s3/s3tail.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/datatools/s3/s3util.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/debug_logger.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/debug_monitor.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/env_escape/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/env_escape/client.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/env_escape/client_modules.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/env_escape/communication/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/env_escape/communication/bytestream.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/env_escape/communication/channel.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/env_escape/communication/socket_bytestream.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/env_escape/communication/utils.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/env_escape/configurations/emulate_test_lib/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/env_escape/configurations/emulate_test_lib/overrides.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/env_escape/configurations/emulate_test_lib/server_mappings.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/env_escape/configurations/test_lib_impl/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/env_escape/configurations/test_lib_impl/test_lib.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/env_escape/consts.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/env_escape/data_transferer.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/env_escape/exception_transferer.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/env_escape/override_decorators.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/env_escape/server.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/env_escape/stub.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/env_escape/utils.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/environment_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/events_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/exit_hook/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/exit_hook/exit_hook_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/exit_hook/exit_hook_script.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/frameworks/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/frameworks/pytorch.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/gcp/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/gcp/gcp_secret_manager_secrets_provider.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/gcp/gs_exceptions.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/gcp/gs_storage_client_factory.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/gcp/gs_tail.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/gcp/gs_utils.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/gcp/includefile_support.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/kubernetes/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/kubernetes/kube_utils.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/kubernetes/kubernetes.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/kubernetes/kubernetes_cli.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/kubernetes/kubernetes_client.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/kubernetes/kubernetes_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/kubernetes/kubernetes_job.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/kubernetes/kubernetes_jobsets.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/kubernetes/spot_metadata_cli.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/kubernetes/spot_monitor_sidecar.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/logs_cli.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/metadata_providers/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/metadata_providers/local.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/metadata_providers/service.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/package_cli.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/parallel_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/project_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/pypi/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/pypi/bootstrap.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/pypi/conda_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/pypi/conda_environment.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/pypi/micromamba.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/pypi/parsers.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/pypi/pip.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/pypi/pypi_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/pypi/pypi_environment.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/pypi/utils.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/resources_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/retry_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/secrets/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/secrets/inline_secrets_provider.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/secrets/secrets_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/secrets/secrets_func.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/secrets/secrets_spec.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/secrets/utils.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/storage_executor.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/tag_cli.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/test_unbounded_foreach_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/timeout_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/uv/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/uv/bootstrap.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/uv/uv_environment.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/procpoll.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/py.typed +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/pylint_wrapper.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/runner/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/runner/click_api.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/runner/deployer.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/runner/deployer_impl.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/runner/metaflow_runner.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/runner/nbdeploy.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/runner/nbrun.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/runner/subprocess_manager.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/runner/utils.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/runtime.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/sidecar/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/sidecar/sidecar.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/sidecar/sidecar_messages.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/sidecar/sidecar_subprocess.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/sidecar/sidecar_worker.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/system/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/system/system_logger.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/system/system_monitor.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/system/system_utils.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/tagging_util.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/task.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/tracing/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/tracing/propagator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/tracing/span_exporter.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/tracing/tracing_modules.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/tuple_util.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/tutorials/00-helloworld/README.md +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/tutorials/00-helloworld/helloworld.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/tutorials/01-playlist/README.md +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/tutorials/01-playlist/movies.csv +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/tutorials/01-playlist/playlist.ipynb +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/tutorials/01-playlist/playlist.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/tutorials/02-statistics/README.md +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/tutorials/02-statistics/movies.csv +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/tutorials/02-statistics/stats.ipynb +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/tutorials/02-statistics/stats.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/tutorials/03-playlist-redux/README.md +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/tutorials/03-playlist-redux/playlist.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/tutorials/04-playlist-plus/README.md +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/tutorials/04-playlist-plus/playlist.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/tutorials/05-hello-cloud/README.md +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/tutorials/05-hello-cloud/hello-cloud.ipynb +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/tutorials/05-hello-cloud/hello-cloud.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/tutorials/06-statistics-redux/README.md +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/tutorials/06-statistics-redux/stats.ipynb +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/tutorials/07-worldview/README.md +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/tutorials/07-worldview/worldview.ipynb +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/tutorials/08-autopilot/README.md +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/tutorials/08-autopilot/autopilot.ipynb +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/unbounded_foreach.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/user_configs/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/user_configs/config_options.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/user_configs/config_parameters.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/user_decorators/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/user_decorators/common.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/user_decorators/mutable_flow.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/user_decorators/mutable_step.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/user_decorators/user_flow_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/user_decorators/user_step_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/util.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow/vendor.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow.egg-info/SOURCES.txt +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow.egg-info/dependency_links.txt +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow.egg-info/entry_points.txt +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/metaflow.egg-info/top_level.txt +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/setup.cfg +0 -0
- {metaflow-2.18.0 → metaflow-2.18.2}/setup.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: metaflow
|
3
|
-
Version: 2.18.
|
3
|
+
Version: 2.18.2
|
4
4
|
Summary: Metaflow: More AI and ML, Less Engineering
|
5
5
|
Author: Metaflow Developers
|
6
6
|
Author-email: help@metaflow.org
|
@@ -26,7 +26,7 @@ License-File: LICENSE
|
|
26
26
|
Requires-Dist: requests
|
27
27
|
Requires-Dist: boto3
|
28
28
|
Provides-Extra: stubs
|
29
|
-
Requires-Dist: metaflow-stubs==2.18.
|
29
|
+
Requires-Dist: metaflow-stubs==2.18.2; extra == "stubs"
|
30
30
|
Dynamic: author
|
31
31
|
Dynamic: author-email
|
32
32
|
Dynamic: classifier
|
@@ -632,7 +632,12 @@ class MetadataProvider(object):
|
|
632
632
|
|
633
633
|
def _get_git_info_as_dict(self):
|
634
634
|
git_info = {}
|
635
|
-
|
635
|
+
# NOTE: For flows executing remotely, we want to read from the INFO file of the code package that contains
|
636
|
+
# information on the original environment that deployed the flow.
|
637
|
+
# Otherwise git related info will be missing, as the repository is not part of the codepackage.
|
638
|
+
from metaflow.packaging_sys import MetaflowCodeContent
|
639
|
+
|
640
|
+
env = MetaflowCodeContent.get_info() or self._environment.get_environment_info()
|
636
641
|
for key in [
|
637
642
|
"repo_url",
|
638
643
|
"branch_name",
|
@@ -314,6 +314,8 @@ SERVICE_INTERNAL_URL = from_conf("SERVICE_INTERNAL_URL", SERVICE_URL)
|
|
314
314
|
# in all Metaflow deployments. Hopefully, some day we can flip the
|
315
315
|
# default to True.
|
316
316
|
BATCH_EMIT_TAGS = from_conf("BATCH_EMIT_TAGS", False)
|
317
|
+
# Default tags to add to AWS Batch jobs. These are in addition to the defaults set when BATCH_EMIT_TAGS is true.
|
318
|
+
BATCH_DEFAULT_TAGS = from_conf("BATCH_DEFAULT_TAGS", {})
|
317
319
|
|
318
320
|
###
|
319
321
|
# AWS Step Functions configuration
|
@@ -1369,7 +1369,7 @@ def sanitize_for_argo(text):
|
|
1369
1369
|
Sanitizes a string so it does not contain characters that are not permitted in
|
1370
1370
|
Argo Workflow resource names.
|
1371
1371
|
"""
|
1372
|
-
|
1372
|
+
sanitized = (
|
1373
1373
|
re.compile(r"^[^A-Za-z0-9]+")
|
1374
1374
|
.sub("", text)
|
1375
1375
|
.replace("_", "")
|
@@ -1377,6 +1377,12 @@ def sanitize_for_argo(text):
|
|
1377
1377
|
.replace("+", "")
|
1378
1378
|
.lower()
|
1379
1379
|
)
|
1380
|
+
# This is added in order to get sanitized and truncated project branch names to adhere to RFC 1123 subdomain requirements
|
1381
|
+
# f.ex. after truncation a project flow name might be project.branch-cut-short-.flowname
|
1382
|
+
# sanitize around the . separators by removing any non-alphanumeric characters
|
1383
|
+
sanitized = re.compile(r"[^a-z0-9]*\.[^a-z0-9]*").sub(".", sanitized)
|
1384
|
+
|
1385
|
+
return sanitized
|
1380
1386
|
|
1381
1387
|
|
1382
1388
|
def remap_status(status):
|
@@ -194,3 +194,35 @@ def sanitize_batch_tag(key, value):
|
|
194
194
|
_value = re.sub(RE_NOT_PERMITTED, "", value)[:256]
|
195
195
|
|
196
196
|
return _key, _value
|
197
|
+
|
198
|
+
|
199
|
+
def validate_aws_tag(key: str, value: str):
|
200
|
+
PERMITTED = r"[A-Za-z0-9\s\+\-\=\.\_\:\/\@]"
|
201
|
+
|
202
|
+
AWS_PREFIX = r"^aws\:" # case-insensitive.
|
203
|
+
if re.match(AWS_PREFIX, key, re.IGNORECASE) or re.match(
|
204
|
+
AWS_PREFIX, value, re.IGNORECASE
|
205
|
+
):
|
206
|
+
raise MetaflowException(
|
207
|
+
"'aws:' is not an allowed prefix for either tag keys or values"
|
208
|
+
)
|
209
|
+
|
210
|
+
if len(key) > 128:
|
211
|
+
raise MetaflowException(
|
212
|
+
"Tag key *%s* is too long. Maximum allowed tag key length is 128." % key
|
213
|
+
)
|
214
|
+
if len(value) > 256:
|
215
|
+
raise MetaflowException(
|
216
|
+
"Tag value *%s* is too long. Maximum allowed tag value length is 256."
|
217
|
+
% value
|
218
|
+
)
|
219
|
+
|
220
|
+
if not re.match(PERMITTED, key):
|
221
|
+
raise MetaflowException(
|
222
|
+
"Key *s* is not permitted. Tags must match pattern: %s" % (key, PERMITTED)
|
223
|
+
)
|
224
|
+
if not re.match(PERMITTED, value):
|
225
|
+
raise MetaflowException(
|
226
|
+
"Value *%s* is not permitted. Tags must match pattern: %s"
|
227
|
+
% (value, PERMITTED)
|
228
|
+
)
|
@@ -199,6 +199,7 @@ class Batch(object):
|
|
199
199
|
host_volumes=None,
|
200
200
|
efs_volumes=None,
|
201
201
|
use_tmpfs=None,
|
202
|
+
aws_batch_tags=None,
|
202
203
|
tmpfs_tempdir=None,
|
203
204
|
tmpfs_size=None,
|
204
205
|
tmpfs_path=None,
|
@@ -344,6 +345,11 @@ class Batch(object):
|
|
344
345
|
if key in attrs:
|
345
346
|
k, v = sanitize_batch_tag(key, attrs.get(key))
|
346
347
|
job.tag(k, v)
|
348
|
+
|
349
|
+
if aws_batch_tags is not None:
|
350
|
+
for key, value in aws_batch_tags.items():
|
351
|
+
job.tag(key, value)
|
352
|
+
|
347
353
|
return job
|
348
354
|
|
349
355
|
def launch_job(
|
@@ -371,6 +377,7 @@ class Batch(object):
|
|
371
377
|
host_volumes=None,
|
372
378
|
efs_volumes=None,
|
373
379
|
use_tmpfs=None,
|
380
|
+
aws_batch_tags=None,
|
374
381
|
tmpfs_tempdir=None,
|
375
382
|
tmpfs_size=None,
|
376
383
|
tmpfs_path=None,
|
@@ -414,6 +421,7 @@ class Batch(object):
|
|
414
421
|
host_volumes=host_volumes,
|
415
422
|
efs_volumes=efs_volumes,
|
416
423
|
use_tmpfs=use_tmpfs,
|
424
|
+
aws_batch_tags=aws_batch_tags,
|
417
425
|
tmpfs_tempdir=tmpfs_tempdir,
|
418
426
|
tmpfs_size=tmpfs_size,
|
419
427
|
tmpfs_path=tmpfs_path,
|
@@ -12,6 +12,7 @@ from metaflow.metaflow_config import DATASTORE_LOCAL_DIR
|
|
12
12
|
from metaflow.mflog import TASK_LOG_SOURCE
|
13
13
|
from metaflow.unbounded_foreach import UBF_CONTROL, UBF_TASK
|
14
14
|
from .batch import Batch, BatchKilledException
|
15
|
+
from ..aws_utils import validate_aws_tag
|
15
16
|
|
16
17
|
|
17
18
|
@click.group()
|
@@ -47,7 +48,7 @@ def _execute_cmd(func, flow_name, run_id, user, my_runs, echo):
|
|
47
48
|
func(flow_name, run_id, user, echo)
|
48
49
|
|
49
50
|
|
50
|
-
@batch.command(help="List unfinished AWS Batch tasks of this flow")
|
51
|
+
@batch.command("list", help="List unfinished AWS Batch tasks of this flow")
|
51
52
|
@click.option(
|
52
53
|
"--my-runs",
|
53
54
|
default=False,
|
@@ -61,7 +62,7 @@ def _execute_cmd(func, flow_name, run_id, user, my_runs, echo):
|
|
61
62
|
help="List unfinished tasks corresponding to the run id.",
|
62
63
|
)
|
63
64
|
@click.pass_context
|
64
|
-
def
|
65
|
+
def _list(ctx, run_id, user, my_runs):
|
65
66
|
batch = Batch(ctx.obj.metadata, ctx.obj.environment)
|
66
67
|
_execute_cmd(
|
67
68
|
batch.list_jobs, ctx.obj.flow.name, run_id, user, my_runs, ctx.obj.echo
|
@@ -147,6 +148,13 @@ def kill(ctx, run_id, user, my_runs):
|
|
147
148
|
help="Activate designated number of elastic fabric adapter devices. "
|
148
149
|
"EFA driver must be installed and instance type compatible with EFA",
|
149
150
|
)
|
151
|
+
@click.option(
|
152
|
+
"--aws-batch-tag",
|
153
|
+
"aws_batch_tags",
|
154
|
+
multiple=True,
|
155
|
+
default=None,
|
156
|
+
help="AWS tags. Format: key=value, multiple allowed",
|
157
|
+
)
|
150
158
|
@click.option("--use-tmpfs", is_flag=True, help="tmpfs requirement for AWS Batch.")
|
151
159
|
@click.option("--tmpfs-tempdir", is_flag=True, help="tmpfs requirement for AWS Batch.")
|
152
160
|
@click.option("--tmpfs-size", help="tmpfs requirement for AWS Batch.")
|
@@ -203,6 +211,7 @@ def step(
|
|
203
211
|
swappiness=None,
|
204
212
|
inferentia=None,
|
205
213
|
efa=None,
|
214
|
+
aws_batch_tags=None,
|
206
215
|
use_tmpfs=None,
|
207
216
|
tmpfs_tempdir=None,
|
208
217
|
tmpfs_size=None,
|
@@ -213,7 +222,7 @@ def step(
|
|
213
222
|
log_driver=None,
|
214
223
|
log_options=None,
|
215
224
|
num_parallel=None,
|
216
|
-
**kwargs
|
225
|
+
**kwargs
|
217
226
|
):
|
218
227
|
def echo(msg, stream="stderr", batch_id=None, **kwargs):
|
219
228
|
msg = util.to_unicode(msg)
|
@@ -277,6 +286,14 @@ def step(
|
|
277
286
|
|
278
287
|
env = {"METAFLOW_FLOW_FILENAME": os.path.basename(sys.argv[0])}
|
279
288
|
|
289
|
+
if aws_batch_tags is not None:
|
290
|
+
# We do not need to validate these again,
|
291
|
+
# as they come supplied by the batch decorator which already performed validation.
|
292
|
+
batch_tags = {}
|
293
|
+
for item in list(aws_batch_tags):
|
294
|
+
key, value = item.split("=")
|
295
|
+
batch_tags[key] = value
|
296
|
+
|
280
297
|
env_deco = [deco for deco in node.decorators if deco.name == "environment"]
|
281
298
|
if env_deco:
|
282
299
|
env.update(env_deco[0].attributes["vars"])
|
@@ -341,6 +358,7 @@ def step(
|
|
341
358
|
host_volumes=host_volumes,
|
342
359
|
efs_volumes=efs_volumes,
|
343
360
|
use_tmpfs=use_tmpfs,
|
361
|
+
aws_batch_tags=batch_tags,
|
344
362
|
tmpfs_tempdir=tmpfs_tempdir,
|
345
363
|
tmpfs_size=tmpfs_size,
|
346
364
|
tmpfs_path=tmpfs_path,
|
@@ -10,6 +10,7 @@ from metaflow.metadata_provider.util import sync_local_metadata_to_datastore
|
|
10
10
|
from metaflow.metaflow_config import (
|
11
11
|
BATCH_CONTAINER_IMAGE,
|
12
12
|
BATCH_CONTAINER_REGISTRY,
|
13
|
+
BATCH_DEFAULT_TAGS,
|
13
14
|
BATCH_JOB_QUEUE,
|
14
15
|
DATASTORE_LOCAL_DIR,
|
15
16
|
ECS_FARGATE_EXECUTION_ROLE,
|
@@ -24,6 +25,7 @@ from ..aws_utils import (
|
|
24
25
|
compute_resource_attributes,
|
25
26
|
get_docker_registry,
|
26
27
|
get_ec2_instance_metadata,
|
28
|
+
validate_aws_tag,
|
27
29
|
)
|
28
30
|
from .batch import BatchException
|
29
31
|
|
@@ -68,6 +70,9 @@ class BatchDecorator(StepDecorator):
|
|
68
70
|
A swappiness value of 0 causes swapping not to happen unless absolutely
|
69
71
|
necessary. A swappiness value of 100 causes pages to be swapped very
|
70
72
|
aggressively. Accepted values are whole numbers between 0 and 100.
|
73
|
+
aws_batch_tags: Dict[str, str], optional, default None
|
74
|
+
Sets arbitrary AWS tags on the AWS Batch compute environment.
|
75
|
+
Set as string key-value pairs.
|
71
76
|
use_tmpfs : bool, default False
|
72
77
|
This enables an explicit tmpfs mount for this step. Note that tmpfs is
|
73
78
|
not available on Fargate compute environments
|
@@ -114,6 +119,7 @@ class BatchDecorator(StepDecorator):
|
|
114
119
|
"host_volumes": None,
|
115
120
|
"efs_volumes": None,
|
116
121
|
"use_tmpfs": False,
|
122
|
+
"aws_batch_tags": None,
|
117
123
|
"tmpfs_tempdir": True,
|
118
124
|
"tmpfs_size": None,
|
119
125
|
"tmpfs_path": "/metaflow_temp",
|
@@ -175,6 +181,29 @@ class BatchDecorator(StepDecorator):
|
|
175
181
|
if self.attributes["trainium"] is not None:
|
176
182
|
self.attributes["inferentia"] = self.attributes["trainium"]
|
177
183
|
|
184
|
+
if not isinstance(BATCH_DEFAULT_TAGS, dict) and not all(
|
185
|
+
isinstance(k, str) and isinstance(v, str)
|
186
|
+
for k, v in BATCH_DEFAULT_TAGS.items()
|
187
|
+
):
|
188
|
+
raise BatchException(
|
189
|
+
"BATCH_DEFAULT_TAGS environment variable must be Dict[str, str]"
|
190
|
+
)
|
191
|
+
|
192
|
+
if self.attributes["aws_batch_tags"] is not None:
|
193
|
+
if not isinstance(self.attributes["aws_batch_tags"], dict) and not all(
|
194
|
+
isinstance(k, str) and isinstance(v, str)
|
195
|
+
for k, v in self.attributes["aws_batch_tags"].items()
|
196
|
+
):
|
197
|
+
raise BatchException("aws_batch_tags must be Dict[str, str]")
|
198
|
+
else:
|
199
|
+
self.attributes["aws_batch_tags"] = {}
|
200
|
+
|
201
|
+
if BATCH_DEFAULT_TAGS:
|
202
|
+
self.attributes["aws_batch_tags"] = {
|
203
|
+
**BATCH_DEFAULT_TAGS,
|
204
|
+
**self.attributes["aws_batch_tags"],
|
205
|
+
}
|
206
|
+
|
178
207
|
# clean up the alias attribute so it is not passed on.
|
179
208
|
self.attributes.pop("trainium", None)
|
180
209
|
|
@@ -207,6 +236,11 @@ class BatchDecorator(StepDecorator):
|
|
207
236
|
if self.attributes["tmpfs_path"] and self.attributes["tmpfs_path"][0] != "/":
|
208
237
|
raise BatchException("'tmpfs_path' needs to be an absolute path")
|
209
238
|
|
239
|
+
# Validate Batch tags
|
240
|
+
if self.attributes["aws_batch_tags"]:
|
241
|
+
for key, val in self.attributes["aws_batch_tags"].items():
|
242
|
+
validate_aws_tag(key, val)
|
243
|
+
|
210
244
|
def runtime_init(self, flow, graph, package, run_id):
|
211
245
|
# Set some more internal state.
|
212
246
|
self.flow = flow
|
@@ -231,8 +265,17 @@ class BatchDecorator(StepDecorator):
|
|
231
265
|
cli_args.command_args.append(self.package_metadata)
|
232
266
|
cli_args.command_args.append(self.package_sha)
|
233
267
|
cli_args.command_args.append(self.package_url)
|
234
|
-
|
268
|
+
# skip certain keys as CLI arguments
|
269
|
+
_skip_keys = ["aws_batch_tags"]
|
270
|
+
cli_args.command_options.update(
|
271
|
+
{k: v for k, v in self.attributes.items() if k not in _skip_keys}
|
272
|
+
)
|
235
273
|
cli_args.command_options["run-time-limit"] = self.run_time_limit
|
274
|
+
|
275
|
+
# Pass the supplied AWS batch tags to the step CLI cmd
|
276
|
+
cli_args.command_options["aws-batch-tag"] = [
|
277
|
+
"%s=%s" % (k, v) for k, v in self.attributes["aws_batch_tags"].items()
|
278
|
+
]
|
236
279
|
if not R.use_r():
|
237
280
|
cli_args.entrypoint[0] = sys.executable
|
238
281
|
|
@@ -50,6 +50,7 @@ class StepFunctions(object):
|
|
50
50
|
event_logger,
|
51
51
|
monitor,
|
52
52
|
tags=None,
|
53
|
+
aws_batch_tags=None,
|
53
54
|
namespace=None,
|
54
55
|
username=None,
|
55
56
|
max_workers=None,
|
@@ -70,6 +71,7 @@ class StepFunctions(object):
|
|
70
71
|
self.event_logger = event_logger
|
71
72
|
self.monitor = monitor
|
72
73
|
self.tags = tags
|
74
|
+
self.aws_batch_tags = aws_batch_tags or {}
|
73
75
|
self.namespace = namespace
|
74
76
|
self.username = username
|
75
77
|
self.max_workers = max_workers
|
@@ -194,6 +196,7 @@ class StepFunctions(object):
|
|
194
196
|
"on AWS Step Functions. Please "
|
195
197
|
"deploy your flow first." % name
|
196
198
|
)
|
199
|
+
|
197
200
|
# Dump parameters into `Parameters` input field.
|
198
201
|
input = json.dumps({"Parameters": json.dumps(parameters)})
|
199
202
|
# AWS Step Functions limits input to be 32KiB, but AWS Batch
|
@@ -852,7 +855,8 @@ class StepFunctions(object):
|
|
852
855
|
# AWS_BATCH_JOB_ATTEMPT as the job counter.
|
853
856
|
"retry_count": "$((AWS_BATCH_JOB_ATTEMPT-1))",
|
854
857
|
}
|
855
|
-
|
858
|
+
# merge batch tags supplied through step-fuctions CLI and ones defined in decorator
|
859
|
+
batch_tags = {**self.aws_batch_tags, **resources["aws_batch_tags"]}
|
856
860
|
return (
|
857
861
|
Batch(self.metadata, self.environment)
|
858
862
|
.create_job(
|
@@ -878,6 +882,7 @@ class StepFunctions(object):
|
|
878
882
|
swappiness=resources["swappiness"],
|
879
883
|
efa=resources["efa"],
|
880
884
|
use_tmpfs=resources["use_tmpfs"],
|
885
|
+
aws_batch_tags=batch_tags,
|
881
886
|
tmpfs_tempdir=resources["tmpfs_tempdir"],
|
882
887
|
tmpfs_size=resources["tmpfs_size"],
|
883
888
|
tmpfs_path=resources["tmpfs_path"],
|
{metaflow-2.18.0 → metaflow-2.18.2}/metaflow/plugins/aws/step_functions/step_functions_cli.py
RENAMED
@@ -19,6 +19,8 @@ from metaflow.util import get_username, to_bytes, to_unicode, version_parse
|
|
19
19
|
|
20
20
|
from .production_token import load_token, new_token, store_token
|
21
21
|
from .step_functions import StepFunctions
|
22
|
+
from metaflow.tagging_util import validate_tags
|
23
|
+
from ..aws_utils import validate_aws_tag
|
22
24
|
|
23
25
|
VALID_NAME = re.compile(r"[^a-zA-Z0-9_\-\.]")
|
24
26
|
|
@@ -97,6 +99,13 @@ def step_functions(obj, name=None):
|
|
97
99
|
"with the given tag. You can specify this option multiple "
|
98
100
|
"times to attach multiple tags.",
|
99
101
|
)
|
102
|
+
@click.option(
|
103
|
+
"--aws-batch-tag",
|
104
|
+
"aws_batch_tags",
|
105
|
+
multiple=True,
|
106
|
+
default=None,
|
107
|
+
help="AWS Batch tags.",
|
108
|
+
)
|
100
109
|
@click.option(
|
101
110
|
"--namespace",
|
102
111
|
"user_namespace",
|
@@ -143,6 +152,7 @@ def step_functions(obj, name=None):
|
|
143
152
|
def create(
|
144
153
|
obj,
|
145
154
|
tags=None,
|
155
|
+
aws_batch_tags=None,
|
146
156
|
user_namespace=None,
|
147
157
|
only_json=False,
|
148
158
|
authorize=None,
|
@@ -196,6 +206,7 @@ def create(
|
|
196
206
|
token,
|
197
207
|
obj.state_machine_name,
|
198
208
|
tags,
|
209
|
+
aws_batch_tags,
|
199
210
|
user_namespace,
|
200
211
|
max_workers,
|
201
212
|
workflow_timeout,
|
@@ -315,6 +326,7 @@ def make_flow(
|
|
315
326
|
token,
|
316
327
|
name,
|
317
328
|
tags,
|
329
|
+
aws_batch_tags,
|
318
330
|
namespace,
|
319
331
|
max_workers,
|
320
332
|
workflow_timeout,
|
@@ -348,6 +360,15 @@ def make_flow(
|
|
348
360
|
[obj.package.blob], len_hint=1
|
349
361
|
)[0]
|
350
362
|
|
363
|
+
if aws_batch_tags is not None:
|
364
|
+
batch_tags = {}
|
365
|
+
for item in list(aws_batch_tags):
|
366
|
+
key, value = item.split("=")
|
367
|
+
# These are fresh AWS tags provided by the user through the CLI,
|
368
|
+
# so we must validate them.
|
369
|
+
validate_aws_tag(key, value)
|
370
|
+
batch_tags[key] = value
|
371
|
+
|
351
372
|
return StepFunctions(
|
352
373
|
name,
|
353
374
|
obj.graph,
|
@@ -362,6 +383,7 @@ def make_flow(
|
|
362
383
|
obj.event_logger,
|
363
384
|
obj.monitor,
|
364
385
|
tags=tags,
|
386
|
+
aws_batch_tags=batch_tags,
|
365
387
|
namespace=namespace,
|
366
388
|
max_workers=max_workers,
|
367
389
|
username=get_username(),
|
@@ -0,0 +1 @@
|
|
1
|
+
@import"https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap";code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:#ffffff80}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}:root{--bg: #ffffff;--black: #333;--blue: #0c66de;--dk-grey: #767676;--dk-primary: #ef863b;--dk-secondary: #13172d;--dk-tertiary: #0f426e;--error: #cf483e;--grey: rgba(0, 0, 0, .125);--highlight: #f8d9d8;--lt-blue: #4fa7ff;--lt-grey: #f3f3f3;--lt-lt-grey: #f9f9f9;--lt-primary: #ffcb8b;--lt-secondary: #434d81;--lt-tertiary: #4189c9;--primary: #faab4a;--quadrary: #f8d9d8;--secondary: #2e3454;--tertiary: #2a679d;--white: #ffffff;--component-spacer: 3rem;--aside-width: 20rem;--embed-card-min-height: 12rem;--mono-font: ui-monospace, Menlo, Monaco, "Cascadia Mono", "Segoe UI Mono", "Roboto Mono", "Oxygen Mono", "Ubuntu Monospace", "Source Code Pro", "Fira Mono", "Droid Sans Mono", "Courier New", monospace}html,body{margin:0;min-height:100vh;overflow-y:visible;padding:0;width:100%}.card_app{width:100%;min-height:100vh}.embed .card_app{min-height:var(--embed-card-min-height)}.mf-card *{box-sizing:border-box}.mf-card{background:var(--bg);color:var(--black);font-family:Roboto,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-size:14px;font-weight:400;line-height:1.5;text-size-adjust:100%;margin:0;min-height:100vh;overflow-y:visible;padding:0;text-align:left;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;width:100%}.embed .mf-card{min-height:var(--embed-card-min-height)}.mf-card :is(.mono,code.mono,pre.mono){font-family:var(--mono-font);font-weight:lighter}.mf-card :is(table,th,td){border-spacing:1px;text-align:center;color:var(--black)}.mf-card table{position:relative;min-width:100%;table-layout:inherit!important}.mf-card td{padding:.66rem 1.25rem;background:var(--lt-lt-grey);border:none}.mf-card th{border:none;color:var(--dk-grey);font-weight:400;padding:.5rem}.mf-card :is(h1,h2,h3,h4,h5){font-weight:700;margin:.5rem 0}.mf-card ul{margin:0;padding:0}.mf-card p{margin:0 0 1rem}.mf-card p:last-of-type{margin:0}.mf-card button{font-size:1rem}.mf-card .textButton{cursor:pointer;text-align:left;background:none;border:1px solid transparent;outline:none;padding:0}.mf-card :is(button.textButton:focus,a:focus,button.textButton:active){border:1px dashed var(--grey);background:transparent}.mf-card button.textButton:hover{color:var(--blue);text-decoration:none}.mf-card :is(:not(pre)>code[class*=language-],pre[class*=language-]){background:transparent!important;text-shadow:none;-webkit-user-select:auto;user-select:auto}aside.svelte-1okdv0e{display:none;line-height:2;text-align:left}@media (min-width: 60rem){aside.svelte-1okdv0e{display:flex;flex-direction:column;height:100vh;justify-content:space-between;padding:2.5rem 0 1.5rem 1.5rem;position:fixed;width:var(--aside-width)}}.embed aside{display:none}aside ul{list-style-type:none}aside a,aside button,aside a:visited{text-decoration:none;cursor:pointer;font-weight:700;color:var(--black)}aside a:hover,aside button:hover{text-decoration:underline}.logoContainer svg{width:100%;max-width:140px;margin-bottom:3.75rem;height:auto}.idCell.svelte-pt8vzv{font-weight:700;text-align:right;background:var(--lt-grey);width:12%}.codeCell.svelte-pt8vzv{text-align:left;-webkit-user-select:all;user-select:all}.container.svelte-ubs992{width:100%;overflow:auto}table.svelte-ubs992{width:100%}:root{--dag-border: #282828;--dag-bg-static: var(--lt-grey);--dag-bg-success: #a5d46a;--dag-bg-running: #ffdf80;--dag-bg-error: #ffa080;--dag-connector: #cccccc;--dag-gap: 5rem;--dag-step-height: 6.25rem;--dag-step-width: 11.25rem;--dag-selected: #ffd700}.connectorwrapper.svelte-19jpdwh{transform-origin:0 0;position:absolute;z-index:0;min-width:var(--strokeWidth)}.flip.svelte-19jpdwh{transform:scaleX(-1)}.path.svelte-19jpdwh{--strokeWidth:.5rem;--strokeColor:var(--dag-connector);--borderRadius:1.25rem;box-sizing:border-box}.straightLine.svelte-19jpdwh{position:absolute;top:0;bottom:0;left:0;right:0;border-left:var(--strokeWidth) solid var(--strokeColor)}.loop.svelte-19jpdwh{position:absolute;top:-50%;left:0;width:100%;height:100%;border-radius:var(--borderRadius);border:var(--strokeWidth) solid var(--strokeColor)}.topLeft.svelte-19jpdwh{position:absolute;top:0;left:0;right:50%;bottom:calc(var(--dag-gap) / 2 - var(--strokeWidth) / 2);border-radius:0 0 0 var(--borderRadius);border-left:var(--strokeWidth) solid var(--strokeColor);border-bottom:var(--strokeWidth) solid var(--strokeColor)}.bottomRight.svelte-19jpdwh{position:absolute;top:calc(100% - (var(--dag-gap) / 2 + var(--strokeWidth) / 2));left:50%;right:0;bottom:0;border-radius:0 var(--borderRadius) 0 0;border-top:var(--strokeWidth) solid var(--strokeColor);border-right:var(--strokeWidth) solid var(--strokeColor)}.wrapper.svelte-117ceti.svelte-117ceti{position:relative;z-index:1}.step.svelte-117ceti.svelte-117ceti{font-size:.75rem;padding:.5rem;color:var(--dk-grey)}.rectangle.svelte-117ceti.svelte-117ceti{background-color:var(--dag-bg-static);border:1px solid var(--dag-border);box-sizing:border-box;position:relative;height:var(--dag-step-height);width:var(--dag-step-width)}.rectangle.error.svelte-117ceti.svelte-117ceti{background-color:var(--dag-bg-error)}.rectangle.success.svelte-117ceti.svelte-117ceti{background-color:var(--dag-bg-success)}.rectangle.running.svelte-117ceti.svelte-117ceti{background-color:var(--dag-bg-running)}.level.svelte-117ceti.svelte-117ceti{z-index:-1;filter:contrast(.5);position:absolute}.inner.svelte-117ceti.svelte-117ceti{position:relative;height:100%;width:100%}.name.svelte-117ceti.svelte-117ceti{font-weight:700;overflow:hidden;text-overflow:ellipsis;display:block}.description.svelte-117ceti.svelte-117ceti{position:absolute;max-height:4rem;bottom:0;left:0;right:0;overflow:hidden;-webkit-line-clamp:4;line-clamp:4;display:-webkit-box;-webkit-box-orient:vertical}.overflown.description.svelte-117ceti.svelte-117ceti{cursor:help}.current.svelte-117ceti .rectangle.svelte-117ceti{box-shadow:0 0 10px var(--dag-selected)}.levelstoshow.svelte-117ceti.svelte-117ceti{position:absolute;bottom:100%;right:0;font-size:.75rem;font-weight:100;text-align:right}.stepwrapper.svelte-18aex7a{display:flex;align-items:center;flex-direction:column;width:100%;position:relative;min-width:var(--dag-step-width)}.childwrapper.svelte-18aex7a{display:flex;width:100%}.gap.svelte-18aex7a{height:var(--dag-gap)}.title.svelte-117s0ws{text-align:left}.subtitle.svelte-lu9pnn{font-size:1rem;text-align:left}header.svelte-1ugmt5d{margin-bottom:var(--component-spacer)}figure.svelte-1x96yvr{background:var(--lt-grey);padding:1rem;border-radius:5px;text-align:center;margin:0 auto var(--component-spacer)}@media (min-width: 60rem){figure.svelte-1x96yvr{margin-bottom:0}}img.svelte-1x96yvr{max-width:100%;max-height:500px}.label.svelte-1x96yvr{font-weight:700;margin:.5rem 0}.description.svelte-1x96yvr{font-size:.9rem;font-style:italic;text-align:center;margin:.5rem 0}.log.svelte-1jhmsu{background:var(--lt-grey)!important;font-size:.9rem;padding:2rem}.page.svelte-v7ihqd:last-of-type{margin-bottom:var(--component-spacer)}.page:last-of-type section:last-of-type hr{display:none}progress.svelte-ljrmzp::-webkit-progress-bar{background-color:#fff!important;min-width:100%}progress.svelte-ljrmzp{background-color:#fff;color:#326cded9!important}progress.svelte-ljrmzp::-moz-progress-bar{background-color:#326cde!important}table .container{background:transparent!important;font-size:10px!important;padding:0!important}table progress{height:4px!important}.container.svelte-ljrmzp{display:flex;align-items:center;justify-content:center;font-size:12px;border-radius:3px;background:#edf5ff;padding:3rem}.inner.svelte-ljrmzp{max-width:410px;width:100%;text-align:center}.info.svelte-ljrmzp{display:flex;justify-content:space-between}table .info{text-align:left;flex-direction:column}label.svelte-ljrmzp{font-weight:700}.labelValue.svelte-ljrmzp{border-left:1px solid rgba(0,0,0,.1);margin-left:.25rem;padding-left:.5rem}.details.svelte-ljrmzp{font-family:var(--mono-font);font-size:8px;color:#333433;line-height:18px;overflow:hidden;white-space:nowrap}progress.svelte-ljrmzp{width:100%;border:none;border-radius:5px;height:8px;background:#fff}.heading.svelte-17n0qr8{margin-bottom:1.5rem}.sectionItems.svelte-17n0qr8{display:block}.sectionItems .imageContainer{max-height:500px}.container.svelte-17n0qr8{scroll-margin:var(--component-spacer)}hr.svelte-17n0qr8{background:var(--grey);border:none;height:1px;margin:var(--component-spacer) 0;padding:0}@media (min-width: 60rem){.sectionItems.svelte-17n0qr8{display:grid;grid-gap:2rem}}td.svelte-gl9h79{text-align:left}td.labelColumn.svelte-gl9h79{text-align:right;background-color:var(--lt-grey);font-weight:700;width:12%;white-space:nowrap}.tableContainer.svelte-q3hq57{overflow:auto}th.svelte-q3hq57{position:sticky;top:-1px;z-index:2;white-space:nowrap;background:var(--white)}.mainContainer.svelte-mqeomk{max-width:110rem}main.svelte-mqeomk{flex:0 1 auto;max-width:100rem;padding:1.5rem}@media (min-width: 60rem){main.svelte-mqeomk{margin-left:var(--aside-width)}}.embed main{margin:0 auto;min-width:80%}.modal.svelte-1hhf5ym{align-items:center;background:#00000080;bottom:0;cursor:pointer;display:flex;height:100%;justify-content:center;left:0;overflow:hidden;position:fixed;right:0;top:0;width:100%;z-index:100}.modalContainer>*{background-color:#fff;border-radius:5px;cursor:default;flex:0 1 auto;padding:1rem;position:relative}.modal img{max-height:80vh!important}.cancelButton.svelte-1hhf5ym{color:#fff;cursor:pointer;font-size:2rem;position:absolute;right:1rem;top:1rem}.cancelButton.svelte-1hhf5ym:hover{color:var(--blue)}.nav.svelte-1kdpgko.svelte-1kdpgko{border-radius:0 0 5px;display:none;margin:0;top:0}ul.navList.svelte-1kdpgko.svelte-1kdpgko{list-style-type:none}ul.navList.svelte-1kdpgko ul.svelte-1kdpgko{margin:.5rem 1rem 2rem}.navList.svelte-1kdpgko li.svelte-1kdpgko{display:block;margin:0}.navItem.svelte-1kdpgko li.svelte-1kdpgko:hover{color:var(--blue)}.pageId.svelte-1kdpgko.svelte-1kdpgko{display:block;border-bottom:1px solid var(--grey);padding:0 .5rem;margin-bottom:1rem}@media (min-width: 60rem){.nav.svelte-1kdpgko.svelte-1kdpgko{display:block}ul.navList.svelte-1kdpgko.svelte-1kdpgko{text-align:left}.navList.svelte-1kdpgko li.svelte-1kdpgko{display:block;margin:.5rem 0}}.container.svelte-teyund{width:100%;display:flex;flex-direction:column;position:relative}
|