metaflow 2.12.26__tar.gz → 2.12.28__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 (360) hide show
  1. {metaflow-2.12.26/metaflow.egg-info → metaflow-2.12.28}/PKG-INFO +2 -2
  2. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/cli.py +31 -4
  3. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/client/core.py +77 -39
  4. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/metadata/metadata.py +6 -0
  5. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/argo/argo_workflows_cli.py +3 -3
  6. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/aws/step_functions/step_functions_cli.py +2 -2
  7. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/kubernetes/kubernetes_jobsets.py +1 -4
  8. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/resources_decorator.py +2 -2
  9. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/tag_cli.py +1 -4
  10. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/runner/metaflow_runner.py +4 -3
  11. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/system/system_logger.py +1 -19
  12. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/system/system_monitor.py +0 -24
  13. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/task.py +31 -25
  14. metaflow-2.12.28/metaflow/version.py +1 -0
  15. {metaflow-2.12.26 → metaflow-2.12.28/metaflow.egg-info}/PKG-INFO +2 -2
  16. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow.egg-info/requires.txt +1 -1
  17. metaflow-2.12.26/metaflow/version.py +0 -1
  18. {metaflow-2.12.26 → metaflow-2.12.28}/LICENSE +0 -0
  19. {metaflow-2.12.26 → metaflow-2.12.28}/MANIFEST.in +0 -0
  20. {metaflow-2.12.26 → metaflow-2.12.28}/README.md +0 -0
  21. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/R.py +0 -0
  22. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/__init__.py +0 -0
  23. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/__init__.py +0 -0
  24. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/click/__init__.py +0 -0
  25. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/click/_bashcomplete.py +0 -0
  26. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/click/_compat.py +0 -0
  27. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/click/_termui_impl.py +0 -0
  28. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/click/_textwrap.py +0 -0
  29. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/click/_unicodefun.py +0 -0
  30. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/click/_winconsole.py +0 -0
  31. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/click/core.py +0 -0
  32. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/click/decorators.py +0 -0
  33. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/click/exceptions.py +0 -0
  34. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/click/formatting.py +0 -0
  35. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/click/globals.py +0 -0
  36. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/click/parser.py +0 -0
  37. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/click/termui.py +0 -0
  38. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/click/testing.py +0 -0
  39. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/click/types.py +0 -0
  40. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/click/utils.py +0 -0
  41. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/importlib_metadata/__init__.py +0 -0
  42. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/importlib_metadata/_adapters.py +0 -0
  43. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/importlib_metadata/_collections.py +0 -0
  44. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/importlib_metadata/_compat.py +0 -0
  45. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/importlib_metadata/_functools.py +0 -0
  46. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/importlib_metadata/_itertools.py +0 -0
  47. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/importlib_metadata/_meta.py +0 -0
  48. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/importlib_metadata/_text.py +0 -0
  49. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/importlib_metadata/py.typed +0 -0
  50. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/packaging/__init__.py +0 -0
  51. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/packaging/_elffile.py +0 -0
  52. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/packaging/_manylinux.py +0 -0
  53. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/packaging/_musllinux.py +0 -0
  54. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/packaging/_parser.py +0 -0
  55. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/packaging/_structures.py +0 -0
  56. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/packaging/_tokenizer.py +0 -0
  57. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/packaging/markers.py +0 -0
  58. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/packaging/py.typed +0 -0
  59. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/packaging/requirements.py +0 -0
  60. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/packaging/specifiers.py +0 -0
  61. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/packaging/tags.py +0 -0
  62. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/packaging/utils.py +0 -0
  63. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/packaging/version.py +0 -0
  64. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/typeguard/__init__.py +0 -0
  65. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/typeguard/_checkers.py +0 -0
  66. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/typeguard/_config.py +0 -0
  67. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/typeguard/_decorators.py +0 -0
  68. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/typeguard/_exceptions.py +0 -0
  69. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/typeguard/_functions.py +0 -0
  70. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/typeguard/_importhook.py +0 -0
  71. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/typeguard/_memo.py +0 -0
  72. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/typeguard/_pytest_plugin.py +0 -0
  73. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/typeguard/_suppression.py +0 -0
  74. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/typeguard/_transformer.py +0 -0
  75. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/typeguard/_union_transformer.py +0 -0
  76. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/typeguard/_utils.py +0 -0
  77. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/typeguard/py.typed +0 -0
  78. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/typing_extensions.py +0 -0
  79. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/v3_5/__init__.py +0 -0
  80. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/v3_5/importlib_metadata/__init__.py +0 -0
  81. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/v3_5/importlib_metadata/_compat.py +0 -0
  82. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/v3_5/zipp.py +0 -0
  83. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/v3_6/__init__.py +0 -0
  84. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/v3_6/importlib_metadata/__init__.py +0 -0
  85. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/v3_6/importlib_metadata/_adapters.py +0 -0
  86. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/v3_6/importlib_metadata/_collections.py +0 -0
  87. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/v3_6/importlib_metadata/_compat.py +0 -0
  88. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/v3_6/importlib_metadata/_functools.py +0 -0
  89. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/v3_6/importlib_metadata/_itertools.py +0 -0
  90. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/v3_6/importlib_metadata/_meta.py +0 -0
  91. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/v3_6/importlib_metadata/_text.py +0 -0
  92. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/v3_6/importlib_metadata/py.typed +0 -0
  93. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/v3_6/typing_extensions.py +0 -0
  94. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/v3_6/zipp.py +0 -0
  95. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/_vendor/zipp.py +0 -0
  96. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/cards.py +0 -0
  97. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/cli_args.py +0 -0
  98. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/client/__init__.py +0 -0
  99. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/client/filecache.py +0 -0
  100. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/clone_util.py +0 -0
  101. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/cmd/__init__.py +0 -0
  102. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/cmd/configure_cmd.py +0 -0
  103. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/cmd/develop/__init__.py +0 -0
  104. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/cmd/develop/stub_generator.py +0 -0
  105. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/cmd/develop/stubs.py +0 -0
  106. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/cmd/main_cli.py +0 -0
  107. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/cmd/tutorials_cmd.py +0 -0
  108. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/cmd/util.py +0 -0
  109. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/cmd_with_io.py +0 -0
  110. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/datastore/__init__.py +0 -0
  111. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/datastore/content_addressed_store.py +0 -0
  112. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/datastore/datastore_set.py +0 -0
  113. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/datastore/datastore_storage.py +0 -0
  114. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/datastore/exceptions.py +0 -0
  115. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/datastore/flow_datastore.py +0 -0
  116. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/datastore/inputs.py +0 -0
  117. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/datastore/task_datastore.py +0 -0
  118. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/debug.py +0 -0
  119. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/decorators.py +0 -0
  120. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/event_logger.py +0 -0
  121. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/events.py +0 -0
  122. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/exception.py +0 -0
  123. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/extension_support/__init__.py +0 -0
  124. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/extension_support/_empty_file.py +0 -0
  125. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/extension_support/cmd.py +0 -0
  126. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/extension_support/integrations.py +0 -0
  127. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/extension_support/plugins.py +0 -0
  128. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/flowspec.py +0 -0
  129. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/graph.py +0 -0
  130. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/includefile.py +0 -0
  131. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/info_file.py +0 -0
  132. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/integrations.py +0 -0
  133. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/lint.py +0 -0
  134. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/metadata/__init__.py +0 -0
  135. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/metadata/heartbeat.py +0 -0
  136. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/metadata/util.py +0 -0
  137. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/metaflow_config.py +0 -0
  138. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/metaflow_config_funcs.py +0 -0
  139. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/metaflow_current.py +0 -0
  140. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/metaflow_environment.py +0 -0
  141. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/metaflow_profile.py +0 -0
  142. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/metaflow_version.py +0 -0
  143. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/mflog/__init__.py +0 -0
  144. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/mflog/mflog.py +0 -0
  145. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/mflog/save_logs.py +0 -0
  146. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/mflog/save_logs_periodically.py +0 -0
  147. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/mflog/tee.py +0 -0
  148. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/monitor.py +0 -0
  149. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/multicore_utils.py +0 -0
  150. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/package.py +0 -0
  151. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/parameters.py +0 -0
  152. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/__init__.py +0 -0
  153. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/airflow/__init__.py +0 -0
  154. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/airflow/airflow.py +0 -0
  155. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/airflow/airflow_cli.py +0 -0
  156. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/airflow/airflow_decorator.py +0 -0
  157. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/airflow/airflow_utils.py +0 -0
  158. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/airflow/dag.py +0 -0
  159. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/airflow/exception.py +0 -0
  160. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/airflow/plumbing/__init__.py +0 -0
  161. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/airflow/plumbing/set_parameters.py +0 -0
  162. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/airflow/sensors/__init__.py +0 -0
  163. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/airflow/sensors/base_sensor.py +0 -0
  164. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/airflow/sensors/external_task_sensor.py +0 -0
  165. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/airflow/sensors/s3_sensor.py +0 -0
  166. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/argo/__init__.py +0 -0
  167. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/argo/argo_client.py +0 -0
  168. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/argo/argo_events.py +0 -0
  169. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/argo/argo_workflows.py +0 -0
  170. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/argo/argo_workflows_decorator.py +0 -0
  171. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/argo/argo_workflows_deployer.py +0 -0
  172. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/argo/capture_error.py +0 -0
  173. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/argo/generate_input_paths.py +0 -0
  174. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/argo/jobset_input_paths.py +0 -0
  175. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/aws/__init__.py +0 -0
  176. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/aws/aws_client.py +0 -0
  177. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/aws/aws_utils.py +0 -0
  178. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/aws/batch/__init__.py +0 -0
  179. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/aws/batch/batch.py +0 -0
  180. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/aws/batch/batch_cli.py +0 -0
  181. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/aws/batch/batch_client.py +0 -0
  182. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/aws/batch/batch_decorator.py +0 -0
  183. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/aws/secrets_manager/__init__.py +0 -0
  184. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/aws/secrets_manager/aws_secrets_manager_secrets_provider.py +0 -0
  185. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/aws/step_functions/__init__.py +0 -0
  186. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/aws/step_functions/dynamo_db_client.py +0 -0
  187. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/aws/step_functions/event_bridge_client.py +0 -0
  188. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/aws/step_functions/production_token.py +0 -0
  189. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/aws/step_functions/schedule_decorator.py +0 -0
  190. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/aws/step_functions/set_batch_environment.py +0 -0
  191. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/aws/step_functions/step_functions.py +0 -0
  192. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/aws/step_functions/step_functions_client.py +0 -0
  193. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/aws/step_functions/step_functions_decorator.py +0 -0
  194. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/aws/step_functions/step_functions_deployer.py +0 -0
  195. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/azure/__init__.py +0 -0
  196. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/azure/azure_credential.py +0 -0
  197. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/azure/azure_exceptions.py +0 -0
  198. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/azure/azure_secret_manager_secrets_provider.py +0 -0
  199. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/azure/azure_tail.py +0 -0
  200. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/azure/azure_utils.py +0 -0
  201. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/azure/blob_service_client_factory.py +0 -0
  202. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/azure/includefile_support.py +0 -0
  203. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/cards/__init__.py +0 -0
  204. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/cards/card_cli.py +0 -0
  205. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/cards/card_client.py +0 -0
  206. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/cards/card_creator.py +0 -0
  207. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/cards/card_datastore.py +0 -0
  208. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/cards/card_decorator.py +0 -0
  209. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/cards/card_modules/__init__.py +0 -0
  210. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/cards/card_modules/base.html +0 -0
  211. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/cards/card_modules/basic.py +0 -0
  212. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/cards/card_modules/bundle.css +0 -0
  213. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/cards/card_modules/card.py +0 -0
  214. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/cards/card_modules/chevron/__init__.py +0 -0
  215. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/cards/card_modules/chevron/main.py +0 -0
  216. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/cards/card_modules/chevron/metadata.py +0 -0
  217. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/cards/card_modules/chevron/renderer.py +0 -0
  218. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/cards/card_modules/chevron/tokenizer.py +0 -0
  219. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/cards/card_modules/components.py +0 -0
  220. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/cards/card_modules/convert_to_native_type.py +0 -0
  221. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/cards/card_modules/main.js +0 -0
  222. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/cards/card_modules/renderer_tools.py +0 -0
  223. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/cards/card_modules/test_cards.py +0 -0
  224. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/cards/card_resolver.py +0 -0
  225. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/cards/card_server.py +0 -0
  226. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/cards/card_viewer/viewer.html +0 -0
  227. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/cards/component_serializer.py +0 -0
  228. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/cards/exception.py +0 -0
  229. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/catch_decorator.py +0 -0
  230. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/datastores/__init__.py +0 -0
  231. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/datastores/azure_storage.py +0 -0
  232. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/datastores/gs_storage.py +0 -0
  233. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/datastores/local_storage.py +0 -0
  234. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/datastores/s3_storage.py +0 -0
  235. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/datatools/__init__.py +0 -0
  236. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/datatools/local.py +0 -0
  237. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/datatools/s3/__init__.py +0 -0
  238. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/datatools/s3/s3.py +0 -0
  239. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/datatools/s3/s3op.py +0 -0
  240. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/datatools/s3/s3tail.py +0 -0
  241. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/datatools/s3/s3util.py +0 -0
  242. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/debug_logger.py +0 -0
  243. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/debug_monitor.py +0 -0
  244. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/env_escape/__init__.py +0 -0
  245. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/env_escape/client.py +0 -0
  246. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/env_escape/client_modules.py +0 -0
  247. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/env_escape/communication/__init__.py +0 -0
  248. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/env_escape/communication/bytestream.py +0 -0
  249. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/env_escape/communication/channel.py +0 -0
  250. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/env_escape/communication/socket_bytestream.py +0 -0
  251. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/env_escape/communication/utils.py +0 -0
  252. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/env_escape/configurations/emulate_test_lib/__init__.py +0 -0
  253. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/env_escape/configurations/emulate_test_lib/overrides.py +0 -0
  254. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/env_escape/configurations/emulate_test_lib/server_mappings.py +0 -0
  255. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/env_escape/configurations/test_lib_impl/__init__.py +0 -0
  256. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/env_escape/configurations/test_lib_impl/test_lib.py +0 -0
  257. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/env_escape/consts.py +0 -0
  258. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/env_escape/data_transferer.py +0 -0
  259. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/env_escape/exception_transferer.py +0 -0
  260. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/env_escape/override_decorators.py +0 -0
  261. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/env_escape/server.py +0 -0
  262. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/env_escape/stub.py +0 -0
  263. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/env_escape/utils.py +0 -0
  264. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/environment_decorator.py +0 -0
  265. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/events_decorator.py +0 -0
  266. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/frameworks/__init__.py +0 -0
  267. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/frameworks/pytorch.py +0 -0
  268. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/gcp/__init__.py +0 -0
  269. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/gcp/gcp_secret_manager_secrets_provider.py +0 -0
  270. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/gcp/gs_exceptions.py +0 -0
  271. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/gcp/gs_storage_client_factory.py +0 -0
  272. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/gcp/gs_tail.py +0 -0
  273. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/gcp/gs_utils.py +0 -0
  274. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/gcp/includefile_support.py +0 -0
  275. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/kubernetes/__init__.py +0 -0
  276. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/kubernetes/kube_utils.py +0 -0
  277. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/kubernetes/kubernetes.py +0 -0
  278. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/kubernetes/kubernetes_cli.py +0 -0
  279. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/kubernetes/kubernetes_client.py +0 -0
  280. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/kubernetes/kubernetes_decorator.py +0 -0
  281. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/kubernetes/kubernetes_job.py +0 -0
  282. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/logs_cli.py +0 -0
  283. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/metadata/__init__.py +0 -0
  284. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/metadata/local.py +0 -0
  285. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/metadata/service.py +0 -0
  286. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/package_cli.py +0 -0
  287. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/parallel_decorator.py +0 -0
  288. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/project_decorator.py +0 -0
  289. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/pypi/__init__.py +0 -0
  290. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/pypi/bootstrap.py +0 -0
  291. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/pypi/conda_decorator.py +0 -0
  292. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/pypi/conda_environment.py +0 -0
  293. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/pypi/micromamba.py +0 -0
  294. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/pypi/pip.py +0 -0
  295. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/pypi/pypi_decorator.py +0 -0
  296. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/pypi/pypi_environment.py +0 -0
  297. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/pypi/utils.py +0 -0
  298. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/retry_decorator.py +0 -0
  299. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/secrets/__init__.py +0 -0
  300. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/secrets/inline_secrets_provider.py +0 -0
  301. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/secrets/secrets_decorator.py +0 -0
  302. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/storage_executor.py +0 -0
  303. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/test_unbounded_foreach_decorator.py +0 -0
  304. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/plugins/timeout_decorator.py +0 -0
  305. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/procpoll.py +0 -0
  306. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/py.typed +0 -0
  307. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/pylint_wrapper.py +0 -0
  308. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/runner/__init__.py +0 -0
  309. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/runner/click_api.py +0 -0
  310. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/runner/deployer.py +0 -0
  311. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/runner/nbdeploy.py +0 -0
  312. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/runner/nbrun.py +0 -0
  313. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/runner/subprocess_manager.py +0 -0
  314. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/runner/utils.py +0 -0
  315. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/runtime.py +0 -0
  316. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/sidecar/__init__.py +0 -0
  317. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/sidecar/sidecar.py +0 -0
  318. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/sidecar/sidecar_messages.py +0 -0
  319. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/sidecar/sidecar_subprocess.py +0 -0
  320. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/sidecar/sidecar_worker.py +0 -0
  321. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/system/__init__.py +0 -0
  322. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/system/system_utils.py +0 -0
  323. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/tagging_util.py +0 -0
  324. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/tracing/__init__.py +0 -0
  325. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/tracing/propagator.py +0 -0
  326. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/tracing/span_exporter.py +0 -0
  327. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/tracing/tracing_modules.py +0 -0
  328. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/tuple_util.py +0 -0
  329. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/tutorials/00-helloworld/README.md +0 -0
  330. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/tutorials/00-helloworld/helloworld.py +0 -0
  331. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/tutorials/01-playlist/README.md +0 -0
  332. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/tutorials/01-playlist/movies.csv +0 -0
  333. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/tutorials/01-playlist/playlist.ipynb +0 -0
  334. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/tutorials/01-playlist/playlist.py +0 -0
  335. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/tutorials/02-statistics/README.md +0 -0
  336. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/tutorials/02-statistics/movies.csv +0 -0
  337. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/tutorials/02-statistics/stats.ipynb +0 -0
  338. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/tutorials/02-statistics/stats.py +0 -0
  339. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/tutorials/03-playlist-redux/README.md +0 -0
  340. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/tutorials/03-playlist-redux/playlist.py +0 -0
  341. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/tutorials/04-playlist-plus/README.md +0 -0
  342. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/tutorials/04-playlist-plus/playlist.py +0 -0
  343. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/tutorials/05-hello-cloud/README.md +0 -0
  344. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/tutorials/05-hello-cloud/hello-cloud.ipynb +0 -0
  345. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/tutorials/05-hello-cloud/hello-cloud.py +0 -0
  346. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/tutorials/06-statistics-redux/README.md +0 -0
  347. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/tutorials/06-statistics-redux/stats.ipynb +0 -0
  348. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/tutorials/07-worldview/README.md +0 -0
  349. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/tutorials/07-worldview/worldview.ipynb +0 -0
  350. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/tutorials/08-autopilot/README.md +0 -0
  351. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/tutorials/08-autopilot/autopilot.ipynb +0 -0
  352. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/unbounded_foreach.py +0 -0
  353. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/util.py +0 -0
  354. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow/vendor.py +0 -0
  355. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow.egg-info/SOURCES.txt +0 -0
  356. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow.egg-info/dependency_links.txt +0 -0
  357. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow.egg-info/entry_points.txt +0 -0
  358. {metaflow-2.12.26 → metaflow-2.12.28}/metaflow.egg-info/top_level.txt +0 -0
  359. {metaflow-2.12.26 → metaflow-2.12.28}/setup.cfg +0 -0
  360. {metaflow-2.12.26 → metaflow-2.12.28}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: metaflow
