metaflow 2.13__tar.gz → 2.13.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.13/metaflow.egg-info → metaflow-2.13.2}/PKG-INFO +2 -2
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/extension_support/plugins.py +1 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/metadata_provider/heartbeat.py +23 -8
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/metaflow_config.py +2 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/parameters.py +1 -1
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/__init__.py +13 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/argo/argo_client.py +0 -2
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/argo/argo_workflows.py +98 -104
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/argo/argo_workflows_cli.py +0 -1
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/argo/argo_workflows_decorator.py +2 -4
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/argo/jobset_input_paths.py +0 -1
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/aws/aws_utils.py +6 -1
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/aws/batch/batch_client.py +1 -3
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/aws/batch/batch_decorator.py +11 -11
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/aws/step_functions/dynamo_db_client.py +0 -3
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/aws/step_functions/production_token.py +1 -1
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/aws/step_functions/step_functions.py +1 -1
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/aws/step_functions/step_functions_cli.py +0 -1
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/aws/step_functions/step_functions_decorator.py +0 -1
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/aws/step_functions/step_functions_deployer_objects.py +0 -1
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/kubernetes/kube_utils.py +55 -1
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/kubernetes/kubernetes.py +33 -80
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/kubernetes/kubernetes_cli.py +22 -5
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/kubernetes/kubernetes_decorator.py +49 -2
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/kubernetes/kubernetes_job.py +3 -6
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/kubernetes/kubernetes_jobsets.py +22 -5
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/pypi/bootstrap.py +87 -54
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/pypi/conda_environment.py +7 -6
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/pypi/micromamba.py +40 -22
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/pypi/pip.py +2 -4
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/pypi/utils.py +4 -2
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/runner/metaflow_runner.py +25 -3
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/runtime.py +18 -8
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/user_configs/config_parameters.py +23 -6
- metaflow-2.13.2/metaflow/version.py +1 -0
- {metaflow-2.13 → metaflow-2.13.2/metaflow.egg-info}/PKG-INFO +2 -2
- {metaflow-2.13 → metaflow-2.13.2}/metaflow.egg-info/requires.txt +1 -1
- metaflow-2.13/metaflow/version.py +0 -1
- {metaflow-2.13 → metaflow-2.13.2}/LICENSE +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/MANIFEST.in +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/README.md +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/R.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/click/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/click/_bashcomplete.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/click/_compat.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/click/_termui_impl.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/click/_textwrap.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/click/_unicodefun.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/click/_winconsole.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/click/core.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/click/decorators.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/click/exceptions.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/click/formatting.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/click/globals.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/click/parser.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/click/termui.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/click/testing.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/click/types.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/click/utils.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/importlib_metadata/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/importlib_metadata/_adapters.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/importlib_metadata/_collections.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/importlib_metadata/_compat.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/importlib_metadata/_functools.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/importlib_metadata/_itertools.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/importlib_metadata/_meta.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/importlib_metadata/_text.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/importlib_metadata/py.typed +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/packaging/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/packaging/_elffile.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/packaging/_manylinux.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/packaging/_musllinux.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/packaging/_parser.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/packaging/_structures.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/packaging/_tokenizer.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/packaging/markers.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/packaging/py.typed +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/packaging/requirements.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/packaging/specifiers.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/packaging/tags.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/packaging/utils.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/packaging/version.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/typeguard/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/typeguard/_checkers.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/typeguard/_config.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/typeguard/_decorators.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/typeguard/_exceptions.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/typeguard/_functions.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/typeguard/_importhook.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/typeguard/_memo.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/typeguard/_pytest_plugin.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/typeguard/_suppression.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/typeguard/_transformer.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/typeguard/_union_transformer.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/typeguard/_utils.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/typeguard/py.typed +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/typing_extensions.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/v3_5/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/v3_5/importlib_metadata/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/v3_5/importlib_metadata/_compat.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/v3_5/zipp.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/v3_6/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/v3_6/importlib_metadata/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/v3_6/importlib_metadata/_adapters.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/v3_6/importlib_metadata/_collections.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/v3_6/importlib_metadata/_compat.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/v3_6/importlib_metadata/_functools.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/v3_6/importlib_metadata/_itertools.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/v3_6/importlib_metadata/_meta.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/v3_6/importlib_metadata/_text.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/v3_6/importlib_metadata/py.typed +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/v3_6/typing_extensions.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/v3_6/zipp.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/_vendor/zipp.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/cards.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/cli.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/cli_args.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/cli_components/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/cli_components/dump_cmd.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/cli_components/init_cmd.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/cli_components/run_cmds.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/cli_components/step_cmd.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/cli_components/utils.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/client/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/client/core.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/client/filecache.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/clone_util.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/cmd/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/cmd/configure_cmd.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/cmd/develop/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/cmd/develop/stub_generator.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/cmd/develop/stubs.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/cmd/main_cli.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/cmd/tutorials_cmd.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/cmd/util.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/cmd_with_io.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/datastore/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/datastore/content_addressed_store.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/datastore/datastore_set.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/datastore/datastore_storage.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/datastore/exceptions.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/datastore/flow_datastore.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/datastore/inputs.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/datastore/task_datastore.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/debug.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/decorators.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/event_logger.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/events.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/exception.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/extension_support/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/extension_support/_empty_file.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/extension_support/cmd.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/extension_support/integrations.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/flowspec.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/graph.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/includefile.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/info_file.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/integrations.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/lint.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/metadata_provider/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/metadata_provider/metadata.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/metadata_provider/util.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/metaflow_config_funcs.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/metaflow_current.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/metaflow_environment.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/metaflow_profile.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/metaflow_version.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/mflog/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/mflog/mflog.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/mflog/save_logs.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/mflog/save_logs_periodically.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/mflog/tee.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/monitor.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/multicore_utils.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/package.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/airflow/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/airflow/airflow.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/airflow/airflow_cli.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/airflow/airflow_decorator.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/airflow/airflow_utils.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/airflow/dag.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/airflow/exception.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/airflow/plumbing/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/airflow/plumbing/set_parameters.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/airflow/sensors/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/airflow/sensors/base_sensor.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/airflow/sensors/external_task_sensor.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/airflow/sensors/s3_sensor.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/argo/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/argo/argo_events.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/argo/argo_workflows_deployer.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/argo/argo_workflows_deployer_objects.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/argo/capture_error.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/argo/generate_input_paths.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/aws/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/aws/aws_client.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/aws/batch/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/aws/batch/batch.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/aws/batch/batch_cli.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/aws/secrets_manager/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/aws/secrets_manager/aws_secrets_manager_secrets_provider.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/aws/step_functions/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/aws/step_functions/event_bridge_client.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/aws/step_functions/schedule_decorator.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/aws/step_functions/set_batch_environment.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/aws/step_functions/step_functions_client.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/aws/step_functions/step_functions_deployer.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/azure/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/azure/azure_credential.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/azure/azure_exceptions.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/azure/azure_secret_manager_secrets_provider.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/azure/azure_tail.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/azure/azure_utils.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/azure/blob_service_client_factory.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/azure/includefile_support.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/cards/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/cards/card_cli.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/cards/card_client.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/cards/card_creator.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/cards/card_datastore.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/cards/card_decorator.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/cards/card_modules/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/cards/card_modules/base.html +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/cards/card_modules/basic.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/cards/card_modules/bundle.css +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/cards/card_modules/card.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/cards/card_modules/chevron/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/cards/card_modules/chevron/main.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/cards/card_modules/chevron/metadata.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/cards/card_modules/chevron/renderer.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/cards/card_modules/chevron/tokenizer.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/cards/card_modules/components.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/cards/card_modules/convert_to_native_type.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/cards/card_modules/main.js +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/cards/card_modules/renderer_tools.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/cards/card_modules/test_cards.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/cards/card_resolver.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/cards/card_server.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/cards/card_viewer/viewer.html +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/cards/component_serializer.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/cards/exception.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/catch_decorator.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/datastores/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/datastores/azure_storage.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/datastores/gs_storage.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/datastores/local_storage.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/datastores/s3_storage.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/datatools/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/datatools/local.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/datatools/s3/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/datatools/s3/s3.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/datatools/s3/s3op.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/datatools/s3/s3tail.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/datatools/s3/s3util.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/debug_logger.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/debug_monitor.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/env_escape/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/env_escape/client.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/env_escape/client_modules.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/env_escape/communication/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/env_escape/communication/bytestream.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/env_escape/communication/channel.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/env_escape/communication/socket_bytestream.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/env_escape/communication/utils.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/env_escape/configurations/emulate_test_lib/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/env_escape/configurations/emulate_test_lib/overrides.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/env_escape/configurations/emulate_test_lib/server_mappings.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/env_escape/configurations/test_lib_impl/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/env_escape/configurations/test_lib_impl/test_lib.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/env_escape/consts.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/env_escape/data_transferer.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/env_escape/exception_transferer.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/env_escape/override_decorators.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/env_escape/server.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/env_escape/stub.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/env_escape/utils.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/environment_decorator.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/events_decorator.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/frameworks/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/frameworks/pytorch.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/gcp/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/gcp/gcp_secret_manager_secrets_provider.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/gcp/gs_exceptions.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/gcp/gs_storage_client_factory.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/gcp/gs_tail.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/gcp/gs_utils.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/gcp/includefile_support.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/kubernetes/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/kubernetes/kubernetes_client.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/logs_cli.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/metadata_providers/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/metadata_providers/local.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/metadata_providers/service.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/package_cli.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/parallel_decorator.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/project_decorator.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/pypi/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/pypi/conda_decorator.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/pypi/pypi_decorator.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/pypi/pypi_environment.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/resources_decorator.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/retry_decorator.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/secrets/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/secrets/inline_secrets_provider.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/secrets/secrets_decorator.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/storage_executor.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/tag_cli.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/test_unbounded_foreach_decorator.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/plugins/timeout_decorator.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/procpoll.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/py.typed +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/pylint_wrapper.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/runner/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/runner/click_api.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/runner/deployer.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/runner/deployer_impl.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/runner/nbdeploy.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/runner/nbrun.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/runner/subprocess_manager.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/runner/utils.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/sidecar/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/sidecar/sidecar.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/sidecar/sidecar_messages.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/sidecar/sidecar_subprocess.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/sidecar/sidecar_worker.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/system/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/system/system_logger.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/system/system_monitor.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/system/system_utils.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/tagging_util.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/task.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/tracing/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/tracing/propagator.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/tracing/span_exporter.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/tracing/tracing_modules.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/tuple_util.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/tutorials/00-helloworld/README.md +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/tutorials/00-helloworld/helloworld.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/tutorials/01-playlist/README.md +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/tutorials/01-playlist/movies.csv +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/tutorials/01-playlist/playlist.ipynb +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/tutorials/01-playlist/playlist.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/tutorials/02-statistics/README.md +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/tutorials/02-statistics/movies.csv +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/tutorials/02-statistics/stats.ipynb +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/tutorials/02-statistics/stats.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/tutorials/03-playlist-redux/README.md +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/tutorials/03-playlist-redux/playlist.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/tutorials/04-playlist-plus/README.md +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/tutorials/04-playlist-plus/playlist.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/tutorials/05-hello-cloud/README.md +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/tutorials/05-hello-cloud/hello-cloud.ipynb +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/tutorials/05-hello-cloud/hello-cloud.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/tutorials/06-statistics-redux/README.md +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/tutorials/06-statistics-redux/stats.ipynb +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/tutorials/07-worldview/README.md +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/tutorials/07-worldview/worldview.ipynb +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/tutorials/08-autopilot/README.md +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/tutorials/08-autopilot/autopilot.ipynb +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/unbounded_foreach.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/user_configs/__init__.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/user_configs/config_decorators.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/user_configs/config_options.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/util.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow/vendor.py +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow.egg-info/SOURCES.txt +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow.egg-info/dependency_links.txt +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow.egg-info/entry_points.txt +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/metaflow.egg-info/top_level.txt +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/setup.cfg +0 -0
- {metaflow-2.13 → metaflow-2.13.2}/setup.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: metaflow
|
3
|
-
Version: 2.13
|
3
|
+
Version: 2.13.2
|
4
4
|
Summary: Metaflow: More Data Science, 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.13; extra == "stubs"
|
29
|
+
Requires-Dist: metaflow-stubs==2.13.2; extra == "stubs"
|
30
30
|
|
31
31
|

