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.
Files changed (309) hide show
  1. {metaflow-2.10.10 → metaflow-2.11.0}/MANIFEST.in +2 -1
  2. {metaflow-2.10.10/metaflow.egg-info → metaflow-2.11.0}/PKG-INFO +1 -1
  3. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_modules/basic.py +8 -1
  4. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_modules/components.py +32 -14
  5. metaflow-2.11.0/metaflow/plugins/cards/card_viewer/viewer.html +344 -0
  6. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/pypi/conda_environment.py +4 -1
  7. metaflow-2.11.0/metaflow/version.py +1 -0
  8. {metaflow-2.10.10 → metaflow-2.11.0/metaflow.egg-info}/PKG-INFO +1 -1
  9. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow.egg-info/SOURCES.txt +1 -0
  10. metaflow-2.10.10/metaflow/version.py +0 -1
  11. {metaflow-2.10.10 → metaflow-2.11.0}/LICENSE +0 -0
  12. {metaflow-2.10.10 → metaflow-2.11.0}/README.md +0 -0
  13. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/R.py +0 -0
  14. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/__init__.py +0 -0
  15. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/__init__.py +0 -0
  16. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/click/__init__.py +0 -0
  17. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/click/_bashcomplete.py +0 -0
  18. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/click/_compat.py +0 -0
  19. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/click/_termui_impl.py +0 -0
  20. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/click/_textwrap.py +0 -0
  21. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/click/_unicodefun.py +0 -0
  22. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/click/_winconsole.py +0 -0
  23. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/click/core.py +0 -0
  24. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/click/decorators.py +0 -0
  25. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/click/exceptions.py +0 -0
  26. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/click/formatting.py +0 -0
  27. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/click/globals.py +0 -0
  28. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/click/parser.py +0 -0
  29. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/click/termui.py +0 -0
  30. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/click/testing.py +0 -0
  31. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/click/types.py +0 -0
  32. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/click/utils.py +0 -0
  33. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/packaging/__init__.py +0 -0
  34. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/packaging/_elffile.py +0 -0
  35. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/packaging/_manylinux.py +0 -0
  36. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/packaging/_musllinux.py +0 -0
  37. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/packaging/_parser.py +0 -0
  38. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/packaging/_structures.py +0 -0
  39. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/packaging/_tokenizer.py +0 -0
  40. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/packaging/markers.py +0 -0
  41. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/packaging/py.typed +0 -0
  42. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/packaging/requirements.py +0 -0
  43. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/packaging/specifiers.py +0 -0
  44. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/packaging/tags.py +0 -0
  45. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/packaging/utils.py +0 -0
  46. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/packaging/version.py +0 -0
  47. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/v3_5/__init__.py +0 -0
  48. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/v3_5/importlib_metadata/__init__.py +0 -0
  49. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/v3_5/importlib_metadata/_compat.py +0 -0
  50. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/v3_5/zipp.py +0 -0
  51. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/v3_6/__init__.py +0 -0
  52. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/v3_6/importlib_metadata/__init__.py +0 -0
  53. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/v3_6/importlib_metadata/_adapters.py +0 -0
  54. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/v3_6/importlib_metadata/_collections.py +0 -0
  55. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/v3_6/importlib_metadata/_compat.py +0 -0
  56. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/v3_6/importlib_metadata/_functools.py +0 -0
  57. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/v3_6/importlib_metadata/_itertools.py +0 -0
  58. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/v3_6/importlib_metadata/_meta.py +0 -0
  59. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/v3_6/importlib_metadata/_text.py +0 -0
  60. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/v3_6/importlib_metadata/py.typed +0 -0
  61. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/v3_6/typing_extensions.py +0 -0
  62. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/v3_6/zipp.py +0 -0
  63. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/v3_7/__init__.py +0 -0
  64. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/_vendor/v3_7/zipp.py +0 -0
  65. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/cards.py +0 -0
  66. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/cli.py +0 -0
  67. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/cli_args.py +0 -0
  68. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/client/__init__.py +0 -0
  69. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/client/core.py +0 -0
  70. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/client/filecache.py +0 -0
  71. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/cmd/__init__.py +0 -0
  72. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/cmd/configure_cmd.py +0 -0
  73. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/cmd/main_cli.py +0 -0
  74. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/cmd/tutorials_cmd.py +0 -0
  75. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/cmd/util.py +0 -0
  76. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/cmd_with_io.py +0 -0
  77. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/current.py +0 -0
  78. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/datastore/__init__.py +0 -0
  79. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/datastore/content_addressed_store.py +0 -0
  80. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/datastore/datastore_set.py +0 -0
  81. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/datastore/datastore_storage.py +0 -0
  82. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/datastore/exceptions.py +0 -0
  83. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/datastore/flow_datastore.py +0 -0
  84. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/datastore/inputs.py +0 -0
  85. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/datastore/task_datastore.py +0 -0
  86. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/debug.py +0 -0
  87. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/decorators.py +0 -0
  88. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/event_logger.py +0 -0
  89. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/events.py +0 -0
  90. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/exception.py +0 -0
  91. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/extension_support/__init__.py +0 -0
  92. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/extension_support/_empty_file.py +0 -0
  93. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/extension_support/cmd.py +0 -0
  94. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/extension_support/integrations.py +0 -0
  95. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/extension_support/plugins.py +0 -0
  96. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/flowspec.py +0 -0
  97. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/graph.py +0 -0
  98. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/includefile.py +0 -0
  99. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/integrations.py +0 -0
  100. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/lint.py +0 -0
  101. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/metadata/__init__.py +0 -0
  102. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/metadata/heartbeat.py +0 -0
  103. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/metadata/metadata.py +0 -0
  104. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/metadata/util.py +0 -0
  105. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/metaflow_config.py +0 -0
  106. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/metaflow_config_funcs.py +0 -0
  107. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/metaflow_environment.py +0 -0
  108. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/metaflow_profile.py +0 -0
  109. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/metaflow_version.py +0 -0
  110. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/mflog/__init__.py +0 -0
  111. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/mflog/mflog.py +0 -0
  112. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/mflog/save_logs.py +0 -0
  113. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/mflog/save_logs_periodically.py +0 -0
  114. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/mflog/tee.py +0 -0
  115. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/monitor.py +0 -0
  116. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/multicore_utils.py +0 -0
  117. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/package.py +0 -0
  118. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/parameters.py +0 -0
  119. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/__init__.py +0 -0
  120. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/airflow/__init__.py +0 -0
  121. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/airflow/airflow.py +0 -0
  122. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/airflow/airflow_cli.py +0 -0
  123. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/airflow/airflow_decorator.py +0 -0
  124. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/airflow/airflow_utils.py +0 -0
  125. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/airflow/dag.py +0 -0
  126. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/airflow/exception.py +0 -0
  127. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/airflow/plumbing/__init__.py +0 -0
  128. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/airflow/plumbing/set_parameters.py +0 -0
  129. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/airflow/sensors/__init__.py +0 -0
  130. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/airflow/sensors/base_sensor.py +0 -0
  131. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/airflow/sensors/external_task_sensor.py +0 -0
  132. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/airflow/sensors/s3_sensor.py +0 -0
  133. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/argo/__init__.py +0 -0
  134. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/argo/argo_client.py +0 -0
  135. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/argo/argo_events.py +0 -0
  136. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/argo/argo_workflows.py +0 -0
  137. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/argo/argo_workflows_cli.py +0 -0
  138. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/argo/argo_workflows_decorator.py +0 -0
  139. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/argo/process_input_paths.py +0 -0
  140. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/__init__.py +0 -0
  141. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/aws_client.py +0 -0
  142. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/aws_utils.py +0 -0
  143. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/batch/__init__.py +0 -0
  144. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/batch/batch.py +0 -0
  145. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/batch/batch_cli.py +0 -0
  146. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/batch/batch_client.py +0 -0
  147. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/batch/batch_decorator.py +0 -0
  148. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/secrets_manager/__init__.py +0 -0
  149. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/secrets_manager/aws_secrets_manager_secrets_provider.py +0 -0
  150. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/step_functions/__init__.py +0 -0
  151. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/step_functions/dynamo_db_client.py +0 -0
  152. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/step_functions/event_bridge_client.py +0 -0
  153. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/step_functions/production_token.py +0 -0
  154. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/step_functions/schedule_decorator.py +0 -0
  155. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/step_functions/set_batch_environment.py +0 -0
  156. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/step_functions/step_functions.py +0 -0
  157. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/step_functions/step_functions_cli.py +0 -0
  158. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/step_functions/step_functions_client.py +0 -0
  159. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/aws/step_functions/step_functions_decorator.py +0 -0
  160. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/azure/__init__.py +0 -0
  161. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/azure/azure_exceptions.py +0 -0
  162. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/azure/azure_tail.py +0 -0
  163. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/azure/azure_utils.py +0 -0
  164. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/azure/blob_service_client_factory.py +0 -0
  165. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/azure/includefile_support.py +0 -0
  166. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/__init__.py +0 -0
  167. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_cli.py +0 -0
  168. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_client.py +0 -0
  169. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_creator.py +0 -0
  170. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_datastore.py +0 -0
  171. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_decorator.py +0 -0
  172. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_modules/__init__.py +0 -0
  173. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_modules/base.html +0 -0
  174. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_modules/bundle.css +0 -0
  175. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_modules/card.py +0 -0
  176. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_modules/chevron/__init__.py +0 -0
  177. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_modules/chevron/main.py +0 -0
  178. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_modules/chevron/metadata.py +0 -0
  179. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_modules/chevron/renderer.py +0 -0
  180. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_modules/chevron/tokenizer.py +0 -0
  181. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_modules/convert_to_native_type.py +0 -0
  182. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_modules/main.js +0 -0
  183. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_modules/renderer_tools.py +0 -0
  184. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_modules/test_cards.py +0 -0
  185. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_resolver.py +0 -0
  186. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/card_server.py +0 -0
  187. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/component_serializer.py +0 -0
  188. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/cards/exception.py +0 -0
  189. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/catch_decorator.py +0 -0
  190. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/datastores/__init__.py +0 -0
  191. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/datastores/azure_storage.py +0 -0
  192. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/datastores/gs_storage.py +0 -0
  193. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/datastores/local_storage.py +0 -0
  194. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/datastores/s3_storage.py +0 -0
  195. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/datatools/__init__.py +0 -0
  196. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/datatools/local.py +0 -0
  197. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/datatools/s3/__init__.py +0 -0
  198. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/datatools/s3/s3.py +0 -0
  199. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/datatools/s3/s3op.py +0 -0
  200. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/datatools/s3/s3tail.py +0 -0
  201. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/datatools/s3/s3util.py +0 -0
  202. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/debug_logger.py +0 -0
  203. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/debug_monitor.py +0 -0
  204. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/__init__.py +0 -0
  205. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/client.py +0 -0
  206. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/client_modules.py +0 -0
  207. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/communication/__init__.py +0 -0
  208. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/communication/bytestream.py +0 -0
  209. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/communication/channel.py +0 -0
  210. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/communication/socket_bytestream.py +0 -0
  211. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/communication/utils.py +0 -0
  212. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/configurations/emulate_test_lib/__init__.py +0 -0
  213. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/configurations/emulate_test_lib/overrides.py +0 -0
  214. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/configurations/emulate_test_lib/server_mappings.py +0 -0
  215. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/configurations/test_lib_impl/__init__.py +0 -0
  216. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/configurations/test_lib_impl/test_lib.py +0 -0
  217. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/consts.py +0 -0
  218. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/data_transferer.py +0 -0
  219. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/exception_transferer.py +0 -0
  220. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/override_decorators.py +0 -0
  221. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/server.py +0 -0
  222. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/stub.py +0 -0
  223. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/env_escape/utils.py +0 -0
  224. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/environment_decorator.py +0 -0
  225. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/events_decorator.py +0 -0
  226. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/frameworks/__init__.py +0 -0
  227. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/frameworks/pytorch.py +0 -0
  228. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/gcp/__init__.py +0 -0
  229. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/gcp/gs_exceptions.py +0 -0
  230. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/gcp/gs_storage_client_factory.py +0 -0
  231. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/gcp/gs_tail.py +0 -0
  232. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/gcp/gs_utils.py +0 -0
  233. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/gcp/includefile_support.py +0 -0
  234. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/kubernetes/__init__.py +0 -0
  235. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/kubernetes/kubernetes.py +0 -0
  236. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/kubernetes/kubernetes_cli.py +0 -0
  237. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/kubernetes/kubernetes_client.py +0 -0
  238. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/kubernetes/kubernetes_decorator.py +0 -0
  239. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/kubernetes/kubernetes_job.py +0 -0
  240. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/metadata/__init__.py +0 -0
  241. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/metadata/local.py +0 -0
  242. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/metadata/service.py +0 -0
  243. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/package_cli.py +0 -0
  244. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/parallel_decorator.py +0 -0
  245. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/project_decorator.py +0 -0
  246. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/pypi/__init__.py +0 -0
  247. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/pypi/bootstrap.py +0 -0
  248. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/pypi/conda_decorator.py +0 -0
  249. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/pypi/micromamba.py +0 -0
  250. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/pypi/pip.py +0 -0
  251. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/pypi/pypi_decorator.py +0 -0
  252. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/pypi/pypi_environment.py +0 -0
  253. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/pypi/utils.py +0 -0
  254. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/resources_decorator.py +0 -0
  255. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/retry_decorator.py +0 -0
  256. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/secrets/__init__.py +0 -0
  257. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/secrets/inline_secrets_provider.py +0 -0
  258. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/secrets/secrets_decorator.py +0 -0
  259. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/storage_executor.py +0 -0
  260. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/tag_cli.py +0 -0
  261. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/test_unbounded_foreach_decorator.py +0 -0
  262. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/plugins/timeout_decorator.py +0 -0
  263. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/procpoll.py +0 -0
  264. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/py.typed +0 -0
  265. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/pylint_wrapper.py +0 -0
  266. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/runtime.py +0 -0
  267. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/sidecar/__init__.py +0 -0
  268. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/sidecar/sidecar.py +0 -0
  269. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/sidecar/sidecar_messages.py +0 -0
  270. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/sidecar/sidecar_subprocess.py +0 -0
  271. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/sidecar/sidecar_worker.py +0 -0
  272. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tagging_util.py +0 -0
  273. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/task.py +0 -0
  274. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tracing/__init__.py +0 -0
  275. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tracing/propagator.py +0 -0
  276. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tracing/span_exporter.py +0 -0
  277. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tracing/tracing_modules.py +0 -0
  278. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/00-helloworld/README.md +0 -0
  279. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/00-helloworld/helloworld.py +0 -0
  280. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/01-playlist/README.md +0 -0
  281. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/01-playlist/movies.csv +0 -0
  282. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/01-playlist/playlist.ipynb +0 -0
  283. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/01-playlist/playlist.py +0 -0
  284. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/02-statistics/README.md +0 -0
  285. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/02-statistics/movies.csv +0 -0
  286. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/02-statistics/stats.ipynb +0 -0
  287. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/02-statistics/stats.py +0 -0
  288. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/03-playlist-redux/README.md +0 -0
  289. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/03-playlist-redux/playlist.py +0 -0
  290. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/04-playlist-plus/README.md +0 -0
  291. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/04-playlist-plus/playlist.py +0 -0
  292. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/05-hello-cloud/README.md +0 -0
  293. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/05-hello-cloud/hello-cloud.ipynb +0 -0
  294. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/05-hello-cloud/hello-cloud.py +0 -0
  295. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/06-statistics-redux/README.md +0 -0
  296. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/06-statistics-redux/stats.ipynb +0 -0
  297. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/07-worldview/README.md +0 -0
  298. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/07-worldview/worldview.ipynb +0 -0
  299. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/08-autopilot/README.md +0 -0
  300. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/tutorials/08-autopilot/autopilot.ipynb +0 -0
  301. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/unbounded_foreach.py +0 -0
  302. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/util.py +0 -0
  303. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow/vendor.py +0 -0
  304. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow.egg-info/dependency_links.txt +0 -0
  305. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow.egg-info/entry_points.txt +0 -0
  306. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow.egg-info/requires.txt +0 -0
  307. {metaflow-2.10.10 → metaflow-2.11.0}/metaflow.egg-info/top_level.txt +0 -0
  308. {metaflow-2.10.10 → metaflow-2.11.0}/setup.cfg +0 -0
  309. {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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: metaflow
3
- Version: 2.10.10
3
+ Version: 2.11.0
4
4
  Summary: Metaflow: More Data Science, Less Engineering
5
5
  Author: Metaflow Developers
6
6
  Author-email: help@metaflow.org
@@ -313,7 +313,14 @@ class MarkdownComponent(DefaultComponent):
313
313
 
314
314
  def render(self):
315
315
  datadict = super().render()
316
- datadict["source"] = self._text
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
- text : str
716
- Text formatted in Markdown.
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
- if spec is not None:
772
- self._spec = spec
779
+ """
780
+ Update the chart.
773
781
 
774
- @classmethod
775
- def from_altair_chart(cls, altair_chart):
776
- from metaflow.plugins.cards.card_modules.convert_to_native_type import (
777
- _full_classname,
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 I can think of is to use the full class name and then
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
- raise ValueError(fulclsname + " is not an altair chart")
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"] = local_packages[package["url"]]["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"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: metaflow
3
- Version: 2.10.10
3
+ Version: 2.11.0
4
4
  Summary: Metaflow: More Data Science, Less Engineering
5
5
  Author: Metaflow Developers
6
6
  Author-email: help@metaflow.org
@@ -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