metaflow 2.13.4__tar.gz → 2.13.5__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 (375) hide show
  1. {metaflow-2.13.4/metaflow.egg-info → metaflow-2.13.5}/PKG-INFO +2 -2
  2. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/__init__.py +5 -0
  3. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/argo/argo_workflows.py +1 -0
  4. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/kubernetes/kubernetes_cli.py +1 -1
  5. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/kubernetes/kubernetes_decorator.py +8 -0
  6. metaflow-2.13.5/metaflow/plugins/kubernetes/spot_metadata_cli.py +69 -0
  7. metaflow-2.13.5/metaflow/plugins/kubernetes/spot_monitor_sidecar.py +109 -0
  8. metaflow-2.13.5/metaflow/version.py +1 -0
  9. {metaflow-2.13.4 → metaflow-2.13.5/metaflow.egg-info}/PKG-INFO +2 -2
  10. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow.egg-info/SOURCES.txt +2 -0
  11. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow.egg-info/requires.txt +1 -1
  12. metaflow-2.13.4/metaflow/version.py +0 -1
  13. {metaflow-2.13.4 → metaflow-2.13.5}/LICENSE +0 -0
  14. {metaflow-2.13.4 → metaflow-2.13.5}/MANIFEST.in +0 -0
  15. {metaflow-2.13.4 → metaflow-2.13.5}/README.md +0 -0
  16. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/R.py +0 -0
  17. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/__init__.py +0 -0
  18. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/__init__.py +0 -0
  19. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/click/__init__.py +0 -0
  20. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/click/_bashcomplete.py +0 -0
  21. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/click/_compat.py +0 -0
  22. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/click/_termui_impl.py +0 -0
  23. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/click/_textwrap.py +0 -0
  24. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/click/_unicodefun.py +0 -0
  25. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/click/_winconsole.py +0 -0
  26. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/click/core.py +0 -0
  27. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/click/decorators.py +0 -0
  28. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/click/exceptions.py +0 -0
  29. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/click/formatting.py +0 -0
  30. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/click/globals.py +0 -0
  31. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/click/parser.py +0 -0
  32. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/click/termui.py +0 -0
  33. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/click/testing.py +0 -0
  34. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/click/types.py +0 -0
  35. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/click/utils.py +0 -0
  36. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/importlib_metadata/__init__.py +0 -0
  37. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/importlib_metadata/_adapters.py +0 -0
  38. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/importlib_metadata/_collections.py +0 -0
  39. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/importlib_metadata/_compat.py +0 -0
  40. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/importlib_metadata/_functools.py +0 -0
  41. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/importlib_metadata/_itertools.py +0 -0
  42. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/importlib_metadata/_meta.py +0 -0
  43. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/importlib_metadata/_text.py +0 -0
  44. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/importlib_metadata/py.typed +0 -0
  45. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/packaging/__init__.py +0 -0
  46. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/packaging/_elffile.py +0 -0
  47. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/packaging/_manylinux.py +0 -0
  48. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/packaging/_musllinux.py +0 -0
  49. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/packaging/_parser.py +0 -0
  50. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/packaging/_structures.py +0 -0
  51. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/packaging/_tokenizer.py +0 -0
  52. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/packaging/markers.py +0 -0
  53. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/packaging/py.typed +0 -0
  54. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/packaging/requirements.py +0 -0
  55. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/packaging/specifiers.py +0 -0
  56. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/packaging/tags.py +0 -0
  57. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/packaging/utils.py +0 -0
  58. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/packaging/version.py +0 -0
  59. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/typeguard/__init__.py +0 -0
  60. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/typeguard/_checkers.py +0 -0
  61. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/typeguard/_config.py +0 -0
  62. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/typeguard/_decorators.py +0 -0
  63. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/typeguard/_exceptions.py +0 -0
  64. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/typeguard/_functions.py +0 -0
  65. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/typeguard/_importhook.py +0 -0
  66. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/typeguard/_memo.py +0 -0
  67. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/typeguard/_pytest_plugin.py +0 -0
  68. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/typeguard/_suppression.py +0 -0
  69. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/typeguard/_transformer.py +0 -0
  70. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/typeguard/_union_transformer.py +0 -0
  71. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/typeguard/_utils.py +0 -0
  72. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/typeguard/py.typed +0 -0
  73. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/typing_extensions.py +0 -0
  74. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/v3_5/__init__.py +0 -0
  75. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/v3_5/importlib_metadata/__init__.py +0 -0
  76. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/v3_5/importlib_metadata/_compat.py +0 -0
  77. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/v3_5/zipp.py +0 -0
  78. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/v3_6/__init__.py +0 -0
  79. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/v3_6/importlib_metadata/__init__.py +0 -0
  80. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/v3_6/importlib_metadata/_adapters.py +0 -0
  81. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/v3_6/importlib_metadata/_collections.py +0 -0
  82. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/v3_6/importlib_metadata/_compat.py +0 -0
  83. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/v3_6/importlib_metadata/_functools.py +0 -0
  84. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/v3_6/importlib_metadata/_itertools.py +0 -0
  85. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/v3_6/importlib_metadata/_meta.py +0 -0
  86. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/v3_6/importlib_metadata/_text.py +0 -0
  87. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/v3_6/importlib_metadata/py.typed +0 -0
  88. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/v3_6/typing_extensions.py +0 -0
  89. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/v3_6/zipp.py +0 -0
  90. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/_vendor/zipp.py +0 -0
  91. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/cards.py +0 -0
  92. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/cli.py +0 -0
  93. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/cli_args.py +0 -0
  94. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/cli_components/__init__.py +0 -0
  95. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/cli_components/dump_cmd.py +0 -0
  96. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/cli_components/init_cmd.py +0 -0
  97. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/cli_components/run_cmds.py +0 -0
  98. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/cli_components/step_cmd.py +0 -0
  99. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/cli_components/utils.py +0 -0
  100. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/client/__init__.py +0 -0
  101. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/client/core.py +0 -0
  102. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/client/filecache.py +0 -0
  103. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/clone_util.py +0 -0
  104. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/cmd/__init__.py +0 -0
  105. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/cmd/configure_cmd.py +0 -0
  106. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/cmd/develop/__init__.py +0 -0
  107. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/cmd/develop/stub_generator.py +0 -0
  108. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/cmd/develop/stubs.py +0 -0
  109. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/cmd/main_cli.py +0 -0
  110. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/cmd/tutorials_cmd.py +0 -0
  111. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/cmd/util.py +0 -0
  112. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/cmd_with_io.py +0 -0
  113. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/datastore/__init__.py +0 -0
  114. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/datastore/content_addressed_store.py +0 -0
  115. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/datastore/datastore_set.py +0 -0
  116. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/datastore/datastore_storage.py +0 -0
  117. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/datastore/exceptions.py +0 -0
  118. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/datastore/flow_datastore.py +0 -0
  119. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/datastore/inputs.py +0 -0
  120. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/datastore/task_datastore.py +0 -0
  121. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/debug.py +0 -0
  122. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/decorators.py +0 -0
  123. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/event_logger.py +0 -0
  124. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/events.py +0 -0
  125. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/exception.py +0 -0
  126. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/extension_support/__init__.py +0 -0
  127. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/extension_support/_empty_file.py +0 -0
  128. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/extension_support/cmd.py +0 -0
  129. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/extension_support/integrations.py +0 -0
  130. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/extension_support/plugins.py +0 -0
  131. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/flowspec.py +0 -0
  132. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/graph.py +0 -0
  133. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/includefile.py +0 -0
  134. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/info_file.py +0 -0
  135. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/integrations.py +0 -0
  136. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/lint.py +0 -0
  137. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/metadata_provider/__init__.py +0 -0
  138. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/metadata_provider/heartbeat.py +0 -0
  139. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/metadata_provider/metadata.py +0 -0
  140. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/metadata_provider/util.py +0 -0
  141. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/metaflow_config.py +0 -0
  142. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/metaflow_config_funcs.py +0 -0
  143. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/metaflow_current.py +0 -0
  144. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/metaflow_environment.py +0 -0
  145. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/metaflow_profile.py +0 -0
  146. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/metaflow_version.py +0 -0
  147. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/mflog/__init__.py +0 -0
  148. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/mflog/mflog.py +0 -0
  149. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/mflog/save_logs.py +0 -0
  150. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/mflog/save_logs_periodically.py +0 -0
  151. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/mflog/tee.py +0 -0
  152. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/monitor.py +0 -0
  153. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/multicore_utils.py +0 -0
  154. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/package.py +0 -0
  155. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/parameters.py +0 -0
  156. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/airflow/__init__.py +0 -0
  157. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/airflow/airflow.py +0 -0
  158. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/airflow/airflow_cli.py +0 -0
  159. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/airflow/airflow_decorator.py +0 -0
  160. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/airflow/airflow_utils.py +0 -0
  161. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/airflow/dag.py +0 -0
  162. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/airflow/exception.py +0 -0
  163. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/airflow/plumbing/__init__.py +0 -0
  164. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/airflow/plumbing/set_parameters.py +0 -0
  165. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/airflow/sensors/__init__.py +0 -0
  166. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/airflow/sensors/base_sensor.py +0 -0
  167. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/airflow/sensors/external_task_sensor.py +0 -0
  168. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/airflow/sensors/s3_sensor.py +0 -0
  169. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/argo/__init__.py +0 -0
  170. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/argo/argo_client.py +0 -0
  171. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/argo/argo_events.py +0 -0
  172. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/argo/argo_workflows_cli.py +0 -0
  173. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/argo/argo_workflows_decorator.py +0 -0
  174. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/argo/argo_workflows_deployer.py +0 -0
  175. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/argo/argo_workflows_deployer_objects.py +0 -0
  176. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/argo/capture_error.py +0 -0
  177. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/argo/generate_input_paths.py +0 -0
  178. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/argo/jobset_input_paths.py +0 -0
  179. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/aws/__init__.py +0 -0
  180. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/aws/aws_client.py +0 -0
  181. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/aws/aws_utils.py +0 -0
  182. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/aws/batch/__init__.py +0 -0
  183. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/aws/batch/batch.py +0 -0
  184. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/aws/batch/batch_cli.py +0 -0
  185. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/aws/batch/batch_client.py +0 -0
  186. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/aws/batch/batch_decorator.py +0 -0
  187. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/aws/secrets_manager/__init__.py +0 -0
  188. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/aws/secrets_manager/aws_secrets_manager_secrets_provider.py +0 -0
  189. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/aws/step_functions/__init__.py +0 -0
  190. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/aws/step_functions/dynamo_db_client.py +0 -0
  191. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/aws/step_functions/event_bridge_client.py +0 -0
  192. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/aws/step_functions/production_token.py +0 -0
  193. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/aws/step_functions/schedule_decorator.py +0 -0
  194. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/aws/step_functions/set_batch_environment.py +0 -0
  195. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/aws/step_functions/step_functions.py +0 -0
  196. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/aws/step_functions/step_functions_cli.py +0 -0
  197. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/aws/step_functions/step_functions_client.py +0 -0
  198. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/aws/step_functions/step_functions_decorator.py +0 -0
  199. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/aws/step_functions/step_functions_deployer.py +0 -0
  200. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/aws/step_functions/step_functions_deployer_objects.py +0 -0
  201. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/azure/__init__.py +0 -0
  202. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/azure/azure_credential.py +0 -0
  203. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/azure/azure_exceptions.py +0 -0
  204. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/azure/azure_secret_manager_secrets_provider.py +0 -0
  205. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/azure/azure_tail.py +0 -0
  206. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/azure/azure_utils.py +0 -0
  207. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/azure/blob_service_client_factory.py +0 -0
  208. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/azure/includefile_support.py +0 -0
  209. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/cards/__init__.py +0 -0
  210. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/cards/card_cli.py +0 -0
  211. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/cards/card_client.py +0 -0
  212. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/cards/card_creator.py +0 -0
  213. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/cards/card_datastore.py +0 -0
  214. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/cards/card_decorator.py +0 -0
  215. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/cards/card_modules/__init__.py +0 -0
  216. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/cards/card_modules/base.html +0 -0
  217. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/cards/card_modules/basic.py +0 -0
  218. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/cards/card_modules/bundle.css +0 -0
  219. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/cards/card_modules/card.py +0 -0
  220. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/cards/card_modules/chevron/__init__.py +0 -0
  221. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/cards/card_modules/chevron/main.py +0 -0
  222. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/cards/card_modules/chevron/metadata.py +0 -0
  223. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/cards/card_modules/chevron/renderer.py +0 -0
  224. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/cards/card_modules/chevron/tokenizer.py +0 -0
  225. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/cards/card_modules/components.py +0 -0
  226. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/cards/card_modules/convert_to_native_type.py +0 -0
  227. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/cards/card_modules/main.js +0 -0
  228. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/cards/card_modules/renderer_tools.py +0 -0
  229. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/cards/card_modules/test_cards.py +0 -0
  230. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/cards/card_resolver.py +0 -0
  231. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/cards/card_server.py +0 -0
  232. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/cards/card_viewer/viewer.html +0 -0
  233. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/cards/component_serializer.py +0 -0
  234. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/cards/exception.py +0 -0
  235. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/catch_decorator.py +0 -0
  236. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/datastores/__init__.py +0 -0
  237. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/datastores/azure_storage.py +0 -0
  238. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/datastores/gs_storage.py +0 -0
  239. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/datastores/local_storage.py +0 -0
  240. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/datastores/s3_storage.py +0 -0
  241. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/datatools/__init__.py +0 -0
  242. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/datatools/local.py +0 -0
  243. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/datatools/s3/__init__.py +0 -0
  244. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/datatools/s3/s3.py +0 -0
  245. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/datatools/s3/s3op.py +0 -0
  246. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/datatools/s3/s3tail.py +0 -0
  247. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/datatools/s3/s3util.py +0 -0
  248. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/debug_logger.py +0 -0
  249. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/debug_monitor.py +0 -0
  250. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/env_escape/__init__.py +0 -0
  251. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/env_escape/client.py +0 -0
  252. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/env_escape/client_modules.py +0 -0
  253. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/env_escape/communication/__init__.py +0 -0
  254. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/env_escape/communication/bytestream.py +0 -0
  255. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/env_escape/communication/channel.py +0 -0
  256. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/env_escape/communication/socket_bytestream.py +0 -0
  257. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/env_escape/communication/utils.py +0 -0
  258. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/env_escape/configurations/emulate_test_lib/__init__.py +0 -0
  259. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/env_escape/configurations/emulate_test_lib/overrides.py +0 -0
  260. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/env_escape/configurations/emulate_test_lib/server_mappings.py +0 -0
  261. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/env_escape/configurations/test_lib_impl/__init__.py +0 -0
  262. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/env_escape/configurations/test_lib_impl/test_lib.py +0 -0
  263. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/env_escape/consts.py +0 -0
  264. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/env_escape/data_transferer.py +0 -0
  265. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/env_escape/exception_transferer.py +0 -0
  266. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/env_escape/override_decorators.py +0 -0
  267. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/env_escape/server.py +0 -0
  268. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/env_escape/stub.py +0 -0
  269. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/env_escape/utils.py +0 -0
  270. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/environment_decorator.py +0 -0
  271. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/events_decorator.py +0 -0
  272. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/frameworks/__init__.py +0 -0
  273. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/frameworks/pytorch.py +0 -0
  274. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/gcp/__init__.py +0 -0
  275. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/gcp/gcp_secret_manager_secrets_provider.py +0 -0
  276. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/gcp/gs_exceptions.py +0 -0
  277. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/gcp/gs_storage_client_factory.py +0 -0
  278. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/gcp/gs_tail.py +0 -0
  279. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/gcp/gs_utils.py +0 -0
  280. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/gcp/includefile_support.py +0 -0
  281. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/kubernetes/__init__.py +0 -0
  282. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/kubernetes/kube_utils.py +0 -0
  283. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/kubernetes/kubernetes.py +0 -0
  284. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/kubernetes/kubernetes_client.py +0 -0
  285. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/kubernetes/kubernetes_job.py +0 -0
  286. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/kubernetes/kubernetes_jobsets.py +0 -0
  287. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/logs_cli.py +0 -0
  288. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/metadata_providers/__init__.py +0 -0
  289. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/metadata_providers/local.py +0 -0
  290. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/metadata_providers/service.py +0 -0
  291. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/package_cli.py +0 -0
  292. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/parallel_decorator.py +0 -0
  293. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/project_decorator.py +0 -0
  294. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/pypi/__init__.py +0 -0
  295. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/pypi/bootstrap.py +0 -0
  296. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/pypi/conda_decorator.py +0 -0
  297. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/pypi/conda_environment.py +0 -0
  298. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/pypi/micromamba.py +0 -0
  299. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/pypi/pip.py +0 -0
  300. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/pypi/pypi_decorator.py +0 -0
  301. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/pypi/pypi_environment.py +0 -0
  302. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/pypi/utils.py +0 -0
  303. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/resources_decorator.py +0 -0
  304. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/retry_decorator.py +0 -0
  305. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/secrets/__init__.py +0 -0
  306. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/secrets/inline_secrets_provider.py +0 -0
  307. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/secrets/secrets_decorator.py +0 -0
  308. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/storage_executor.py +0 -0
  309. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/tag_cli.py +0 -0
  310. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/test_unbounded_foreach_decorator.py +0 -0
  311. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/plugins/timeout_decorator.py +0 -0
  312. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/procpoll.py +0 -0
  313. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/py.typed +0 -0
  314. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/pylint_wrapper.py +0 -0
  315. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/runner/__init__.py +0 -0
  316. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/runner/click_api.py +0 -0
  317. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/runner/deployer.py +0 -0
  318. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/runner/deployer_impl.py +0 -0
  319. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/runner/metaflow_runner.py +0 -0
  320. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/runner/nbdeploy.py +0 -0
  321. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/runner/nbrun.py +0 -0
  322. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/runner/subprocess_manager.py +0 -0
  323. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/runner/utils.py +0 -0
  324. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/runtime.py +0 -0
  325. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/sidecar/__init__.py +0 -0
  326. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/sidecar/sidecar.py +0 -0
  327. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/sidecar/sidecar_messages.py +0 -0
  328. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/sidecar/sidecar_subprocess.py +0 -0
  329. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/sidecar/sidecar_worker.py +0 -0
  330. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/system/__init__.py +0 -0
  331. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/system/system_logger.py +0 -0
  332. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/system/system_monitor.py +0 -0
  333. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/system/system_utils.py +0 -0
  334. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/tagging_util.py +0 -0
  335. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/task.py +0 -0
  336. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/tracing/__init__.py +0 -0
  337. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/tracing/propagator.py +0 -0
  338. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/tracing/span_exporter.py +0 -0
  339. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/tracing/tracing_modules.py +0 -0
  340. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/tuple_util.py +0 -0
  341. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/tutorials/00-helloworld/README.md +0 -0
  342. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/tutorials/00-helloworld/helloworld.py +0 -0
  343. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/tutorials/01-playlist/README.md +0 -0
  344. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/tutorials/01-playlist/movies.csv +0 -0
  345. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/tutorials/01-playlist/playlist.ipynb +0 -0
  346. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/tutorials/01-playlist/playlist.py +0 -0
  347. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/tutorials/02-statistics/README.md +0 -0
  348. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/tutorials/02-statistics/movies.csv +0 -0
  349. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/tutorials/02-statistics/stats.ipynb +0 -0
  350. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/tutorials/02-statistics/stats.py +0 -0
  351. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/tutorials/03-playlist-redux/README.md +0 -0
  352. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/tutorials/03-playlist-redux/playlist.py +0 -0
  353. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/tutorials/04-playlist-plus/README.md +0 -0
  354. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/tutorials/04-playlist-plus/playlist.py +0 -0
  355. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/tutorials/05-hello-cloud/README.md +0 -0
  356. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/tutorials/05-hello-cloud/hello-cloud.ipynb +0 -0
  357. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/tutorials/05-hello-cloud/hello-cloud.py +0 -0
  358. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/tutorials/06-statistics-redux/README.md +0 -0
  359. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/tutorials/06-statistics-redux/stats.ipynb +0 -0
  360. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/tutorials/07-worldview/README.md +0 -0
  361. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/tutorials/07-worldview/worldview.ipynb +0 -0
  362. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/tutorials/08-autopilot/README.md +0 -0
  363. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/tutorials/08-autopilot/autopilot.ipynb +0 -0
  364. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/unbounded_foreach.py +0 -0
  365. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/user_configs/__init__.py +0 -0
  366. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/user_configs/config_decorators.py +0 -0
  367. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/user_configs/config_options.py +0 -0
  368. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/user_configs/config_parameters.py +0 -0
  369. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/util.py +0 -0
  370. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow/vendor.py +0 -0
  371. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow.egg-info/dependency_links.txt +0 -0
  372. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow.egg-info/entry_points.txt +0 -0
  373. {metaflow-2.13.4 → metaflow-2.13.5}/metaflow.egg-info/top_level.txt +0 -0
  374. {metaflow-2.13.4 → metaflow-2.13.5}/setup.cfg +0 -0
  375. {metaflow-2.13.4 → metaflow-2.13.5}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: metaflow
