metaflow 2.13.2__tar.gz → 2.13.4__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 (374) hide show
  1. {metaflow-2.13.2/metaflow.egg-info → metaflow-2.13.4}/PKG-INFO +13 -3
  2. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/cards.py +1 -0
  3. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/cli.py +5 -0
  4. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/cli_components/run_cmds.py +2 -0
  5. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/cli_components/step_cmd.py +0 -13
  6. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/decorators.py +2 -2
  7. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/parameters.py +3 -1
  8. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/cards/card_cli.py +7 -2
  9. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/cards/card_decorator.py +53 -20
  10. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/cards/card_modules/basic.py +56 -5
  11. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/cards/card_modules/card.py +16 -1
  12. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/cards/card_modules/components.py +64 -16
  13. metaflow-2.13.4/metaflow/plugins/cards/card_modules/main.js +252 -0
  14. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/cards/card_modules/test_cards.py +4 -4
  15. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/cards/component_serializer.py +1 -1
  16. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/events_decorator.py +41 -7
  17. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/project_decorator.py +33 -5
  18. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/user_configs/config_parameters.py +23 -9
  19. metaflow-2.13.4/metaflow/version.py +1 -0
  20. {metaflow-2.13.2 → metaflow-2.13.4/metaflow.egg-info}/PKG-INFO +13 -3
  21. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow.egg-info/requires.txt +1 -1
  22. metaflow-2.13.2/metaflow/plugins/cards/card_modules/main.js +0 -250
  23. metaflow-2.13.2/metaflow/version.py +0 -1
  24. {metaflow-2.13.2 → metaflow-2.13.4}/LICENSE +0 -0
  25. {metaflow-2.13.2 → metaflow-2.13.4}/MANIFEST.in +0 -0
  26. {metaflow-2.13.2 → metaflow-2.13.4}/README.md +0 -0
  27. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/R.py +0 -0
  28. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/__init__.py +0 -0
  29. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/__init__.py +0 -0
  30. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/click/__init__.py +0 -0
  31. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/click/_bashcomplete.py +0 -0
  32. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/click/_compat.py +0 -0
  33. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/click/_termui_impl.py +0 -0
  34. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/click/_textwrap.py +0 -0
  35. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/click/_unicodefun.py +0 -0
  36. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/click/_winconsole.py +0 -0
  37. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/click/core.py +0 -0
  38. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/click/decorators.py +0 -0
  39. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/click/exceptions.py +0 -0
  40. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/click/formatting.py +0 -0
  41. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/click/globals.py +0 -0
  42. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/click/parser.py +0 -0
  43. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/click/termui.py +0 -0
  44. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/click/testing.py +0 -0
  45. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/click/types.py +0 -0
  46. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/click/utils.py +0 -0
  47. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/importlib_metadata/__init__.py +0 -0
  48. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/importlib_metadata/_adapters.py +0 -0
  49. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/importlib_metadata/_collections.py +0 -0
  50. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/importlib_metadata/_compat.py +0 -0
  51. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/importlib_metadata/_functools.py +0 -0
  52. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/importlib_metadata/_itertools.py +0 -0
  53. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/importlib_metadata/_meta.py +0 -0
  54. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/importlib_metadata/_text.py +0 -0
  55. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/importlib_metadata/py.typed +0 -0
  56. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/packaging/__init__.py +0 -0
  57. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/packaging/_elffile.py +0 -0
  58. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/packaging/_manylinux.py +0 -0
  59. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/packaging/_musllinux.py +0 -0
  60. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/packaging/_parser.py +0 -0
  61. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/packaging/_structures.py +0 -0
  62. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/packaging/_tokenizer.py +0 -0
  63. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/packaging/markers.py +0 -0
  64. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/packaging/py.typed +0 -0
  65. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/packaging/requirements.py +0 -0
  66. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/packaging/specifiers.py +0 -0
  67. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/packaging/tags.py +0 -0
  68. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/packaging/utils.py +0 -0
  69. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/packaging/version.py +0 -0
  70. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/typeguard/__init__.py +0 -0
  71. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/typeguard/_checkers.py +0 -0
  72. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/typeguard/_config.py +0 -0
  73. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/typeguard/_decorators.py +0 -0
  74. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/typeguard/_exceptions.py +0 -0
  75. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/typeguard/_functions.py +0 -0
  76. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/typeguard/_importhook.py +0 -0
  77. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/typeguard/_memo.py +0 -0
  78. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/typeguard/_pytest_plugin.py +0 -0
  79. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/typeguard/_suppression.py +0 -0
  80. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/typeguard/_transformer.py +0 -0
  81. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/typeguard/_union_transformer.py +0 -0
  82. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/typeguard/_utils.py +0 -0
  83. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/typeguard/py.typed +0 -0
  84. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/typing_extensions.py +0 -0
  85. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/v3_5/__init__.py +0 -0
  86. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/v3_5/importlib_metadata/__init__.py +0 -0
  87. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/v3_5/importlib_metadata/_compat.py +0 -0
  88. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/v3_5/zipp.py +0 -0
  89. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/v3_6/__init__.py +0 -0
  90. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/v3_6/importlib_metadata/__init__.py +0 -0
  91. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/v3_6/importlib_metadata/_adapters.py +0 -0
  92. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/v3_6/importlib_metadata/_collections.py +0 -0
  93. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/v3_6/importlib_metadata/_compat.py +0 -0
  94. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/v3_6/importlib_metadata/_functools.py +0 -0
  95. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/v3_6/importlib_metadata/_itertools.py +0 -0
  96. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/v3_6/importlib_metadata/_meta.py +0 -0
  97. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/v3_6/importlib_metadata/_text.py +0 -0
  98. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/v3_6/importlib_metadata/py.typed +0 -0
  99. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/v3_6/typing_extensions.py +0 -0
  100. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/v3_6/zipp.py +0 -0
  101. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/_vendor/zipp.py +0 -0
  102. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/cli_args.py +0 -0
  103. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/cli_components/__init__.py +0 -0
  104. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/cli_components/dump_cmd.py +0 -0
  105. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/cli_components/init_cmd.py +0 -0
  106. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/cli_components/utils.py +0 -0
  107. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/client/__init__.py +0 -0
  108. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/client/core.py +0 -0
  109. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/client/filecache.py +0 -0
  110. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/clone_util.py +0 -0
  111. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/cmd/__init__.py +0 -0
  112. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/cmd/configure_cmd.py +0 -0
  113. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/cmd/develop/__init__.py +0 -0
  114. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/cmd/develop/stub_generator.py +0 -0
  115. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/cmd/develop/stubs.py +0 -0
  116. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/cmd/main_cli.py +0 -0
  117. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/cmd/tutorials_cmd.py +0 -0
  118. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/cmd/util.py +0 -0
  119. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/cmd_with_io.py +0 -0
  120. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/datastore/__init__.py +0 -0
  121. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/datastore/content_addressed_store.py +0 -0
  122. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/datastore/datastore_set.py +0 -0
  123. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/datastore/datastore_storage.py +0 -0
  124. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/datastore/exceptions.py +0 -0
  125. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/datastore/flow_datastore.py +0 -0
  126. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/datastore/inputs.py +0 -0
  127. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/datastore/task_datastore.py +0 -0
  128. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/debug.py +0 -0
  129. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/event_logger.py +0 -0
  130. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/events.py +0 -0
  131. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/exception.py +0 -0
  132. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/extension_support/__init__.py +0 -0
  133. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/extension_support/_empty_file.py +0 -0
  134. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/extension_support/cmd.py +0 -0
  135. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/extension_support/integrations.py +0 -0
  136. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/extension_support/plugins.py +0 -0
  137. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/flowspec.py +0 -0
  138. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/graph.py +0 -0
  139. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/includefile.py +0 -0
  140. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/info_file.py +0 -0
  141. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/integrations.py +0 -0
  142. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/lint.py +0 -0
  143. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/metadata_provider/__init__.py +0 -0
  144. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/metadata_provider/heartbeat.py +0 -0
  145. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/metadata_provider/metadata.py +0 -0
  146. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/metadata_provider/util.py +0 -0
  147. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/metaflow_config.py +0 -0
  148. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/metaflow_config_funcs.py +0 -0
  149. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/metaflow_current.py +0 -0
  150. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/metaflow_environment.py +0 -0
  151. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/metaflow_profile.py +0 -0
  152. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/metaflow_version.py +0 -0
  153. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/mflog/__init__.py +0 -0
  154. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/mflog/mflog.py +0 -0
  155. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/mflog/save_logs.py +0 -0
  156. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/mflog/save_logs_periodically.py +0 -0
  157. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/mflog/tee.py +0 -0
  158. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/monitor.py +0 -0
  159. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/multicore_utils.py +0 -0
  160. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/package.py +0 -0
  161. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/__init__.py +0 -0
  162. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/airflow/__init__.py +0 -0
  163. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/airflow/airflow.py +0 -0
  164. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/airflow/airflow_cli.py +0 -0
  165. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/airflow/airflow_decorator.py +0 -0
  166. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/airflow/airflow_utils.py +0 -0
  167. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/airflow/dag.py +0 -0
  168. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/airflow/exception.py +0 -0
  169. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/airflow/plumbing/__init__.py +0 -0
  170. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/airflow/plumbing/set_parameters.py +0 -0
  171. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/airflow/sensors/__init__.py +0 -0
  172. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/airflow/sensors/base_sensor.py +0 -0
  173. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/airflow/sensors/external_task_sensor.py +0 -0
  174. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/airflow/sensors/s3_sensor.py +0 -0
  175. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/argo/__init__.py +0 -0
  176. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/argo/argo_client.py +0 -0
  177. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/argo/argo_events.py +0 -0
  178. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/argo/argo_workflows.py +0 -0
  179. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/argo/argo_workflows_cli.py +0 -0
  180. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/argo/argo_workflows_decorator.py +0 -0
  181. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/argo/argo_workflows_deployer.py +0 -0
  182. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/argo/argo_workflows_deployer_objects.py +0 -0
  183. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/argo/capture_error.py +0 -0
  184. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/argo/generate_input_paths.py +0 -0
  185. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/argo/jobset_input_paths.py +0 -0
  186. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/aws/__init__.py +0 -0
  187. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/aws/aws_client.py +0 -0
  188. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/aws/aws_utils.py +0 -0
  189. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/aws/batch/__init__.py +0 -0
  190. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/aws/batch/batch.py +0 -0
  191. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/aws/batch/batch_cli.py +0 -0
  192. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/aws/batch/batch_client.py +0 -0
  193. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/aws/batch/batch_decorator.py +0 -0
  194. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/aws/secrets_manager/__init__.py +0 -0
  195. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/aws/secrets_manager/aws_secrets_manager_secrets_provider.py +0 -0
  196. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/aws/step_functions/__init__.py +0 -0
  197. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/aws/step_functions/dynamo_db_client.py +0 -0
  198. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/aws/step_functions/event_bridge_client.py +0 -0
  199. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/aws/step_functions/production_token.py +0 -0
  200. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/aws/step_functions/schedule_decorator.py +0 -0
  201. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/aws/step_functions/set_batch_environment.py +0 -0
  202. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/aws/step_functions/step_functions.py +0 -0
  203. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/aws/step_functions/step_functions_cli.py +0 -0
  204. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/aws/step_functions/step_functions_client.py +0 -0
  205. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/aws/step_functions/step_functions_decorator.py +0 -0
  206. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/aws/step_functions/step_functions_deployer.py +0 -0
  207. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/aws/step_functions/step_functions_deployer_objects.py +0 -0
  208. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/azure/__init__.py +0 -0
  209. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/azure/azure_credential.py +0 -0
  210. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/azure/azure_exceptions.py +0 -0
  211. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/azure/azure_secret_manager_secrets_provider.py +0 -0
  212. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/azure/azure_tail.py +0 -0
  213. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/azure/azure_utils.py +0 -0
  214. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/azure/blob_service_client_factory.py +0 -0
  215. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/azure/includefile_support.py +0 -0
  216. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/cards/__init__.py +0 -0
  217. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/cards/card_client.py +0 -0
  218. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/cards/card_creator.py +0 -0
  219. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/cards/card_datastore.py +0 -0
  220. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/cards/card_modules/__init__.py +0 -0
  221. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/cards/card_modules/base.html +0 -0
  222. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/cards/card_modules/bundle.css +0 -0
  223. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/cards/card_modules/chevron/__init__.py +0 -0
  224. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/cards/card_modules/chevron/main.py +0 -0
  225. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/cards/card_modules/chevron/metadata.py +0 -0
  226. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/cards/card_modules/chevron/renderer.py +0 -0
  227. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/cards/card_modules/chevron/tokenizer.py +0 -0
  228. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/cards/card_modules/convert_to_native_type.py +0 -0
  229. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/cards/card_modules/renderer_tools.py +0 -0
  230. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/cards/card_resolver.py +0 -0
  231. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/cards/card_server.py +0 -0
  232. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/cards/card_viewer/viewer.html +0 -0
  233. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/cards/exception.py +0 -0
  234. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/catch_decorator.py +0 -0
  235. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/datastores/__init__.py +0 -0
  236. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/datastores/azure_storage.py +0 -0
  237. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/datastores/gs_storage.py +0 -0
  238. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/datastores/local_storage.py +0 -0
  239. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/datastores/s3_storage.py +0 -0
  240. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/datatools/__init__.py +0 -0
  241. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/datatools/local.py +0 -0
  242. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/datatools/s3/__init__.py +0 -0
  243. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/datatools/s3/s3.py +0 -0
  244. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/datatools/s3/s3op.py +0 -0
  245. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/datatools/s3/s3tail.py +0 -0
  246. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/datatools/s3/s3util.py +0 -0
  247. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/debug_logger.py +0 -0
  248. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/debug_monitor.py +0 -0
  249. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/env_escape/__init__.py +0 -0
  250. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/env_escape/client.py +0 -0
  251. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/env_escape/client_modules.py +0 -0
  252. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/env_escape/communication/__init__.py +0 -0
  253. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/env_escape/communication/bytestream.py +0 -0
  254. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/env_escape/communication/channel.py +0 -0
  255. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/env_escape/communication/socket_bytestream.py +0 -0
  256. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/env_escape/communication/utils.py +0 -0
  257. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/env_escape/configurations/emulate_test_lib/__init__.py +0 -0
  258. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/env_escape/configurations/emulate_test_lib/overrides.py +0 -0
  259. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/env_escape/configurations/emulate_test_lib/server_mappings.py +0 -0
  260. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/env_escape/configurations/test_lib_impl/__init__.py +0 -0
  261. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/env_escape/configurations/test_lib_impl/test_lib.py +0 -0
  262. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/env_escape/consts.py +0 -0
  263. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/env_escape/data_transferer.py +0 -0
  264. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/env_escape/exception_transferer.py +0 -0
  265. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/env_escape/override_decorators.py +0 -0
  266. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/env_escape/server.py +0 -0
  267. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/env_escape/stub.py +0 -0
  268. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/env_escape/utils.py +0 -0
  269. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/environment_decorator.py +0 -0
  270. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/frameworks/__init__.py +0 -0
  271. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/frameworks/pytorch.py +0 -0
  272. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/gcp/__init__.py +0 -0
  273. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/gcp/gcp_secret_manager_secrets_provider.py +0 -0
  274. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/gcp/gs_exceptions.py +0 -0
  275. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/gcp/gs_storage_client_factory.py +0 -0
  276. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/gcp/gs_tail.py +0 -0
  277. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/gcp/gs_utils.py +0 -0
  278. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/gcp/includefile_support.py +0 -0
  279. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/kubernetes/__init__.py +0 -0
  280. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/kubernetes/kube_utils.py +0 -0
  281. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/kubernetes/kubernetes.py +0 -0
  282. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/kubernetes/kubernetes_cli.py +0 -0
  283. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/kubernetes/kubernetes_client.py +0 -0
  284. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/kubernetes/kubernetes_decorator.py +0 -0
  285. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/kubernetes/kubernetes_job.py +0 -0
  286. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/kubernetes/kubernetes_jobsets.py +0 -0
  287. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/logs_cli.py +0 -0
  288. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/metadata_providers/__init__.py +0 -0
  289. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/metadata_providers/local.py +0 -0
  290. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/metadata_providers/service.py +0 -0
  291. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/package_cli.py +0 -0
  292. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/parallel_decorator.py +0 -0
  293. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/pypi/__init__.py +0 -0
  294. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/pypi/bootstrap.py +0 -0
  295. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/pypi/conda_decorator.py +0 -0
  296. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/pypi/conda_environment.py +0 -0
  297. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/pypi/micromamba.py +0 -0
  298. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/pypi/pip.py +0 -0
  299. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/pypi/pypi_decorator.py +0 -0
  300. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/pypi/pypi_environment.py +0 -0
  301. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/pypi/utils.py +0 -0
  302. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/resources_decorator.py +0 -0
  303. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/retry_decorator.py +0 -0
  304. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/secrets/__init__.py +0 -0
  305. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/secrets/inline_secrets_provider.py +0 -0
  306. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/secrets/secrets_decorator.py +0 -0
  307. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/storage_executor.py +0 -0
  308. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/tag_cli.py +0 -0
  309. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/test_unbounded_foreach_decorator.py +0 -0
  310. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/plugins/timeout_decorator.py +0 -0
  311. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/procpoll.py +0 -0
  312. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/py.typed +0 -0
  313. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/pylint_wrapper.py +0 -0
  314. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/runner/__init__.py +0 -0
  315. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/runner/click_api.py +0 -0
  316. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/runner/deployer.py +0 -0
  317. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/runner/deployer_impl.py +0 -0
  318. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/runner/metaflow_runner.py +0 -0
  319. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/runner/nbdeploy.py +0 -0
  320. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/runner/nbrun.py +0 -0
  321. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/runner/subprocess_manager.py +0 -0
  322. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/runner/utils.py +0 -0
  323. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/runtime.py +0 -0
  324. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/sidecar/__init__.py +0 -0
  325. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/sidecar/sidecar.py +0 -0
  326. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/sidecar/sidecar_messages.py +0 -0
  327. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/sidecar/sidecar_subprocess.py +0 -0
  328. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/sidecar/sidecar_worker.py +0 -0
  329. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/system/__init__.py +0 -0
  330. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/system/system_logger.py +0 -0
  331. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/system/system_monitor.py +0 -0
  332. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/system/system_utils.py +0 -0
  333. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/tagging_util.py +0 -0
  334. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/task.py +0 -0
  335. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/tracing/__init__.py +0 -0
  336. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/tracing/propagator.py +0 -0
  337. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/tracing/span_exporter.py +0 -0
  338. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/tracing/tracing_modules.py +0 -0
  339. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/tuple_util.py +0 -0
  340. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/tutorials/00-helloworld/README.md +0 -0
  341. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/tutorials/00-helloworld/helloworld.py +0 -0
  342. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/tutorials/01-playlist/README.md +0 -0
  343. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/tutorials/01-playlist/movies.csv +0 -0
  344. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/tutorials/01-playlist/playlist.ipynb +0 -0
  345. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/tutorials/01-playlist/playlist.py +0 -0
  346. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/tutorials/02-statistics/README.md +0 -0
  347. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/tutorials/02-statistics/movies.csv +0 -0
  348. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/tutorials/02-statistics/stats.ipynb +0 -0
  349. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/tutorials/02-statistics/stats.py +0 -0
  350. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/tutorials/03-playlist-redux/README.md +0 -0
  351. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/tutorials/03-playlist-redux/playlist.py +0 -0
  352. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/tutorials/04-playlist-plus/README.md +0 -0
  353. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/tutorials/04-playlist-plus/playlist.py +0 -0
  354. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/tutorials/05-hello-cloud/README.md +0 -0
  355. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/tutorials/05-hello-cloud/hello-cloud.ipynb +0 -0
  356. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/tutorials/05-hello-cloud/hello-cloud.py +0 -0
  357. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/tutorials/06-statistics-redux/README.md +0 -0
  358. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/tutorials/06-statistics-redux/stats.ipynb +0 -0
  359. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/tutorials/07-worldview/README.md +0 -0
  360. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/tutorials/07-worldview/worldview.ipynb +0 -0
  361. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/tutorials/08-autopilot/README.md +0 -0
  362. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/tutorials/08-autopilot/autopilot.ipynb +0 -0
  363. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/unbounded_foreach.py +0 -0
  364. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/user_configs/__init__.py +0 -0
  365. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/user_configs/config_decorators.py +0 -0
  366. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/user_configs/config_options.py +0 -0
  367. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/util.py +0 -0
  368. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow/vendor.py +0 -0
  369. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow.egg-info/SOURCES.txt +0 -0
  370. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow.egg-info/dependency_links.txt +0 -0
  371. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow.egg-info/entry_points.txt +0 -0
  372. {metaflow-2.13.2 → metaflow-2.13.4}/metaflow.egg-info/top_level.txt +0 -0
  373. {metaflow-2.13.2 → metaflow-2.13.4}/setup.cfg +0 -0
  374. {metaflow-2.13.2 → metaflow-2.13.4}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: metaflow