|
32
32
|
|
@@ -1,11 +1,12 @@
|
|
1
|
+
import json
|
1
2
|
import time
|
3
|
+
from threading import Thread
|
4
|
+
|
2
5
|
import requests
|
3
|
-
import json
|
4
6
|
|
5
|
-
from threading import Thread
|
6
|
-
from metaflow.sidecar import MessageTypes, Message
|
7
|
-
from metaflow.metaflow_config import SERVICE_HEADERS
|
8
7
|
from metaflow.exception import MetaflowException
|
8
|
+
from metaflow.metaflow_config import SERVICE_HEADERS
|
9
|
+
from metaflow.sidecar import Message, MessageTypes
|
9
10
|
|
10
11
|
HB_URL_KEY = "hb_url"
|
11
12
|
|
@@ -52,13 +53,27 @@ class MetadataHeartBeat(object):
|
|
52
53
|
retry_counter = 0
|
53
54
|
except HeartBeatException as e:
|
54
55
|
retry_counter = retry_counter + 1
|
55
|
-
time.sleep(
|
56
|
+
time.sleep(1.5**retry_counter)
|
56
57
|
|
57
58
|
def _heartbeat(self):
|
58
59
|
if self.hb_url is not None:
|
59
|
-
|
60
|
-
|
61
|
-
|
60
|
+
try:
|
61
|
+
response = requests.post(
|
62
|
+
url=self.hb_url, data="{}", headers=self.headers.copy()
|
63
|
+
)
|
64
|
+
except requests.exceptions.ConnectionError as e:
|
65
|
+
raise HeartBeatException(
|
66
|
+
"HeartBeat request (%s) failed" " (ConnectionError)" % (self.hb_url)
|
67
|
+
)
|
68
|
+
except requests.exceptions.Timeout as e:
|
69
|
+
raise HeartBeatException(
|
70
|
+
"HeartBeat request (%s) failed" " (Timeout)" % (self.hb_url)
|
71
|
+
)
|
72
|
+
except requests.exceptions.RequestException as e:
|
73
|
+
raise HeartBeatException(
|
74
|
+
"HeartBeat request (%s) failed"
|
75
|
+
" (RequestException) %s" % (self.hb_url, str(e))
|
76
|
+
)
|
62
77
|
# Unfortunately, response.json() returns a string that we need
|
63
78
|
# to cast to json; however when the request encounters an error
|
64
79
|
# the return type is a json blob :/
|
@@ -355,6 +355,8 @@ KUBERNETES_PERSISTENT_VOLUME_CLAIMS = from_conf(
|
|
355
355
|
KUBERNETES_SECRETS = from_conf("KUBERNETES_SECRETS", "")
|
356
356
|
# Default labels for kubernetes pods
|
357
357
|
KUBERNETES_LABELS = from_conf("KUBERNETES_LABELS", "")
|
358
|
+
# Default annotations for kubernetes pods
|
359
|
+
KUBERNETES_ANNOTATIONS = from_conf("KUBERNETES_ANNOTATIONS", "")
|
358
360
|
# Default GPU vendor to use by K8S jobs created by Metaflow (supports nvidia, amd)
|
359
361
|
KUBERNETES_GPU_VENDOR = from_conf("KUBERNETES_GPU_VENDOR", "nvidia")
|
360
362
|
# Default container image for K8S
|
@@ -369,7 +369,7 @@ class Parameter(object):
|
|
369
369
|
# Resolve any value from configurations
|
370
370
|
self.kwargs = unpack_delayed_evaluator(self.kwargs, ignore_errors=ignore_errors)
|
371
371
|
# Do it one item at a time so errors are ignored at that level (as opposed to
|
372
|
-
# at the entire kwargs
|
372
|
+
# at the entire kwargs level)
|
373
373
|
self.kwargs = {
|
374
374
|
k: resolve_delayed_evaluator(v, ignore_errors=ignore_errors)
|
375
375
|
for k, v in self.kwargs.items()
|
@@ -19,6 +19,11 @@ CLIS_DESC = [
|
|
19
19
|
("logs", ".logs_cli.cli"),
|
20
20
|
]
|
21
21
|
|
22
|
+
# Add additional commands to the runner here
|
23
|
+
# These will be accessed using Runner().<command>()
|
24
|
+
RUNNER_CLIS_DESC = []
|
25
|
+
|
26
|
+
|
22
27
|
from .test_unbounded_foreach_decorator import InternalTestUnboundedForeachInput
|
23
28
|
|
24
29
|
# Add new step decorators here
|
@@ -168,6 +173,14 @@ def get_plugin_cli_path():
|
|
168
173
|
return resolve_plugins("cli", path_only=True)
|
169
174
|
|
170
175
|
|
176
|
+
def get_runner_cli():
|
177
|
+
return resolve_plugins("runner_cli")
|
178
|
+
|
179
|
+
|
180
|
+
def get_runner_cli_path():
|
181
|
+
return resolve_plugins("runner_cli", path_only=True)
|
182
|
+
|
183
|
+
|
171
184
|
STEP_DECORATORS = resolve_plugins("step_decorator")
|
172
185
|
FLOW_DECORATORS = resolve_plugins("flow_decorator")
|
173
186
|
ENVIRONMENTS = resolve_plugins("environment")
|
@@ -7,12 +7,11 @@ import sys
|
|
7
7
|
from collections import defaultdict
|
8
8
|
from hashlib import sha1
|
9
9
|
from math import inf
|
10
|
-
from typing import List, Tuple
|
11
10
|
|
12
11
|
from metaflow import JSONType, current
|
13
12
|
from metaflow.decorators import flow_decorators
|
14
13
|
from metaflow.exception import MetaflowException
|
15
|
-
from metaflow.graph import
|
14
|
+
from metaflow.graph import FlowGraph
|
16
15
|
from metaflow.includefile import FilePathClass
|
17
16
|
from metaflow.metaflow_config import (
|
18
17
|
ARGO_EVENTS_EVENT,
|
@@ -39,9 +38,7 @@ from metaflow.metaflow_config import (
|
|
39
38
|
DEFAULT_SECRETS_BACKEND_TYPE,
|
40
39
|
GCP_SECRET_MANAGER_PREFIX,
|
41
40
|
KUBERNETES_FETCH_EC2_METADATA,
|
42
|
-
KUBERNETES_LABELS,
|
43
41
|
KUBERNETES_NAMESPACE,
|
44
|
-
KUBERNETES_NODE_SELECTOR,
|
45
42
|
KUBERNETES_SANDBOX_INIT_SCRIPT,
|
46
43
|
KUBERNETES_SECRETS,
|
47
44
|
S3_ENDPOINT_URL,
|
@@ -54,10 +51,7 @@ from metaflow.metaflow_config_funcs import config_values
|
|
54
51
|
from metaflow.mflog import BASH_SAVE_LOGS, bash_capture_logs, export_mflog_env_vars
|
55
52
|
from metaflow.parameters import deploy_time_eval
|
56
53
|
from metaflow.plugins.kubernetes.kube_utils import qos_requests_and_limits
|
57
|
-
|
58
|
-
parse_kube_keyvalue_list,
|
59
|
-
validate_kube_labels,
|
60
|
-
)
|
54
|
+
|
61
55
|
from metaflow.plugins.kubernetes.kubernetes_jobsets import KubernetesArgoJobSet
|
62
56
|
from metaflow.unbounded_foreach import UBF_CONTROL, UBF_TASK
|
63
57
|
from metaflow.user_configs.config_options import ConfigInput
|
@@ -173,7 +167,8 @@ class ArgoWorkflows(object):
|
|
173
167
|
self.triggers, self.trigger_options = self._process_triggers()
|
174
168
|
self._schedule, self._timezone = self._get_schedule()
|
175
169
|
|
176
|
-
self.
|
170
|
+
self._base_labels = self._base_kubernetes_labels()
|
171
|
+
self._base_annotations = self._base_kubernetes_annotations()
|
177
172
|
self._workflow_template = self._compile_workflow_template()
|
178
173
|
self._sensor = self._compile_sensor()
|
179
174
|
|
@@ -310,7 +305,7 @@ class ArgoWorkflows(object):
|
|
310
305
|
try:
|
311
306
|
# Check that the workflow was deployed through Metaflow
|
312
307
|
workflow_template["metadata"]["annotations"]["metaflow/owner"]
|
313
|
-
except KeyError
|
308
|
+
except KeyError:
|
314
309
|
raise ArgoWorkflowsException(
|
315
310
|
"An existing non-metaflow workflow with the same name as "
|
316
311
|
"*%s* already exists in Argo Workflows. \nPlease modify the "
|
@@ -324,18 +319,42 @@ class ArgoWorkflows(object):
|
|
324
319
|
except Exception as e:
|
325
320
|
raise ArgoWorkflowsException(str(e))
|
326
321
|
|
327
|
-
|
328
|
-
def _get_kubernetes_labels():
|
322
|
+
def _base_kubernetes_labels(self):
|
329
323
|
"""
|
330
|
-
Get Kubernetes labels
|
331
|
-
Parses the string into a dict and validates that values adhere to Kubernetes restrictions.
|
324
|
+
Get shared Kubernetes labels for Argo resources.
|
332
325
|
"""
|
333
|
-
if
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
326
|
+
# TODO: Add configuration through an environment variable or Metaflow config in the future if required.
|
327
|
+
labels = {"app.kubernetes.io/part-of": "metaflow"}
|
328
|
+
|
329
|
+
return labels
|
330
|
+
|
331
|
+
def _base_kubernetes_annotations(self):
|
332
|
+
"""
|
333
|
+
Get shared Kubernetes annotations for Argo resources.
|
334
|
+
"""
|
335
|
+
from datetime import datetime, timezone
|
336
|
+
|
337
|
+
# TODO: Add configuration through an environment variable or Metaflow config in the future if required.
|
338
|
+
# base annotations
|
339
|
+
annotations = {
|
340
|
+
"metaflow/production_token": self.production_token,
|
341
|
+
"metaflow/owner": self.username,
|
342
|
+
"metaflow/user": "argo-workflows",
|
343
|
+
"metaflow/flow_name": self.flow.name,
|
344
|
+
"metaflow/deployment_timestamp": str(
|
345
|
+
datetime.now(timezone.utc).isoformat()
|
346
|
+
),
|
347
|
+
}
|
348
|
+
|
349
|
+
if current.get("project_name"):
|
350
|
+
annotations.update(
|
351
|
+
{
|
352
|
+
"metaflow/project_name": current.project_name,
|
353
|
+
"metaflow/branch_name": current.branch_name,
|
354
|
+
"metaflow/project_flow_name": current.project_flow_name,
|
355
|
+
}
|
356
|
+
)
|
357
|
+
return annotations
|
339
358
|
|
340
359
|
def _get_schedule(self):
|
341
360
|
schedule = self.flow._flow_decorators.get("schedule")
|
@@ -411,7 +430,7 @@ class ArgoWorkflows(object):
|
|
411
430
|
"metaflow/production_token"
|
412
431
|
],
|
413
432
|
)
|
414
|
-
except KeyError
|
433
|
+
except KeyError:
|
415
434
|
raise ArgoWorkflowsException(
|
416
435
|
"An existing non-metaflow workflow with the same name as "
|
417
436
|
"*%s* already exists in Argo Workflows. \nPlease modify the "
|
@@ -676,18 +695,7 @@ class ArgoWorkflows(object):
|
|
676
695
|
# generate container templates at the top level (in WorkflowSpec) and maintain
|
677
696
|
# references to them within the DAGTask.
|
678
697
|
|
679
|
-
|
680
|
-
|
681
|
-
annotations = {
|
682
|
-
"metaflow/production_token": self.production_token,
|
683
|
-
"metaflow/owner": self.username,
|
684
|
-
"metaflow/user": "argo-workflows",
|
685
|
-
"metaflow/flow_name": self.flow.name,
|
686
|
-
"metaflow/deployment_timestamp": str(
|
687
|
-
datetime.now(timezone.utc).isoformat()
|
688
|
-
),
|
689
|
-
}
|
690
|
-
|
698
|
+
annotations = {}
|
691
699
|
if self._schedule is not None:
|
692
700
|
# timezone is an optional field and json dumps on None will result in null
|
693
701
|
# hence configuring it to an empty string
|
@@ -699,15 +707,6 @@ class ArgoWorkflows(object):
|
|
699
707
|
if self.parameters:
|
700
708
|
annotations.update({"metaflow/parameters": json.dumps(self.parameters)})
|
701
709
|
|
702
|
-
if current.get("project_name"):
|
703
|
-
annotations.update(
|
704
|
-
{
|
705
|
-
"metaflow/project_name": current.project_name,
|
706
|
-
"metaflow/branch_name": current.branch_name,
|
707
|
-
"metaflow/project_flow_name": current.project_flow_name,
|
708
|
-
}
|
709
|
-
)
|
710
|
-
|
711
710
|
# Some more annotations to populate the Argo UI nicely
|
712
711
|
if self.tags:
|
713
712
|
annotations.update({"metaflow/tags": json.dumps(self.tags)})
|
@@ -744,6 +743,17 @@ class ArgoWorkflows(object):
|
|
744
743
|
)
|
745
744
|
}
|
746
745
|
)
|
746
|
+
try:
|
747
|
+
# Build the DAG based on the DAGNodes given by the FlowGraph for the found FlowSpec class.
|
748
|
+
_steps_info, graph_structure = self.graph.output_steps()
|
749
|
+
graph_info = {
|
750
|
+
# for the time being, we only need the graph_structure. Being mindful of annotation size limits we do not include anything extra.
|
751
|
+
"graph_structure": graph_structure
|
752
|
+
}
|
753
|
+
except Exception:
|
754
|
+
graph_info = None
|
755
|
+
|
756
|
+
dag_annotation = {"metaflow/dag": json.dumps(graph_info)}
|
747
757
|
|
748
758
|
return (
|
749
759
|
WorkflowTemplate()
|
@@ -755,9 +765,11 @@ class ArgoWorkflows(object):
|
|
755
765
|
# is released, we should be able to support multi-namespace /
|
756
766
|
# multi-cluster scheduling.
|
757
767
|
.namespace(KUBERNETES_NAMESPACE)
|
758
|
-
.label("app.kubernetes.io/name", "metaflow-flow")
|
759
|
-
.label("app.kubernetes.io/part-of", "metaflow")
|
760
768
|
.annotations(annotations)
|
769
|
+
.annotations(self._base_annotations)
|
770
|
+
.labels(self._base_labels)
|
771
|
+
.label("app.kubernetes.io/name", "metaflow-flow")
|
772
|
+
.annotations(dag_annotation)
|
761
773
|
)
|
762
774
|
.spec(
|
763
775
|
WorkflowSpec()
|
@@ -787,10 +799,14 @@ class ArgoWorkflows(object):
|
|
787
799
|
# Set workflow metadata
|
788
800
|
.workflow_metadata(
|
789
801
|
Metadata()
|
802
|
+
.labels(self._base_labels)
|
790
803
|
.label("app.kubernetes.io/name", "metaflow-run")
|
791
|
-
.label("app.kubernetes.io/part-of", "metaflow")
|
792
804
|
.annotations(
|
793
|
-
{
|
805
|
+
{
|
806
|
+
**annotations,
|
807
|
+
**self._base_annotations,
|
808
|
+
**{"metaflow/run_id": "argo-{{workflow.name}}"},
|
809
|
+
}
|
794
810
|
)
|
795
811
|
# TODO: Set dynamic labels using labels_from. Ideally, we would
|
796
812
|
# want to expose run_id as a label. It's easy to add labels,
|
@@ -823,10 +839,10 @@ class ArgoWorkflows(object):
|
|
823
839
|
# Set common pod metadata.
|
824
840
|
.pod_metadata(
|
825
841
|
Metadata()
|
842
|
+
.labels(self._base_labels)
|
826
843
|
.label("app.kubernetes.io/name", "metaflow-task")
|
827
|
-
.label("app.kubernetes.io/part-of", "metaflow")
|
828
844
|
.annotations(annotations)
|
829
|
-
.
|
845
|
+
.annotations(self._base_annotations)
|
830
846
|
)
|
831
847
|
# Set the entrypoint to flow name
|
832
848
|
.entrypoint(self.flow.name)
|
@@ -1895,15 +1911,7 @@ class ArgoWorkflows(object):
|
|
1895
1911
|
# twice, but due to issues with variable substitution, we will have to
|
1896
1912
|
# live with this routine.
|
1897
1913
|
if node.parallel_step:
|
1898
|
-
# Explicitly add the task-id-hint label. This is important because this label
|
1899
|
-
# is returned as an Output parameter of this step and is used subsequently as an
|
1900
|
-
# an input in the join step.
|
1901
|
-
kubernetes_labels = self.kubernetes_labels.copy()
|
1902
1914
|
jobset_name = "{{inputs.parameters.jobset-name}}"
|
1903
|
-
kubernetes_labels["task_id_entropy"] = (
|
1904
|
-
"{{inputs.parameters.task-id-entropy}}"
|
1905
|
-
)
|
1906
|
-
kubernetes_labels["num_parallel"] = "{{inputs.parameters.num-parallel}}"
|
1907
1915
|
jobset = KubernetesArgoJobSet(
|
1908
1916
|
kubernetes_sdk=kubernetes_sdk,
|
1909
1917
|
name=jobset_name,
|
@@ -1959,8 +1967,22 @@ class ArgoWorkflows(object):
|
|
1959
1967
|
for k, v in env.items():
|
1960
1968
|
jobset.environment_variable(k, v)
|
1961
1969
|
|
1962
|
-
|
1963
|
-
|
1970
|
+
# Set labels. Do not allow user-specified task labels to override internal ones.
|
1971
|
+
#
|
1972
|
+
# Explicitly add the task-id-hint label. This is important because this label
|
1973
|
+
# is returned as an Output parameter of this step and is used subsequently as an
|
1974
|
+
# an input in the join step.
|
1975
|
+
kubernetes_labels = {
|
1976
|
+
"task_id_entropy": "{{inputs.parameters.task-id-entropy}}",
|
1977
|
+
"num_parallel": "{{inputs.parameters.num-parallel}}",
|
1978
|
+
}
|
1979
|
+
jobset.labels(
|
1980
|
+
{
|
1981
|
+
**resources["labels"],
|
1982
|
+
**self._base_labels,
|
1983
|
+
**kubernetes_labels,
|
1984
|
+
}
|
1985
|
+
)
|
1964
1986
|
|
1965
1987
|
jobset.environment_variable(
|
1966
1988
|
"MF_MASTER_ADDR", jobset.jobset_control_addr
|
@@ -1989,27 +2011,23 @@ class ArgoWorkflows(object):
|
|
1989
2011
|
"TASK_ID_SUFFIX": "metadata.annotations['jobset.sigs.k8s.io/job-index']",
|
1990
2012
|
}
|
1991
2013
|
)
|
2014
|
+
|
2015
|
+
# Set annotations. Do not allow user-specified task-specific annotations to override internal ones.
|
1992
2016
|
annotations = {
|
1993
2017
|
# setting annotations explicitly as they wont be
|
1994
2018
|
# passed down from WorkflowTemplate level
|
1995
2019
|
"metaflow/step_name": node.name,
|
1996
2020
|
"metaflow/attempt": str(retry_count),
|
1997
2021
|
"metaflow/run_id": run_id,
|
1998
|
-
"metaflow/production_token": self.production_token,
|
1999
|
-
"metaflow/owner": self.username,
|
2000
|
-
"metaflow/user": "argo-workflows",
|
2001
|
-
"metaflow/flow_name": self.flow.name,
|
2002
2022
|
}
|
2003
|
-
|
2004
|
-
|
2005
|
-
|
2006
|
-
|
2007
|
-
|
2008
|
-
|
2009
|
-
|
2010
|
-
|
2011
|
-
for k, v in annotations.items():
|
2012
|
-
jobset.annotation(k, v)
|
2023
|
+
|
2024
|
+
jobset.annotations(
|
2025
|
+
{
|
2026
|
+
**resources["annotations"],
|
2027
|
+
**self._base_annotations,
|
2028
|
+
**annotations,
|
2029
|
+
}
|
2030
|
+
)
|
2013
2031
|
|
2014
2032
|
jobset.control.replicas(1)
|
2015
2033
|
jobset.worker.replicas("{{=asInt(inputs.parameters.workerCount)}}")
|
@@ -2066,13 +2084,16 @@ class ArgoWorkflows(object):
|
|
2066
2084
|
minutes_between_retries=minutes_between_retries,
|
2067
2085
|
)
|
2068
2086
|
.metadata(
|
2069
|
-
ObjectMeta()
|
2087
|
+
ObjectMeta()
|
2088
|
+
.annotation("metaflow/step_name", node.name)
|
2070
2089
|
# Unfortunately, we can't set the task_id since it is generated
|
2071
2090
|
# inside the pod. However, it can be inferred from the annotation
|
2072
2091
|
# set by argo-workflows - `workflows.argoproj.io/outputs` - refer
|
2073
2092
|
# the field 'task-id' in 'parameters'
|
2074
2093
|
# .annotation("metaflow/task_id", ...)
|
2075
2094
|
.annotation("metaflow/attempt", retry_count)
|
2095
|
+
.annotations(resources["annotations"])
|
2096
|
+
.labels(resources["labels"])
|
2076
2097
|
)
|
2077
2098
|
# Set emptyDir volume for state management
|
2078
2099
|
.empty_dir_volume("out")
|
@@ -2840,33 +2861,6 @@ class ArgoWorkflows(object):
|
|
2840
2861
|
"sdk (https://pypi.org/project/kubernetes/) first."
|
2841
2862
|
)
|
2842
2863
|
|
2843
|
-
labels = {"app.kubernetes.io/part-of": "metaflow"}
|
2844
|
-
|
2845
|
-
annotations = {
|
2846
|
-
"metaflow/production_token": self.production_token,
|
2847
|
-
"metaflow/owner": self.username,
|
2848
|
-
"metaflow/user": "argo-workflows",
|
2849
|
-
"metaflow/flow_name": self.flow.name,
|
2850
|
-
}
|
2851
|
-
if current.get("project_name"):
|
2852
|
-
annotations.update(
|
2853
|
-
{
|
2854
|
-
"metaflow/project_name": current.project_name,
|
2855
|
-
"metaflow/branch_name": current.branch_name,
|
2856
|
-
"metaflow/project_flow_name": current.project_flow_name,
|
2857
|
-
}
|
2858
|
-
)
|
2859
|
-
|
2860
|
-
# Useful to paint the UI
|
2861
|
-
trigger_annotations = {
|
2862
|
-
"metaflow/triggered_by": json.dumps(
|
2863
|
-
[
|
2864
|
-
{key: trigger.get(key) for key in ["name", "type"]}
|
2865
|
-
for trigger in self.triggers
|
2866
|
-
]
|
2867
|
-
)
|
2868
|
-
}
|
2869
|
-
|
2870
2864
|
return (
|
2871
2865
|
Sensor()
|
2872
2866
|
.metadata(
|
@@ -2874,10 +2868,9 @@ class ArgoWorkflows(object):
|
|
2874
2868
|
ObjectMeta()
|
2875
2869
|
.name(ArgoWorkflows._sensor_name(self.name))
|
2876
2870
|
.namespace(KUBERNETES_NAMESPACE)
|
2871
|
+
.labels(self._base_labels)
|
2877
2872
|
.label("app.kubernetes.io/name", "metaflow-sensor")
|
2878
|
-
.
|
2879
|
-
.labels(self.kubernetes_labels)
|
2880
|
-
.annotations(annotations)
|
2873
|
+
.annotations(self._base_annotations)
|
2881
2874
|
)
|
2882
2875
|
.spec(
|
2883
2876
|
SensorSpec().template(
|
@@ -2887,7 +2880,7 @@ class ArgoWorkflows(object):
|
|
2887
2880
|
ObjectMeta()
|
2888
2881
|
.label("app.kubernetes.io/name", "metaflow-sensor")
|
2889
2882
|
.label("app.kubernetes.io/part-of", "metaflow")
|
2890
|
-
.annotations(
|
2883
|
+
.annotations(self._base_annotations)
|
2891
2884
|
)
|
2892
2885
|
.container(
|
2893
2886
|
# Run sensor in guaranteed QoS. The sensor isn't doing a lot
|
@@ -2934,6 +2927,7 @@ class ArgoWorkflows(object):
|
|
2934
2927
|
"metadata": {
|
2935
2928
|
"generateName": "%s-" % self.name,
|
2936
2929
|
"namespace": KUBERNETES_NAMESPACE,
|
2930
|
+
# Useful to paint the UI
|
2937
2931
|
"annotations": {
|
2938
2932
|
"metaflow/triggered_by": json.dumps(
|
2939
2933
|
[
|
@@ -1,14 +1,12 @@
|
|
1
1
|
import json
|
2
2
|
import os
|
3
|
-
import time
|
4
3
|
|
5
4
|
|
6
5
|
from metaflow import current
|
7
6
|
from metaflow.decorators import StepDecorator
|
8
7
|
from metaflow.events import Trigger
|
9
8
|
from metaflow.metadata_provider import MetaDatum
|
10
|
-
from metaflow.
|
11
|
-
from metaflow.graph import DAGNode, FlowGraph
|
9
|
+
from metaflow.graph import FlowGraph
|
12
10
|
from metaflow.flowspec import FlowSpec
|
13
11
|
from .argo_events import ArgoEvent
|
14
12
|
|
@@ -42,7 +40,7 @@ class ArgoWorkflowsInternalDecorator(StepDecorator):
|
|
42
40
|
if payload != "null": # Argo-Workflow's None
|
43
41
|
try:
|
44
42
|
payload = json.loads(payload)
|
45
|
-
except (TypeError, ValueError)
|
43
|
+
except (TypeError, ValueError):
|
46
44
|
# There could be arbitrary events that Metaflow doesn't know of
|
47
45
|
payload = {}
|
48
46
|
triggers.append(
|
@@ -1,5 +1,4 @@
|
|
1
1
|
import re
|
2
|
-
import requests
|
3
2
|
|
4
3
|
from metaflow.exception import MetaflowException
|
5
4
|
|
@@ -30,6 +29,10 @@ def get_ec2_instance_metadata():
|
|
30
29
|
- ec2-region
|
31
30
|
- ec2-availability-zone
|
32
31
|
"""
|
32
|
+
|
33
|
+
# TODO: Remove dependency on requests
|
34
|
+
import requests
|
35
|
+
|
33
36
|
meta = {}
|
34
37
|
# Capture AWS instance identity metadata. This is best-effort only since
|
35
38
|
# access to this end-point might be blocked on AWS and not available
|
@@ -159,6 +162,8 @@ def compute_resource_attributes(decos, compute_deco, resource_defaults):
|
|
159
162
|
# Here we don't have ints, so we compare the value and raise
|
160
163
|
# an exception if not equal
|
161
164
|
if my_val != v:
|
165
|
+
# TODO: Throw a better exception since the user has no
|
166
|
+
# knowledge of 'compute' decorator
|
162
167
|
raise MetaflowException(
|
163
168
|
"'resources' and compute decorator have conflicting "
|
164
169
|
"values for '%s'. Please use consistent values or "
|
@@ -1,34 +1,30 @@
|
|
1
1
|
import os
|
2
|
-
import sys
|
3
2
|
import platform
|
4
|
-
import
|
3
|
+
import sys
|
5
4
|
import time
|
6
5
|
|
7
|
-
from metaflow import util
|
8
6
|
from metaflow import R, current
|
9
|
-
|
10
7
|
from metaflow.decorators import StepDecorator
|
11
|
-
from metaflow.plugins.resources_decorator import ResourcesDecorator
|
12
|
-
from metaflow.plugins.timeout_decorator import get_run_time_limit_for_task
|
13
8
|
from metaflow.metadata_provider import MetaDatum
|
14
9
|
from metaflow.metadata_provider.util import sync_local_metadata_to_datastore
|
15
10
|
from metaflow.metaflow_config import (
|
16
|
-
ECS_S3_ACCESS_IAM_ROLE,
|
17
|
-
BATCH_JOB_QUEUE,
|
18
11
|
BATCH_CONTAINER_IMAGE,
|
19
12
|
BATCH_CONTAINER_REGISTRY,
|
20
|
-
|
13
|
+
BATCH_JOB_QUEUE,
|
21
14
|
DATASTORE_LOCAL_DIR,
|
15
|
+
ECS_FARGATE_EXECUTION_ROLE,
|
16
|
+
ECS_S3_ACCESS_IAM_ROLE,
|
22
17
|
)
|
18
|
+
from metaflow.plugins.timeout_decorator import get_run_time_limit_for_task
|
23
19
|
from metaflow.sidecar import Sidecar
|
24
20
|
from metaflow.unbounded_foreach import UBF_CONTROL
|
25
21
|
|
26
|
-
from .batch import BatchException
|
27
22
|
from ..aws_utils import (
|
28
23
|
compute_resource_attributes,
|
29
24
|
get_docker_registry,
|
30
25
|
get_ec2_instance_metadata,
|
31
26
|
)
|
27
|
+
from .batch import BatchException
|
32
28
|
|
33
29
|
|
34
30
|
class BatchDecorator(StepDecorator):
|
@@ -280,6 +276,10 @@ class BatchDecorator(StepDecorator):
|
|
280
276
|
# Metaflow would be running the container agent compatible with
|
281
277
|
# version V4.
|
282
278
|
# https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-metadata-endpoint.html
|
279
|
+
|
280
|
+
# TODO: Remove dependency on requests
|
281
|
+
import requests
|
282
|
+
|
283
283
|
try:
|
284
284
|
logs_meta = (
|
285
285
|
requests.get(url=os.environ["ECS_CONTAINER_METADATA_URI_V4"])
|
@@ -386,7 +386,7 @@ class BatchDecorator(StepDecorator):
|
|
386
386
|
len(flow._control_mapper_tasks),
|
387
387
|
)
|
388
388
|
)
|
389
|
-
except Exception
|
389
|
+
except Exception:
|
390
390
|
pass
|
391
391
|
raise Exception(
|
392
392
|
"Batch secondary workers did not finish in %s seconds" % TIMEOUT
|
@@ -236,7 +236,7 @@ class StepFunctions(object):
|
|
236
236
|
return parameters.get("metaflow.owner"), parameters.get(
|
237
237
|
"metaflow.production_token"
|
238
238
|
)
|
239
|
-
except KeyError
|
239
|
+
except KeyError:
|
240
240
|
raise StepFunctionsException(
|
241
241
|
"An existing non-metaflow "
|
242
242
|
"workflow with the same name as "
|