ob-metaflow 2.11.15.1__tar.gz → 2.11.15.3__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.15.1/ob_metaflow.egg-info → ob_metaflow-2.11.15.3}/PKG-INFO +2 -2
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/metaflow_config.py +8 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/metaflow_environment.py +1 -1
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/__init__.py +4 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/airflow/airflow.py +4 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/argo/argo_workflows.py +2 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/azure/azure_exceptions.py +1 -1
- ob_metaflow-2.11.15.3/metaflow/plugins/azure/azure_secret_manager_secrets_provider.py +236 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/kubernetes/kubernetes.py +4 -0
- ob_metaflow-2.11.15.3/metaflow/version.py +1 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3/ob_metaflow.egg-info}/PKG-INFO +2 -2
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/ob_metaflow.egg-info/SOURCES.txt +1 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/ob_metaflow.egg-info/requires.txt +1 -1
- ob_metaflow-2.11.15.1/metaflow/version.py +0 -1
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/LICENSE +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/MANIFEST.in +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/README.md +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/R.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/click/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/click/_bashcomplete.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/click/_compat.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/click/_termui_impl.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/click/_textwrap.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/click/_unicodefun.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/click/_winconsole.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/click/core.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/click/decorators.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/click/exceptions.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/click/formatting.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/click/globals.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/click/parser.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/click/termui.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/click/testing.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/click/types.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/click/utils.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/packaging/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/packaging/_elffile.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/packaging/_manylinux.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/packaging/_musllinux.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/packaging/_parser.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/packaging/_structures.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/packaging/_tokenizer.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/packaging/markers.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/packaging/py.typed +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/packaging/requirements.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/packaging/specifiers.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/packaging/tags.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/packaging/utils.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/packaging/version.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/v3_5/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/v3_5/importlib_metadata/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/v3_5/importlib_metadata/_compat.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/v3_5/zipp.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/v3_6/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/v3_6/importlib_metadata/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/v3_6/importlib_metadata/_adapters.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/v3_6/importlib_metadata/_collections.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/v3_6/importlib_metadata/_compat.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/v3_6/importlib_metadata/_functools.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/v3_6/importlib_metadata/_itertools.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/v3_6/importlib_metadata/_meta.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/v3_6/importlib_metadata/_text.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/v3_6/importlib_metadata/py.typed +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/v3_6/typing_extensions.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/v3_6/zipp.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/v3_7/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/v3_7/zipp.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/cards.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/cli.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/cli_args.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/client/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/client/core.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/client/filecache.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/clone_util.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/cmd/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/cmd/configure_cmd.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/cmd/develop/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/cmd/develop/stub_generator.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/cmd/develop/stubs.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/cmd/main_cli.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/cmd/tutorials_cmd.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/cmd/util.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/cmd_with_io.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/datastore/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/datastore/content_addressed_store.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/datastore/datastore_set.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/datastore/datastore_storage.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/datastore/exceptions.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/datastore/flow_datastore.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/datastore/inputs.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/datastore/task_datastore.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/debug.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/decorators.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/event_logger.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/events.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/exception.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/extension_support/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/extension_support/_empty_file.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/extension_support/cmd.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/extension_support/integrations.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/extension_support/plugins.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/flowspec.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/graph.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/includefile.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/integrations.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/lint.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/metadata/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/metadata/heartbeat.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/metadata/metadata.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/metadata/util.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/metaflow_config_funcs.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/metaflow_current.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/metaflow_profile.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/metaflow_version.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/mflog/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/mflog/mflog.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/mflog/save_logs.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/mflog/save_logs_periodically.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/mflog/tee.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/monitor.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/multicore_utils.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/package.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/parameters.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/airflow/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/airflow/airflow_cli.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/airflow/airflow_decorator.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/airflow/airflow_utils.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/airflow/dag.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/airflow/exception.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/airflow/plumbing/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/airflow/plumbing/set_parameters.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/airflow/sensors/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/airflow/sensors/base_sensor.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/airflow/sensors/external_task_sensor.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/airflow/sensors/s3_sensor.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/argo/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/argo/argo_client.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/argo/argo_events.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/argo/argo_workflows_cli.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/argo/argo_workflows_decorator.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/argo/generate_input_paths.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/aws/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/aws/aws_client.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/aws/aws_utils.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/aws/batch/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/aws/batch/batch.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/aws/batch/batch_cli.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/aws/batch/batch_client.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/aws/batch/batch_decorator.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/aws/secrets_manager/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/aws/secrets_manager/aws_secrets_manager_secrets_provider.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/aws/step_functions/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/aws/step_functions/dynamo_db_client.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/aws/step_functions/event_bridge_client.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/aws/step_functions/production_token.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/aws/step_functions/schedule_decorator.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/aws/step_functions/set_batch_environment.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/aws/step_functions/step_functions.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/aws/step_functions/step_functions_cli.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/aws/step_functions/step_functions_client.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/aws/step_functions/step_functions_decorator.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/azure/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/azure/azure_credential.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/azure/azure_tail.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/azure/azure_utils.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/azure/blob_service_client_factory.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/azure/includefile_support.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/cards/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/cards/card_cli.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/cards/card_client.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/cards/card_creator.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/cards/card_datastore.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/cards/card_decorator.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/cards/card_modules/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/cards/card_modules/base.html +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/cards/card_modules/basic.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/cards/card_modules/bundle.css +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/cards/card_modules/card.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/cards/card_modules/chevron/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/cards/card_modules/chevron/main.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/cards/card_modules/chevron/metadata.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/cards/card_modules/chevron/renderer.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/cards/card_modules/chevron/tokenizer.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/cards/card_modules/components.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/cards/card_modules/convert_to_native_type.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/cards/card_modules/main.js +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/cards/card_modules/renderer_tools.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/cards/card_modules/test_cards.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/cards/card_resolver.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/cards/card_server.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/cards/card_viewer/viewer.html +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/cards/component_serializer.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/cards/exception.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/catch_decorator.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/datastores/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/datastores/azure_storage.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/datastores/gs_storage.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/datastores/local_storage.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/datastores/s3_storage.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/datatools/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/datatools/local.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/datatools/s3/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/datatools/s3/s3.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/datatools/s3/s3op.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/datatools/s3/s3tail.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/datatools/s3/s3util.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/debug_logger.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/debug_monitor.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/env_escape/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/env_escape/client.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/env_escape/client_modules.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/env_escape/communication/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/env_escape/communication/bytestream.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/env_escape/communication/channel.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/env_escape/communication/socket_bytestream.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/env_escape/communication/utils.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/env_escape/configurations/emulate_test_lib/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/env_escape/configurations/emulate_test_lib/overrides.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/env_escape/configurations/emulate_test_lib/server_mappings.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/env_escape/configurations/test_lib_impl/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/env_escape/configurations/test_lib_impl/test_lib.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/env_escape/consts.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/env_escape/data_transferer.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/env_escape/exception_transferer.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/env_escape/override_decorators.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/env_escape/server.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/env_escape/stub.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/env_escape/utils.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/environment_decorator.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/events_decorator.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/frameworks/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/frameworks/pytorch.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/gcp/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/gcp/gcp_secret_manager_secrets_provider.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/gcp/gs_exceptions.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/gcp/gs_storage_client_factory.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/gcp/gs_tail.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/gcp/gs_utils.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/gcp/includefile_support.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/kubernetes/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/kubernetes/kubernetes_cli.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/kubernetes/kubernetes_client.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/kubernetes/kubernetes_decorator.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/kubernetes/kubernetes_job.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/logs_cli.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/metadata/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/metadata/local.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/metadata/service.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/package_cli.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/parallel_decorator.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/project_decorator.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/pypi/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/pypi/bootstrap.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/pypi/conda_decorator.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/pypi/conda_environment.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/pypi/micromamba.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/pypi/pip.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/pypi/pypi_decorator.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/pypi/pypi_environment.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/pypi/utils.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/resources_decorator.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/retry_decorator.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/secrets/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/secrets/inline_secrets_provider.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/secrets/secrets_decorator.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/storage_executor.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/tag_cli.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/test_unbounded_foreach_decorator.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/plugins/timeout_decorator.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/procpoll.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/py.typed +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/pylint_wrapper.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/runtime.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/sidecar/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/sidecar/sidecar.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/sidecar/sidecar_messages.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/sidecar/sidecar_subprocess.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/sidecar/sidecar_worker.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/tagging_util.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/task.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/tracing/__init__.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/tracing/propagator.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/tracing/span_exporter.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/tracing/tracing_modules.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/tutorials/00-helloworld/README.md +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/tutorials/00-helloworld/helloworld.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/tutorials/01-playlist/README.md +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/tutorials/01-playlist/movies.csv +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/tutorials/01-playlist/playlist.ipynb +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/tutorials/01-playlist/playlist.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/tutorials/02-statistics/README.md +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/tutorials/02-statistics/movies.csv +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/tutorials/02-statistics/stats.ipynb +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/tutorials/02-statistics/stats.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/tutorials/03-playlist-redux/README.md +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/tutorials/03-playlist-redux/playlist.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/tutorials/04-playlist-plus/README.md +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/tutorials/04-playlist-plus/playlist.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/tutorials/05-hello-cloud/README.md +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/tutorials/05-hello-cloud/hello-cloud.ipynb +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/tutorials/05-hello-cloud/hello-cloud.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/tutorials/06-statistics-redux/README.md +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/tutorials/06-statistics-redux/stats.ipynb +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/tutorials/07-worldview/README.md +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/tutorials/07-worldview/worldview.ipynb +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/tutorials/08-autopilot/README.md +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/tutorials/08-autopilot/autopilot.ipynb +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/unbounded_foreach.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/util.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/vendor.py +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/ob_metaflow.egg-info/dependency_links.txt +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/ob_metaflow.egg-info/entry_points.txt +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/ob_metaflow.egg-info/top_level.txt +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/setup.cfg +0 -0
- {ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ob-metaflow
|
|
3
|
-
Version: 2.11.15.
|
|
3
|
+
Version: 2.11.15.3
|
|
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.
|
|
15
|
+
Requires-Dist: ob-metaflow-stubs==2.11.15.3; extra == "stubs"
|
|
16
16
|
|
|
17
17
|

|
|
18
18
|
|
|
@@ -154,6 +154,13 @@ AWS_SECRETS_MANAGER_DEFAULT_REGION = from_conf("AWS_SECRETS_MANAGER_DEFAULT_REGI
|
|
|
154
154
|
# - "projects/1234567890/secrets/foo-" -> "projects/1234567890/secrets/foo-mysecret"
|
|
155
155
|
GCP_SECRET_MANAGER_PREFIX = from_conf("GCP_SECRET_MANAGER_PREFIX")
|
|
156
156
|
|
|
157
|
+
# Secrets Backend - Azure Key Vault prefix. With this, users don't have to
|
|
158
|
+
# specify the full https:// vault url in the @secret decorator.
|
|
159
|
+
#
|
|
160
|
+
# It does not make a difference if the prefix ends in a / or not. We will handle either
|
|
161
|
+
# case correctly.
|
|
162
|
+
AZURE_KEY_VAULT_PREFIX = from_conf("AZURE_KEY_VAULT_PREFIX")
|
|
163
|
+
|
|
157
164
|
# The root directory to save artifact pulls in, when using S3 or Azure
|
|
158
165
|
ARTIFACT_LOCALROOT = from_conf("ARTIFACT_LOCALROOT", os.getcwd())
|
|
159
166
|
|
|
@@ -471,6 +478,7 @@ def get_pinned_conda_libs(python_version, datastore_type):
|
|
|
471
478
|
elif datastore_type == "azure":
|
|
472
479
|
pins["azure-identity"] = ">=1.10.0"
|
|
473
480
|
pins["azure-storage-blob"] = ">=12.12.0"
|
|
481
|
+
pins["azure-keyvault-secrets"] = ">=4.7.0"
|
|
474
482
|
elif datastore_type == "gs":
|
|
475
483
|
pins["google-cloud-storage"] = ">=2.5.0"
|
|
476
484
|
pins["google-auth"] = ">=2.11.0"
|
|
@@ -124,7 +124,7 @@ class MetaflowEnvironment(object):
|
|
|
124
124
|
cmds.append("%s -m pip install awscli boto3" % self._python())
|
|
125
125
|
elif datastore_type == "azure":
|
|
126
126
|
cmds.append(
|
|
127
|
-
"%s -m pip install azure-identity azure-storage-blob simple-azure-blob-downloader -qqq"
|
|
127
|
+
"%s -m pip install azure-identity azure-storage-blob azure-keyvault-secrets simple-azure-blob-downloader -qqq"
|
|
128
128
|
% self._python()
|
|
129
129
|
)
|
|
130
130
|
elif datastore_type == "gs":
|
|
@@ -125,6 +125,10 @@ SECRETS_PROVIDERS_DESC = [
|
|
|
125
125
|
"gcp-secret-manager",
|
|
126
126
|
".gcp.gcp_secret_manager_secrets_provider.GcpSecretManagerSecretsProvider",
|
|
127
127
|
),
|
|
128
|
+
(
|
|
129
|
+
"az-key-vault",
|
|
130
|
+
".azure.azure_secret_manager_secrets_provider.AzureKeyVaultSecretsProvider",
|
|
131
|
+
),
|
|
128
132
|
]
|
|
129
133
|
|
|
130
134
|
AZURE_CLIENT_PROVIDERS_DESC = [
|
|
@@ -32,6 +32,7 @@ from metaflow.metaflow_config import (
|
|
|
32
32
|
S3_ENDPOINT_URL,
|
|
33
33
|
SERVICE_HEADERS,
|
|
34
34
|
SERVICE_INTERNAL_URL,
|
|
35
|
+
AZURE_KEY_VAULT_PREFIX,
|
|
35
36
|
)
|
|
36
37
|
|
|
37
38
|
from metaflow.metaflow_config_funcs import config_values
|
|
@@ -412,6 +413,9 @@ class Airflow(object):
|
|
|
412
413
|
if GCP_SECRET_MANAGER_PREFIX:
|
|
413
414
|
env["METAFLOW_GCP_SECRET_MANAGER_PREFIX"] = GCP_SECRET_MANAGER_PREFIX
|
|
414
415
|
|
|
416
|
+
if AZURE_KEY_VAULT_PREFIX:
|
|
417
|
+
env["METAFLOW_AZURE_KEY_VAULT_PREFIX"] = AZURE_KEY_VAULT_PREFIX
|
|
418
|
+
|
|
415
419
|
env.update(additional_mf_variables)
|
|
416
420
|
|
|
417
421
|
service_account = (
|
|
@@ -33,6 +33,7 @@ from metaflow.metaflow_config import (
|
|
|
33
33
|
DEFAULT_METADATA,
|
|
34
34
|
DEFAULT_SECRETS_BACKEND_TYPE,
|
|
35
35
|
GCP_SECRET_MANAGER_PREFIX,
|
|
36
|
+
AZURE_KEY_VAULT_PREFIX,
|
|
36
37
|
KUBERNETES_FETCH_EC2_METADATA,
|
|
37
38
|
KUBERNETES_LABELS,
|
|
38
39
|
KUBERNETES_NAMESPACE,
|
|
@@ -1420,6 +1421,7 @@ class ArgoWorkflows(object):
|
|
|
1420
1421
|
"METAFLOW_AWS_SECRETS_MANAGER_DEFAULT_REGION"
|
|
1421
1422
|
] = AWS_SECRETS_MANAGER_DEFAULT_REGION
|
|
1422
1423
|
env["METAFLOW_GCP_SECRET_MANAGER_PREFIX"] = GCP_SECRET_MANAGER_PREFIX
|
|
1424
|
+
env["METAFLOW_AZURE_KEY_VAULT_PREFIX"] = AZURE_KEY_VAULT_PREFIX
|
|
1423
1425
|
|
|
1424
1426
|
# support for Azure
|
|
1425
1427
|
env[
|
|
@@ -10,4 +10,4 @@ class MetaflowAzureResourceError(MetaflowException):
|
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
class MetaflowAzurePackageError(MetaflowException):
|
|
13
|
-
headline = "Missing required packages 'azure-identity' and 'azure-storage-blob'"
|
|
13
|
+
headline = "Missing required packages 'azure-identity' and 'azure-storage-blob' and 'azure-keyvault-secrets'"
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
from metaflow.plugins.secrets import SecretsProvider
|
|
2
|
+
import re
|
|
3
|
+
import base64
|
|
4
|
+
import codecs
|
|
5
|
+
from urllib.parse import urlparse
|
|
6
|
+
from metaflow.exception import MetaflowException
|
|
7
|
+
import sys
|
|
8
|
+
from metaflow.metaflow_config import AZURE_KEY_VAULT_PREFIX
|
|
9
|
+
from metaflow.plugins.azure.azure_credential import (
|
|
10
|
+
create_cacheable_azure_credential,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class MetaflowAzureKeyVaultBadVault(MetaflowException):
|
|
15
|
+
"""Raised when the secretid is fully qualified but does not have the right key vault domain"""
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class MetaflowAzureKeyVaultBadSecretType(MetaflowException):
|
|
19
|
+
"""Raised when the secret type is anything except secrets"""
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class MetaflowAzureKeyVaultBadSecretPath(MetaflowException):
|
|
23
|
+
"""Raised when the secret path does not match to expected length"""
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class MetaflowAzureKeyVaultBadSecretName(MetaflowException):
|
|
27
|
+
"""Raised when the secret name does not match expected pattern"""
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class MetaflowAzureKeyVaultBadSecretVersion(MetaflowException):
|
|
31
|
+
"""Raised when the secret version does not match expected pattern"""
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class MetaflowAzureKeyVaultBadSecret(MetaflowException):
|
|
35
|
+
"""Raised when the secret does not match supported patterns in Metaflow"""
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class AzureKeyVaultSecretsProvider(SecretsProvider):
|
|
39
|
+
TYPE = "az-key-vault"
|
|
40
|
+
key_vault_domains = [
|
|
41
|
+
".vault.azure.net",
|
|
42
|
+
".vault.azure.cn",
|
|
43
|
+
".vault.usgovcloudapi.net",
|
|
44
|
+
".vault.microsoftazure.de",
|
|
45
|
+
]
|
|
46
|
+
supported_vault_object_types = ["secrets"]
|
|
47
|
+
|
|
48
|
+
# https://learn.microsoft.com/en-us/azure/key-vault/general/about-keys-secrets-certificates has details on vault name structure
|
|
49
|
+
# Vault name and Managed HSM pool name must be a 3-24 character string, containing only 0-9, a-z, A-Z, and not consecutive -.
|
|
50
|
+
def _is_valid_vault_name(self, vault_name):
|
|
51
|
+
vault_name_pattern = r"^(?!.*--)[a-zA-Z0-9-]{3,24}$"
|
|
52
|
+
return re.match(vault_name_pattern, vault_name) is not None
|
|
53
|
+
|
|
54
|
+
# The type of the object can be, "keys", "secrets", or "certificates".
|
|
55
|
+
# Currently only secrets will be supported
|
|
56
|
+
def _is_valid_object_type(self, secret_type):
|
|
57
|
+
for type in self.supported_vault_object_types:
|
|
58
|
+
if secret_type == type:
|
|
59
|
+
return True
|
|
60
|
+
return False
|
|
61
|
+
|
|
62
|
+
# The secret name must be a 1-127 character string, starting with a letter and containing only 0-9, a-z, A-Z, and -.
|
|
63
|
+
def _is_valid_secret_name(self, secret_name):
|
|
64
|
+
secret_name_pattern = r"^[a-zA-Z][a-zA-Z0-9-]{0,126}$"
|
|
65
|
+
return re.match(secret_name_pattern, secret_name) is not None
|
|
66
|
+
|
|
67
|
+
# An object-version is a system-generated, 32 character string identifier that is optionally used to address a unique version of an object.
|
|
68
|
+
def _is_valid_object_version(self, secret_version):
|
|
69
|
+
object_version_pattern = r"^[a-zA-Z0-9]{32}$"
|
|
70
|
+
return re.match(object_version_pattern, secret_version) is not None
|
|
71
|
+
|
|
72
|
+
# This function will check if the secret_id is fully qualified url. It will return True iff the secret_id is of the form:
|
|
73
|
+
# https://myvault.vault.azure.net/secrets/mysecret/ec96f02080254f109c51a1f14cdb1931 OR
|
|
74
|
+
# https://myvault.vault.azure.net/secrets/mysecret/
|
|
75
|
+
# validating the above as per recommendations in https://devblogs.microsoft.com/azure-sdk/guidance-for-applications-using-the-key-vault-libraries/
|
|
76
|
+
def _is_secret_id_fully_qualified_url(self, secret_id):
|
|
77
|
+
# if the secret_id is None/empty/does not start with https then return false
|
|
78
|
+
if secret_id is None or secret_id == "" or not secret_id.startswith("https://"):
|
|
79
|
+
return False
|
|
80
|
+
try:
|
|
81
|
+
parsed_vault_url = urlparse(secret_id)
|
|
82
|
+
except ValueError:
|
|
83
|
+
print(f"invalid vault url", file=sys.stderr)
|
|
84
|
+
return False
|
|
85
|
+
hostname = parsed_vault_url.netloc
|
|
86
|
+
|
|
87
|
+
k_v_domain_found = False
|
|
88
|
+
actual_k_v_domain = ""
|
|
89
|
+
for k_v_domain in self.key_vault_domains:
|
|
90
|
+
if k_v_domain in hostname:
|
|
91
|
+
k_v_domain_found = True
|
|
92
|
+
actual_k_v_domain = k_v_domain
|
|
93
|
+
break
|
|
94
|
+
if not k_v_domain_found:
|
|
95
|
+
# the secret_id started with https:// however the key_vault_domains
|
|
96
|
+
# were not present in the secret_id which means
|
|
97
|
+
raise MetaflowAzureKeyVaultBadVault(f"bad key vault domain {secret_id}")
|
|
98
|
+
|
|
99
|
+
# given the secret_id seems to have a valid key vault domain
|
|
100
|
+
# lets verify that the vault name corresponds to its regex.
|
|
101
|
+
vault_name = hostname[: -len(actual_k_v_domain)]
|
|
102
|
+
# verify the vault name pattern
|
|
103
|
+
if not self._is_valid_vault_name(vault_name):
|
|
104
|
+
raise MetaflowAzureKeyVaultBadVault(f"bad key vault name {vault_name}")
|
|
105
|
+
|
|
106
|
+
path_parts = parsed_vault_url.path.strip("/").split("/")
|
|
107
|
+
total_path_parts = len(path_parts)
|
|
108
|
+
if total_path_parts < 2 or total_path_parts > 3:
|
|
109
|
+
raise MetaflowAzureKeyVaultBadSecretPath(
|
|
110
|
+
f"bad secret uri path {path_parts}"
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
object_type = path_parts[0]
|
|
114
|
+
if not self._is_valid_object_type(object_type):
|
|
115
|
+
raise MetaflowAzureKeyVaultBadSecretType(f"bad secret type {object_type}")
|
|
116
|
+
|
|
117
|
+
secret_name = path_parts[1]
|
|
118
|
+
if not self._is_valid_secret_name(secret_name=secret_name):
|
|
119
|
+
raise MetaflowAzureKeyVaultBadSecretName(f"bad secret name {secret_name}")
|
|
120
|
+
|
|
121
|
+
if total_path_parts == 3:
|
|
122
|
+
if not self._is_valid_object_version(path_parts[2]):
|
|
123
|
+
raise MetaflowAzureKeyVaultBadSecretVersion(
|
|
124
|
+
f"bad secret version {path_parts[2]}"
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
return True
|
|
128
|
+
|
|
129
|
+
# This function will validate the correctness of the partial secret id.
|
|
130
|
+
# It will attempt to construct the fully qualified secret URL internally and
|
|
131
|
+
# call the _is_secret_id_fully_qualified_url to check validity
|
|
132
|
+
def _is_partial_secret_valid(self, secret_id):
|
|
133
|
+
secret_parts = secret_id.strip("/").split("/")
|
|
134
|
+
total_secret_parts = len(secret_parts)
|
|
135
|
+
if total_secret_parts < 1 or total_secret_parts > 2:
|
|
136
|
+
return False
|
|
137
|
+
|
|
138
|
+
# since the secret_id is supposedly a partial id, the AZURE_KEY_VAULT_PREFIX
|
|
139
|
+
# must be set.
|
|
140
|
+
if not AZURE_KEY_VAULT_PREFIX:
|
|
141
|
+
raise ValueError(
|
|
142
|
+
f"cannot use simple secret id without setting METAFLOW_AZURE_KEY_VAULT_PREFIX. {AZURE_KEY_VAULT_PREFIX}"
|
|
143
|
+
)
|
|
144
|
+
domain = AZURE_KEY_VAULT_PREFIX.rstrip("/")
|
|
145
|
+
full_secret = f"{domain}/secrets/{secret_id}"
|
|
146
|
+
if not self._is_secret_id_fully_qualified_url(full_secret):
|
|
147
|
+
return False
|
|
148
|
+
|
|
149
|
+
return True
|
|
150
|
+
|
|
151
|
+
def _sanitize_key_as_env_var(self, key):
|
|
152
|
+
"""
|
|
153
|
+
Sanitize a key as an environment variable name.
|
|
154
|
+
This is purely a convenience trade-off to cover common cases well, vs. introducing
|
|
155
|
+
ambiguities (e.g. did the final '_' come from '.', or '-' or is original?).
|
|
156
|
+
|
|
157
|
+
1/27/2023(jackie):
|
|
158
|
+
|
|
159
|
+
We start with few rules and should *sparingly* add more over time.
|
|
160
|
+
Also, it's TBD whether all possible providers will share the same sanitization logic.
|
|
161
|
+
Therefore we will keep this function private for now
|
|
162
|
+
"""
|
|
163
|
+
return key.replace("-", "_").replace(".", "_").replace("/", "_")
|
|
164
|
+
|
|
165
|
+
def get_secret_as_dict(self, secret_id, options={}, role=None):
|
|
166
|
+
# https://learn.microsoft.com/en-us/azure/app-service/app-service-key-vault-references?tabs=azure-cli has a lot of details on
|
|
167
|
+
# the patterns used in key vault
|
|
168
|
+
# Vault names and Managed HSM pool names are selected by the user and are globally unique.
|
|
169
|
+
# Vault name and Managed HSM pool name must be a 3-24 character string, containing only 0-9, a-z, A-Z, and not consecutive -.
|
|
170
|
+
# object-type The type of the object. As of 05/08/24 only "secrets", are supported
|
|
171
|
+
# object-name An object-name is a user provided name for and must be unique within a key vault. The name must be a 1-127 character string, starting with a letter and containing only 0-9, a-z, A-Z, and -.
|
|
172
|
+
# object-version An object-version is a system-generated, 32 character string identifier that is optionally used to address a unique version of an object.
|
|
173
|
+
|
|
174
|
+
# We allow these forms of secret_id:
|
|
175
|
+
#
|
|
176
|
+
# 1. Full path like https://<key-vault-name><.vault-domain>/secrets/<secret-name>/<secret-version>. This is what you
|
|
177
|
+
# see in Azure portal and is easy to copy paste.
|
|
178
|
+
#
|
|
179
|
+
# 2. Full path but without the version like https://<key-vault-name><.vault-domain>/secrets/<secret-name>
|
|
180
|
+
#
|
|
181
|
+
# 3. Simple string like mysecret. This corresponds to the SecretName.
|
|
182
|
+
#
|
|
183
|
+
# 4. Simple string with <secret-name>/<secret-version> suffix like mysecret/123
|
|
184
|
+
|
|
185
|
+
# The latter two forms require METAFLOW_AZURE_KEY_VAULT_PREFIX to be set.
|
|
186
|
+
|
|
187
|
+
# if the secret_id is None/empty/does not start with https then return false
|
|
188
|
+
if secret_id is None or secret_id == "":
|
|
189
|
+
raise MetaflowAzureKeyVaultBadSecret(f"empty secret id is not supported")
|
|
190
|
+
|
|
191
|
+
# check if the passed in secret is a short-form ( #3/#4 in the above comment)
|
|
192
|
+
if not secret_id.startswith("https://"):
|
|
193
|
+
# check if the secret_id is of form `secret_name` OR `secret_name/secret_version`
|
|
194
|
+
if not self._is_partial_secret_valid(secret_id=secret_id):
|
|
195
|
+
raise MetaflowAzureKeyVaultBadSecret(
|
|
196
|
+
f"unsupported partial secret {secret_id}"
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
domain = AZURE_KEY_VAULT_PREFIX.rstrip("/")
|
|
200
|
+
full_secret = f"{domain}/secrets/{secret_id}"
|
|
201
|
+
|
|
202
|
+
# if the secret id is passed as a URL - then check if the url is fully qualified
|
|
203
|
+
if secret_id.startswith("https://"):
|
|
204
|
+
if not self._is_secret_id_fully_qualified_url(secret_id=secret_id):
|
|
205
|
+
raise MetaflowException(f"unsupported secret {secret_id}")
|
|
206
|
+
full_secret = secret_id
|
|
207
|
+
|
|
208
|
+
# at this point I know that the secret URL is good so we can start creating the Secret Client
|
|
209
|
+
az_credentials = create_cacheable_azure_credential()
|
|
210
|
+
res = urlparse(full_secret)
|
|
211
|
+
az_vault_url = f"{res.scheme}://{res.netloc}" # https://myvault.vault.azure.net
|
|
212
|
+
secret_data = res.path.strip("/").split("/")[1:]
|
|
213
|
+
secret_name = secret_data[0]
|
|
214
|
+
secret_version = None
|
|
215
|
+
if len(secret_data) > 1:
|
|
216
|
+
secret_version = secret_data[1]
|
|
217
|
+
|
|
218
|
+
from azure.keyvault.secrets import SecretClient
|
|
219
|
+
|
|
220
|
+
client = SecretClient(vault_url=az_vault_url, credential=az_credentials)
|
|
221
|
+
|
|
222
|
+
key_vault_secret_val = client.get_secret(
|
|
223
|
+
name=secret_name, version=secret_version
|
|
224
|
+
)
|
|
225
|
+
|
|
226
|
+
result = {}
|
|
227
|
+
|
|
228
|
+
if options.get("env_var_name") is not None:
|
|
229
|
+
env_var_name = options["env_var_name"]
|
|
230
|
+
sanitized_key = self._sanitize_key_as_env_var(env_var_name)
|
|
231
|
+
else:
|
|
232
|
+
sanitized_key = self._sanitize_key_as_env_var(key_vault_secret_val.name)
|
|
233
|
+
|
|
234
|
+
response_payload = key_vault_secret_val.value
|
|
235
|
+
result[sanitized_key] = response_payload
|
|
236
|
+
return result
|
|
@@ -32,6 +32,7 @@ from metaflow.metaflow_config import (
|
|
|
32
32
|
DEFAULT_METADATA,
|
|
33
33
|
DEFAULT_SECRETS_BACKEND_TYPE,
|
|
34
34
|
GCP_SECRET_MANAGER_PREFIX,
|
|
35
|
+
AZURE_KEY_VAULT_PREFIX,
|
|
35
36
|
KUBERNETES_FETCH_EC2_METADATA,
|
|
36
37
|
KUBERNETES_LABELS,
|
|
37
38
|
KUBERNETES_SANDBOX_INIT_SCRIPT,
|
|
@@ -261,6 +262,9 @@ class Kubernetes(object):
|
|
|
261
262
|
.environment_variable(
|
|
262
263
|
"METAFLOW_GCP_SECRET_MANAGER_PREFIX", GCP_SECRET_MANAGER_PREFIX
|
|
263
264
|
)
|
|
265
|
+
.environment_variable(
|
|
266
|
+
"METAFLOW_AZURE_KEY_VAULT_PREFIX", AZURE_KEY_VAULT_PREFIX
|
|
267
|
+
)
|
|
264
268
|
.environment_variable("METAFLOW_S3_ENDPOINT_URL", S3_ENDPOINT_URL)
|
|
265
269
|
.environment_variable(
|
|
266
270
|
"METAFLOW_AZURE_STORAGE_BLOB_SERVICE_ENDPOINT",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
metaflow_version = "2.11.15.3"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ob-metaflow
|
|
3
|
-
Version: 2.11.15.
|
|
3
|
+
Version: 2.11.15.3
|
|
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.
|
|
15
|
+
Requires-Dist: ob-metaflow-stubs==2.11.15.3; extra == "stubs"
|
|
16
16
|
|
|
17
17
|

|
|
18
18
|
|
|
@@ -182,6 +182,7 @@ metaflow/plugins/aws/step_functions/step_functions_decorator.py
|
|
|
182
182
|
metaflow/plugins/azure/__init__.py
|
|
183
183
|
metaflow/plugins/azure/azure_credential.py
|
|
184
184
|
metaflow/plugins/azure/azure_exceptions.py
|
|
185
|
+
metaflow/plugins/azure/azure_secret_manager_secrets_provider.py
|
|
185
186
|
metaflow/plugins/azure/azure_tail.py
|
|
186
187
|
metaflow/plugins/azure/azure_utils.py
|
|
187
188
|
metaflow/plugins/azure/blob_service_client_factory.py
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
metaflow_version = "2.11.15.1"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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
|
{ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/v3_5/importlib_metadata/__init__.py
RENAMED
|
File without changes
|
{ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/v3_5/importlib_metadata/_compat.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/v3_6/importlib_metadata/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/v3_6/importlib_metadata/_compat.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/v3_6/importlib_metadata/_meta.py
RENAMED
|
File without changes
|
{ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/v3_6/importlib_metadata/_text.py
RENAMED
|
File without changes
|
{ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/_vendor/v3_6/importlib_metadata/py.typed
RENAMED
|
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
|
{ob_metaflow-2.11.15.1 → ob_metaflow-2.11.15.3}/metaflow/datastore/content_addressed_store.py
RENAMED
|
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
|