3
- Version: 2.12.26
3
+ Version: 2.12.28
4
4
  Summary: Metaflow: More Data Science, Less Engineering
5
5
  Author: Metaflow Developers
6
6
  Author-email: help@metaflow.org
@@ -26,7 +26,7 @@ License-File: LICENSE
26
26
  Requires-Dist: requests
27
27
  Requires-Dist: boto3
28
28
  Provides-Extra: stubs
29
- Requires-Dist: metaflow-stubs==2.12.26; extra == "stubs"
29
+ Requires-Dist: metaflow-stubs==2.12.28; extra == "stubs"
30
30
 
31
31
  ![Metaflow_Logo_Horizontal_FullColor_Ribbon_Dark_RGB](https://user-images.githubusercontent.com/763451/89453116-96a57e00-d713-11ea-9fa6-82b29d4d6eff.png)
32
32
 
@@ -701,12 +701,12 @@ def resume(
701
701
  runtime.persist_constants()
702
702
 
703
703
  if runner_attribute_file:
704
- with open(runner_attribute_file, "w") as f:
704
+ with open(runner_attribute_file, "w", encoding="utf-8") as f:
705
705
  json.dump(
706
706
  {
707
707
  "run_id": runtime.run_id,
708
708
  "flow_name": obj.flow.name,
709
- "metadata": get_metadata(),
709
+ "metadata": obj.metadata.metadata_str(),
710
710
  },
711
711
  f,
712
712
  )
@@ -716,6 +716,20 @@ def resume(
716
716
  if runtime.should_skip_clone_only_execution():
717
717
  return
718
718
 
719
+ current._update_env(
720
+ {
721
+ "run_id": runtime.run_id,
722
+ }
723
+ )
724
+ _system_logger.log_event(
725
+ level="info",
726
+ module="metaflow.resume",
727
+ name="start",
728
+ payload={
729
+ "msg": "Resuming run",
730
+ },
731
+ )
732
+
719
733
  with runtime.run_heartbeat():
720
734
  if clone_only:
721
735
  runtime.clone_original_run()
@@ -775,16 +789,29 @@ def run(
775
789
  write_file(run_id_file, runtime.run_id)
776
790
 
777
791
  obj.flow._set_constants(obj.graph, kwargs)
792
+ current._update_env(
793
+ {
794
+ "run_id": runtime.run_id,
795
+ }
796
+ )
797
+ _system_logger.log_event(
798
+ level="info",
799
+ module="metaflow.run",
800
+ name="start",
801
+ payload={
802
+ "msg": "Starting run",
803
+ },
804
+ )
778
805
  runtime.print_workflow_info()
779
806
  runtime.persist_constants()
780
807
 
781
808
  if runner_attribute_file:
782
- with open(runner_attribute_file, "w") as f:
809
+ with open(runner_attribute_file, "w", encoding="utf-8") as f:
783
810
  json.dump(
784
811
  {
785
812
  "run_id": runtime.run_id,
786
813
  "flow_name": obj.flow.name,
787
- "metadata": get_metadata(),
814
+ "metadata": obj.metadata.metadata_str(),
788
815
  },
789
816
  f,
790
817
  )
@@ -16,6 +16,7 @@ from typing import (
16
16
  List,
17
17
  NamedTuple,
18
18
  Optional,
19
+ TYPE_CHECKING,
19
20
  Tuple,
20
21
  )
21
22
 
@@ -37,6 +38,9 @@ from metaflow.util import cached_property, is_stringish, resolve_identity, to_un
37
38
  from ..info_file import INFO_FILE
38
39
  from .filecache import FileCache
39
40
 
41
+ if TYPE_CHECKING:
42
+ from metaflow.metadata import MetadataProvider
43
+
40
44
  try:
41
45
  # python2
42
46
  import cPickle as pickle
@@ -82,28 +86,16 @@ def metadata(ms: str) -> str:
82
86
  get_metadata()).
83
87
  """
84
88
  global current_metadata
85
- infos = ms.split("@", 1)
86
- types = [m.TYPE for m in METADATA_PROVIDERS]
87
- if infos[0] in types:
88
- current_metadata = [m for m in METADATA_PROVIDERS if m.TYPE == infos[0]][0]
89
- if len(infos) > 1:
90
- current_metadata.INFO = infos[1]
91
- else:
92
- # Deduce from ms; if starts with http, use service or else use local
93
- if ms.startswith("http"):
94
- metadata_type = "service"
95
- else:
96
- metadata_type = "local"
97
- res = [m for m in METADATA_PROVIDERS if m.TYPE == metadata_type]
98
- if not res:
99
- print(
100
- "Cannot find a '%s' metadata provider -- "
101
- "try specifying one explicitly using <type>@<info>",
102
- metadata_type,
103
- )
104
- return get_metadata()
105
- current_metadata = res[0]
106
- current_metadata.INFO = ms
89
+ provider, info = _metadata(ms)
90
+ if provider is None:
91
+ print(
92
+ "Cannot find a metadata provider -- "
93
+ "try specifying one explicitly using <type>@<info>",
94
+ )
95
+ return get_metadata()
96
+ current_metadata = provider
97
+ if info:
98
+ current_metadata.INFO = info
107
99
  return get_metadata()
108
100
 
109
101
 
@@ -127,7 +119,7 @@ def get_metadata() -> str:
127
119
  """
128
120
  if current_metadata is False:
129
121
  default_metadata()
130
- return "%s@%s" % (current_metadata.TYPE, current_metadata.INFO)
122
+ return current_metadata.metadata_str()
131
123
 
132
124
 
133
125
  def default_metadata() -> str:
@@ -268,9 +260,16 @@ class MetaflowObject(object):
268
260
  _object: Optional["MetaflowObject"] = None,
269
261
  _parent: Optional["MetaflowObject"] = None,
270
262
  _namespace_check: bool = True,
263
+ _metaflow: Optional["Metaflow"] = None,
271
264
  _current_namespace: Optional[str] = None,
265
+ _current_metadata: Optional[str] = None,
272
266
  ):
273
- self._metaflow = Metaflow()
267
+ # the default namespace is activated lazily at the first
268
+ # get_namespace(). The other option of activating
269
+ # the namespace at the import time is problematic, since there
270
+ # may be other modules that alter environment variables etc.
271
+ # which may affect the namespace setting.
272
+ self._metaflow = Metaflow(_current_metadata) or _metaflow
274
273
  self._parent = _parent
275
274
  self._path_components = None
276
275
  self._attempt = attempt
@@ -390,6 +389,7 @@ class MetaflowObject(object):
390
389
  attempt=self._attempt,
391
390
  _object=obj,
392
391
  _parent=self,
392
+ _metaflow=self._metaflow,
393
393
  _namespace_check=self._namespace_check,
394
394
  _current_namespace=(
395
395
  self._current_namespace if self._namespace_check else None
@@ -505,6 +505,7 @@ class MetaflowObject(object):
505
505
  attempt=self._attempt,
506
506
  _object=obj,
507
507
  _parent=self,
508
+ _metaflow=self._metaflow,
508
509
  _namespace_check=self._namespace_check,
509
510
  _current_namespace=(
510
511
  self._current_namespace if self._namespace_check else None
@@ -552,7 +553,25 @@ class MetaflowObject(object):
552
553
  _current_namespace=ns,
553
554
  )
554
555
 
555
- _UNPICKLE_FUNC = {"2.8.4": _unpickle_284, "2.12.4": _unpickle_2124}
556
+ def _unpickle_21227(self, data):
557
+ if len(data) != 5:
558
+ raise MetaflowInternalError(
559
+ "Unexpected size of array: {}".format(len(data))
560
+ )
561
+ pathspec, attempt, md, ns, namespace_check = data
562
+ self.__init__(
563
+ pathspec=pathspec,
564
+ attempt=attempt,
565
+ _namespace_check=namespace_check,
566
+ _current_metadata=md,
567
+ _current_namespace=ns,
568
+ )
569
+
570
+ _UNPICKLE_FUNC = {
571
+ "2.8.4": _unpickle_284,
572
+ "2.12.4": _unpickle_2124,
573
+ "2.12.27": _unpickle_21227,
574
+ }
556
575
 
557
576
  def __setstate__(self, state):
558
577
  """
@@ -595,10 +614,11 @@ class MetaflowObject(object):
595
614
  # checking for the namespace even after unpickling since we will know which
596
615
  # namespace to check.
597
616
  return {
598
- "version": "2.12.4",
617
+ "version": "2.12.27",
599
618
  "data": [
600
619
  self.pathspec,
601
620
  self._attempt,
621
+ self._metaflow.metadata.metadata_str(),
602
622
  self._current_namespace,
603
623
  self._namespace_check,
604
624
  ],
@@ -2288,17 +2308,16 @@ class Metaflow(object):
2288
2308
  if it has at least one run in the namespace.
2289
2309
  """
2290
2310
 
2291
- def __init__(self):
2292
- # the default namespace is activated lazily at the first object
2293
- # invocation or get_namespace(). The other option of activating
2294
- # the namespace at the import time is problematic, since there
2295
- # may be other modules that alter environment variables etc.
2296
- # which may affect the namescape setting.
2297
- if current_namespace is False:
2298
- default_namespace()
2299
- if current_metadata is False:
2300
- default_metadata()
2301
- self.metadata = current_metadata
2311
+ def __init__(self, _current_metadata: Optional[str] = None):
2312
+ if _current_metadata:
2313
+ provider, info = _metadata(_current_metadata)
2314
+ self.metadata = provider
2315
+ if info:
2316
+ self.metadata.INFO = info
2317
+ else:
2318
+ if current_metadata is False:
2319
+ default_metadata()
2320
+ self.metadata = current_metadata
2302
2321
 
2303
2322
  @property
2304
2323
  def flows(self) -> List[Flow]:
@@ -2335,7 +2354,7 @@ class Metaflow(object):
2335
2354
  all_flows = all_flows if all_flows else []
2336
2355
  for flow in all_flows:
2337
2356
  try:
2338
- v = Flow(_object=flow)
2357
+ v = Flow(_object=flow, _metaflow=self)
2339
2358
  yield v
2340
2359
  except MetaflowNamespaceMismatch:
2341
2360
  continue
@@ -2359,7 +2378,26 @@ class Metaflow(object):
2359
2378
  Flow
2360
2379
  Flow with the given name.
2361
2380
  """
2362
- return Flow(name)
2381
+ return Flow(name, _metaflow=self)
2382
+
2383
+
2384
+ def _metadata(ms: str) -> Tuple[Optional["MetadataProvider"], Optional[str]]:
2385
+ infos = ms.split("@", 1)
2386
+ types = [m.TYPE for m in METADATA_PROVIDERS]
2387
+ if infos[0] in types:
2388
+ provider = [m for m in METADATA_PROVIDERS if m.TYPE == infos[0]][0]
2389
+ if len(infos) > 1:
2390
+ return provider, infos[1]
2391
+ return provider, None
2392
+ # Deduce from ms; if starts with http, use service or else use local
2393
+ if ms.startswith("http"):
2394
+ metadata_type = "service"
2395
+ else:
2396
+ metadata_type = "local"
2397
+ res = [m for m in METADATA_PROVIDERS if m.TYPE == metadata_type]
2398
+ if not res:
2399
+ return None, None
2400
+ return res[0], ms
2363
2401
 
2364
2402
 
2365
2403
  _CLASSES["flow"] = Flow
@@ -76,6 +76,12 @@ class ObjectOrder:
76
76
 
77
77
  @with_metaclass(MetadataProviderMeta)
78
78
  class MetadataProvider(object):
79
+ TYPE = None
80
+
81
+ @classmethod
82
+ def metadata_str(cls):
83
+ return "%s@%s" % (cls.TYPE, cls.INFO)
84
+
79
85
  @classmethod
80
86
  def compute_info(cls, val):
81
87
  """
@@ -226,12 +226,12 @@ def create(
226
226
  validate_tags(tags)
227
227
 
228
228
  if deployer_attribute_file:
229
- with open(deployer_attribute_file, "w") as f:
229
+ with open(deployer_attribute_file, "w", encoding="utf-8") as f:
230
230
  json.dump(
231
231
  {
232
232
  "name": obj.workflow_name,
233
233
  "flow_name": obj.flow.name,
234
- "metadata": get_metadata(),
234
+ "metadata": obj.metadata.metadata_str(),
235
235
  },
236
236
  f,
237
237
  )
@@ -657,7 +657,7 @@ def trigger(obj, run_id_file=None, deployer_attribute_file=None, **kwargs):
657
657
  json.dump(
658
658
  {
659
659
  "name": obj.workflow_name,
660
- "metadata": get_metadata(),
660
+ "metadata": obj.metadata.metadata_str(),
661
661
  "pathspec": "/".join((obj.flow.name, run_id)),
662
662
  },
663
663
  f,
@@ -162,7 +162,7 @@ def create(
162
162
  {
163
163
  "name": obj.state_machine_name,
164
164
  "flow_name": obj.flow.name,
165
- "metadata": get_metadata(),
165
+ "metadata": obj.metadata.metadata_str(),
166
166
  },
167
167
  f,
168
168
  )
@@ -502,7 +502,7 @@ def trigger(obj, run_id_file=None, deployer_attribute_file=None, **kwargs):
502
502
  json.dump(
503
503
  {
504
504
  "name": obj.state_machine_name,
505
- "metadata": get_metadata(),
505
+ "metadata": obj.metadata.metadata_str(),
506
506
  "pathspec": "/".join((obj.flow.name, run_id)),
507
507
  },
508
508
  f,
@@ -332,11 +332,8 @@ class RunningJobSet(object):
332
332
  name=self._name,
333
333
  )
334
334
 
335
- # Suspend the jobset and set the replica's to Zero.
336
- #
335
+ # Suspend the jobset
337
336
  obj["spec"]["suspend"] = True
338
- for replicated_job in obj["spec"]["replicatedJobs"]:
339
- replicated_job["replicas"] = 0
340
337
 
341
338
  api_instance.replace_namespaced_custom_object(
342
339
  group=self._group,
@@ -23,7 +23,7 @@ class ResourcesDecorator(StepDecorator):
23
23
  ----------
24
24
  cpu : int, default 1
25
25
  Number of CPUs required for this step.
26
- gpu : int, default 0
26
+ gpu : int, optional, default None
27
27
  Number of GPUs required for this step.
28
28
  disk : int, optional, default None
29
29
  Disk size (in MB) required for this step. Only applies on Kubernetes.
@@ -37,7 +37,7 @@ class ResourcesDecorator(StepDecorator):
37
37
  name = "resources"
38
38
  defaults = {
39
39
  "cpu": "1",
40
- "gpu": "0",
40
+ "gpu": None,
41
41
  "disk": None,
42
42
  "memory": "4096",
43
43
  "shared_memory": None,
@@ -225,10 +225,7 @@ def _get_client_run_obj(obj, run_id, user_namespace):
225
225
 
226
226
 
227
227
  def _set_current(obj):
228
- current._set_env(
229
- metadata_str="%s@%s"
230
- % (obj.metadata.__class__.TYPE, obj.metadata.__class__.INFO)
231
- )
228
+ current._set_env(metadata_str=obj.metadata.metadata_str())
232
229
 
233
230
 
234
231
  @click.group()
@@ -6,7 +6,7 @@ import tempfile
6
6
 
7
7
  from typing import Dict, Iterator, Optional, Tuple
8
8
 
9
- from metaflow import Run, metadata
9
+ from metaflow import Run
10
10
 
11
11
  from .utils import handle_timeout
12
12
  from .subprocess_manager import CommandManager, SubprocessManager
@@ -275,9 +275,10 @@ class Runner(object):
275
275
 
276
276
  # Set the correct metadata from the runner_attribute file corresponding to this run.
277
277
  metadata_for_flow = content.get("metadata")
278
- metadata(metadata_for_flow)
279
278
 
280
- run_object = Run(pathspec, _namespace_check=False)
279
+ run_object = Run(
280
+ pathspec, _namespace_check=False, _current_metadata=metadata_for_flow
281
+ )
281
282
  return ExecutingRun(self, command_obj, run_object)
282
283
 
283
284
  def run(self, **kwargs) -> ExecutingRun:
@@ -7,26 +7,11 @@ class SystemLogger(object):
7
7
  def __init__(self):
8
8
  self._logger = None
9
9
  self._flow_name = None
10
- self._context = {}
11
- self._is_context_updated = False
12
10
 
13
11
  def __del__(self):
14
12
  if self._flow_name == "not_a_real_flow":
15
13
  self.logger.terminate()
16
14
 
17
- def update_context(self, context: Dict[str, Any]):
18
- """
19
- Update the global context maintained by the system logger.
20
-
21
- Parameters
22
- ----------
23
- context : Dict[str, Any]
24
- A dictionary containing the context to update.
25
-
26
- """
27
- self._is_context_updated = True
28
- self._context.update(context)
29
-
30
15
  def init_system_logger(
31
16
  self, flow_name: str, logger: "metaflow.event_logger.NullEventLogger"
32
17
  ):
@@ -71,7 +56,7 @@ class SystemLogger(object):
71
56
  "false",
72
57
  "",
73
58
  ):
74
- print("system monitor: %s" % msg, file=sys.stderr)
59
+ print("system logger: %s" % msg, file=sys.stderr)
75
60
 
76
61
  def log_event(
77
62
  self, level: str, module: str, name: str, payload: Optional[Any] = None
@@ -96,8 +81,5 @@ class SystemLogger(object):
96
81
  "module": module,
97
82
  "name": name,
98
83
  "payload": payload if payload is not None else {},
99
- "context": self._context,
100
- "is_context_updated": self._is_context_updated,
101
84
  }
102
85
  )
103
- self._is_context_updated = False
@@ -9,35 +9,11 @@ class SystemMonitor(object):
9
9
  def __init__(self):
10
10
  self._monitor = None
11
11
  self._flow_name = None
12
- self._context = {}
13
12
 
14
13
  def __del__(self):
15
14
  if self._flow_name == "not_a_real_flow":
16
15
  self.monitor.terminate()
17
16
 
18
- def update_context(self, context: Dict[str, Any]):
19
- """
20
- Update the global context maintained by the system monitor.
21
-
22
- Parameters
23
- ----------
24
- context : Dict[str, Any]
25
- A dictionary containing the context to update.
26
-
27
- """
28
- from metaflow.sidecar import Message, MessageTypes
29
-
30
- self._context.update(context)
31
- self.monitor.send(
32
- Message(
33
- MessageTypes.MUST_SEND,
34
- {
35
- "is_context_updated": True,
36
- **self._context,
37
- },
38
- )
39
- )
40
-
41
17
  def init_system_monitor(
42
18
  self, flow_name: str, monitor: "metaflow.monitor.NullMonitor"
43
19
  ):
@@ -306,8 +306,6 @@ class MetaflowTask(object):
306
306
  "origin_run_id": origin_run_id,
307
307
  "origin_task_id": origin_task_id,
308
308
  }
309
- _system_logger.update_context(task_payload)
310
- _system_monitor.update_context(task_payload)
311
309
 
312
310
  msg = "Cloning task from {}/{}/{}/{} to {}/{}/{}/{}".format(
313
311
  self.flow.name,
@@ -512,8 +510,7 @@ class MetaflowTask(object):
512
510
  origin_run_id=origin_run_id,
513
511
  namespace=resolve_identity(),
514
512
  username=get_username(),
515
- metadata_str="%s@%s"
516
- % (self.metadata.__class__.TYPE, self.metadata.__class__.INFO),
513
+ metadata_str=self.metadata.metadata_str(),
517
514
  is_running=True,
518
515
  tags=self.metadata.sticky_tags,
519
516
  )
@@ -546,9 +543,6 @@ class MetaflowTask(object):
546
543
  "project_flow_name": current.get("project_flow_name"),
547
544
  "trace_id": trace_id or None,
548
545
  }
549
-
550
- _system_logger.update_context(task_payload)
551
- _system_monitor.update_context(task_payload)
552
546
  start = time.time()
553
547
  self.metadata.start_task_heartbeat(self.flow.name, run_id, step_name, task_id)
554
548
  with self.monitor.measure("metaflow.task.duration"):
@@ -593,7 +587,8 @@ class MetaflowTask(object):
593
587
  {
594
588
  "parameter_names": self._init_parameters(
595
589
  inputs[0], passdown=True
596
- )
590
+ ),
591
+ "graph_info": self.flow._graph_info,
597
592
  }
598
593
  )
599
594
  else:
@@ -617,7 +612,8 @@ class MetaflowTask(object):
617
612
  {
618
613
  "parameter_names": self._init_parameters(
619
614
  inputs[0], passdown=False
620
- )
615
+ ),
616
+ "graph_info": self.flow._graph_info,
621
617
  }
