metaflow 2.18.0__tar.gz → 2.18.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.
- {metaflow-2.18.0/metaflow.egg-info → metaflow-2.18.1}/PKG-INFO +2 -2
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/metaflow_config.py +2 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/argo/argo_workflows_cli.py +7 -1
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/aws_utils.py +32 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/batch/batch.py +8 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/batch/batch_cli.py +21 -3
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/batch/batch_decorator.py +44 -1
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/step_functions/step_functions.py +6 -1
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/step_functions/step_functions_cli.py +22 -0
- metaflow-2.18.1/metaflow/plugins/cards/card_modules/bundle.css +1 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_modules/main.js +25 -25
- metaflow-2.18.1/metaflow/version.py +1 -0
- {metaflow-2.18.0 → metaflow-2.18.1/metaflow.egg-info}/PKG-INFO +2 -2
- {metaflow-2.18.0 → metaflow-2.18.1}/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.1}/LICENSE +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/MANIFEST.in +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/README.md +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/devtools/Makefile +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/devtools/Tiltfile +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/devtools/pick_services.sh +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/R.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/click/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/click/_bashcomplete.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/click/_compat.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/click/_termui_impl.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/click/_textwrap.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/click/_unicodefun.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/click/_winconsole.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/click/core.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/click/decorators.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/click/exceptions.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/click/formatting.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/click/globals.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/click/parser.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/click/termui.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/click/testing.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/click/types.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/click/utils.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/imghdr/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/importlib_metadata/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/importlib_metadata/_adapters.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/importlib_metadata/_collections.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/importlib_metadata/_compat.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/importlib_metadata/_functools.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/importlib_metadata/_itertools.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/importlib_metadata/_meta.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/importlib_metadata/_text.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/importlib_metadata/py.typed +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/packaging/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/packaging/_elffile.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/packaging/_manylinux.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/packaging/_musllinux.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/packaging/_parser.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/packaging/_structures.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/packaging/_tokenizer.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/packaging/markers.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/packaging/py.typed +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/packaging/requirements.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/packaging/specifiers.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/packaging/tags.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/packaging/utils.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/packaging/version.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/typeguard/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/typeguard/_checkers.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/typeguard/_config.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/typeguard/_decorators.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/typeguard/_exceptions.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/typeguard/_functions.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/typeguard/_importhook.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/typeguard/_memo.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/typeguard/_pytest_plugin.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/typeguard/_suppression.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/typeguard/_transformer.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/typeguard/_union_transformer.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/typeguard/_utils.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/typeguard/py.typed +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/typing_extensions.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_6/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_6/importlib_metadata/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_6/importlib_metadata/_adapters.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_6/importlib_metadata/_collections.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_6/importlib_metadata/_compat.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_6/importlib_metadata/_functools.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_6/importlib_metadata/_itertools.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_6/importlib_metadata/_meta.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_6/importlib_metadata/_text.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_6/importlib_metadata/py.typed +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_6/typing_extensions.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_6/zipp.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/importlib_metadata/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/importlib_metadata/_adapters.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/importlib_metadata/_collections.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/importlib_metadata/_compat.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/importlib_metadata/_functools.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/importlib_metadata/_itertools.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/importlib_metadata/_meta.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/importlib_metadata/_text.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/importlib_metadata/py.typed +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/typeguard/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/typeguard/_checkers.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/typeguard/_config.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/typeguard/_decorators.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/typeguard/_exceptions.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/typeguard/_functions.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/typeguard/_importhook.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/typeguard/_memo.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/typeguard/_pytest_plugin.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/typeguard/_suppression.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/typeguard/_transformer.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/typeguard/_union_transformer.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/typeguard/_utils.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/typeguard/py.typed +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/typing_extensions.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/zipp.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/yaml/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/yaml/composer.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/yaml/constructor.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/yaml/cyaml.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/yaml/dumper.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/yaml/emitter.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/yaml/error.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/yaml/events.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/yaml/loader.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/yaml/nodes.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/yaml/parser.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/yaml/reader.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/yaml/representer.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/yaml/resolver.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/yaml/scanner.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/yaml/serializer.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/yaml/tokens.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/zipp.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cards.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cli.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cli_args.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cli_components/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cli_components/dump_cmd.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cli_components/init_cmd.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cli_components/run_cmds.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cli_components/step_cmd.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cli_components/utils.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/client/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/client/core.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/client/filecache.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/clone_util.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cmd/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cmd/code/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cmd/configure_cmd.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cmd/develop/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cmd/develop/stub_generator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cmd/develop/stubs.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cmd/main_cli.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cmd/make_wrapper.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cmd/tutorials_cmd.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cmd/util.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cmd_with_io.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/datastore/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/datastore/content_addressed_store.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/datastore/datastore_set.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/datastore/datastore_storage.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/datastore/exceptions.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/datastore/flow_datastore.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/datastore/inputs.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/datastore/task_datastore.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/debug.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/decorators.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/event_logger.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/events.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/exception.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/extension_support/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/extension_support/_empty_file.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/extension_support/cmd.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/extension_support/integrations.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/extension_support/plugins.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/flowspec.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/graph.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/includefile.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/integrations.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/lint.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/meta_files.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/metadata_provider/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/metadata_provider/heartbeat.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/metadata_provider/metadata.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/metadata_provider/util.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/metaflow_config_funcs.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/metaflow_current.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/metaflow_environment.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/metaflow_git.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/metaflow_profile.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/metaflow_version.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/mflog/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/mflog/mflog.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/mflog/save_logs.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/mflog/save_logs_periodically.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/mflog/tee.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/monitor.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/multicore_utils.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/package/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/packaging_sys/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/packaging_sys/backend.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/packaging_sys/distribution_support.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/packaging_sys/tar_backend.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/packaging_sys/utils.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/packaging_sys/v1.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/parameters.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/airflow/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/airflow/airflow.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/airflow/airflow_cli.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/airflow/airflow_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/airflow/airflow_utils.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/airflow/dag.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/airflow/exception.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/airflow/plumbing/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/airflow/plumbing/set_parameters.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/airflow/sensors/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/airflow/sensors/base_sensor.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/airflow/sensors/external_task_sensor.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/airflow/sensors/s3_sensor.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/argo/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/argo/argo_client.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/argo/argo_events.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/argo/argo_workflows.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/argo/argo_workflows_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/argo/argo_workflows_deployer.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/argo/argo_workflows_deployer_objects.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/argo/capture_error.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/argo/conditional_input_paths.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/argo/exit_hooks.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/argo/generate_input_paths.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/argo/jobset_input_paths.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/aws_client.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/batch/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/batch/batch_client.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/secrets_manager/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/secrets_manager/aws_secrets_manager_secrets_provider.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/step_functions/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/step_functions/dynamo_db_client.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/step_functions/event_bridge_client.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/step_functions/production_token.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/step_functions/schedule_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/step_functions/set_batch_environment.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/step_functions/step_functions_client.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/step_functions/step_functions_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/step_functions/step_functions_deployer.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/step_functions/step_functions_deployer_objects.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/azure/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/azure/azure_credential.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/azure/azure_exceptions.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/azure/azure_secret_manager_secrets_provider.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/azure/azure_tail.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/azure/azure_utils.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/azure/blob_service_client_factory.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/azure/includefile_support.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_cli.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_client.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_creator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_datastore.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_modules/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_modules/base.html +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_modules/basic.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_modules/card.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_modules/chevron/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_modules/chevron/main.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_modules/chevron/metadata.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_modules/chevron/renderer.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_modules/chevron/tokenizer.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_modules/components.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_modules/convert_to_native_type.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_modules/main.css +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_modules/renderer_tools.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_modules/test_cards.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_resolver.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_server.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_viewer/viewer.html +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/component_serializer.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/exception.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/metadata.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/catch_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/datastores/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/datastores/azure_storage.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/datastores/gs_storage.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/datastores/local_storage.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/datastores/s3_storage.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/datatools/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/datatools/local.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/datatools/s3/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/datatools/s3/s3.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/datatools/s3/s3op.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/datatools/s3/s3tail.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/datatools/s3/s3util.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/debug_logger.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/debug_monitor.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/client.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/client_modules.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/communication/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/communication/bytestream.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/communication/channel.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/communication/socket_bytestream.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/communication/utils.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/configurations/emulate_test_lib/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/configurations/emulate_test_lib/overrides.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/configurations/emulate_test_lib/server_mappings.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/configurations/test_lib_impl/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/configurations/test_lib_impl/test_lib.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/consts.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/data_transferer.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/exception_transferer.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/override_decorators.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/server.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/stub.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/utils.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/environment_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/events_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/exit_hook/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/exit_hook/exit_hook_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/exit_hook/exit_hook_script.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/frameworks/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/frameworks/pytorch.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/gcp/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/gcp/gcp_secret_manager_secrets_provider.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/gcp/gs_exceptions.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/gcp/gs_storage_client_factory.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/gcp/gs_tail.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/gcp/gs_utils.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/gcp/includefile_support.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/kubernetes/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/kubernetes/kube_utils.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/kubernetes/kubernetes.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/kubernetes/kubernetes_cli.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/kubernetes/kubernetes_client.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/kubernetes/kubernetes_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/kubernetes/kubernetes_job.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/kubernetes/kubernetes_jobsets.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/kubernetes/spot_metadata_cli.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/kubernetes/spot_monitor_sidecar.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/logs_cli.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/metadata_providers/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/metadata_providers/local.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/metadata_providers/service.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/package_cli.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/parallel_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/project_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/pypi/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/pypi/bootstrap.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/pypi/conda_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/pypi/conda_environment.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/pypi/micromamba.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/pypi/parsers.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/pypi/pip.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/pypi/pypi_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/pypi/pypi_environment.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/pypi/utils.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/resources_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/retry_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/secrets/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/secrets/inline_secrets_provider.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/secrets/secrets_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/secrets/secrets_func.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/secrets/secrets_spec.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/secrets/utils.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/storage_executor.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/tag_cli.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/test_unbounded_foreach_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/timeout_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/uv/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/uv/bootstrap.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/uv/uv_environment.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/procpoll.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/py.typed +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/pylint_wrapper.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/runner/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/runner/click_api.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/runner/deployer.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/runner/deployer_impl.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/runner/metaflow_runner.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/runner/nbdeploy.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/runner/nbrun.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/runner/subprocess_manager.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/runner/utils.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/runtime.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/sidecar/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/sidecar/sidecar.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/sidecar/sidecar_messages.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/sidecar/sidecar_subprocess.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/sidecar/sidecar_worker.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/system/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/system/system_logger.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/system/system_monitor.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/system/system_utils.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tagging_util.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/task.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tracing/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tracing/propagator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tracing/span_exporter.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tracing/tracing_modules.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tuple_util.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/00-helloworld/README.md +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/00-helloworld/helloworld.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/01-playlist/README.md +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/01-playlist/movies.csv +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/01-playlist/playlist.ipynb +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/01-playlist/playlist.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/02-statistics/README.md +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/02-statistics/movies.csv +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/02-statistics/stats.ipynb +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/02-statistics/stats.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/03-playlist-redux/README.md +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/03-playlist-redux/playlist.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/04-playlist-plus/README.md +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/04-playlist-plus/playlist.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/05-hello-cloud/README.md +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/05-hello-cloud/hello-cloud.ipynb +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/05-hello-cloud/hello-cloud.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/06-statistics-redux/README.md +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/06-statistics-redux/stats.ipynb +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/07-worldview/README.md +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/07-worldview/worldview.ipynb +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/08-autopilot/README.md +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/08-autopilot/autopilot.ipynb +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/unbounded_foreach.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/user_configs/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/user_configs/config_options.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/user_configs/config_parameters.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/user_decorators/__init__.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/user_decorators/common.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/user_decorators/mutable_flow.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/user_decorators/mutable_step.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/user_decorators/user_flow_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/user_decorators/user_step_decorator.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/util.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/vendor.py +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow.egg-info/SOURCES.txt +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow.egg-info/dependency_links.txt +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow.egg-info/entry_points.txt +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/metaflow.egg-info/top_level.txt +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/setup.cfg +0 -0
- {metaflow-2.18.0 → metaflow-2.18.1}/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.1
|
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.1; extra == "stubs"
|
30
30
|
Dynamic: author
|
31
31
|
Dynamic: author-email
|
32
32
|
Dynamic: classifier
|
@@ -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.1}/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}
|