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

|
|
18
18
|
|
|
@@ -326,6 +326,10 @@ KUBERNETES_PORT = from_conf("KUBERNETES_PORT", None)
|
|
|
326
326
|
KUBERNETES_SHARED_MEMORY = from_conf("KUBERNETES_SHARED_MEMORY", None)
|
|
327
327
|
# Default port number to open on the pods
|
|
328
328
|
KUBERNETES_PORT = from_conf("KUBERNETES_PORT", None)
|
|
329
|
+
# Default kubernetes resource requests for CPU, memory and disk
|
|
330
|
+
KUBERNETES_CPU = from_conf("KUBERNETES_CPU", None)
|
|
331
|
+
KUBERNETES_MEMORY = from_conf("KUBERNETES_MEMORY", None)
|
|
332
|
+
KUBERNETES_DISK = from_conf("KUBERNETES_DISK", None)
|
|
329
333
|
|
|
330
334
|
|
|
331
335
|
ARGO_WORKFLOWS_KUBERNETES_SECRETS = from_conf("ARGO_WORKFLOWS_KUBERNETES_SECRETS", "")
|
|
@@ -376,6 +380,12 @@ CONDA_PACKAGE_GSROOT = from_conf("CONDA_PACKAGE_GSROOT")
|
|
|
376
380
|
# should result in an appreciable speedup in flow environment initialization.
|
|
377
381
|
CONDA_DEPENDENCY_RESOLVER = from_conf("CONDA_DEPENDENCY_RESOLVER", "conda")
|
|
378
382
|
|
|
383
|
+
###
|
|
384
|
+
# Escape hatch configuration
|
|
385
|
+
###
|
|
386
|
+
# Print out warning if escape hatch is not used for the target packages
|
|
387
|
+
ESCAPE_HATCH_WARNING = from_conf("ESCAPE_HATCH_WARNING", True)
|
|
388
|
+
|
|
379
389
|
###
|
|
380
390
|
# Debug configuration
|
|
381
391
|
###
|
|
@@ -836,7 +836,9 @@ class ArgoWorkflows(object):
|
|
|
836
836
|
|
|
837
837
|
# Visit every node and yield the uber DAGTemplate(s).
|
|
838
838
|
def _dag_templates(self):
|
|
839
|
-
def _visit(
|
|
839
|
+
def _visit(
|
|
840
|
+
node, exit_node=None, templates=None, dag_tasks=None, parent_foreach=None
|
|
841
|
+
):
|
|
840
842
|
if node.parallel_foreach:
|
|
841
843
|
raise ArgoWorkflowsException(
|
|
842
844
|
"Deploying flows with @parallel decorator(s) "
|
|
@@ -889,6 +891,37 @@ class ArgoWorkflows(object):
|
|
|
889
891
|
)
|
|
890
892
|
)
|
|
891
893
|
]
|
|
894
|
+
# NOTE: Due to limitations with Argo Workflows Parameter size we
|
|
895
|
+
# can not pass arbitrarily large lists of task id's to join tasks.
|
|
896
|
+
# Instead we ensure that task id's for foreach tasks can be
|
|
897
|
+
# deduced deterministically and pass the relevant information to
|
|
898
|
+
# the join task.
|
|
899
|
+
#
|
|
900
|
+
# We need to add the split-index and root-input-path for the last
|
|
901
|
+
# step in any foreach scope and use these to generate the task id,
|
|
902
|
+
# as the join step uses the root and the cardinality of the
|
|
903
|
+
# foreach scope to generate the required id's.
|
|
904
|
+
if (
|
|
905
|
+
node.is_inside_foreach
|
|
906
|
+
and self.graph[node.out_funcs[0]].type == "join"
|
|
907
|
+
):
|
|
908
|
+
if any(
|
|
909
|
+
self.graph[parent].matching_join
|
|
910
|
+
== self.graph[node.out_funcs[0]].name
|
|
911
|
+
and self.graph[parent].type == "foreach"
|
|
912
|
+
for parent in self.graph[node.out_funcs[0]].split_parents
|
|
913
|
+
):
|
|
914
|
+
parameters.extend(
|
|
915
|
+
[
|
|
916
|
+
Parameter("split-index").value(
|
|
917
|
+
"{{inputs.parameters.split-index}}"
|
|
918
|
+
),
|
|
919
|
+
Parameter("root-input-path").value(
|
|
920
|
+
"{{inputs.parameters.input-paths}}"
|
|
921
|
+
),
|
|
922
|
+
]
|
|
923
|
+
)
|
|
924
|
+
|
|
892
925
|
dag_task = (
|
|
893
926
|
DAGTask(self._sanitize(node.name))
|
|
894
927
|
.dependencies(
|
|
@@ -909,9 +942,19 @@ class ArgoWorkflows(object):
|
|
|
909
942
|
# For split nodes traverse all the children
|
|
910
943
|
if node.type == "split":
|
|
911
944
|
for n in node.out_funcs:
|
|
912
|
-
_visit(
|
|
945
|
+
_visit(
|
|
946
|
+
self.graph[n],
|
|
947
|
+
node.matching_join,
|
|
948
|
+
templates,
|
|
949
|
+
dag_tasks,
|
|
950
|
+
parent_foreach,
|
|
951
|
+
)
|
|
913
952
|
return _visit(
|
|
914
|
-
self.graph[node.matching_join],
|
|
953
|
+
self.graph[node.matching_join],
|
|
954
|
+
exit_node,
|
|
955
|
+
templates,
|
|
956
|
+
dag_tasks,
|
|
957
|
+
parent_foreach,
|
|
915
958
|
)
|
|
916
959
|
# For foreach nodes generate a new sub DAGTemplate
|
|
917
960
|
elif node.type == "foreach":
|
|
@@ -935,6 +978,16 @@ class ArgoWorkflows(object):
|
|
|
935
978
|
),
|
|
936
979
|
Parameter("split-index").value("{{item}}"),
|
|
937
980
|
]
|
|
981
|
+
+ (
|
|
982
|
+
[
|
|
983
|
+
Parameter("root-input-path").value(
|
|
984
|
+
"argo-{{workflow.name}}/%s/{{tasks.%s.outputs.parameters.task-id}}"
|
|
985
|
+
% (node.name, self._sanitize(node.name))
|
|
986
|
+
),
|
|
987
|
+
]
|
|
988
|
+
if parent_foreach
|
|
989
|
+
else []
|
|
990
|
+
)
|
|
938
991
|
)
|
|
939
992
|
)
|
|
940
993
|
.with_param(
|
|
@@ -944,13 +997,18 @@ class ArgoWorkflows(object):
|
|
|
944
997
|
)
|
|
945
998
|
dag_tasks.append(foreach_task)
|
|
946
999
|
templates, dag_tasks_1 = _visit(
|
|
947
|
-
self.graph[node.out_funcs[0]],
|
|
1000
|
+
self.graph[node.out_funcs[0]],
|
|
1001
|
+
node.matching_join,
|
|
1002
|
+
templates,
|
|
1003
|
+
[],
|
|
1004
|
+
node.name,
|
|
948
1005
|
)
|
|
949
1006
|
templates.append(
|
|
950
1007
|
Template(foreach_template_name)
|
|
951
1008
|
.inputs(
|
|
952
1009
|
Inputs().parameters(
|
|
953
1010
|
[Parameter("input-paths"), Parameter("split-index")]
|
|
1011
|
+
+ ([Parameter("root-input-path")] if parent_foreach else [])
|
|
954
1012
|
)
|
|
955
1013
|
)
|
|
956
1014
|
.outputs(
|
|
@@ -977,13 +1035,26 @@ class ArgoWorkflows(object):
|
|
|
977
1035
|
Arguments().parameters(
|
|
978
1036
|
[
|
|
979
1037
|
Parameter("input-paths").value(
|
|
980
|
-
"argo-{{workflow.name}}/%s/{{tasks.%s.outputs.parameters}}"
|
|
981
|
-
% (
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
1038
|
+
"argo-{{workflow.name}}/%s/{{tasks.%s.outputs.parameters.task-id}}"
|
|
1039
|
+
% (node.name, self._sanitize(node.name))
|
|
1040
|
+
),
|
|
1041
|
+
Parameter("split-cardinality").value(
|
|
1042
|
+
"{{tasks.%s.outputs.parameters.split-cardinality}}"
|
|
1043
|
+
% self._sanitize(node.name)
|
|
1044
|
+
),
|
|
986
1045
|
]
|
|
1046
|
+
+ (
|
|
1047
|
+
[
|
|
1048
|
+
Parameter("split-index").value(
|
|
1049
|
+
"{{inputs.parameters.split-index}}"
|
|
1050
|
+
),
|
|
1051
|
+
Parameter("root-input-path").value(
|
|
1052
|
+
"{{inputs.parameters.input-paths}}"
|
|
1053
|
+
),
|
|
1054
|
+
]
|
|
1055
|
+
if parent_foreach
|
|
1056
|
+
else []
|
|
1057
|
+
)
|
|
987
1058
|
)
|
|
988
1059
|
)
|
|
989
1060
|
)
|
|
@@ -993,11 +1064,16 @@ class ArgoWorkflows(object):
|
|
|
993
1064
|
exit_node,
|
|
994
1065
|
templates,
|
|
995
1066
|
dag_tasks,
|
|
1067
|
+
parent_foreach,
|
|
996
1068
|
)
|
|
997
1069
|
# For linear nodes continue traversing to the next node
|
|
998
1070
|
if node.type in ("linear", "join", "start"):
|
|
999
1071
|
return _visit(
|
|
1000
|
-
self.graph[node.out_funcs[0]],
|
|
1072
|
+
self.graph[node.out_funcs[0]],
|
|
1073
|
+
exit_node,
|
|
1074
|
+
templates,
|
|
1075
|
+
dag_tasks,
|
|
1076
|
+
parent_foreach,
|
|
1001
1077
|
)
|
|
1002
1078
|
else:
|
|
1003
1079
|
raise ArgoWorkflowsException(
|
|
@@ -1041,17 +1117,42 @@ class ArgoWorkflows(object):
|
|
|
1041
1117
|
# (modulo retry suffix) on Argo Workflows but that doesn't seem feasible
|
|
1042
1118
|
# right now.
|
|
1043
1119
|
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
#
|
|
1048
|
-
#
|
|
1049
|
-
|
|
1050
|
-
input_paths_expr = """export INPUT_PATHS=$(python -c \\"import sys, os, json; template = json.loads(os.environ['ARGO_TEMPLATE']); input_paths = next((param['value'] for param in template.get('inputs', {'parameters': []})['parameters'] if param['name'] == 'input-paths'), None); sys.stdout.write(input_paths if input_paths else '')\\")"""
|
|
1120
|
+
task_idx = ""
|
|
1121
|
+
input_paths = ""
|
|
1122
|
+
root_input = None
|
|
1123
|
+
# export input_paths as it is used multiple times in the container script
|
|
1124
|
+
# and we do not want to repeat the values.
|
|
1125
|
+
input_paths_expr = "export INPUT_PATHS=''"
|
|
1051
1126
|
if node.name != "start":
|
|
1052
|
-
|
|
1127
|
+
input_paths_expr = (
|
|
1128
|
+
"export INPUT_PATHS={{inputs.parameters.input-paths}}"
|
|
1129
|
+
)
|
|
1130
|
+
input_paths = "$(echo $INPUT_PATHS)"
|
|
1053
1131
|
if any(self.graph[n].type == "foreach" for n in node.in_funcs):
|
|
1054
|
-
|
|
1132
|
+
task_idx = "{{inputs.parameters.split-index}}"
|
|
1133
|
+
if node.is_inside_foreach and self.graph[node.out_funcs[0]].type == "join":
|
|
1134
|
+
if any(
|
|
1135
|
+
self.graph[parent].matching_join
|
|
1136
|
+
== self.graph[node.out_funcs[0]].name
|
|
1137
|
+
for parent in self.graph[node.out_funcs[0]].split_parents
|
|
1138
|
+
if self.graph[parent].type == "foreach"
|
|
1139
|
+
) and any(not self.graph[f].type == "foreach" for f in node.in_funcs):
|
|
1140
|
+
# we need to propagate the split-index and root-input-path info for
|
|
1141
|
+
# the last step inside a foreach for correctly joining nested
|
|
1142
|
+
# foreaches
|
|
1143
|
+
task_idx = "{{inputs.parameters.split-index}}"
|
|
1144
|
+
root_input = "{{inputs.parameters.root-input-path}}"
|
|
1145
|
+
|
|
1146
|
+
# Task string to be hashed into an ID
|
|
1147
|
+
task_str = "-".join(
|
|
1148
|
+
[
|
|
1149
|
+
node.name,
|
|
1150
|
+
"{{workflow.creationTimestamp}}",
|
|
1151
|
+
root_input or input_paths,
|
|
1152
|
+
task_idx,
|
|
1153
|
+
]
|
|
1154
|
+
)
|
|
1155
|
+
|
|
1055
1156
|
# Generated task_ids need to be non-numeric - see register_task_id in
|
|
1056
1157
|
# service.py. We do so by prefixing `t-`
|
|
1057
1158
|
task_id_expr = (
|
|
@@ -1112,8 +1213,6 @@ class ArgoWorkflows(object):
|
|
|
1112
1213
|
node.name, self.flow_datastore.TYPE
|
|
1113
1214
|
)
|
|
1114
1215
|
|
|
1115
|
-
input_paths = "$(echo $INPUT_PATHS)"
|
|
1116
|
-
|
|
1117
1216
|
top_opts_dict = {
|
|
1118
1217
|
"with": [
|
|
1119
1218
|
decorator.make_decorator_spec()
|
|
@@ -1182,10 +1281,16 @@ class ArgoWorkflows(object):
|
|
|
1182
1281
|
node.type == "join"
|
|
1183
1282
|
and self.graph[node.split_parents[-1]].type == "foreach"
|
|
1184
1283
|
):
|
|
1185
|
-
# Set aggregated input-paths for a
|
|
1284
|
+
# Set aggregated input-paths for a for-each join
|
|
1285
|
+
foreach_step = next(
|
|
1286
|
+
n for n in node.in_funcs if self.graph[n].is_inside_foreach
|
|
1287
|
+
)
|
|
1186
1288
|
input_paths = (
|
|
1187
|
-
"$(python -m metaflow.plugins.argo.
|
|
1188
|
-
%
|
|
1289
|
+
"$(python -m metaflow.plugins.argo.generate_input_paths %s {{workflow.creationTimestamp}} %s {{inputs.parameters.split-cardinality}})"
|
|
1290
|
+
% (
|
|
1291
|
+
foreach_step,
|
|
1292
|
+
input_paths,
|
|
1293
|
+
)
|
|
1189
1294
|
)
|
|
1190
1295
|
step = [
|
|
1191
1296
|
"step",
|
|
@@ -1352,13 +1457,37 @@ class ArgoWorkflows(object):
|
|
|
1352
1457
|
# input. Analogously, if the node under consideration is a foreach
|
|
1353
1458
|
# node, then we emit split cardinality as an extra output. I would like
|
|
1354
1459
|
# to thank the designers of Argo Workflows for making this so
|
|
1355
|
-
# straightforward!
|
|
1460
|
+
# straightforward! Things become a bit more complicated to support very
|
|
1461
|
+
# wide foreaches where we have to resort to passing a root-input-path
|
|
1462
|
+
# so that we can compute the task ids for each parent task of a for-each
|
|
1463
|
+
# join task deterministically inside the join task without resorting to
|
|
1464
|
+
# passing a rather long list of (albiet compressed)
|
|
1356
1465
|
inputs = []
|
|
1357
1466
|
if node.name != "start":
|
|
1358
1467
|
inputs.append(Parameter("input-paths"))
|
|
1359
1468
|
if any(self.graph[n].type == "foreach" for n in node.in_funcs):
|
|
1360
1469
|
# Fetch split-index from parent
|
|
1361
1470
|
inputs.append(Parameter("split-index"))
|
|
1471
|
+
if (
|
|
1472
|
+
node.type == "join"
|
|
1473
|
+
and self.graph[node.split_parents[-1]].type == "foreach"
|
|
1474
|
+
):
|
|
1475
|
+
# append this only for joins of foreaches, not static splits
|
|
1476
|
+
inputs.append(Parameter("split-cardinality"))
|
|
1477
|
+
if node.is_inside_foreach and self.graph[node.out_funcs[0]].type == "join":
|
|
1478
|
+
if any(
|
|
1479
|
+
self.graph[parent].matching_join
|
|
1480
|
+
== self.graph[node.out_funcs[0]].name
|
|
1481
|
+
for parent in self.graph[node.out_funcs[0]].split_parents
|
|
1482
|
+
if self.graph[parent].type == "foreach"
|
|
1483
|
+
) and any(not self.graph[f].type == "foreach" for f in node.in_funcs):
|
|
1484
|
+
# we need to propagate the split-index and root-input-path info for
|
|
1485
|
+
# the last step inside a foreach for correctly joining nested
|
|
1486
|
+
# foreaches
|
|
1487
|
+
if not any(self.graph[n].type == "foreach" for n in node.in_funcs):
|
|
1488
|
+
# Don't add duplicate split index parameters.
|
|
1489
|
+
inputs.append(Parameter("split-index"))
|
|
1490
|
+
inputs.append(Parameter("root-input-path"))
|
|
1362
1491
|
|
|
1363
1492
|
outputs = []
|
|
1364
1493
|
if node.name != "end":
|
|
@@ -1368,6 +1497,11 @@ class ArgoWorkflows(object):
|
|
|
1368
1497
|
outputs.append(
|
|
1369
1498
|
Parameter("num-splits").valueFrom({"path": "/mnt/out/splits"})
|
|
1370
1499
|
)
|
|
1500
|
+
outputs.append(
|
|
1501
|
+
Parameter("split-cardinality").valueFrom(
|
|
1502
|
+
{"path": "/mnt/out/split_cardinality"}
|
|
1503
|
+
)
|
|
1504
|
+
)
|
|
1371
1505
|
|
|
1372
1506
|
# It makes no sense to set env vars to None (shows up as "None" string)
|
|
1373
1507
|
# Also we skip some env vars (e.g. in case we want to pull them from KUBERNETES_SECRETS)
|
{ob-metaflow-2.11.10.2 → ob_metaflow-2.11.13.1}/metaflow/plugins/argo/argo_workflows_decorator.py
RENAMED
|
@@ -102,6 +102,9 @@ class ArgoWorkflowsInternalDecorator(StepDecorator):
|
|
|
102
102
|
if graph[step_name].type == "foreach":
|
|
103
103
|
with open("/mnt/out/splits", "w") as file:
|
|
104
104
|
json.dump(list(range(flow._foreach_num_splits)), file)
|
|
105
|
+
with open("/mnt/out/split_cardinality", "w") as file:
|
|
106
|
+
json.dump(flow._foreach_num_splits, file)
|
|
107
|
+
|
|
105
108
|
# Unfortunately, we can't always use pod names as task-ids since the pod names
|
|
106
109
|
# are not static across retries. We write the task-id to a file that is read
|
|
107
110
|
# by the next task here.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
from hashlib import md5
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
def generate_input_paths(step_name, timestamp, input_paths, split_cardinality):
|
|
6
|
+
# => run_id/step/:foo,bar
|
|
7
|
+
run_id = input_paths.split("/")[0]
|
|
8
|
+
foreach_base_id = "{}-{}-{}".format(step_name, timestamp, input_paths)
|
|
9
|
+
|
|
10
|
+
ids = [_generate_task_id(foreach_base_id, i) for i in range(int(split_cardinality))]
|
|
11
|
+
return "{}/{}/:{}".format(run_id, step_name, ",".join(ids))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def _generate_task_id(base, idx):
|
|
15
|
+
# For foreach splits generate the expected input-paths based on split_cardinality and base_id.
|
|
16
|
+
# newline required at the end due to 'echo' appending one in the shell side task_id creation.
|
|
17
|
+
task_str = "%s-%s\n" % (base, idx)
|
|
18
|
+
hash = md5(task_str.encode("utf-8")).hexdigest()[-8:]
|
|
19
|
+
return "t-" + hash
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
if __name__ == "__main__":
|
|
23
|
+
print(generate_input_paths(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4]))
|
|
@@ -20,14 +20,30 @@ def get_ec2_instance_metadata():
|
|
|
20
20
|
# access to this end-point might be blocked on AWS and not available
|
|
21
21
|
# for non-AWS deployments.
|
|
22
22
|
# https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-identity-documents.html
|
|
23
|
+
# Set a very aggressive timeout, as the communication is happening in the same subnet,
|
|
24
|
+
# there should not be any significant delay in the response.
|
|
25
|
+
# Having a long default timeout here introduces unnecessary delay in launching tasks when the
|
|
26
|
+
# instance is unreachable.
|
|
27
|
+
timeout = (1, 10)
|
|
28
|
+
token = None
|
|
23
29
|
try:
|
|
24
|
-
#
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
30
|
+
# Try to get an IMDSv2 token.
|
|
31
|
+
token = requests.put(
|
|
32
|
+
url="http://169.254.169.254/latest/api/token",
|
|
33
|
+
headers={"X-aws-ec2-metadata-token-ttl-seconds": 100},
|
|
34
|
+
timeout=timeout,
|
|
35
|
+
).text
|
|
36
|
+
except:
|
|
37
|
+
pass
|
|
38
|
+
try:
|
|
39
|
+
headers = {}
|
|
40
|
+
# Add IMDSv2 token if available, else fall back to IMDSv1.
|
|
41
|
+
if token:
|
|
42
|
+
headers["X-aws-ec2-metadata-token"] = token
|
|
28
43
|
instance_meta = requests.get(
|
|
29
44
|
url="http://169.254.169.254/latest/dynamic/instance-identity/document",
|
|
30
|
-
|
|
45
|
+
headers=headers,
|
|
46
|
+
timeout=timeout,
|
|
31
47
|
).json()
|
|
32
48
|
meta["ec2-instance-id"] = instance_meta.get("instanceId")
|
|
33
49
|
meta["ec2-instance-type"] = instance_meta.get("instanceType")
|
|
@@ -439,7 +439,7 @@ class StepFunctions(object):
|
|
|
439
439
|
JSONItemReader()
|
|
440
440
|
.resource("arn:aws:states:::s3:getObject")
|
|
441
441
|
.parameter("Bucket.$", "$.Body.DestinationBucket")
|
|
442
|
-
.parameter("Key.$", "$.Body.ResultFiles.SUCCEEDED
|
|
442
|
+
.parameter("Key.$", "$.Body.ResultFiles.SUCCEEDED[0].Key")
|
|
443
443
|
)
|
|
444
444
|
.output_path("$.[0]")
|
|
445
445
|
)
|
|
@@ -1626,6 +1626,7 @@ class S3(object):
|
|
|
1626
1626
|
# Run the operation.
|
|
1627
1627
|
env = os.environ.copy()
|
|
1628
1628
|
tracing.inject_tracing_vars(env)
|
|
1629
|
+
env["METAFLOW_ESCAPE_HATCH_WARNING"] = "False"
|
|
1629
1630
|
stdout = subprocess.check_output(
|
|
1630
1631
|
cmdline + addl_cmdline,
|
|
1631
1632
|
cwd=self._tmpdir,
|
|
@@ -110,6 +110,7 @@ import importlib
|
|
|
110
110
|
import os
|
|
111
111
|
import sys
|
|
112
112
|
from metaflow.plugins.env_escape.client_modules import ModuleImporter
|
|
113
|
+
from metaflow.metaflow_config import ESCAPE_HATCH_WARNING
|
|
113
114
|
|
|
114
115
|
# This is a trampoline file to ensure that the ModuleImporter to handle the emulated
|
|
115
116
|
# modules gets properly loaded. If multiple modules are emulated by a single configuration
|
|
@@ -146,7 +147,7 @@ def load():
|
|
|
146
147
|
# print("Env escape using executable {python_executable}")
|
|
147
148
|
else:
|
|
148
149
|
# Inverse logic as above here.
|
|
149
|
-
if sys.executable != "{python_executable}":
|
|
150
|
+
if sys.executable != "{python_executable}" and ESCAPE_HATCH_WARNING:
|
|
150
151
|
# We use the package locally and warn user.
|
|
151
152
|
print("Not using environment escape for '%s' as module present" % prefix)
|
|
152
153
|
# In both cases, we don't load our loader since
|
{ob-metaflow-2.11.10.2 → ob_metaflow-2.11.13.1}/metaflow/plugins/kubernetes/kubernetes_decorator.py
RENAMED
|
@@ -24,6 +24,9 @@ from metaflow.metaflow_config import (
|
|
|
24
24
|
KUBERNETES_PORT,
|
|
25
25
|
KUBERNETES_SHARED_MEMORY,
|
|
26
26
|
KUBERNETES_PORT,
|
|
27
|
+
KUBERNETES_CPU,
|
|
28
|
+
KUBERNETES_MEMORY,
|
|
29
|
+
KUBERNETES_DISK,
|
|
27
30
|
)
|
|
28
31
|
from metaflow.plugins.resources_decorator import ResourcesDecorator
|
|
29
32
|
from metaflow.plugins.timeout_decorator import get_run_time_limit_for_task
|
|
@@ -179,6 +182,15 @@ class KubernetesDecorator(StepDecorator):
|
|
|
179
182
|
except (NameError, ImportError):
|
|
180
183
|
pass
|
|
181
184
|
|
|
185
|
+
# parse the CPU, memory, disk, values from the KUBERNETES_ environment variable (you would need to export the METAFLOW_KUBERNETES_CPU, METAFLOW_KUBERNETES_MEMORY and/or METAFLOW_KUBERNTES_DISK environment variable with the desired values before running the flow)
|
|
186
|
+
# find the values from the environment variables, then validate if the values are still the default ones, if so, then replace them with the values from the environment variables (otherwise, keep the values from the decorator)
|
|
187
|
+
if self.attributes["cpu"] == self.defaults["cpu"] and KUBERNETES_CPU:
|
|
188
|
+
self.attributes["cpu"] = KUBERNETES_CPU
|
|
189
|
+
if self.attributes["memory"] == self.defaults["memory"] and KUBERNETES_MEMORY:
|
|
190
|
+
self.attributes["memory"] = KUBERNETES_MEMORY
|
|
191
|
+
if self.attributes["disk"] == self.defaults["disk"] and KUBERNETES_DISK:
|
|
192
|
+
self.attributes["disk"] = KUBERNETES_DISK
|
|
193
|
+
|
|
182
194
|
# If no docker image is explicitly specified, impute a default image.
|
|
183
195
|
if not self.attributes["image"]:
|
|
184
196
|
# If metaflow-config specifies a docker image, just use that.
|
|
@@ -266,7 +266,9 @@ class CondaEnvironment(MetaflowEnvironment):
|
|
|
266
266
|
# Resolve `linux-64` Conda environments if @batch or @kubernetes are in play
|
|
267
267
|
target_platform = conda_platform()
|
|
268
268
|
for decorator in step.decorators:
|
|
269
|
-
|
|
269
|
+
# TODO: rather than relying on decorator names, rely on attributes
|
|
270
|
+
# to make them extensible.
|
|
271
|
+
if decorator.name in ["batch", "kubernetes", "nvidia"]:
|
|
270
272
|
# TODO: Support arm architectures
|
|
271
273
|
target_platform = "linux-64"
|
|
272
274
|
break
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
metaflow_version = "2.11.13.1"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ob-metaflow
|
|
3
|
-
Version: 2.11.
|
|
3
|
+
Version: 2.11.13.1
|
|
4
4
|
Summary: Metaflow: More Data Science, Less Engineering
|
|
5
5
|
Author: Netflix, Outerbounds & the Metaflow Community
|
|
6
6
|
Author-email: help@outerbounds.co
|
|
@@ -12,7 +12,7 @@ Requires-Dist: boto3
|
|
|
12
12
|
Requires-Dist: pylint
|
|
13
13
|
Requires-Dist: kubernetes
|
|
14
14
|
Provides-Extra: stubs
|
|
15
|
-
Requires-Dist: ob-metaflow-stubs==2.11.
|
|
15
|
+
Requires-Dist: ob-metaflow-stubs==2.11.13.1; extra == "stubs"
|
|
16
16
|
|
|
17
17
|

|
|
18
18
|
|
|
@@ -157,7 +157,7 @@ metaflow/plugins/argo/argo_events.py
|
|
|
157
157
|
metaflow/plugins/argo/argo_workflows.py
|
|
158
158
|
metaflow/plugins/argo/argo_workflows_cli.py
|
|
159
159
|
metaflow/plugins/argo/argo_workflows_decorator.py
|
|
160
|
-
metaflow/plugins/argo/
|
|
160
|
+
metaflow/plugins/argo/generate_input_paths.py
|
|
161
161
|
metaflow/plugins/aws/__init__.py
|
|
162
162
|
metaflow/plugins/aws/aws_client.py
|
|
163
163
|
metaflow/plugins/aws/aws_utils.py
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import re
|
|
2
|
-
import sys
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
def process_input_paths(input_paths):
|
|
6
|
-
# Convert Argo Workflows provided input-paths string to something that Metaflow
|
|
7
|
-
# understands
|
|
8
|
-
#
|
|
9
|
-
# flow/step/[{task-id:foo},{task-id:bar}] => flow/step/:foo,bar
|
|
10
|
-
|
|
11
|
-
flow, run_id, task_ids = input_paths.split("/")
|
|
12
|
-
task_ids = re.sub("[\[\]{}]", "", task_ids)
|
|
13
|
-
task_ids = task_ids.split(",")
|
|
14
|
-
tasks = [t.split(":")[1].strip('"') for t in task_ids]
|
|
15
|
-
return "{}/{}/:{}".format(flow, run_id, ",".join(tasks))
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
if __name__ == "__main__":
|
|
19
|
-
print(process_input_paths(sys.argv[1]))
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
metaflow_version = "2.11.10.2"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|