metaflow 2.13.5__tar.gz → 2.13.7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {metaflow-2.13.5/metaflow.egg-info → metaflow-2.13.7}/PKG-INFO +2 -2
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/decorators.py +6 -2
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/flowspec.py +30 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/parameters.py +1 -1
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/argo/argo_workflows.py +23 -8
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/events_decorator.py +79 -142
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/kubernetes/kubernetes.py +0 -9
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/runner/click_api.py +2 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/user_configs/config_options.py +7 -4
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/user_configs/config_parameters.py +7 -7
- metaflow-2.13.7/metaflow/version.py +1 -0
- {metaflow-2.13.5 → metaflow-2.13.7/metaflow.egg-info}/PKG-INFO +2 -2
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow.egg-info/requires.txt +1 -1
- metaflow-2.13.5/metaflow/version.py +0 -1
- {metaflow-2.13.5 → metaflow-2.13.7}/LICENSE +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/MANIFEST.in +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/README.md +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/R.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/click/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/click/_bashcomplete.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/click/_compat.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/click/_termui_impl.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/click/_textwrap.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/click/_unicodefun.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/click/_winconsole.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/click/core.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/click/decorators.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/click/exceptions.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/click/formatting.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/click/globals.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/click/parser.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/click/termui.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/click/testing.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/click/types.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/click/utils.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/importlib_metadata/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/importlib_metadata/_adapters.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/importlib_metadata/_collections.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/importlib_metadata/_compat.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/importlib_metadata/_functools.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/importlib_metadata/_itertools.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/importlib_metadata/_meta.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/importlib_metadata/_text.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/importlib_metadata/py.typed +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/packaging/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/packaging/_elffile.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/packaging/_manylinux.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/packaging/_musllinux.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/packaging/_parser.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/packaging/_structures.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/packaging/_tokenizer.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/packaging/markers.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/packaging/py.typed +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/packaging/requirements.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/packaging/specifiers.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/packaging/tags.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/packaging/utils.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/packaging/version.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/typeguard/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/typeguard/_checkers.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/typeguard/_config.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/typeguard/_decorators.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/typeguard/_exceptions.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/typeguard/_functions.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/typeguard/_importhook.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/typeguard/_memo.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/typeguard/_pytest_plugin.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/typeguard/_suppression.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/typeguard/_transformer.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/typeguard/_union_transformer.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/typeguard/_utils.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/typeguard/py.typed +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/typing_extensions.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/v3_5/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/v3_5/importlib_metadata/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/v3_5/importlib_metadata/_compat.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/v3_5/zipp.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/v3_6/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/v3_6/importlib_metadata/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/v3_6/importlib_metadata/_adapters.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/v3_6/importlib_metadata/_collections.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/v3_6/importlib_metadata/_compat.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/v3_6/importlib_metadata/_functools.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/v3_6/importlib_metadata/_itertools.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/v3_6/importlib_metadata/_meta.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/v3_6/importlib_metadata/_text.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/v3_6/importlib_metadata/py.typed +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/v3_6/typing_extensions.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/v3_6/zipp.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/zipp.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/cards.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/cli.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/cli_args.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/cli_components/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/cli_components/dump_cmd.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/cli_components/init_cmd.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/cli_components/run_cmds.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/cli_components/step_cmd.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/cli_components/utils.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/client/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/client/core.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/client/filecache.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/clone_util.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/cmd/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/cmd/configure_cmd.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/cmd/develop/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/cmd/develop/stub_generator.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/cmd/develop/stubs.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/cmd/main_cli.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/cmd/tutorials_cmd.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/cmd/util.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/cmd_with_io.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/datastore/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/datastore/content_addressed_store.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/datastore/datastore_set.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/datastore/datastore_storage.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/datastore/exceptions.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/datastore/flow_datastore.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/datastore/inputs.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/datastore/task_datastore.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/debug.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/event_logger.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/events.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/exception.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/extension_support/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/extension_support/_empty_file.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/extension_support/cmd.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/extension_support/integrations.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/extension_support/plugins.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/graph.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/includefile.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/info_file.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/integrations.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/lint.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/metadata_provider/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/metadata_provider/heartbeat.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/metadata_provider/metadata.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/metadata_provider/util.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/metaflow_config.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/metaflow_config_funcs.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/metaflow_current.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/metaflow_environment.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/metaflow_profile.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/metaflow_version.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/mflog/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/mflog/mflog.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/mflog/save_logs.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/mflog/save_logs_periodically.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/mflog/tee.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/monitor.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/multicore_utils.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/package.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/airflow/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/airflow/airflow.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/airflow/airflow_cli.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/airflow/airflow_decorator.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/airflow/airflow_utils.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/airflow/dag.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/airflow/exception.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/airflow/plumbing/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/airflow/plumbing/set_parameters.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/airflow/sensors/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/airflow/sensors/base_sensor.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/airflow/sensors/external_task_sensor.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/airflow/sensors/s3_sensor.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/argo/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/argo/argo_client.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/argo/argo_events.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/argo/argo_workflows_cli.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/argo/argo_workflows_decorator.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/argo/argo_workflows_deployer.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/argo/argo_workflows_deployer_objects.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/argo/capture_error.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/argo/generate_input_paths.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/argo/jobset_input_paths.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/aws_client.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/aws_utils.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/batch/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/batch/batch.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/batch/batch_cli.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/batch/batch_client.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/batch/batch_decorator.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/secrets_manager/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/secrets_manager/aws_secrets_manager_secrets_provider.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/step_functions/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/step_functions/dynamo_db_client.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/step_functions/event_bridge_client.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/step_functions/production_token.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/step_functions/schedule_decorator.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/step_functions/set_batch_environment.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/step_functions/step_functions.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/step_functions/step_functions_cli.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/step_functions/step_functions_client.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/step_functions/step_functions_decorator.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/step_functions/step_functions_deployer.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/step_functions/step_functions_deployer_objects.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/azure/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/azure/azure_credential.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/azure/azure_exceptions.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/azure/azure_secret_manager_secrets_provider.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/azure/azure_tail.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/azure/azure_utils.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/azure/blob_service_client_factory.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/azure/includefile_support.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_cli.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_client.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_creator.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_datastore.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_decorator.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_modules/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_modules/base.html +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_modules/basic.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_modules/bundle.css +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_modules/card.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_modules/chevron/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_modules/chevron/main.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_modules/chevron/metadata.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_modules/chevron/renderer.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_modules/chevron/tokenizer.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_modules/components.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_modules/convert_to_native_type.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_modules/main.js +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_modules/renderer_tools.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_modules/test_cards.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_resolver.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_server.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_viewer/viewer.html +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/component_serializer.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/exception.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/catch_decorator.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/datastores/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/datastores/azure_storage.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/datastores/gs_storage.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/datastores/local_storage.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/datastores/s3_storage.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/datatools/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/datatools/local.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/datatools/s3/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/datatools/s3/s3.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/datatools/s3/s3op.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/datatools/s3/s3tail.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/datatools/s3/s3util.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/debug_logger.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/debug_monitor.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/client.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/client_modules.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/communication/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/communication/bytestream.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/communication/channel.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/communication/socket_bytestream.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/communication/utils.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/configurations/emulate_test_lib/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/configurations/emulate_test_lib/overrides.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/configurations/emulate_test_lib/server_mappings.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/configurations/test_lib_impl/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/configurations/test_lib_impl/test_lib.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/consts.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/data_transferer.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/exception_transferer.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/override_decorators.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/server.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/stub.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/utils.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/environment_decorator.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/frameworks/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/frameworks/pytorch.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/gcp/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/gcp/gcp_secret_manager_secrets_provider.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/gcp/gs_exceptions.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/gcp/gs_storage_client_factory.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/gcp/gs_tail.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/gcp/gs_utils.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/gcp/includefile_support.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/kubernetes/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/kubernetes/kube_utils.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/kubernetes/kubernetes_cli.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/kubernetes/kubernetes_client.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/kubernetes/kubernetes_decorator.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/kubernetes/kubernetes_job.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/kubernetes/kubernetes_jobsets.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/kubernetes/spot_metadata_cli.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/kubernetes/spot_monitor_sidecar.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/logs_cli.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/metadata_providers/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/metadata_providers/local.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/metadata_providers/service.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/package_cli.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/parallel_decorator.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/project_decorator.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/pypi/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/pypi/bootstrap.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/pypi/conda_decorator.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/pypi/conda_environment.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/pypi/micromamba.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/pypi/pip.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/pypi/pypi_decorator.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/pypi/pypi_environment.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/pypi/utils.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/resources_decorator.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/retry_decorator.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/secrets/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/secrets/inline_secrets_provider.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/secrets/secrets_decorator.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/storage_executor.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/tag_cli.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/test_unbounded_foreach_decorator.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/timeout_decorator.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/procpoll.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/py.typed +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/pylint_wrapper.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/runner/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/runner/deployer.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/runner/deployer_impl.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/runner/metaflow_runner.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/runner/nbdeploy.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/runner/nbrun.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/runner/subprocess_manager.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/runner/utils.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/runtime.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/sidecar/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/sidecar/sidecar.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/sidecar/sidecar_messages.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/sidecar/sidecar_subprocess.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/sidecar/sidecar_worker.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/system/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/system/system_logger.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/system/system_monitor.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/system/system_utils.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tagging_util.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/task.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tracing/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tracing/propagator.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tracing/span_exporter.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tracing/tracing_modules.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tuple_util.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/00-helloworld/README.md +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/00-helloworld/helloworld.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/01-playlist/README.md +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/01-playlist/movies.csv +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/01-playlist/playlist.ipynb +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/01-playlist/playlist.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/02-statistics/README.md +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/02-statistics/movies.csv +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/02-statistics/stats.ipynb +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/02-statistics/stats.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/03-playlist-redux/README.md +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/03-playlist-redux/playlist.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/04-playlist-plus/README.md +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/04-playlist-plus/playlist.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/05-hello-cloud/README.md +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/05-hello-cloud/hello-cloud.ipynb +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/05-hello-cloud/hello-cloud.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/06-statistics-redux/README.md +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/06-statistics-redux/stats.ipynb +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/07-worldview/README.md +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/07-worldview/worldview.ipynb +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/08-autopilot/README.md +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/08-autopilot/autopilot.ipynb +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/unbounded_foreach.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/user_configs/__init__.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/user_configs/config_decorators.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/util.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/vendor.py +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow.egg-info/SOURCES.txt +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow.egg-info/dependency_links.txt +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow.egg-info/entry_points.txt +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/metaflow.egg-info/top_level.txt +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/setup.cfg +0 -0
- {metaflow-2.13.5 → metaflow-2.13.7}/setup.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: metaflow
|
3
|
-
Version: 2.13.
|
3
|
+
Version: 2.13.7
|
4
4
|
Summary: Metaflow: More Data Science, Less Engineering
|
5
5
|
Author: Metaflow Developers
|
6
6
|
Author-email: help@metaflow.org
|
@@ -26,7 +26,7 @@ License-File: LICENSE
|
|
26
26
|
Requires-Dist: requests
|
27
27
|
Requires-Dist: boto3
|
28
28
|
Provides-Extra: stubs
|
29
|
-
Requires-Dist: metaflow-stubs==2.13.
|
29
|
+
Requires-Dist: metaflow-stubs==2.13.7; extra == "stubs"
|
30
30
|
Dynamic: author
|
31
31
|
Dynamic: author-email
|
32
32
|
Dynamic: classifier
|
@@ -591,9 +591,13 @@ def _init_flow_decorators(
|
|
591
591
|
)
|
592
592
|
else:
|
593
593
|
# Each "non-multiple" flow decorator is only allowed to have one set of options
|
594
|
+
# Note that there may be no deco_options if a MutableFlow config injected
|
595
|
+
# the decorator.
|
594
596
|
deco_flow_init_options = {
|
595
|
-
option: deco_options
|
596
|
-
|
597
|
+
option: deco_options.get(
|
598
|
+
option.replace("-", "_"), option_info["default"]
|
599
|
+
)
|
600
|
+
for option, option_info in deco.options.items()
|
597
601
|
}
|
598
602
|
for deco in decorators:
|
599
603
|
deco.flow_init(
|
@@ -86,6 +86,11 @@ class FlowSpecMeta(type):
|
|
86
86
|
super().__init__(name, bases, attrs)
|
87
87
|
if name == "FlowSpec":
|
88
88
|
return
|
89
|
+
|
90
|
+
from .decorators import (
|
91
|
+
DuplicateFlowDecoratorException,
|
92
|
+
) # Prevent circular import
|
93
|
+
|
89
94
|
# We store some state in the flow class itself. This is primarily used to
|
90
95
|
# attach global state to a flow. It is *not* an actual global because of
|
91
96
|
# Runner/NBRunner. This is also created here in the meta class to avoid it being
|
@@ -98,6 +103,31 @@ class FlowSpecMeta(type):
|
|
98
103
|
# Keys are _FlowState enum values
|
99
104
|
cls._flow_state = {}
|
100
105
|
|
106
|
+
# We inherit stuff from our parent classes as well -- we need to be careful
|
107
|
+
# in terms of the order; we will follow the MRO with the following rules:
|
108
|
+
# - decorators (cls._flow_decorators) will cause an error if they do not
|
109
|
+
# support multiple and we see multiple instances of the same
|
110
|
+
# - config decorators will be joined
|
111
|
+
# - configs will be added later directly by the class; base class configs will
|
112
|
+
# be taken into account as they would be inherited.
|
113
|
+
|
114
|
+
# We only need to do this for the base classes since the current class will
|
115
|
+
# get updated as decorators are parsed.
|
116
|
+
for base in cls.__mro__:
|
117
|
+
if base != cls and base != FlowSpec and issubclass(base, FlowSpec):
|
118
|
+
# Take care of decorators
|
119
|
+
for deco_name, deco in base._flow_decorators.items():
|
120
|
+
if deco_name in cls._flow_decorators and not deco.allow_multiple:
|
121
|
+
raise DuplicateFlowDecoratorException(deco_name)
|
122
|
+
cls._flow_decorators.setdefault(deco_name, []).extend(deco)
|
123
|
+
|
124
|
+
# Take care of configs and config decorators
|
125
|
+
base_configs = base._flow_state.get(_FlowState.CONFIG_DECORATORS)
|
126
|
+
if base_configs:
|
127
|
+
cls._flow_state.setdefault(_FlowState.CONFIG_DECORATORS, []).extend(
|
128
|
+
base_configs
|
129
|
+
)
|
130
|
+
|
101
131
|
cls._init_attrs()
|
102
132
|
|
103
133
|
def _init_attrs(cls):
|
@@ -316,7 +316,7 @@ class Parameter(object):
|
|
316
316
|
help : str, optional, default None
|
317
317
|
Help text to show in `run --help`.
|
318
318
|
required : bool, optional, default None
|
319
|
-
Require that the user
|
319
|
+
Require that the user specifies a value for the parameter. Note that if
|
320
320
|
a default is provide, the required flag is ignored.
|
321
321
|
A value of None is equivalent to False.
|
322
322
|
show_default : bool, optional, default None
|
@@ -624,6 +624,16 @@ class ArgoWorkflows(object):
|
|
624
624
|
for event in trigger_on_finish_deco.triggers:
|
625
625
|
# Actual filters are deduced here since we don't have access to
|
626
626
|
# the current object in the @trigger_on_finish decorator.
|
627
|
+
project_name = event.get("project") or current.get("project_name")
|
628
|
+
branch_name = event.get("branch") or current.get("branch_name")
|
629
|
+
# validate that we have complete project info for an event name
|
630
|
+
if project_name or branch_name:
|
631
|
+
if not (project_name and branch_name):
|
632
|
+
# if one of the two is missing, we would end up listening to an event that will never be broadcast.
|
633
|
+
raise ArgoWorkflowsException(
|
634
|
+
"Incomplete project info. Please specify both 'project' and 'project_branch' or use the @project decorator"
|
635
|
+
)
|
636
|
+
|
627
637
|
triggers.append(
|
628
638
|
{
|
629
639
|
# Make sure this remains consistent with the event name format
|
@@ -632,18 +642,16 @@ class ArgoWorkflows(object):
|
|
632
642
|
% ".".join(
|
633
643
|
v
|
634
644
|
for v in [
|
635
|
-
|
636
|
-
|
645
|
+
project_name,
|
646
|
+
branch_name,
|
637
647
|
event["flow"],
|
638
648
|
]
|
639
649
|
if v
|
640
650
|
),
|
641
651
|
"filters": {
|
642
652
|
"auto-generated-by-metaflow": True,
|
643
|
-
"project_name":
|
644
|
-
|
645
|
-
"branch_name": event.get("branch")
|
646
|
-
or current.get("branch_name"),
|
653
|
+
"project_name": project_name,
|
654
|
+
"branch_name": branch_name,
|
647
655
|
# TODO: Add a time filters to guard against cached events
|
648
656
|
},
|
649
657
|
"type": "run",
|
@@ -841,8 +849,15 @@ class ArgoWorkflows(object):
|
|
841
849
|
Metadata()
|
842
850
|
.labels(self._base_labels)
|
843
851
|
.label("app.kubernetes.io/name", "metaflow-task")
|
844
|
-
.annotations(
|
845
|
-
|
852
|
+
.annotations(
|
853
|
+
{
|
854
|
+
**annotations,
|
855
|
+
**self._base_annotations,
|
856
|
+
**{
|
857
|
+
"metaflow/run_id": "argo-{{workflow.name}}"
|
858
|
+
}, # we want pods of the workflow to have the run_id as an annotation as well
|
859
|
+
}
|
860
|
+
)
|
846
861
|
)
|
847
862
|
# Set the entrypoint to flow name
|
848
863
|
.entrypoint(self.flow.name)
|
@@ -398,111 +398,23 @@ class TriggerOnFinishDecorator(FlowDecorator):
|
|
398
398
|
)
|
399
399
|
elif self.attributes["flow"]:
|
400
400
|
# flow supports the format @trigger_on_finish(flow='FooFlow')
|
401
|
-
|
402
|
-
|
403
|
-
{
|
404
|
-
"fq_name": self.attributes["flow"],
|
405
|
-
}
|
406
|
-
)
|
407
|
-
elif isinstance(self.attributes["flow"], dict):
|
408
|
-
if "name" not in self.attributes["flow"]:
|
409
|
-
raise MetaflowException(
|
410
|
-
"The *flow* attribute for *@trigger_on_finish* is missing the "
|
411
|
-
"*name* key."
|
412
|
-
)
|
413
|
-
flow_name = self.attributes["flow"]["name"]
|
414
|
-
|
415
|
-
if not is_stringish(flow_name) or "." in flow_name:
|
416
|
-
raise MetaflowException(
|
417
|
-
"The *name* attribute of the *flow* is not a valid string"
|
418
|
-
)
|
419
|
-
result = {"fq_name": flow_name}
|
420
|
-
if "project" in self.attributes["flow"]:
|
421
|
-
if is_stringish(self.attributes["flow"]["project"]):
|
422
|
-
result["project"] = self.attributes["flow"]["project"]
|
423
|
-
else:
|
424
|
-
raise MetaflowException(
|
425
|
-
"The *project* attribute of the *flow* is not a string"
|
426
|
-
)
|
427
|
-
if "project_branch" in self.attributes["flow"]:
|
428
|
-
if is_stringish(self.attributes["flow"]["project_branch"]):
|
429
|
-
result["branch"] = self.attributes["flow"]["project_branch"]
|
430
|
-
else:
|
431
|
-
raise MetaflowException(
|
432
|
-
"The *project_branch* attribute of the *flow* is not a string"
|
433
|
-
)
|
434
|
-
self.triggers.append(result)
|
435
|
-
elif callable(self.attributes["flow"]) and not isinstance(
|
401
|
+
flow = self.attributes["flow"]
|
402
|
+
if callable(flow) and not isinstance(
|
436
403
|
self.attributes["flow"], DeployTimeField
|
437
404
|
):
|
438
|
-
trig = DeployTimeField(
|
439
|
-
"fq_name", [str, dict], None, self.attributes["flow"], False
|
440
|
-
)
|
405
|
+
trig = DeployTimeField("fq_name", [str, dict], None, flow, False)
|
441
406
|
self.triggers.append(trig)
|
442
407
|
else:
|
443
|
-
|
444
|
-
"Incorrect type for *flow* attribute in *@trigger_on_finish* "
|
445
|
-
" decorator. Supported type is string or Dict[str, str] - \n"
|
446
|
-
"@trigger_on_finish(flow='FooFlow') or "
|
447
|
-
"@trigger_on_finish(flow={'name':'FooFlow', 'project_branch': 'branch'})"
|
448
|
-
)
|
408
|
+
self.triggers.extend(self._parse_static_triggers([flow]))
|
449
409
|
elif self.attributes["flows"]:
|
450
410
|
# flows attribute supports the following formats -
|
451
411
|
# 1. flows=['FooFlow', 'BarFlow']
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
self.triggers.append(
|
456
|
-
{
|
457
|
-
"fq_name": flow,
|
458
|
-
}
|
459
|
-
)
|
460
|
-
elif isinstance(flow, dict):
|
461
|
-
if "name" not in flow:
|
462
|
-
raise MetaflowException(
|
463
|
-
"One or more flows in the *flows* attribute for "
|
464
|
-
"*@trigger_on_finish* is missing the "
|
465
|
-
"*name* key."
|
466
|
-
)
|
467
|
-
flow_name = flow["name"]
|
468
|
-
|
469
|
-
if not is_stringish(flow_name) or "." in flow_name:
|
470
|
-
raise MetaflowException(
|
471
|
-
"The *name* attribute '%s' is not a valid string"
|
472
|
-
% str(flow_name)
|
473
|
-
)
|
474
|
-
result = {"fq_name": flow_name}
|
475
|
-
if "project" in flow:
|
476
|
-
if is_stringish(flow["project"]):
|
477
|
-
result["project"] = flow["project"]
|
478
|
-
else:
|
479
|
-
raise MetaflowException(
|
480
|
-
"The *project* attribute of the *flow* '%s' is not "
|
481
|
-
"a string" % flow_name
|
482
|
-
)
|
483
|
-
if "project_branch" in flow:
|
484
|
-
if is_stringish(flow["project_branch"]):
|
485
|
-
result["branch"] = flow["project_branch"]
|
486
|
-
else:
|
487
|
-
raise MetaflowException(
|
488
|
-
"The *project_branch* attribute of the *flow* %s "
|
489
|
-
"is not a string" % flow_name
|
490
|
-
)
|
491
|
-
self.triggers.append(result)
|
492
|
-
else:
|
493
|
-
raise MetaflowException(
|
494
|
-
"One or more flows in *flows* attribute in "
|
495
|
-
"*@trigger_on_finish* decorator have an incorrect type. "
|
496
|
-
"Supported type is string or Dict[str, str]- \n"
|
497
|
-
"@trigger_on_finish(flows=['FooFlow', 'BarFlow']"
|
498
|
-
)
|
499
|
-
elif callable(self.attributes["flows"]) and not isinstance(
|
500
|
-
self.attributes["flows"], DeployTimeField
|
501
|
-
):
|
502
|
-
trig = DeployTimeField(
|
503
|
-
"flows", list, None, self.attributes["flows"], False
|
504
|
-
)
|
412
|
+
flows = self.attributes["flows"]
|
413
|
+
if callable(flows) and not isinstance(flows, DeployTimeField):
|
414
|
+
trig = DeployTimeField("flows", list, None, flows, False)
|
505
415
|
self.triggers.append(trig)
|
416
|
+
elif isinstance(flows, list):
|
417
|
+
self.triggers.extend(self._parse_static_triggers(flows))
|
506
418
|
else:
|
507
419
|
raise MetaflowException(
|
508
420
|
"Incorrect type for *flows* attribute in *@trigger_on_finish* "
|
@@ -519,26 +431,7 @@ class TriggerOnFinishDecorator(FlowDecorator):
|
|
519
431
|
for trigger in self.triggers:
|
520
432
|
if isinstance(trigger, DeployTimeField):
|
521
433
|
continue
|
522
|
-
|
523
|
-
# fully qualified name is just the flow name
|
524
|
-
trigger["flow"] = trigger["fq_name"]
|
525
|
-
elif trigger["fq_name"].count(".") >= 2:
|
526
|
-
# fully qualified name is of the format - project.branch.flow_name
|
527
|
-
trigger["project"], tail = trigger["fq_name"].split(".", maxsplit=1)
|
528
|
-
trigger["branch"], trigger["flow"] = tail.rsplit(".", maxsplit=1)
|
529
|
-
else:
|
530
|
-
raise MetaflowException(
|
531
|
-
"Incorrect format for *flow* in *@trigger_on_finish* "
|
532
|
-
"decorator. Specify either just the *flow_name* or a fully "
|
533
|
-
"qualified name like *project_name.branch_name.flow_name*."
|
534
|
-
)
|
535
|
-
# TODO: Also sanity check project and branch names
|
536
|
-
if not re.match(r"^[A-Za-z0-9_]+$", trigger["flow"]):
|
537
|
-
raise MetaflowException(
|
538
|
-
"Invalid flow name *%s* in *@trigger_on_finish* "
|
539
|
-
"decorator. Only alphanumeric characters and "
|
540
|
-
"underscores(_) are allowed." % trigger["flow"]
|
541
|
-
)
|
434
|
+
self._parse_fq_name(trigger)
|
542
435
|
|
543
436
|
self.options = self.attributes["options"]
|
544
437
|
|
@@ -593,9 +486,67 @@ class TriggerOnFinishDecorator(FlowDecorator):
|
|
593
486
|
run_objs.append(run_obj)
|
594
487
|
current._update_env({"trigger": Trigger.from_runs(run_objs)})
|
595
488
|
|
489
|
+
@staticmethod
|
490
|
+
def _parse_static_triggers(flows):
|
491
|
+
results = []
|
492
|
+
for flow in flows:
|
493
|
+
if is_stringish(flow):
|
494
|
+
results.append(
|
495
|
+
{
|
496
|
+
"fq_name": flow,
|
497
|
+
}
|
498
|
+
)
|
499
|
+
elif isinstance(flow, dict):
|
500
|
+
if "name" not in flow:
|
501
|
+
if len(flows) > 1:
|
502
|
+
raise MetaflowException(
|
503
|
+
"One or more flows in the *flows* attribute for "
|
504
|
+
"*@trigger_on_finish* is missing the "
|
505
|
+
"*name* key."
|
506
|
+
)
|
507
|
+
raise MetaflowException(
|
508
|
+
"The *flow* attribute for *@trigger_on_finish* is missing the "
|
509
|
+
"*name* key."
|
510
|
+
)
|
511
|
+
flow_name = flow["name"]
|
512
|
+
|
513
|
+
if not is_stringish(flow_name) or "." in flow_name:
|
514
|
+
raise MetaflowException(
|
515
|
+
f"The *name* attribute of the *flow* {flow_name} is not a valid string"
|
516
|
+
)
|
517
|
+
result = {"fq_name": flow_name}
|
518
|
+
if "project" in flow:
|
519
|
+
if is_stringish(flow["project"]):
|
520
|
+
result["project"] = flow["project"]
|
521
|
+
else:
|
522
|
+
raise MetaflowException(
|
523
|
+
f"The *project* attribute of the *flow* {flow_name} is not a string"
|
524
|
+
)
|
525
|
+
if "project_branch" in flow:
|
526
|
+
if is_stringish(flow["project_branch"]):
|
527
|
+
result["branch"] = flow["project_branch"]
|
528
|
+
else:
|
529
|
+
raise MetaflowException(
|
530
|
+
f"The *project_branch* attribute of the *flow* {flow_name} is not a string"
|
531
|
+
)
|
532
|
+
results.append(result)
|
533
|
+
else:
|
534
|
+
if len(flows) > 1:
|
535
|
+
raise MetaflowException(
|
536
|
+
"One or more flows in the *flows* attribute for "
|
537
|
+
"*@trigger_on_finish* decorator have an incorrect type. "
|
538
|
+
"Supported type is string or Dict[str, str]- \n"
|
539
|
+
"@trigger_on_finish(flows=['FooFlow', 'BarFlow']"
|
540
|
+
)
|
541
|
+
raise MetaflowException(
|
542
|
+
"Incorrect type for *flow* attribute in *@trigger_on_finish* "
|
543
|
+
" decorator. Supported type is string or Dict[str, str] - \n"
|
544
|
+
"@trigger_on_finish(flow='FooFlow') or "
|
545
|
+
"@trigger_on_finish(flow={'name':'FooFlow', 'project_branch': 'branch'})"
|
546
|
+
)
|
547
|
+
return results
|
548
|
+
|
596
549
|
def _parse_fq_name(self, trigger):
|
597
|
-
if isinstance(trigger, DeployTimeField):
|
598
|
-
trigger["fq_name"] = deploy_time_eval(trigger["fq_name"])
|
599
550
|
if trigger["fq_name"].count(".") == 0:
|
600
551
|
# fully qualified name is just the flow name
|
601
552
|
trigger["flow"] = trigger["fq_name"]
|
@@ -615,32 +566,18 @@ class TriggerOnFinishDecorator(FlowDecorator):
|
|
615
566
|
"decorator. Only alphanumeric characters and "
|
616
567
|
"underscores(_) are allowed." % trigger["flow"]
|
617
568
|
)
|
618
|
-
return trigger
|
619
569
|
|
620
570
|
def format_deploytime_value(self):
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
-
deploy_value = deploy_time_eval(trigger)
|
626
|
-
if isinstance(deploy_value, list):
|
627
|
-
self.triggers = deploy_value
|
571
|
+
if len(self.triggers) == 1 and isinstance(self.triggers[0], DeployTimeField):
|
572
|
+
deploy_value = deploy_time_eval(self.triggers[0])
|
573
|
+
if isinstance(deploy_value, list):
|
574
|
+
self.triggers = deploy_value
|
628
575
|
else:
|
629
|
-
|
630
|
-
|
631
|
-
|
632
|
-
|
633
|
-
|
634
|
-
trigger = deploy_time_eval(trigger)
|
635
|
-
if isinstance(trigger, dict):
|
636
|
-
trigger["fq_name"] = trigger.get("name")
|
637
|
-
trigger["project"] = trigger.get("project")
|
638
|
-
trigger["branch"] = trigger.get("project_branch")
|
639
|
-
# We also added this bc it won't be formatted yet
|
640
|
-
if isinstance(trigger, str):
|
641
|
-
trigger = {"fq_name": trigger}
|
642
|
-
trigger = self._parse_fq_name(trigger)
|
643
|
-
self.triggers[self.triggers.index(old_trig)] = trigger
|
576
|
+
self.triggers = [deploy_value]
|
577
|
+
triggers = self._parse_static_triggers(self.triggers)
|
578
|
+
for trigger in triggers:
|
579
|
+
self._parse_fq_name(trigger)
|
580
|
+
self.triggers = triggers
|
644
581
|
|
645
582
|
def get_top_level_options(self):
|
646
583
|
return list(self._option_values.items())
|
@@ -669,15 +669,6 @@ class Kubernetes(object):
|
|
669
669
|
for name, value in system_annotations.items():
|
670
670
|
job.annotation(name, value)
|
671
671
|
|
672
|
-
(
|
673
|
-
job.annotation("metaflow/run_id", run_id)
|
674
|
-
.annotation("metaflow/step_name", step_name)
|
675
|
-
.annotation("metaflow/task_id", task_id)
|
676
|
-
.annotation("metaflow/attempt", attempt)
|
677
|
-
.label("app.kubernetes.io/name", "metaflow-task")
|
678
|
-
.label("app.kubernetes.io/part-of", "metaflow")
|
679
|
-
)
|
680
|
-
|
681
672
|
return job
|
682
673
|
|
683
674
|
def create_k8sjob(self, job):
|
@@ -169,7 +169,7 @@ class ConfigInput:
|
|
169
169
|
"Please contact support."
|
170
170
|
)
|
171
171
|
cls.loaded_configs = all_configs
|
172
|
-
return cls.loaded_configs
|
172
|
+
return cls.loaded_configs[config_name]
|
173
173
|
|
174
174
|
def process_configs(
|
175
175
|
self,
|
@@ -326,6 +326,8 @@ class ConfigInput:
|
|
326
326
|
for name, val in merged_configs.items():
|
327
327
|
if val is None:
|
328
328
|
missing_configs.add(name)
|
329
|
+
to_return[name] = None
|
330
|
+
flow_cls._flow_state[_FlowState.CONFIGS][name] = None
|
329
331
|
continue
|
330
332
|
if val.startswith(_CONVERTED_DEFAULT_NO_FILE):
|
331
333
|
no_default_file.append(name)
|
@@ -339,15 +341,16 @@ class ConfigInput:
|
|
339
341
|
val = val[len(_DEFAULT_PREFIX) :]
|
340
342
|
if val.startswith("kv."):
|
341
343
|
# This means to load it from a file
|
342
|
-
|
343
|
-
|
344
|
+
try:
|
345
|
+
read_value = self.get_config(val[3:])
|
346
|
+
except KeyError as e:
|
344
347
|
exc = click.UsageError(
|
345
348
|
"Could not find configuration '%s' in INFO file" % val
|
346
349
|
)
|
347
350
|
if click_obj:
|
348
351
|
click_obj.delayed_config_exception = exc
|
349
352
|
return None
|
350
|
-
raise exc
|
353
|
+
raise exc from e
|
351
354
|
flow_cls._flow_state[_FlowState.CONFIGS][name] = read_value
|
352
355
|
to_return[name] = ConfigValue(read_value)
|
353
356
|
else:
|
@@ -290,17 +290,17 @@ class Config(Parameter, collections.abc.Mapping):
|
|
290
290
|
default : Union[str, Callable[[ParameterContext], str], optional, default None
|
291
291
|
Default path from where to read this configuration. A function implies that the
|
292
292
|
value will be computed using that function.
|
293
|
-
You can only specify default or default_value.
|
293
|
+
You can only specify default or default_value, not both.
|
294
294
|
default_value : Union[str, Dict[str, Any], Callable[[ParameterContext, Union[str, Dict[str, Any]]], Any], optional, default None
|
295
295
|
Default value for the parameter. A function
|
296
296
|
implies that the value will be computed using that function.
|
297
|
-
You can only specify default or default_value.
|
297
|
+
You can only specify default or default_value, not both.
|
298
298
|
help : str, optional, default None
|
299
299
|
Help text to show in `run --help`.
|
300
300
|
required : bool, optional, default None
|
301
|
-
Require that the user
|
302
|
-
a default is provided, the required flag is ignored.
|
303
|
-
equivalent to False.
|
301
|
+
Require that the user specifies a value for the configuration. Note that if
|
302
|
+
a default or default_value is provided, the required flag is ignored.
|
303
|
+
A value of None is equivalent to False.
|
304
304
|
parser : Union[str, Callable[[str], Dict[Any, Any]]], optional, default None
|
305
305
|
If a callable, it is a function that can parse the configuration string
|
306
306
|
into an arbitrarily nested dictionary. If a string, the string should refer to
|
@@ -330,13 +330,13 @@ class Config(Parameter, collections.abc.Mapping):
|
|
330
330
|
**kwargs: Dict[str, str]
|
331
331
|
):
|
332
332
|
|
333
|
-
if default and default_value:
|
333
|
+
if default is not None and default_value is not None:
|
334
334
|
raise MetaflowException(
|
335
335
|
"For config '%s', you can only specify default or default_value, not both"
|
336
336
|
% name
|
337
337
|
)
|
338
338
|
self._default_is_file = default is not None
|
339
|
-
kwargs["default"] = default
|
339
|
+
kwargs["default"] = default if default is not None else default_value
|
340
340
|
super(Config, self).__init__(
|
341
341
|
name, required=required, help=help, type=str, **kwargs
|
342
342
|
)
|
@@ -0,0 +1 @@
|
|
1
|
+
metaflow_version = "2.13.7"
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: metaflow
|
3
|
-
Version: 2.13.
|
3
|
+
Version: 2.13.7
|
4
4
|
Summary: Metaflow: More Data Science, Less Engineering
|
5
5
|
Author: Metaflow Developers
|
6
6
|
Author-email: help@metaflow.org
|
@@ -26,7 +26,7 @@ License-File: LICENSE
|
|
26
26
|
Requires-Dist: requests
|
27
27
|
Requires-Dist: boto3
|
28
28
|
Provides-Extra: stubs
|
29
|
-
Requires-Dist: metaflow-stubs==2.13.
|
29
|
+
Requires-Dist: metaflow-stubs==2.13.7; extra == "stubs"
|
30
30
|
Dynamic: author
|
31
31
|
Dynamic: author-email
|
32
32
|
Dynamic: classifier
|
@@ -1 +0,0 @@
|
|
1
|
-
metaflow_version = "2.13.5"
|
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
|