3
- Version: 2.13.4
3
+ Version: 2.13.5
4
4
  Summary: Metaflow: More Data Science, Less Engineering
5
5
  Author: Metaflow Developers
6
6
  Author-email: help@metaflow.org
@@ -26,7 +26,7 @@ License-File: LICENSE
26
26
  Requires-Dist: requests
27
27
  Requires-Dist: boto3
28
28
  Provides-Extra: stubs
29
- Requires-Dist: metaflow-stubs==2.13.4; extra == "stubs"
29
+ Requires-Dist: metaflow-stubs==2.13.5; extra == "stubs"
30
30
  Dynamic: author
31
31
  Dynamic: author-email
32
32
  Dynamic: classifier
@@ -16,6 +16,7 @@ CLIS_DESC = [
16
16
  ("argo-workflows", ".argo.argo_workflows_cli.cli"),
17
17
  ("card", ".cards.card_cli.cli"),
18
18
  ("tag", ".tag_cli.cli"),
19
+ ("spot-metadata", ".kubernetes.spot_metadata_cli.cli"),
19
20
  ("logs", ".logs_cli.cli"),
20
21
  ]
21
22
 
@@ -104,6 +105,10 @@ SIDECARS_DESC = [
104
105
  "save_logs_periodically",
105
106
  "..mflog.save_logs_periodically.SaveLogsPeriodicallySidecar",
106
107
  ),