3
- Version: 2.13.2
3
+ Version: 2.13.4
4
4
  Summary: Metaflow: More Data Science, Less Engineering
5
5
  Author: Metaflow Developers
6
6
  Author-email: help@metaflow.org
@@ -26,7 +26,17 @@ 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.2; extra == "stubs"
29
+ Requires-Dist: metaflow-stubs==2.13.4; extra == "stubs"
30
+ Dynamic: author
31
+ Dynamic: author-email
32
+ Dynamic: classifier
33
+ Dynamic: description
34
+ Dynamic: description-content-type
35
+ Dynamic: license
36
+ Dynamic: project-url
37
+ Dynamic: provides-extra
38
+ Dynamic: requires-dist
39
+ Dynamic: summary
30
40
 
31
41
  ![Metaflow_Logo_Horizontal_FullColor_Ribbon_Dark_RGB](https://user-images.githubusercontent.com/763451/89453116-96a57e00-d713-11ea-9fa6-82b29d4d6eff.png)
32
42
 
@@ -8,6 +8,7 @@ from metaflow.plugins.cards.card_modules.components import (
8
8
  Markdown,
9
9
  VegaChart,
10
10
  ProgressBar,
11
+ PythonCode,
11
12
  )
12
13
  from metaflow.plugins.cards.card_modules.basic import (
13
14
  DefaultCard,
@@ -504,6 +504,11 @@ def start(
504
504
  # *after* the run decospecs so that they don't take precedence. In other
505
505
  # words, for the same decorator, we want `myflow.py run --with foo` to
506
506
  # take precedence over any other `foo` decospec
507
+
508
+ # Note that top-level decospecs are used primarily with non run/resume
509
+ # options as well as with the airflow/argo/sfn integrations which pass
510
+ # all the decospecs (the ones from top-level but also the ones from the
511
+ # run/resume level) through the tl decospecs.
507
512
  ctx.obj.tl_decospecs = list(decospecs or [])
508
513
 
509
514
  # initialize current and parameter context for deploy-time parameters
@@ -39,6 +39,8 @@ def before_run(obj, tags, decospecs):
39
39
  + list(obj.environment.decospecs() or [])
40
40
  )
41
41
  if all_decospecs:
42
+ # These decospecs are the ones from run/resume PLUS the ones from the
43
+ # environment (for example the @conda)
42
44
  decorators._attach_decorators(obj.flow, all_decospecs)
43
45
  decorators._init(obj.flow)
44
46
  # Regenerate graph if we attached more decorators
@@ -77,14 +77,6 @@ from ..util import decompress_list
77
77
  default=None,
78
78
  help="Run id of the origin flow, if this task is part of a flow being resumed.",
79
79
  )
80
- @click.option(
81
- "--with",
82
- "decospecs",
83
- multiple=True,
84
- help="Add a decorator to this task. You can specify this "
85
- "option multiple times to attach multiple decorators "
86
- "to this task.",
87
- )
88
80
  @click.option(
89
81
  "--ubf-context",
90
82
  default="none",
@@ -112,7 +104,6 @@ def step(
112
104
  max_user_code_retries=None,
113
105
  clone_only=None,
114
106
  clone_run_id=None,
115
- decospecs=None,
116
107
  ubf_context="none",
117
108
  num_parallel=None,
118
109
  ):
@@ -136,10 +127,6 @@ def step(
136
127
  raise CommandException("Function *%s* is not a step." % step_name)
137
128
  echo("Executing a step, *%s*" % step_name, fg="magenta", bold=False)
138
129
 
139
- if decospecs:
140
- decorators._attach_decorators_to_step(func, decospecs)
141
- decorators._init(ctx.obj.flow)
142
-
143
130
  step_kwargs = ctx.params
144
131
  # Remove argument `step_name` from `step_kwargs`.
145
132
  step_kwargs.pop("step_name", None)
@@ -150,8 +150,8 @@ class Decorator(object):
150
150
  return
151
151
 
152
152
  # Note that by design, later values override previous ones.
153
- self.attributes = unpack_delayed_evaluator(self.attributes)
154
- self._user_defined_attributes.update(self.attributes.keys())
153
+ self.attributes, new_user_attributes = unpack_delayed_evaluator(self.attributes)
154
+ self._user_defined_attributes.update(new_user_attributes)
155
155
  self.attributes = resolve_delayed_evaluator(self.attributes)
156
156
 
157
157
  self._ran_init = True
@@ -367,7 +367,9 @@ class Parameter(object):
367
367
  )
368
368
 
369
369
  # Resolve any value from configurations
370
- self.kwargs = unpack_delayed_evaluator(self.kwargs, ignore_errors=ignore_errors)
370
+ self.kwargs, _ = unpack_delayed_evaluator(
371
+ self.kwargs, ignore_errors=ignore_errors
372
+ )
371
373
  # Do it one item at a time so errors are ignored at that level (as opposed to
372
374
  # at the entire kwargs level)
373
375
  self.kwargs = {
@@ -691,10 +691,15 @@ def create(
691
691
  try:
692
692
  if options is not None:
693
693
  mf_card = filtered_card(
694
- options=options, components=component_arr, graph=graph_dict
694
+ options=options,
695
+ components=component_arr,
696
+ graph=graph_dict,
697
+ flow=ctx.obj.flow,
695
698
  )
696
699
  else:
697
- mf_card = filtered_card(components=component_arr, graph=graph_dict)
700
+ mf_card = filtered_card(
701
+ components=component_arr, graph=graph_dict, flow=ctx.obj.flow
702
+ )
698
703
  except TypeError as e:
699
704
  if render_error_card:
700
705
  mf_card = None
@@ -76,6 +76,12 @@ class CardDecorator(StepDecorator):
76
76
 
77
77
  card_creator = None
78
78
 
79
+ _config_values = None
80
+
81
+ _config_file_name = None
82
+
83
+ task_finished_decos = 0
84
+
79
85
  def __init__(self, *args, **kwargs):
80
86
  super(CardDecorator, self).__init__(*args, **kwargs)
81
87
  self._task_datastore = None
@@ -106,6 +112,25 @@ class CardDecorator(StepDecorator):
106
112
  def _increment_step_counter(cls):
107
113
  cls.step_counter += 1
108
114
 
115
+ @classmethod
116
+ def _increment_completed_counter(cls):
117
+ cls.task_finished_decos += 1
118
+
119
+ @classmethod
120
+ def _set_config_values(cls, config_values):
121
+ cls._config_values = config_values
122
+
123
+ @classmethod
124
+ def _set_config_file_name(cls, flow):
125
+ # Only create a config file from the very first card decorator.
126
+ if cls._config_values and not cls._config_file_name:
127
+ with tempfile.NamedTemporaryFile(
128
+ mode="w", encoding="utf-8", delete=False
129
+ ) as config_file:
130
+ config_value = dump_config_values(flow)
131
+ json.dump(config_value, config_file)
132
+ cls._config_file_name = config_file.name
133
+
109
134
  def step_init(
110
135
  self, flow, graph, step_name, decorators, environment, flow_datastore, logger
111
136
  ):
@@ -116,11 +141,13 @@ class CardDecorator(StepDecorator):
116
141
 
117
142
  # We check for configuration options. We do this here before they are
118
143
  # converted to properties.
119
- self._config_values = [
120
- (config.name, ConfigInput.make_key_name(config.name))
121
- for _, config in flow._get_parameters()
122
- if config.IS_CONFIG_PARAMETER
123
- ]
144
+ self._set_config_values(
145
+ [
146
+ (config.name, ConfigInput.make_key_name(config.name))
147
+ for _, config in flow._get_parameters()
148
+ if config.IS_CONFIG_PARAMETER
149
+ ]
150
+ )
124
151
 
125
152
  self.card_options = self.attributes["options"]
126
153
 
@@ -159,15 +186,11 @@ class CardDecorator(StepDecorator):
159
186
 
160
187
  # If we have configs, we need to dump them to a file so we can re-use them
161
188
  # when calling the card creation subprocess.
162
- if self._config_values:
163
- with tempfile.NamedTemporaryFile(
164
- mode="w", encoding="utf-8", delete=False
165
- ) as config_file:
166
- config_value = dump_config_values(flow)
167
- json.dump(config_value, config_file)
168
- self._config_file_name = config_file.name
169
- else:
170
- self._config_file_name = None
189
+ # Since a step can contain multiple card decorators, and all the card creation processes
190
+ # will reference the same config file (because of how the CardCreator is created (only single class instance)),
191
+ # we need to ensure that a single config file is being referenced for all card create commands.
192
+ # This config file will be removed when the last card decorator has finished creating its card.
193
+ self._set_config_file_name(flow)
171
194
 
172
195
  card_type = self.attributes["type"]
173
196
  card_class = get_card_class(card_type)
@@ -246,12 +269,7 @@ class CardDecorator(StepDecorator):
246
269
  self.card_creator.create(mode="render", final=True, **create_options)
247
270
  self.card_creator.create(mode="refresh", final=True, **create_options)
248
271
 
249
- # Unlink the config file if it exists
250
- if self._config_file_name:
251
- try:
252
- os.unlink(self._config_file_name)
253
- except Exception as e:
254
- pass
272
+ self._cleanup(step_name)
255
273
 
256
274
  @staticmethod
257
275
  def _options(mapping):
@@ -286,3 +304,18 @@ class CardDecorator(StepDecorator):
286
304
  top_level_options["local-config-file"] = self._config_file_name
287
305
 
288
306
  return list(self._options(top_level_options))
307
+
308
+ def task_exception(
309
+ self, exception, step_name, flow, graph, retry_count, max_user_code_retries
310
+ ):
311
+ self._cleanup(step_name)
312
+
313
+ def _cleanup(self, step_name):
314
+ self._increment_completed_counter()
315
+ if self.task_finished_decos == self.total_decos_on_step[step_name]:
316
+ # Unlink the config file if it exists
317
+ if self._config_file_name:
318
+ try:
319
+ os.unlink(self._config_file_name)
320
+ except Exception as e:
321
+ pass
@@ -1,9 +1,10 @@
1
1
  import base64
2
2
  import json
3
3
  import os
4
- from .card import MetaflowCard, MetaflowCardComponent
4
+ from .card import MetaflowCard, MetaflowCardComponent, with_default_component_id
5
5
  from .convert_to_native_type import TaskToDict
6
6
  import uuid
7
+ import inspect
7
8
 
8
9
  ABS_DIR_PATH = os.path.dirname(os.path.abspath(__file__))
9
10
  RENDER_TEMPLATE_PATH = os.path.join(ABS_DIR_PATH, "base.html")
@@ -236,9 +237,28 @@ class LogComponent(DefaultComponent):
236
237
  super().__init__(title=None, subtitle=None)
237
238
  self._data = data
238
239
 
240
+ @with_default_component_id
239
241
  def render(self):
240
242
  datadict = super().render()
241
243
  datadict["data"] = self._data
244
+ if self.component_id is not None:
245
+ datadict["id"] = self.component_id
246
+ return datadict
247
+
248
+
249
+ class PythonCodeComponent(DefaultComponent):
250
+
251
+ type = "pythonCode"
252
+
253
+ def __init__(self, data=None):
254
+ super().__init__(title=None, subtitle=None)
255
+ self._data = data
256
+
257
+ def render(self):
258
+ datadict = super().render()
259
+ datadict["data"] = self._data
260
+ if self.component_id is not None:
261
+ datadict["id"] = self.component_id
242
262
  return datadict
243
263
 
244
264
 
@@ -343,6 +363,7 @@ class TaskInfoComponent(MetaflowCardComponent):
343
363
  graph=None,
344
364
  components=[],
345
365
  runtime=False,
366
+ flow=None,
346
367
  ):
347
368
  self._task = task
348
369
  self._only_repr = only_repr
@@ -352,6 +373,7 @@ class TaskInfoComponent(MetaflowCardComponent):
352
373
  self.final_component = None
353
374
  self.page_component = None
354
375
  self.runtime = runtime
376
+ self.flow = flow
355
377
 
356
378
  def render(self):
357
379
  """
@@ -475,6 +497,16 @@ class TaskInfoComponent(MetaflowCardComponent):
475
497
  contents=[param_component],
476
498
  ).render()
477
499
 
500
+ step_func = getattr(self.flow, self._task.parent.id)
501
+ code_table = SectionComponent(
502
+ title="Task Code",
503
+ contents=[
504
+ TableComponent(
505
+ data=[[PythonCodeComponent(inspect.getsource(step_func)).render()]]
506
+ )
507
+ ],
508
+ ).render()
509
+
478
510
  # Don't include parameter ids + "name" in the task artifacts
479
511
  artifactlist = [
480
512
  task_data_dict["data"][k]
@@ -500,6 +532,7 @@ class TaskInfoComponent(MetaflowCardComponent):
500
532
  page_contents.extend(
501
533
  [
502
534
  metadata_table,
535
+ code_table,
503
536
  parameter_table,
504
537
  artifact_section,
505
538
  ]
@@ -546,7 +579,7 @@ class ErrorCard(MetaflowCard):
546
579
 
547
580
  RELOAD_POLICY = MetaflowCard.RELOAD_POLICY_ONCHANGE
548
581
 
549
- def __init__(self, options={}, components=[], graph=None):
582
+ def __init__(self, options={}, components=[], graph=None, **kwargs):
550
583
  self._only_repr = True
551
584
  self._graph = None if graph is None else transform_flow_graph(graph)
552
585
  self._components = components
@@ -602,9 +635,17 @@ class DefaultCardJSON(MetaflowCard):
602
635
 
603
636
  type = "default_json"
604
637
 
605
- def __init__(self, options=dict(only_repr=True), components=[], graph=None):
638
+ def __init__(
639
+ self,
640
+ options=dict(only_repr=True),
641
+ components=[],
642
+ graph=None,
643
+ flow=None,
644
+ **kwargs
645
+ ):
606
646
  self._only_repr = True
607
647
  self._graph = None if graph is None else transform_flow_graph(graph)
648
+ self._flow = flow
608
649
  if "only_repr" in options:
609
650
  self._only_repr = options["only_repr"]
610
651
  self._components = components
@@ -615,6 +656,7 @@ class DefaultCardJSON(MetaflowCard):
615
656
  only_repr=self._only_repr,
616
657
  graph=self._graph,
617
658
  components=self._components,
659
+ flow=self._flow,
618
660
  ).render()
619
661
  return json.dumps(final_component_dict)
620
662
 
@@ -629,9 +671,17 @@ class DefaultCard(MetaflowCard):
629
671
 
630
672
  type = "default"
631
673
 
632
- def __init__(self, options=dict(only_repr=True), components=[], graph=None):
674
+ def __init__(
675
+ self,
676
+ options=dict(only_repr=True),
677
+ components=[],
678
+ graph=None,
679
+ flow=None,
680
+ **kwargs
681
+ ):
633
682
  self._only_repr = True
634
683
  self._graph = None if graph is None else transform_flow_graph(graph)
684
+ self._flow = flow
635
685
  if "only_repr" in options:
636
686
  self._only_repr = options["only_repr"]
637
687
  self._components = components
@@ -646,6 +696,7 @@ class DefaultCard(MetaflowCard):
646
696
  graph=self._graph,
647
697
  components=self._components,
648
698
  runtime=runtime,
699
+ flow=self._flow,
649
700
  ).render()
650
701
  pt = self._get_mustache()
651
702
  data_dict = dict(
@@ -688,7 +739,7 @@ class BlankCard(MetaflowCard):
688
739
 
689
740
  type = "blank"
690
741
 
691
- def __init__(self, options=dict(title=""), components=[], graph=None):
742
+ def __init__(self, options=dict(title=""), components=[], graph=None, **kwargs):
692
743
  self._graph = None if graph is None else transform_flow_graph(graph)
693
744
  self._title = ""
694
745
  if "title" in options:
@@ -1,4 +1,5 @@
1
1
  from typing import TYPE_CHECKING
2
+ import uuid
2
3
 
3
4
  if TYPE_CHECKING:
4
5
  import metaflow
@@ -66,7 +67,7 @@ class MetaflowCard(object):
66
67
  # FIXME document runtime_data
67
68
  runtime_data = None
68
69
 
69
- def __init__(self, options={}, components=[], graph=None):
70
+ def __init__(self, options={}, components=[], graph=None, flow=None):
70
71
  pass
71
72
 
72
73
  def _get_mustache(self):
@@ -140,3 +141,17 @@ class MetaflowCardComponent(object):
140
141
  `render` returns a string or dictionary. This class can be called on the client side to dynamically add components to the `MetaflowCard`
141
142
  """
142
143
  raise NotImplementedError()
144
+
145
+
146
+ def create_component_id(component):
147
+ uuid_bit = "".join(uuid.uuid4().hex.split("-"))[:6]
148
+ return type(component).__name__.lower() + "_" + uuid_bit
149
+
150
+
151
+ def with_default_component_id(func):
152
+ def ret_func(self, *args, **kwargs):
153
+ if self.component_id is None:
154
+ self.component_id = create_component_id(self)
155
+ return func(self, *args, **kwargs)
156
+
157
+ return ret_func
@@ -1,4 +1,4 @@
1
- from typing import Any, List, Optional, Union
1
+ from typing import Any, List, Optional, Union, Callable
2
2
  from .basic import (
3
3
  LogComponent,
4
4
  ErrorComponent,
@@ -7,25 +7,13 @@ from .basic import (
7
7
  ImageComponent,
8
8
  SectionComponent,
9
9
  MarkdownComponent,
10
+ PythonCodeComponent,
10
11
  )
11
- from .card import MetaflowCardComponent
12
+ from .card import MetaflowCardComponent, with_default_component_id
12
13
  from .convert_to_native_type import TaskToDict, _full_classname
13
14
  from .renderer_tools import render_safely
14
15
  import uuid
15
-
16
-
17
- def create_component_id(component):
18
- uuid_bit = "".join(uuid.uuid4().hex.split("-"))[:6]
19
- return type(component).__name__.lower() + "_" + uuid_bit
20
-
21
-
22
- def with_default_component_id(func):
23
- def ret_func(self, *args, **kwargs):
24
- if self.component_id is None:
25
- self.component_id = create_component_id(self)
26
- return func(self, *args, **kwargs)
27
-
28
- return ret_func
16
+ import inspect
29
17
 
30
18
 
31
19
  def _warning_with_component(component, msg):
@@ -823,3 +811,63 @@ class VegaChart(UserComponent):
823
811
  if self._chart_inside_table and "autosize" not in self._spec:
824
812
  data["spec"]["autosize"] = "fit-x"
825
813
  return data
814
+
815
+
816
+ class PythonCode(UserComponent):
817
+ """
818
+ A component to display Python code with syntax highlighting.
819
+
820
+ Example:
821
+ ```python
822
+ @card
823
+ @step
824
+ def my_step(self):
825
+ # Using code_func
826
+ def my_function():
827
+ x = 1
828
+ y = 2
829
+ return x + y
830
+ current.card.append(
831
+ PythonCode(my_function)
832
+ )
833
+
834
+ # Using code_string
835
+ code = '''
836
+ def another_function():
837
+ return "Hello World"
838
+ '''
839
+ current.card.append(
840
+ PythonCode(code_string=code)
841
+ )
842
+ ```
843
+
844
+ Parameters
845
+ ----------
846
+ code_func : Callable[..., Any], optional, default None
847
+ The function whose source code should be displayed.
848
+ code_string : str, optional, default None
849
+ A string containing Python code to display.
850
+ Either code_func or code_string must be provided.
851
+ """
852
+
853
+ def __init__(
854
+ self,
855
+ code_func: Optional[Callable[..., Any]] = None,
856
+ code_string: Optional[str] = None,
857
+ ):
858
+ if code_func is not None:
859
+ self._code_string = inspect.getsource(code_func)
860
+ else:
861
+ self._code_string = code_string
862
+
863
+ @with_default_component_id
864
+ @render_safely
865
+ def render(self):
866
+ if self._code_string is None:
867
+ return ErrorComponent(
868
+ "`PythonCode` component requires a `code_func` or `code_string` argument. ",
869
+ "None provided for both",
870
+ ).render()
871
+ _code_component = PythonCodeComponent(self._code_string)
872
+ _code_component.component_id = self.component_id
873
+ return _code_component.render()