622
618
  )
623
619
 
@@ -709,24 +705,34 @@ class MetaflowTask(object):
709
705
  name="end",
710
706
  payload={**task_payload, "msg": "Task ended"},
711
707
  )
712
-
713
- attempt_ok = str(bool(self.flow._task_ok))
714
- self.metadata.register_metadata(
715
- run_id,
716
- step_name,
717
- task_id,
718
- [
719
- MetaDatum(
720
- field="attempt_ok",
721
- value=attempt_ok,
722
- type="internal_attempt_status",
723
- tags=["attempt_id:{0}".format(retry_count)],
724
- )
725
- ],
726
- )
708
+ try:
709
+ # persisting might fail due to unpicklable artifacts.
710
+ output.persist(self.flow)
711
+ except Exception as ex:
712
+ self.flow._task_ok = False
713
+ raise ex
714
+ finally:
715
+ # The attempt_ok metadata is used to determine task status so it is important
716
+ # we ensure that it is written even in case of preceding failures.
717
+ # f.ex. failing to serialize artifacts leads to a non-zero exit code for the process,
718
+ # even if user code finishes successfully. Flow execution will not continue due to the exit,
719
+ # so arguably we should mark the task as failed.
720
+ attempt_ok = str(bool(self.flow._task_ok))
721
+ self.metadata.register_metadata(
722
+ run_id,
723
+ step_name,
724
+ task_id,
725
+ [
726
+ MetaDatum(
727
+ field="attempt_ok",
728
+ value=attempt_ok,
729
+ type="internal_attempt_status",
730
+ tags=["attempt_id:{0}".format(retry_count)],
731
+ )
732
+ ],
733
+ )
727
734
 
728
735
  output.save_metadata({"task_end": {}})
729
- output.persist(self.flow)
730
736
 
731
737
  # this writes a success marker indicating that the
732
738
  # "transaction" is done
@@ -0,0 +1 @@
1
+ metaflow_version = "2.12.28"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: metaflow
3
- Version: 2.12.26
3
+ Version: 2.12.28
4
4
  Summary: Metaflow: More Data Science, Less Engineering
5
5
  Author: Metaflow Developers
6
6
  Author-email: help@metaflow.org
@@ -26,7 +26,7 @@ License-File: LICENSE
26
26
  Requires-Dist: requests
27
27
  Requires-Dist: boto3
28
28
  Provides-Extra: stubs
29
- Requires-Dist: metaflow-stubs==2.12.26; extra == "stubs"
29
+ Requires-Dist: metaflow-stubs==2.12.28; extra == "stubs"
30
30
 
31
31
  ![Metaflow_Logo_Horizontal_FullColor_Ribbon_Dark_RGB](https://user-images.githubusercontent.com/763451/89453116-96a57e00-d713-11ea-9fa6-82b29d4d6eff.png)
32
32
 
@@ -2,4 +2,4 @@ requests
2
2
  boto3
3
3
 
4
4
  [stubs]
5
- metaflow-stubs==2.12.26
5
+ metaflow-stubs==2.12.28
@@ -1 +0,0 @@
1
- metaflow_version = "2.12.26"
File without changes
File without changes
File without changes
File without changes