metaflow 2.10.10__tar.gz → 2.11.0__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.10.10 → metaflow-2.11.0}/MANIFEST.in +2 -1
- {metaflow-2.10.10/metaflow.egg-info → metaflow-2.11.0}/PKG-INFO +1 -1
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_modules/basic.py +8 -1
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_modules/components.py +32 -14
- metaflow-2.11.0/metaflow/plugins/cards/card_viewer/viewer.html +344 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/pypi/conda_environment.py +4 -1
- metaflow-2.11.0/metaflow/version.py +1 -0
- {metaflow-2.10.10 → metaflow-2.11.0/metaflow.egg-info}/PKG-INFO +1 -1
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow.egg-info/SOURCES.txt +1 -0
- metaflow-2.10.10/metaflow/version.py +0 -1
- {metaflow-2.10.10 → metaflow-2.11.0}/LICENSE +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/README.md +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/R.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/click/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/click/_bashcomplete.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/click/_compat.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/click/_termui_impl.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/click/_textwrap.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/click/_unicodefun.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/click/_winconsole.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/click/core.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/click/decorators.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/click/exceptions.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/click/formatting.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/click/globals.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/click/parser.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/click/termui.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/click/testing.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/click/types.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/click/utils.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/packaging/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/packaging/_elffile.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/packaging/_manylinux.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/packaging/_musllinux.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/packaging/_parser.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/packaging/_structures.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/packaging/_tokenizer.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/packaging/markers.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/packaging/py.typed +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/packaging/requirements.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/packaging/specifiers.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/packaging/tags.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/packaging/utils.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/packaging/version.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/v3_5/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/v3_5/importlib_metadata/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/v3_5/importlib_metadata/_compat.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/v3_5/zipp.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/v3_6/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/v3_6/importlib_metadata/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/v3_6/importlib_metadata/_adapters.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/v3_6/importlib_metadata/_collections.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/v3_6/importlib_metadata/_compat.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/v3_6/importlib_metadata/_functools.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/v3_6/importlib_metadata/_itertools.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/v3_6/importlib_metadata/_meta.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/v3_6/importlib_metadata/_text.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/v3_6/importlib_metadata/py.typed +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/v3_6/typing_extensions.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/v3_6/zipp.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/v3_7/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/v3_7/zipp.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/cards.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/cli.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/cli_args.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/client/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/client/core.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/client/filecache.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/cmd/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/cmd/configure_cmd.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/cmd/main_cli.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/cmd/tutorials_cmd.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/cmd/util.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/cmd_with_io.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/current.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/datastore/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/datastore/content_addressed_store.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/datastore/datastore_set.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/datastore/datastore_storage.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/datastore/exceptions.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/datastore/flow_datastore.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/datastore/inputs.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/datastore/task_datastore.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/debug.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/decorators.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/event_logger.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/events.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/exception.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/extension_support/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/extension_support/_empty_file.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/extension_support/cmd.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/extension_support/integrations.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/extension_support/plugins.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/flowspec.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/graph.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/includefile.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/integrations.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/lint.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/metadata/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/metadata/heartbeat.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/metadata/metadata.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/metadata/util.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/metaflow_config.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/metaflow_config_funcs.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/metaflow_environment.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/metaflow_profile.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/metaflow_version.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/mflog/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/mflog/mflog.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/mflog/save_logs.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/mflog/save_logs_periodically.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/mflog/tee.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/monitor.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/multicore_utils.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/package.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/parameters.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/airflow/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/airflow/airflow.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/airflow/airflow_cli.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/airflow/airflow_decorator.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/airflow/airflow_utils.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/airflow/dag.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/airflow/exception.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/airflow/plumbing/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/airflow/plumbing/set_parameters.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/airflow/sensors/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/airflow/sensors/base_sensor.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/airflow/sensors/external_task_sensor.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/airflow/sensors/s3_sensor.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/argo/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/argo/argo_client.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/argo/argo_events.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/argo/argo_workflows.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/argo/argo_workflows_cli.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/argo/argo_workflows_decorator.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/argo/process_input_paths.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/aws_client.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/aws_utils.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/batch/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/batch/batch.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/batch/batch_cli.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/batch/batch_client.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/batch/batch_decorator.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/secrets_manager/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/secrets_manager/aws_secrets_manager_secrets_provider.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/step_functions/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/step_functions/dynamo_db_client.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/step_functions/event_bridge_client.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/step_functions/production_token.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/step_functions/schedule_decorator.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/step_functions/set_batch_environment.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/step_functions/step_functions.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/step_functions/step_functions_cli.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/step_functions/step_functions_client.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/step_functions/step_functions_decorator.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/azure/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/azure/azure_exceptions.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/azure/azure_tail.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/azure/azure_utils.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/azure/blob_service_client_factory.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/azure/includefile_support.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_cli.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_client.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_creator.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_datastore.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_decorator.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_modules/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_modules/base.html +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_modules/bundle.css +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_modules/card.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_modules/chevron/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_modules/chevron/main.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_modules/chevron/metadata.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_modules/chevron/renderer.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_modules/chevron/tokenizer.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_modules/convert_to_native_type.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_modules/main.js +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_modules/renderer_tools.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_modules/test_cards.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_resolver.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_server.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/component_serializer.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/exception.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/catch_decorator.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/datastores/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/datastores/azure_storage.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/datastores/gs_storage.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/datastores/local_storage.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/datastores/s3_storage.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/datatools/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/datatools/local.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/datatools/s3/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/datatools/s3/s3.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/datatools/s3/s3op.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/datatools/s3/s3tail.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/datatools/s3/s3util.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/debug_logger.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/debug_monitor.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/client.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/client_modules.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/communication/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/communication/bytestream.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/communication/channel.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/communication/socket_bytestream.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/communication/utils.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/configurations/emulate_test_lib/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/configurations/emulate_test_lib/overrides.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/configurations/emulate_test_lib/server_mappings.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/configurations/test_lib_impl/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/configurations/test_lib_impl/test_lib.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/consts.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/data_transferer.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/exception_transferer.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/override_decorators.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/server.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/stub.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/utils.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/environment_decorator.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/events_decorator.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/frameworks/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/frameworks/pytorch.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/gcp/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/gcp/gs_exceptions.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/gcp/gs_storage_client_factory.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/gcp/gs_tail.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/gcp/gs_utils.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/gcp/includefile_support.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/kubernetes/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/kubernetes/kubernetes.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/kubernetes/kubernetes_cli.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/kubernetes/kubernetes_client.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/kubernetes/kubernetes_decorator.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/kubernetes/kubernetes_job.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/metadata/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/metadata/local.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/metadata/service.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/package_cli.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/parallel_decorator.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/project_decorator.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/pypi/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/pypi/bootstrap.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/pypi/conda_decorator.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/pypi/micromamba.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/pypi/pip.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/pypi/pypi_decorator.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/pypi/pypi_environment.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/pypi/utils.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/resources_decorator.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/retry_decorator.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/secrets/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/secrets/inline_secrets_provider.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/secrets/secrets_decorator.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/storage_executor.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/tag_cli.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/test_unbounded_foreach_decorator.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/timeout_decorator.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/procpoll.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/py.typed +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/pylint_wrapper.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/runtime.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/sidecar/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/sidecar/sidecar.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/sidecar/sidecar_messages.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/sidecar/sidecar_subprocess.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/sidecar/sidecar_worker.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tagging_util.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/task.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tracing/__init__.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tracing/propagator.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tracing/span_exporter.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tracing/tracing_modules.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/00-helloworld/README.md +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/00-helloworld/helloworld.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/01-playlist/README.md +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/01-playlist/movies.csv +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/01-playlist/playlist.ipynb +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/01-playlist/playlist.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/02-statistics/README.md +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/02-statistics/movies.csv +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/02-statistics/stats.ipynb +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/02-statistics/stats.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/03-playlist-redux/README.md +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/03-playlist-redux/playlist.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/04-playlist-plus/README.md +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/04-playlist-plus/playlist.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/05-hello-cloud/README.md +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/05-hello-cloud/hello-cloud.ipynb +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/05-hello-cloud/hello-cloud.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/06-statistics-redux/README.md +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/06-statistics-redux/stats.ipynb +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/07-worldview/README.md +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/07-worldview/worldview.ipynb +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/08-autopilot/README.md +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/08-autopilot/autopilot.ipynb +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/unbounded_foreach.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/util.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/vendor.py +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow.egg-info/dependency_links.txt +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow.egg-info/entry_points.txt +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow.egg-info/requires.txt +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/metaflow.egg-info/top_level.txt +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/setup.cfg +0 -0
- {metaflow-2.10.10 → metaflow-2.11.0}/setup.py +0 -0
@@ -1,4 +1,5 @@
|
|
1
1
|
include LICENSE
|
2
2
|
include metaflow/plugins/cards/card_modules/*.html
|
3
3
|
include metaflow/plugins/cards/card_modules/*.js
|
4
|
-
include metaflow/plugins/cards/card_modules/*.css
|
4
|
+
include metaflow/plugins/cards/card_modules/*.css
|
5
|
+
include metaflow/plugins/cards/card_viewer/*.html
|
@@ -313,7 +313,14 @@ class MarkdownComponent(DefaultComponent):
|
|
313
313
|
|
314
314
|
def render(self):
|
315
315
|
datadict = super().render()
|
316
|
-
|
316
|
+
_text = self._text
|
317
|
+
# When we have a markdown text that doesn't start with a `#`,
|
318
|
+
# we need to add a newline to make sure that the markdown
|
319
|
+
# is rendered correctly. Otherwise `svelte-markdown` will render
|
320
|
+
# the empty `<p>` tags during re-renders on card data updates.
|
321
|
+
if self._text is not None and not self._text.startswith("#"):
|
322
|
+
_text = "\n" + _text
|
323
|
+
datadict["source"] = _text
|
317
324
|
if self.component_id is not None:
|
318
325
|
datadict["id"] = self.component_id
|
319
326
|
return datadict
|
@@ -712,8 +712,16 @@ class ProgressBar(UserComponent):
|
|
712
712
|
|
713
713
|
Parameters
|
714
714
|
----------
|
715
|
-
|
716
|
-
|
715
|
+
max : int
|
716
|
+
The maximum value of the progress bar.
|
717
|
+
label : str, optional
|
718
|
+
Optional label for the progress bar.
|
719
|
+
value : int, optional
|
720
|
+
Optional initial value of the progress bar.
|
721
|
+
unit : str, optional
|
722
|
+
Optional unit for the progress bar.
|
723
|
+
metadata : str, optional
|
724
|
+
Optional additional information to show on the progress bar.
|
717
725
|
"""
|
718
726
|
|
719
727
|
type = "progressBar"
|
@@ -762,31 +770,41 @@ class VegaChart(UserComponent):
|
|
762
770
|
|
763
771
|
REALTIME_UPDATABLE = True
|
764
772
|
|
765
|
-
def __init__(self, spec: dict, show_controls=False):
|
773
|
+
def __init__(self, spec: dict, show_controls: bool = False):
|
766
774
|
self._spec = spec
|
767
775
|
self._show_controls = show_controls
|
768
776
|
self._chart_inside_table = False
|
769
777
|
|
770
778
|
def update(self, spec=None):
|
771
|
-
|
772
|
-
|
779
|
+
"""
|
780
|
+
Update the chart.
|
773
781
|
|
774
|
-
|
775
|
-
|
776
|
-
|
777
|
-
|
778
|
-
|
782
|
+
Parameters
|
783
|
+
----------
|
784
|
+
spec : dict or altair.Chart
|
785
|
+
The updated chart spec or an altair Chart Object.
|
786
|
+
"""
|
787
|
+
_spec = spec
|
788
|
+
if self._object_is_altair_chart(spec):
|
789
|
+
_spec = spec.to_dict()
|
790
|
+
if _spec is not None:
|
791
|
+
self._spec = _spec
|
779
792
|
|
793
|
+
@staticmethod
|
794
|
+
def _object_is_altair_chart(altair_chart):
|
780
795
|
# This will feel slightly hacky but I am unable to find a natural way of determining the class
|
781
|
-
# name of the Altair chart. The only way
|
796
|
+
# name of the Altair chart. The only way simple way is to extract the full class name and then
|
782
797
|
# match with heuristics
|
783
|
-
|
784
798
|
fulclsname = _full_classname(altair_chart)
|
785
799
|
if not all([x in fulclsname for x in ["altair", "vegalite", "Chart"]]):
|
786
|
-
|
800
|
+
return False
|
801
|
+
return True
|
787
802
|
|
803
|
+
@classmethod
|
804
|
+
def from_altair_chart(cls, altair_chart):
|
805
|
+
if not cls._object_is_altair_chart(altair_chart):
|
806
|
+
raise ValueError(_full_classname(altair_chart) + " is not an altair chart")
|
788
807
|
altair_chart_dict = altair_chart.to_dict()
|
789
|
-
|
790
808
|
cht = cls(spec=altair_chart_dict)
|
791
809
|
return cht
|
792
810
|
|
@@ -0,0 +1,344 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html lang="en">
|
3
|
+
<head>
|
4
|
+
<meta charset="UTF-8" />
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
6
|
+
<title>Metaflow Run</title>
|
7
|
+
<style>
|
8
|
+
@import url("https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap");
|
9
|
+
|
10
|
+
body {
|
11
|
+
font-size: 14px;
|
12
|
+
font-family: "Roboto", -apple-system, BlinkMacSystemFont, "Segoe UI",
|
13
|
+
"Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans",
|
14
|
+
"Helvetica Neue", sans-serif;
|
15
|
+
padding: 0;
|
16
|
+
margin: 0;
|
17
|
+
display: flex;
|
18
|
+
flex-direction: column;
|
19
|
+
height: 100vh;
|
20
|
+
width: 100%;
|
21
|
+
overflow: hidden;
|
22
|
+
color: #31302f;
|
23
|
+
}
|
24
|
+
|
25
|
+
header {
|
26
|
+
height: 65px;
|
27
|
+
flex: 0 1 auto;
|
28
|
+
flex-grow: none;
|
29
|
+
background: #f9f9f9;
|
30
|
+
display: flex;
|
31
|
+
justify-content: space-evenly;
|
32
|
+
}
|
33
|
+
|
34
|
+
h1,
|
35
|
+
h2,
|
36
|
+
h3,
|
37
|
+
h4 {
|
38
|
+
font-size: inherit;
|
39
|
+
font-weight: 500;
|
40
|
+
margin: 0;
|
41
|
+
padding: 0;
|
42
|
+
}
|
43
|
+
|
44
|
+
header > * {
|
45
|
+
padding: 20px 25px;
|
46
|
+
flex: 1;
|
47
|
+
display: flex;
|
48
|
+
align-items: center;
|
49
|
+
}
|
50
|
+
|
51
|
+
header > div:nth-child(2) {
|
52
|
+
text-align: center;
|
53
|
+
flex: 1;
|
54
|
+
justify-content: center;
|
55
|
+
}
|
56
|
+
|
57
|
+
header > div:nth-child(3) {
|
58
|
+
text-align: right;
|
59
|
+
justify-content: flex-end;
|
60
|
+
font-weight: 400;
|
61
|
+
}
|
62
|
+
|
63
|
+
.taskStatus {
|
64
|
+
color: #6a6867;
|
65
|
+
}
|
66
|
+
|
67
|
+
.taskStatus.error {
|
68
|
+
color: #e67058;
|
69
|
+
}
|
70
|
+
|
71
|
+
.content {
|
72
|
+
flex: 1 1 auto;
|
73
|
+
overflow-y: scroll;
|
74
|
+
}
|
75
|
+
|
76
|
+
iframe {
|
77
|
+
width: 100%;
|
78
|
+
height: calc(100vh - 65px);
|
79
|
+
outline: none;
|
80
|
+
border: 0;
|
81
|
+
display: flex;
|
82
|
+
justify-content: center;
|
83
|
+
align-items: center;
|
84
|
+
}
|
85
|
+
|
86
|
+
header select {
|
87
|
+
width: 100%;
|
88
|
+
border: 0;
|
89
|
+
outline: none;
|
90
|
+
font-size: inherit;
|
91
|
+
font-family: inherit;
|
92
|
+
background: transparent;
|
93
|
+
padding: 0 1rem;
|
94
|
+
}
|
95
|
+
|
96
|
+
.selectorContainer {
|
97
|
+
border: 0;
|
98
|
+
outline: none;
|
99
|
+
font-size: inherit;
|
100
|
+
font-family: inherit;
|
101
|
+
border-radius: 8px;
|
102
|
+
background: #ebeaea;
|
103
|
+
padding: 0 1rem;
|
104
|
+
margin: 1rem;
|
105
|
+
}
|
106
|
+
|
107
|
+
.logoContainer {
|
108
|
+
display: none !important;
|
109
|
+
}
|
110
|
+
|
111
|
+
.errorContainer svg {
|
112
|
+
position: relative;
|
113
|
+
top: 3px;
|
114
|
+
}
|
115
|
+
</style>
|
116
|
+
</head>
|
117
|
+
<body>
|
118
|
+
<header>
|
119
|
+
<h1 id="header-title">Metaflow Run</h1>
|
120
|
+
<div class="selectorContainer">
|
121
|
+
<select id="selector">
|
122
|
+
<option value="" disabled selected>
|
123
|
+
Select a card
|
124
|
+
</option>
|
125
|
+
</select>
|
126
|
+
</div>
|
127
|
+
<div>
|
128
|
+
<div id="task-status" class="taskStatus">Initializing</div>
|
129
|
+
<div id="task-action" class="" style="display: none">Pause</div>
|
130
|
+
</div>
|
131
|
+
</header>
|
132
|
+
<div class="content">
|
133
|
+
<iframe id="card-frame"></iframe>
|
134
|
+
</div>
|
135
|
+
|
136
|
+
<script type="application/javascript">
|
137
|
+
(() => {
|
138
|
+
// setup constants
|
139
|
+
let DATA_UPDATE_POLL_INTERVAL = 5000;
|
140
|
+
let RUN_UPDATE_POLL_INTERVAL = 10000;
|
141
|
+
|
142
|
+
// setup state
|
143
|
+
let currentCardsLength = 0;
|
144
|
+
let currentRunId = "";
|
145
|
+
let selectedCard = "";
|
146
|
+
|
147
|
+
// setup selector
|
148
|
+
const selector = document.getElementById("selector");
|
149
|
+
selector?.addEventListener("change", (event) => {
|
150
|
+
selectedCard = event.target.value;
|
151
|
+
handleLoadCard(event.target.name, event.target.value);
|
152
|
+
});
|
153
|
+
|
154
|
+
/**
|
155
|
+
* Handle any changes to the status of the page
|
156
|
+
*/
|
157
|
+
function handleStatus(status, isComplete = false) {
|
158
|
+
const statusDiv = document.getElementById("task-status");
|
159
|
+
|
160
|
+
// change the text of the status depending if its in progress or not
|
161
|
+
if (statusDiv) {
|
162
|
+
// complete
|
163
|
+
if (isComplete && status === "ok") {
|
164
|
+
statusDiv.innerText = "Task Is Complete";
|
165
|
+
// running
|
166
|
+
} else if (!isComplete && status === "ok") {
|
167
|
+
statusDiv.innerText = "Task Is Running";
|
168
|
+
// error
|
169
|
+
} else {
|
170
|
+
statusDiv.innerHTML = `<div class="errorContainer"><svg width="17" height="17" viewBox="0 0 17 17" fill="none" xmlns="http://www.w3.org/2000/svg">
|
171
|
+
<g clip-path="url(#clip0_164_815)"> <circle cx="8.5" cy="8.5" r="8" fill="#E67058"/> <path d="M11.6475 6.0575C11.8422 5.86282 11.8422 5.54718 11.6475 5.3525C11.4528 5.15782 11.1372 5.15782 10.9425 5.3525L8.5 7.795L6.0575 5.3525C5.86282 5.15782 5.54718 5.15782 5.3525 5.3525C5.15782 5.54718 5.15782 5.86282 5.3525 6.0575L7.795 8.5L5.3525 10.9425C5.15782 11.1372 5.15782 11.4528 5.3525 11.6475C5.54718 11.8422 5.86282 11.8422 6.0575 11.6475L8.5 9.205L10.9425 11.6475C11.1372 11.8422 11.4528 11.8422 11.6475 11.6475C11.8422 11.4528 11.8422 11.1372 11.6475 10.9425L9.205 8.5L11.6475 6.0575Z" fill="white"/> </g><defs><clipPath id="clip0_164_815"><rect width="16" height="16" fill="white" transform="translate(0.5 0.5)"/></clipPath></defs></svg>
|
172
|
+
<span>${status}</span></div>
|
173
|
+
`;
|
174
|
+
}
|
175
|
+
}
|
176
|
+
}
|
177
|
+
|
178
|
+
/**
|
179
|
+
* Handle any changes to the cards
|
180
|
+
*/
|
181
|
+
function onCardsLoaded(runInfo) {
|
182
|
+
const { cards, flow, run_id } = runInfo;
|
183
|
+
if (!Array.isArray(cards) || !flow || !run_id) {
|
184
|
+
console.log("Data was not in the correct format");
|
185
|
+
return;
|
186
|
+
}
|
187
|
+
// console.log("Running ON CARDS LOADED", cards, flow, run_id)
|
188
|
+
|
189
|
+
// reset
|
190
|
+
currentCardsLength = cards.length;
|
191
|
+
selector.innerHTML = "";
|
192
|
+
// if the task has finished, change to the next card
|
193
|
+
changeToNewCardIfTaskHasFinished(runInfo);
|
194
|
+
|
195
|
+
// create select options for each card
|
196
|
+
cards.reverse().forEach((card) => {
|
197
|
+
const option = document.createElement("option");
|
198
|
+
option.value = card.card;
|
199
|
+
option.innerText = card.label.split(" ")?.[0] || card.label;
|
200
|
+
option.selected = card.card === selectedCard;
|
201
|
+
selector.appendChild(option);
|
202
|
+
});
|
203
|
+
|
204
|
+
// get card-title element and change it to name
|
205
|
+
const title = document.getElementById("header-title");
|
206
|
+
title.innerText = `${flow}/${run_id}`;
|
207
|
+
}
|
208
|
+
|
209
|
+
/**
|
210
|
+
* This function will determine if changes need to be made to the
|
211
|
+
* card and if so, will we do it by push or by reload
|
212
|
+
*/
|
213
|
+
|
214
|
+
async function watchForCardChanges(iframe) {
|
215
|
+
// replace the /card/ url with the data url
|
216
|
+
const dataUri = iframe.src.replace(/.*\/card\//, "/data/");
|
217
|
+
let resp;
|
218
|
+
try {
|
219
|
+
const req = await fetch(dataUri);
|
220
|
+
resp = await req.json();
|
221
|
+
// setup UI to show complete and status
|
222
|
+
handleStatus(resp.status, resp?.is_complete);
|
223
|
+
|
224
|
+
// grab update fn from iframe
|
225
|
+
const update = iframe.contentWindow?.metaflow_card_update;
|
226
|
+
// make sure we're able to update the card
|
227
|
+
if (resp.status !== "ok" || !update || !resp.payload?.data) {
|
228
|
+
console.log(
|
229
|
+
"Data-updates not taking place because either : status is not `ok` or update function is not available or data is not available",
|
230
|
+
resp,
|
231
|
+
update
|
232
|
+
);
|
233
|
+
} else {
|
234
|
+
// make appropriate updates by pushing if the reload token matches
|
235
|
+
update &&
|
236
|
+
resp.payload?.reload_token ===
|
237
|
+
iframe.contentWindow.METAFLOW_RELOAD_TOKEN
|
238
|
+
? update(resp.payload.data)
|
239
|
+
: iframe.contentWindow.location.reload();
|
240
|
+
}
|
241
|
+
// If there is no Update function than we don't need to wire the
|
242
|
+
// periodic updates
|
243
|
+
if (!update) {
|
244
|
+
console.log(
|
245
|
+
"No metaflow_card_update function available. So not running any periodic updates"
|
246
|
+
);
|
247
|
+
return;
|
248
|
+
}
|
249
|
+
} catch (error) {
|
250
|
+
console.error(error);
|
251
|
+
}
|
252
|
+
// if this update is not the last one, run it again!
|
253
|
+
if (!(resp.payload?.reload_token === "final")) {
|
254
|
+
setTimeout(
|
255
|
+
() => watchForCardChanges(iframe),
|
256
|
+
DATA_UPDATE_POLL_INTERVAL
|
257
|
+
);
|
258
|
+
}
|
259
|
+
}
|
260
|
+
|
261
|
+
/**
|
262
|
+
* Setup a new card and start the watcher
|
263
|
+
*/
|
264
|
+
function handleLoadCard(name, value) {
|
265
|
+
document.getElementsByTagName("title").innerHTML = name;
|
266
|
+
const iframe = document.getElementById("card-frame");
|
267
|
+
iframe.src = `/card/${value}?embed=true`;
|
268
|
+
iframe.onload = () => {
|
269
|
+
watchForCardChanges(iframe);
|
270
|
+
};
|
271
|
+
}
|
272
|
+
|
273
|
+
function changeToNewCardIfTaskHasFinished(runInfo) {
|
274
|
+
// search for the selectedCard in the runInfo
|
275
|
+
const card = runInfo.cards.find((card) => card.card === selectedCard);
|
276
|
+
// if the card object contains `finished` === True, then change to the next card that has not finished
|
277
|
+
if (card?.finished) {
|
278
|
+
// find the index of the current card
|
279
|
+
const currentCardIndex = runInfo.cards.findIndex(
|
280
|
+
(card) => card.card === selectedCard
|
281
|
+
);
|
282
|
+
// find the next card that has not finished
|
283
|
+
const nextCard = runInfo.cards.find((card) => !card.finished);
|
284
|
+
// if there is a next card, change to it
|
285
|
+
|
286
|
+
console.log("nextCard", nextCard);
|
287
|
+
if (nextCard) {
|
288
|
+
selectedCard = nextCard.card;
|
289
|
+
handleLoadCard(nextCard.label, nextCard.card);
|
290
|
+
}
|
291
|
+
}
|
292
|
+
}
|
293
|
+
|
294
|
+
/**
|
295
|
+
* Main loop function
|
296
|
+
*/
|
297
|
+
async function main() {
|
298
|
+
try {
|
299
|
+
// get info on the entire run
|
300
|
+
const runInfoRequest = await fetch("/runinfo");
|
301
|
+
const runInfo = await runInfoRequest.json();
|
302
|
+
|
303
|
+
// reset the state if the run_id changes or on first time
|
304
|
+
if (currentRunId !== runInfo.run_id) {
|
305
|
+
currentRunId = runInfo.run_id;
|
306
|
+
currentCardsLength = 0;
|
307
|
+
selectedCard = "";
|
308
|
+
console.log("runInfo", runInfo);
|
309
|
+
}
|
310
|
+
if (runInfo.poll_interval * 1000 !== DATA_UPDATE_POLL_INTERVAL) {
|
311
|
+
DATA_UPDATE_POLL_INTERVAL = runInfo.poll_interval * 1000;
|
312
|
+
}
|
313
|
+
if (runInfo.poll_interval * 1000 !== RUN_UPDATE_POLL_INTERVAL) {
|
314
|
+
RUN_UPDATE_POLL_INTERVAL = runInfo.poll_interval * 1000;
|
315
|
+
}
|
316
|
+
if (runInfo?.status === "ok") {
|
317
|
+
// only make changes if the cards length has changed
|
318
|
+
if (runInfo?.cards.length !== currentCardsLength) {
|
319
|
+
onCardsLoaded(runInfo);
|
320
|
+
}
|
321
|
+
// if there is no selected card, select the first one
|
322
|
+
if (!selectedCard) {
|
323
|
+
selectedCard = runInfo.cards[0].card;
|
324
|
+
handleLoadCard(runInfo.cards[0].label, runInfo.cards[0].card);
|
325
|
+
}
|
326
|
+
} else {
|
327
|
+
handleStatus(runInfo?.status, false);
|
328
|
+
}
|
329
|
+
} catch (error) {
|
330
|
+
console.error(error);
|
331
|
+
}
|
332
|
+
// always run the main loop, because a user can start a new run,
|
333
|
+
// or restart the web server, and we want the page to continue working
|
334
|
+
setTimeout(main, RUN_UPDATE_POLL_INTERVAL);
|
335
|
+
}
|
336
|
+
|
337
|
+
// start the main loop
|
338
|
+
window.onload = () => {
|
339
|
+
main();
|
340
|
+
};
|
341
|
+
})();
|
342
|
+
</script>
|
343
|
+
</body>
|
344
|
+
</html>
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import copy
|
1
2
|
import errno
|
2
3
|
import fcntl
|
3
4
|
import functools
|
@@ -130,13 +131,15 @@ class CondaEnvironment(MetaflowEnvironment):
|
|
130
131
|
}
|
131
132
|
dirty = set()
|
132
133
|
# Prune list of packages to cache.
|
134
|
+
|
135
|
+
_meta = copy.deepcopy(local_packages)
|
133
136
|
for id_, packages, _, _ in results:
|
134
137
|
for package in packages:
|
135
138
|
if package.get("path"):
|
136
139
|
# Cache only those packages that manifest is unaware of
|
137
140
|
local_packages.pop(package["url"], None)
|
138
141
|
else:
|
139
|
-
package["path"] =
|
142
|
+
package["path"] = _meta[package["url"]]["path"]
|
140
143
|
dirty.add(id_)
|
141
144
|
|
142
145
|
list_of_path_and_filehandle = [
|
@@ -0,0 +1 @@
|
|
1
|
+
metaflow_version = "2.11.0"
|
@@ -211,6 +211,7 @@ metaflow/plugins/cards/card_modules/chevron/main.py
|
|
211
211
|
metaflow/plugins/cards/card_modules/chevron/metadata.py
|
212
212
|
metaflow/plugins/cards/card_modules/chevron/renderer.py
|
213
213
|
metaflow/plugins/cards/card_modules/chevron/tokenizer.py
|
214
|
+
metaflow/plugins/cards/card_viewer/viewer.html
|
214
215
|
metaflow/plugins/datastores/__init__.py
|
215
216
|
metaflow/plugins/datastores/azure_storage.py
|
216
217
|
metaflow/plugins/datastores/gs_storage.py
|
@@ -1 +0,0 @@
|
|
1
|
-
metaflow_version = "2.10.10"
|
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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/v3_6/importlib_metadata/_collections.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
|
File without changes
|
File without changes
|
File without changes
|