108
+ (
109
+ "spot_termination_monitor",
110
+ ".kubernetes.spot_monitor_sidecar.SpotTerminationMonitorSidecar",
111
+ ),
107
112
  ("heartbeat", "metaflow.metadata_provider.heartbeat.MetadataHeartBeat"),
108
113
  ]
109
114
 
@@ -1705,6 +1705,7 @@ class ArgoWorkflows(object):
1705
1705
  },
1706
1706
  **{
1707
1707
  # Some optional values for bookkeeping
1708
+ "METAFLOW_FLOW_FILENAME": os.path.basename(sys.argv[0]),
1708
1709
  "METAFLOW_FLOW_NAME": self.flow.name,
1709
1710
  "METAFLOW_STEP_NAME": node.name,
1710
1711
  "METAFLOW_RUN_ID": run_id,
@@ -190,7 +190,7 @@ def step(
190
190
  executable = ctx.obj.environment.executable(step_name, executable)
191
191
 
192
192
  # Set environment
193
- env = {}
193
+ env = {"METAFLOW_FLOW_FILENAME": os.path.basename(sys.argv[0])}
194
194
  env_deco = [deco for deco in node.decorators if deco.name == "environment"]
195
195
  if env_deco:
196
196
  env = env_deco[0].attributes["vars"]
@@ -547,6 +547,13 @@ class KubernetesDecorator(StepDecorator):
547
547
  self._save_logs_sidecar = Sidecar("save_logs_periodically")
548
548
  self._save_logs_sidecar.start()
549
549
 
550
+ # Start spot termination monitor sidecar.
551
+ current._update_env(
552
+ {"spot_termination_notice": "/tmp/spot_termination_notice"}
553
+ )
554
+ self._spot_monitor_sidecar = Sidecar("spot_termination_monitor")
555
+ self._spot_monitor_sidecar.start()
556
+
550
557
  num_parallel = None
551
558
  if hasattr(flow, "_parallel_ubf_iter"):
552
559
  num_parallel = flow._parallel_ubf_iter.num_parallel
@@ -605,6 +612,7 @@ class KubernetesDecorator(StepDecorator):
605
612
 
606
613
  try:
607
614
  self._save_logs_sidecar.terminate()
615
+ self._spot_monitor_sidecar.terminate()
608
616
  except:
609
617
  # Best effort kill
610
618
  pass
@@ -0,0 +1,69 @@
1
+ from metaflow._vendor import click
2
+ from datetime import datetime, timezone
3
+ from metaflow.tagging_util import validate_tags
4
+ from metaflow.metadata_provider import MetaDatum
5
+
6
+
7
+ @click.group()
8
+ def cli():
9
+ pass
10
+
11
+
12
+ @cli.group(help="Commands related to spot metadata.")
13
+ def spot_metadata():
14
+ pass
15
+
16
+
17
+ @spot_metadata.command(help="Record spot termination metadata for a task.")
18
+ @click.option(
19
+ "--run-id",
20
+ required=True,
21
+ help="Run ID for which metadata is to be recorded.",
22
+ )
23
+ @click.option(
24
+ "--step-name",
25
+ required=True,
26
+ help="Step Name for which metadata is to be recorded.",
27
+ )
28
+ @click.option(
29
+ "--task-id",
30
+ required=True,
31
+ help="Task ID for which metadata is to be recorded.",
32
+ )
33
+ @click.option(
34
+ "--termination-notice-time",
35
+ required=True,
36
+ help="Spot termination notice time.",
37
+ )
38
+ @click.option(
39
+ "--tag",
40
+ "tags",
41
+ multiple=True,
42
+ required=False,
43
+ default=None,
44
+ help="List of tags.",
45
+ )
46
+ @click.pass_obj
47
+ def record(obj, run_id, step_name, task_id, termination_notice_time, tags=None):
48
+ validate_tags(tags)
49
+
50
+ tag_list = list(tags) if tags else []
51
+
52
+ entries = [
53
+ MetaDatum(
54
+ field="spot-termination-received-at",
55
+ value=datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ"),
56
+ type="spot-termination-received-at",
57
+ tags=tag_list,
58
+ ),
59
+ MetaDatum(
60
+ field="spot-termination-time",
61
+ value=termination_notice_time,
62
+ type="spot-termination-time",
63
+ tags=tag_list,
64
+ ),
65
+ ]
66
+
67
+ obj.metadata.register_metadata(
68
+ run_id=run_id, step_name=step_name, task_id=task_id, metadata=entries
69
+ )
@@ -0,0 +1,109 @@
1
+ import os
2
+ import sys
3
+ import time
4
+ import signal
5
+ import requests
6
+ import subprocess
7
+ from multiprocessing import Process
8
+ from datetime import datetime, timezone
9
+ from metaflow.sidecar import MessageTypes
10
+
11
+
12
+ class SpotTerminationMonitorSidecar(object):
13
+ EC2_TYPE_URL = "http://169.254.169.254/latest/meta-data/instance-life-cycle"
14
+ METADATA_URL = "http://169.254.169.254/latest/meta-data/spot/termination-time"
15
+ TOKEN_URL = "http://169.254.169.254/latest/api/token"
16
+ POLL_INTERVAL = 5 # seconds
17
+
18
+ def __init__(self):
19
+ self.is_alive = True
20
+ self._process = None
21
+ self._token = None
22
+ self._token_expiry = 0
23
+
24
+ if self._is_aws_spot_instance():
25
+ self._process = Process(target=self._monitor_loop)
26
+ self._process.start()
27
+
28
+ def process_message(self, msg):
29
+ if msg.msg_type == MessageTypes.SHUTDOWN:
30
+ self.is_alive = False
31
+ if self._process:
32
+ self._process.terminate()
33
+
34
+ @classmethod
35
+ def get_worker(cls):
36
+ return cls
37
+
38
+ def _get_imds_token(self):
39
+ current_time = time.time()
40
+ if current_time >= self._token_expiry - 60: # Refresh 60s before expiry
41
+ try:
42
+ response = requests.put(
43
+ url=self.TOKEN_URL,
44
+ headers={"X-aws-ec2-metadata-token-ttl-seconds": "300"},
45
+ timeout=1,
46
+ )
47
+ if response.status_code == 200:
48
+ self._token = response.text
49
+ self._token_expiry = current_time + 240 # Slightly less than TTL
50
+ except requests.exceptions.RequestException:
51
+ pass
52
+ return self._token
53
+
54
+ def _make_ec2_request(self, url, timeout):
55
+ token = self._get_imds_token()
56
+ headers = {"X-aws-ec2-metadata-token": token} if token else {}
57
+ response = requests.get(url=url, headers=headers, timeout=timeout)
58
+ return response
59
+
60
+ def _is_aws_spot_instance(self):
61
+ try:
62
+ response = self._make_ec2_request(url=self.EC2_TYPE_URL, timeout=1)
63
+ return response.status_code == 200 and response.text == "spot"
64
+ except (requests.exceptions.RequestException, requests.exceptions.Timeout):
65
+ return False
66
+
67
+ def _monitor_loop(self):
68
+ while self.is_alive:
69
+ try:
70
+ response = self._make_ec2_request(url=self.METADATA_URL, timeout=1)
71
+ if response.status_code == 200:
72
+ termination_time = response.text
73
+ self._emit_termination_metadata(termination_time)
74
+ os.kill(os.getppid(), signal.SIGTERM)
75
+ break
76
+ except (requests.exceptions.RequestException, requests.exceptions.Timeout):
77
+ pass
78
+ time.sleep(self.POLL_INTERVAL)
79
+
80
+ def _emit_termination_metadata(self, termination_time):
81
+ flow_filename = os.getenv("METAFLOW_FLOW_FILENAME")
82
+ pathspec = os.getenv("MF_PATHSPEC")
83
+ _, run_id, step_name, task_id = pathspec.split("/")
84
+ retry_count = os.getenv("MF_ATTEMPT")
85
+
86
+ with open("/tmp/spot_termination_notice", "w") as fp:
87
+ fp.write(termination_time)
88
+
89
+ command = [
90
+ sys.executable,
91
+ f"/metaflow/{flow_filename}",
92
+ "spot-metadata",
93
+ "record",
94
+ "--run-id",
95
+ run_id,
96
+ "--step-name",
97
+ step_name,
98
+ "--task-id",
99
+ task_id,
100
+ "--termination-notice-time",
101
+ termination_time,
102
+ "--tag",
103
+ "attempt_id:{}".format(retry_count),
104
+ ]
105
+
106
+ result = subprocess.run(command, capture_output=True, text=True)
107
+
108
+ if result.returncode != 0:
109
+ print(f"Failed to record spot termination metadata: {result.stderr}")
@@ -0,0 +1 @@
1
+ metaflow_version = "2.13.5"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: metaflow
3
- Version: 2.13.4
3
+ Version: 2.13.5
4
4
  Summary: Metaflow: More Data Science, Less Engineering
5
5
  Author: Metaflow Developers
6
6
  Author-email: help@metaflow.org
@@ -26,7 +26,7 @@ License-File: LICENSE
26
26
  Requires-Dist: requests
27
27
  Requires-Dist: boto3
28
28
  Provides-Extra: stubs
29
- Requires-Dist: metaflow-stubs==2.13.4; extra == "stubs"
29
+ Requires-Dist: metaflow-stubs==2.13.5; extra == "stubs"
30
30
  Dynamic: author
31
31
  Dynamic: author-email
32
32
  Dynamic: classifier
@@ -305,6 +305,8 @@ metaflow/plugins/kubernetes/kubernetes_client.py
305
305
  metaflow/plugins/kubernetes/kubernetes_decorator.py
306
306
  metaflow/plugins/kubernetes/kubernetes_job.py
307
307
  metaflow/plugins/kubernetes/kubernetes_jobsets.py
308
+ metaflow/plugins/kubernetes/spot_metadata_cli.py
309
+ metaflow/plugins/kubernetes/spot_monitor_sidecar.py
308
310
  metaflow/plugins/metadata_providers/__init__.py
309
311
  metaflow/plugins/metadata_providers/local.py
310
312
  metaflow/plugins/metadata_providers/service.py
@@ -2,4 +2,4 @@ requests
2
2
  boto3
3
3
 
4
4
  [stubs]
5
- metaflow-stubs==2.13.4
5
+ metaflow-stubs==2.13.5
@@ -1 +0,0 @@
1
- metaflow_version = "2.13.4"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes