ob-metaflow 2.13.0.1__tar.gz → 2.13.2.1__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.

Potentially problematic release.


This version of ob-metaflow might be problematic. Click here for more details.

Files changed (373) hide show
  1. {ob_metaflow-2.13.0.1/ob_metaflow.egg-info → ob_metaflow-2.13.2.1}/PKG-INFO +2 -2
  2. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/extension_support/plugins.py +1 -0
  3. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/metadata_provider/heartbeat.py +23 -8
  4. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/metaflow_config.py +2 -0
  5. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/parameters.py +1 -1
  6. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/__init__.py +13 -0
  7. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/argo/argo_client.py +0 -2
  8. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/argo/argo_workflows.py +98 -104
  9. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/argo/argo_workflows_cli.py +0 -1
  10. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/argo/argo_workflows_decorator.py +2 -4
  11. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/argo/jobset_input_paths.py +0 -1
  12. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/aws/aws_utils.py +6 -1
  13. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/aws/batch/batch_client.py +1 -3
  14. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/aws/batch/batch_decorator.py +11 -11
  15. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/aws/step_functions/dynamo_db_client.py +0 -3
  16. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/aws/step_functions/production_token.py +1 -1
  17. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/aws/step_functions/step_functions.py +1 -1
  18. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/aws/step_functions/step_functions_cli.py +0 -1
  19. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/aws/step_functions/step_functions_decorator.py +0 -1
  20. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/aws/step_functions/step_functions_deployer_objects.py +0 -1
  21. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/kubernetes/kube_utils.py +55 -1
  22. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/kubernetes/kubernetes.py +33 -80
  23. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/kubernetes/kubernetes_cli.py +22 -5
  24. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/kubernetes/kubernetes_decorator.py +49 -2
  25. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/kubernetes/kubernetes_job.py +3 -6
  26. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/kubernetes/kubernetes_jobsets.py +22 -5
  27. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/pypi/bootstrap.py +87 -54
  28. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/pypi/conda_environment.py +7 -6
  29. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/pypi/micromamba.py +40 -22
  30. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/pypi/pip.py +2 -4
  31. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/pypi/utils.py +4 -2
  32. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/runner/metaflow_runner.py +25 -3
  33. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/runtime.py +18 -8
  34. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/tracing/tracing_modules.py +4 -1
  35. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/user_configs/config_parameters.py +23 -6
  36. ob_metaflow-2.13.2.1/metaflow/version.py +1 -0
  37. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1/ob_metaflow.egg-info}/PKG-INFO +2 -2
  38. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/ob_metaflow.egg-info/requires.txt +1 -1
  39. ob_metaflow-2.13.0.1/metaflow/version.py +0 -1
  40. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/LICENSE +0 -0
  41. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/MANIFEST.in +0 -0
  42. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/README.md +0 -0
  43. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/R.py +0 -0
  44. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/__init__.py +0 -0
  45. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/__init__.py +0 -0
  46. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/click/__init__.py +0 -0
  47. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/click/_bashcomplete.py +0 -0
  48. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/click/_compat.py +0 -0
  49. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/click/_termui_impl.py +0 -0
  50. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/click/_textwrap.py +0 -0
  51. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/click/_unicodefun.py +0 -0
  52. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/click/_winconsole.py +0 -0
  53. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/click/core.py +0 -0
  54. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/click/decorators.py +0 -0
  55. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/click/exceptions.py +0 -0
  56. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/click/formatting.py +0 -0
  57. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/click/globals.py +0 -0
  58. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/click/parser.py +0 -0
  59. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/click/termui.py +0 -0
  60. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/click/testing.py +0 -0
  61. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/click/types.py +0 -0
  62. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/click/utils.py +0 -0
  63. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/importlib_metadata/__init__.py +0 -0
  64. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/importlib_metadata/_adapters.py +0 -0
  65. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/importlib_metadata/_collections.py +0 -0
  66. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/importlib_metadata/_compat.py +0 -0
  67. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/importlib_metadata/_functools.py +0 -0
  68. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/importlib_metadata/_itertools.py +0 -0
  69. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/importlib_metadata/_meta.py +0 -0
  70. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/importlib_metadata/_text.py +0 -0
  71. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/importlib_metadata/py.typed +0 -0
  72. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/packaging/__init__.py +0 -0
  73. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/packaging/_elffile.py +0 -0
  74. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/packaging/_manylinux.py +0 -0
  75. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/packaging/_musllinux.py +0 -0
  76. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/packaging/_parser.py +0 -0
  77. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/packaging/_structures.py +0 -0
  78. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/packaging/_tokenizer.py +0 -0
  79. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/packaging/markers.py +0 -0
  80. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/packaging/py.typed +0 -0
  81. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/packaging/requirements.py +0 -0
  82. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/packaging/specifiers.py +0 -0
  83. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/packaging/tags.py +0 -0
  84. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/packaging/utils.py +0 -0
  85. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/packaging/version.py +0 -0
  86. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/typeguard/__init__.py +0 -0
  87. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/typeguard/_checkers.py +0 -0
  88. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/typeguard/_config.py +0 -0
  89. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/typeguard/_decorators.py +0 -0
  90. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/typeguard/_exceptions.py +0 -0
  91. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/typeguard/_functions.py +0 -0
  92. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/typeguard/_importhook.py +0 -0
  93. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/typeguard/_memo.py +0 -0
  94. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/typeguard/_pytest_plugin.py +0 -0
  95. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/typeguard/_suppression.py +0 -0
  96. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/typeguard/_transformer.py +0 -0
  97. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/typeguard/_union_transformer.py +0 -0
  98. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/typeguard/_utils.py +0 -0
  99. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/typeguard/py.typed +0 -0
  100. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/typing_extensions.py +0 -0
  101. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/v3_5/__init__.py +0 -0
  102. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/v3_5/importlib_metadata/__init__.py +0 -0
  103. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/v3_5/importlib_metadata/_compat.py +0 -0
  104. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/v3_5/zipp.py +0 -0
  105. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/v3_6/__init__.py +0 -0
  106. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/v3_6/importlib_metadata/__init__.py +0 -0
  107. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/v3_6/importlib_metadata/_adapters.py +0 -0
  108. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/v3_6/importlib_metadata/_collections.py +0 -0
  109. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/v3_6/importlib_metadata/_compat.py +0 -0
  110. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/v3_6/importlib_metadata/_functools.py +0 -0
  111. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/v3_6/importlib_metadata/_itertools.py +0 -0
  112. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/v3_6/importlib_metadata/_meta.py +0 -0
  113. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/v3_6/importlib_metadata/_text.py +0 -0
  114. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/v3_6/importlib_metadata/py.typed +0 -0
  115. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/v3_6/typing_extensions.py +0 -0
  116. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/v3_6/zipp.py +0 -0
  117. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/_vendor/zipp.py +0 -0
  118. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/cards.py +0 -0
  119. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/cli.py +0 -0
  120. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/cli_args.py +0 -0
  121. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/cli_components/__init__.py +0 -0
  122. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/cli_components/dump_cmd.py +0 -0
  123. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/cli_components/init_cmd.py +0 -0
  124. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/cli_components/run_cmds.py +0 -0
  125. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/cli_components/step_cmd.py +0 -0
  126. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/cli_components/utils.py +0 -0
  127. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/client/__init__.py +0 -0
  128. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/client/core.py +0 -0
  129. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/client/filecache.py +0 -0
  130. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/clone_util.py +0 -0
  131. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/cmd/__init__.py +0 -0
  132. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/cmd/configure_cmd.py +0 -0
  133. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/cmd/develop/__init__.py +0 -0
  134. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/cmd/develop/stub_generator.py +0 -0
  135. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/cmd/develop/stubs.py +0 -0
  136. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/cmd/main_cli.py +0 -0
  137. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/cmd/tutorials_cmd.py +0 -0
  138. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/cmd/util.py +0 -0
  139. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/cmd_with_io.py +0 -0
  140. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/datastore/__init__.py +0 -0
  141. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/datastore/content_addressed_store.py +0 -0
  142. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/datastore/datastore_set.py +0 -0
  143. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/datastore/datastore_storage.py +0 -0
  144. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/datastore/exceptions.py +0 -0
  145. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/datastore/flow_datastore.py +0 -0
  146. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/datastore/inputs.py +0 -0
  147. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/datastore/task_datastore.py +0 -0
  148. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/debug.py +0 -0
  149. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/decorators.py +0 -0
  150. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/event_logger.py +0 -0
  151. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/events.py +0 -0
  152. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/exception.py +0 -0
  153. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/extension_support/__init__.py +0 -0
  154. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/extension_support/_empty_file.py +0 -0
  155. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/extension_support/cmd.py +0 -0
  156. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/extension_support/integrations.py +0 -0
  157. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/flowspec.py +0 -0
  158. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/graph.py +0 -0
  159. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/includefile.py +0 -0
  160. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/info_file.py +0 -0
  161. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/integrations.py +0 -0
  162. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/lint.py +0 -0
  163. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/metadata_provider/__init__.py +0 -0
  164. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/metadata_provider/metadata.py +0 -0
  165. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/metadata_provider/util.py +0 -0
  166. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/metaflow_config_funcs.py +0 -0
  167. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/metaflow_current.py +0 -0
  168. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/metaflow_environment.py +0 -0
  169. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/metaflow_profile.py +0 -0
  170. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/metaflow_version.py +0 -0
  171. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/mflog/__init__.py +0 -0
  172. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/mflog/mflog.py +0 -0
  173. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/mflog/save_logs.py +0 -0
  174. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/mflog/save_logs_periodically.py +0 -0
  175. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/mflog/tee.py +0 -0
  176. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/monitor.py +0 -0
  177. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/multicore_utils.py +0 -0
  178. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/package.py +0 -0
  179. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/airflow/__init__.py +0 -0
  180. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/airflow/airflow.py +0 -0
  181. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/airflow/airflow_cli.py +0 -0
  182. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/airflow/airflow_decorator.py +0 -0
  183. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/airflow/airflow_utils.py +0 -0
  184. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/airflow/dag.py +0 -0
  185. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/airflow/exception.py +0 -0
  186. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/airflow/plumbing/__init__.py +0 -0
  187. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/airflow/plumbing/set_parameters.py +0 -0
  188. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/airflow/sensors/__init__.py +0 -0
  189. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/airflow/sensors/base_sensor.py +0 -0
  190. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/airflow/sensors/external_task_sensor.py +0 -0
  191. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/airflow/sensors/s3_sensor.py +0 -0
  192. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/argo/__init__.py +0 -0
  193. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/argo/argo_events.py +0 -0
  194. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/argo/argo_workflows_deployer.py +0 -0
  195. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/argo/argo_workflows_deployer_objects.py +0 -0
  196. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/argo/capture_error.py +0 -0
  197. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/argo/generate_input_paths.py +0 -0
  198. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/aws/__init__.py +0 -0
  199. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/aws/aws_client.py +0 -0
  200. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/aws/batch/__init__.py +0 -0
  201. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/aws/batch/batch.py +0 -0
  202. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/aws/batch/batch_cli.py +0 -0
  203. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/aws/secrets_manager/__init__.py +0 -0
  204. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/aws/secrets_manager/aws_secrets_manager_secrets_provider.py +0 -0
  205. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/aws/step_functions/__init__.py +0 -0
  206. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/aws/step_functions/event_bridge_client.py +0 -0
  207. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/aws/step_functions/schedule_decorator.py +0 -0
  208. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/aws/step_functions/set_batch_environment.py +0 -0
  209. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/aws/step_functions/step_functions_client.py +0 -0
  210. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/aws/step_functions/step_functions_deployer.py +0 -0
  211. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/azure/__init__.py +0 -0
  212. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/azure/azure_credential.py +0 -0
  213. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/azure/azure_exceptions.py +0 -0
  214. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/azure/azure_secret_manager_secrets_provider.py +0 -0
  215. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/azure/azure_tail.py +0 -0
  216. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/azure/azure_utils.py +0 -0
  217. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/azure/blob_service_client_factory.py +0 -0
  218. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/azure/includefile_support.py +0 -0
  219. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/cards/__init__.py +0 -0
  220. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/cards/card_cli.py +0 -0
  221. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/cards/card_client.py +0 -0
  222. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/cards/card_creator.py +0 -0
  223. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/cards/card_datastore.py +0 -0
  224. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/cards/card_decorator.py +0 -0
  225. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/cards/card_modules/__init__.py +0 -0
  226. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/cards/card_modules/base.html +0 -0
  227. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/cards/card_modules/basic.py +0 -0
  228. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/cards/card_modules/bundle.css +0 -0
  229. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/cards/card_modules/card.py +0 -0
  230. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/cards/card_modules/chevron/__init__.py +0 -0
  231. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/cards/card_modules/chevron/main.py +0 -0
  232. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/cards/card_modules/chevron/metadata.py +0 -0
  233. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/cards/card_modules/chevron/renderer.py +0 -0
  234. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/cards/card_modules/chevron/tokenizer.py +0 -0
  235. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/cards/card_modules/components.py +0 -0
  236. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/cards/card_modules/convert_to_native_type.py +0 -0
  237. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/cards/card_modules/main.js +0 -0
  238. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/cards/card_modules/renderer_tools.py +0 -0
  239. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/cards/card_modules/test_cards.py +0 -0
  240. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/cards/card_resolver.py +0 -0
  241. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/cards/card_server.py +0 -0
  242. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/cards/card_viewer/viewer.html +0 -0
  243. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/cards/component_serializer.py +0 -0
  244. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/cards/exception.py +0 -0
  245. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/catch_decorator.py +0 -0
  246. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/datastores/__init__.py +0 -0
  247. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/datastores/azure_storage.py +0 -0
  248. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/datastores/gs_storage.py +0 -0
  249. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/datastores/local_storage.py +0 -0
  250. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/datastores/s3_storage.py +0 -0
  251. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/datatools/__init__.py +0 -0
  252. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/datatools/local.py +0 -0
  253. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/datatools/s3/__init__.py +0 -0
  254. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/datatools/s3/s3.py +0 -0
  255. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/datatools/s3/s3op.py +0 -0
  256. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/datatools/s3/s3tail.py +0 -0
  257. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/datatools/s3/s3util.py +0 -0
  258. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/debug_logger.py +0 -0
  259. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/debug_monitor.py +0 -0
  260. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/env_escape/__init__.py +0 -0
  261. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/env_escape/client.py +0 -0
  262. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/env_escape/client_modules.py +0 -0
  263. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/env_escape/communication/__init__.py +0 -0
  264. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/env_escape/communication/bytestream.py +0 -0
  265. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/env_escape/communication/channel.py +0 -0
  266. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/env_escape/communication/socket_bytestream.py +0 -0
  267. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/env_escape/communication/utils.py +0 -0
  268. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/env_escape/configurations/emulate_test_lib/__init__.py +0 -0
  269. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/env_escape/configurations/emulate_test_lib/overrides.py +0 -0
  270. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/env_escape/configurations/emulate_test_lib/server_mappings.py +0 -0
  271. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/env_escape/configurations/test_lib_impl/__init__.py +0 -0
  272. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/env_escape/configurations/test_lib_impl/test_lib.py +0 -0
  273. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/env_escape/consts.py +0 -0
  274. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/env_escape/data_transferer.py +0 -0
  275. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/env_escape/exception_transferer.py +0 -0
  276. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/env_escape/override_decorators.py +0 -0
  277. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/env_escape/server.py +0 -0
  278. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/env_escape/stub.py +0 -0
  279. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/env_escape/utils.py +0 -0
  280. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/environment_decorator.py +0 -0
  281. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/events_decorator.py +0 -0
  282. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/frameworks/__init__.py +0 -0
  283. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/frameworks/pytorch.py +0 -0
  284. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/gcp/__init__.py +0 -0
  285. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/gcp/gcp_secret_manager_secrets_provider.py +0 -0
  286. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/gcp/gs_exceptions.py +0 -0
  287. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/gcp/gs_storage_client_factory.py +0 -0
  288. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/gcp/gs_tail.py +0 -0
  289. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/gcp/gs_utils.py +0 -0
  290. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/gcp/includefile_support.py +0 -0
  291. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/kubernetes/__init__.py +0 -0
  292. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/kubernetes/kubernetes_client.py +0 -0
  293. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/logs_cli.py +0 -0
  294. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/metadata_providers/__init__.py +0 -0
  295. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/metadata_providers/local.py +0 -0
  296. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/metadata_providers/service.py +0 -0
  297. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/package_cli.py +0 -0
  298. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/parallel_decorator.py +0 -0
  299. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/project_decorator.py +0 -0
  300. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/pypi/__init__.py +0 -0
  301. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/pypi/conda_decorator.py +0 -0
  302. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/pypi/pypi_decorator.py +0 -0
  303. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/pypi/pypi_environment.py +0 -0
  304. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/resources_decorator.py +0 -0
  305. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/retry_decorator.py +0 -0
  306. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/secrets/__init__.py +0 -0
  307. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/secrets/inline_secrets_provider.py +0 -0
  308. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/secrets/secrets_decorator.py +0 -0
  309. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/storage_executor.py +0 -0
  310. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/tag_cli.py +0 -0
  311. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/test_unbounded_foreach_decorator.py +0 -0
  312. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/plugins/timeout_decorator.py +0 -0
  313. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/procpoll.py +0 -0
  314. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/py.typed +0 -0
  315. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/pylint_wrapper.py +0 -0
  316. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/runner/__init__.py +0 -0
  317. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/runner/click_api.py +0 -0
  318. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/runner/deployer.py +0 -0
  319. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/runner/deployer_impl.py +0 -0
  320. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/runner/nbdeploy.py +0 -0
  321. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/runner/nbrun.py +0 -0
  322. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/runner/subprocess_manager.py +0 -0
  323. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/runner/utils.py +0 -0
  324. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/sidecar/__init__.py +0 -0
  325. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/sidecar/sidecar.py +0 -0
  326. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/sidecar/sidecar_messages.py +0 -0
  327. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/sidecar/sidecar_subprocess.py +0 -0
  328. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/sidecar/sidecar_worker.py +0 -0
  329. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/system/__init__.py +0 -0
  330. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/system/system_logger.py +0 -0
  331. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/system/system_monitor.py +0 -0
  332. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/system/system_utils.py +0 -0
  333. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/tagging_util.py +0 -0
  334. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/task.py +0 -0
  335. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/tracing/__init__.py +0 -0
  336. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/tracing/propagator.py +0 -0
  337. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/tracing/span_exporter.py +0 -0
  338. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/tuple_util.py +0 -0
  339. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/tutorials/00-helloworld/README.md +0 -0
  340. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/tutorials/00-helloworld/helloworld.py +0 -0
  341. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/tutorials/01-playlist/README.md +0 -0
  342. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/tutorials/01-playlist/movies.csv +0 -0
  343. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/tutorials/01-playlist/playlist.ipynb +0 -0
  344. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/tutorials/01-playlist/playlist.py +0 -0
  345. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/tutorials/02-statistics/README.md +0 -0
  346. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/tutorials/02-statistics/movies.csv +0 -0
  347. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/tutorials/02-statistics/stats.ipynb +0 -0
  348. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/tutorials/02-statistics/stats.py +0 -0
  349. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/tutorials/03-playlist-redux/README.md +0 -0
  350. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/tutorials/03-playlist-redux/playlist.py +0 -0
  351. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/tutorials/04-playlist-plus/README.md +0 -0
  352. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/tutorials/04-playlist-plus/playlist.py +0 -0
  353. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/tutorials/05-hello-cloud/README.md +0 -0
  354. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/tutorials/05-hello-cloud/hello-cloud.ipynb +0 -0
  355. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/tutorials/05-hello-cloud/hello-cloud.py +0 -0
  356. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/tutorials/06-statistics-redux/README.md +0 -0
  357. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/tutorials/06-statistics-redux/stats.ipynb +0 -0
  358. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/tutorials/07-worldview/README.md +0 -0
  359. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/tutorials/07-worldview/worldview.ipynb +0 -0
  360. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/tutorials/08-autopilot/README.md +0 -0
  361. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/tutorials/08-autopilot/autopilot.ipynb +0 -0
  362. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/unbounded_foreach.py +0 -0
  363. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/user_configs/__init__.py +0 -0
  364. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/user_configs/config_decorators.py +0 -0
  365. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/user_configs/config_options.py +0 -0
  366. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/util.py +0 -0
  367. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/metaflow/vendor.py +0 -0
  368. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/ob_metaflow.egg-info/SOURCES.txt +0 -0
  369. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/ob_metaflow.egg-info/dependency_links.txt +0 -0
  370. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/ob_metaflow.egg-info/entry_points.txt +0 -0
  371. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/ob_metaflow.egg-info/top_level.txt +0 -0
  372. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/setup.cfg +0 -0
  373. {ob_metaflow-2.13.0.1 → ob_metaflow-2.13.2.1}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ob-metaflow
3
- Version: 2.13.0.1
3
+ Version: 2.13.2.1
4
4
  Summary: Metaflow: More Data Science, Less Engineering
5
5
  Author: Netflix, Outerbounds & the Metaflow Community
6
6
  Author-email: help@outerbounds.co
@@ -12,7 +12,7 @@ Requires-Dist: boto3
12
12
  Requires-Dist: pylint
13
13
  Requires-Dist: kubernetes
14
14
  Provides-Extra: stubs
15
- Requires-Dist: metaflow-stubs==2.13.0.1; extra == "stubs"
15
+ Requires-Dist: metaflow-stubs==2.13.2.1; extra == "stubs"
16
16
 
17
17
  ![Metaflow_Logo_Horizontal_FullColor_Ribbon_Dark_RGB](https://user-images.githubusercontent.com/763451/89453116-96a57e00-d713-11ea-9fa6-82b29d4d6eff.png)
18
18
 
@@ -197,6 +197,7 @@ _plugin_categories = {
197
197
  "cli": lambda x: (
198
198
  list(x.commands)[0] if len(x.commands) == 1 else "too many commands"
199
199
  ),
200
+ "runner_cli": lambda x: x.name,
200
201
  }
201
202
 
202
203
 
@@ -1,11 +1,12 @@
1
+ import json
1
2
  import time
3
+ from threading import Thread
4
+
2
5
  import requests
3
- import json
4
6
 
5
- from threading import Thread
6
- from metaflow.sidecar import MessageTypes, Message
7
- from metaflow.metaflow_config import SERVICE_HEADERS
8
7
  from metaflow.exception import MetaflowException
8
+ from metaflow.metaflow_config import SERVICE_HEADERS
9
+ from metaflow.sidecar import Message, MessageTypes
9
10
 
10
11
  HB_URL_KEY = "hb_url"
11
12
 
@@ -52,13 +53,27 @@ class MetadataHeartBeat(object):
52
53
  retry_counter = 0
53
54
  except HeartBeatException as e:
54
55
  retry_counter = retry_counter + 1
55
- time.sleep(4**retry_counter)
56
+ time.sleep(1.5**retry_counter)
56
57
 
57
58
  def _heartbeat(self):
58
59
  if self.hb_url is not None:
59
- response = requests.post(
60
- url=self.hb_url, data="{}", headers=self.headers.copy()
61
- )
60
+ try:
61
+ response = requests.post(
62
+ url=self.hb_url, data="{}", headers=self.headers.copy()
63
+ )
64
+ except requests.exceptions.ConnectionError as e:
65
+ raise HeartBeatException(
66
+ "HeartBeat request (%s) failed" " (ConnectionError)" % (self.hb_url)
67
+ )
68
+ except requests.exceptions.Timeout as e:
69
+ raise HeartBeatException(
70
+ "HeartBeat request (%s) failed" " (Timeout)" % (self.hb_url)
71
+ )
72
+ except requests.exceptions.RequestException as e:
73
+ raise HeartBeatException(
74
+ "HeartBeat request (%s) failed"
75
+ " (RequestException) %s" % (self.hb_url, str(e))
76
+ )
62
77
  # Unfortunately, response.json() returns a string that we need
63
78
  # to cast to json; however when the request encounters an error
64
79
  # the return type is a json blob :/
@@ -356,6 +356,8 @@ KUBERNETES_PERSISTENT_VOLUME_CLAIMS = from_conf(
356
356
  KUBERNETES_SECRETS = from_conf("KUBERNETES_SECRETS", "")
357
357
  # Default labels for kubernetes pods
358
358
  KUBERNETES_LABELS = from_conf("KUBERNETES_LABELS", "")
359
+ # Default annotations for kubernetes pods
360
+ KUBERNETES_ANNOTATIONS = from_conf("KUBERNETES_ANNOTATIONS", "")
359
361
  # Default GPU vendor to use by K8S jobs created by Metaflow (supports nvidia, amd)
360
362
  KUBERNETES_GPU_VENDOR = from_conf("KUBERNETES_GPU_VENDOR", "nvidia")
361
363
  # Default container image for K8S
@@ -369,7 +369,7 @@ class Parameter(object):
369
369
  # Resolve any value from configurations
370
370
  self.kwargs = unpack_delayed_evaluator(self.kwargs, ignore_errors=ignore_errors)
371
371
  # Do it one item at a time so errors are ignored at that level (as opposed to
372
- # at the entire kwargs leve)
372
+ # at the entire kwargs level)
373
373
  self.kwargs = {
374
374
  k: resolve_delayed_evaluator(v, ignore_errors=ignore_errors)
375
375
  for k, v in self.kwargs.items()
@@ -19,6 +19,11 @@ CLIS_DESC = [
19
19
  ("logs", ".logs_cli.cli"),
20
20
  ]
21
21
 
22
+ # Add additional commands to the runner here
23
+ # These will be accessed using Runner().<command>()
24
+ RUNNER_CLIS_DESC = []
25
+
26
+
22
27
  from .test_unbounded_foreach_decorator import InternalTestUnboundedForeachInput
23
28
 
24
29
  # Add new step decorators here
@@ -168,6 +173,14 @@ def get_plugin_cli_path():
168
173
  return resolve_plugins("cli", path_only=True)
169
174
 
170
175
 
176
+ def get_runner_cli():
177
+ return resolve_plugins("runner_cli")
178
+
179
+
180
+ def get_runner_cli_path():
181
+ return resolve_plugins("runner_cli", path_only=True)
182
+
183
+
171
184
  STEP_DECORATORS = resolve_plugins("step_decorator")
172
185
  FLOW_DECORATORS = resolve_plugins("flow_decorator")
173
186
  ENVIRONMENTS = resolve_plugins("environment")
@@ -1,6 +1,4 @@
1
1
  import json
2
- import os
3
- import sys
4
2
 
5
3
  from metaflow.exception import MetaflowException
6
4
  from metaflow.plugins.kubernetes.kubernetes_client import KubernetesClient
@@ -7,12 +7,11 @@ import sys
7
7
  from collections import defaultdict
8
8
  from hashlib import sha1
9
9
  from math import inf
10
- from typing import List, Tuple
11
10
 
12
11
  from metaflow import JSONType, current
13
12
  from metaflow.decorators import flow_decorators
14
13
  from metaflow.exception import MetaflowException
15
- from metaflow.graph import DAGNode, FlowGraph
14
+ from metaflow.graph import FlowGraph
16
15
  from metaflow.includefile import FilePathClass
17
16
  from metaflow.metaflow_config import (
18
17
  ARGO_EVENTS_EVENT,
@@ -39,9 +38,7 @@ from metaflow.metaflow_config import (
39
38
  DEFAULT_SECRETS_BACKEND_TYPE,
40
39
  GCP_SECRET_MANAGER_PREFIX,
41
40
  KUBERNETES_FETCH_EC2_METADATA,
42
- KUBERNETES_LABELS,
43
41
  KUBERNETES_NAMESPACE,
44
- KUBERNETES_NODE_SELECTOR,
45
42
  KUBERNETES_SANDBOX_INIT_SCRIPT,
46
43
  KUBERNETES_SECRETS,
47
44
  S3_ENDPOINT_URL,
@@ -55,10 +52,7 @@ from metaflow.metaflow_config_funcs import config_values, init_config
55
52
  from metaflow.mflog import BASH_SAVE_LOGS, bash_capture_logs, export_mflog_env_vars
56
53
  from metaflow.parameters import deploy_time_eval
57
54
  from metaflow.plugins.kubernetes.kube_utils import qos_requests_and_limits
58
- from metaflow.plugins.kubernetes.kubernetes import (
59
- parse_kube_keyvalue_list,
60
- validate_kube_labels,
61
- )
55
+
62
56
  from metaflow.plugins.kubernetes.kubernetes_jobsets import KubernetesArgoJobSet
63
57
  from metaflow.unbounded_foreach import UBF_CONTROL, UBF_TASK
64
58
  from metaflow.user_configs.config_options import ConfigInput
@@ -174,7 +168,8 @@ class ArgoWorkflows(object):
174
168
  self.triggers, self.trigger_options = self._process_triggers()
175
169
  self._schedule, self._timezone = self._get_schedule()
176
170
 
177
- self.kubernetes_labels = self._get_kubernetes_labels()
171
+ self._base_labels = self._base_kubernetes_labels()
172
+ self._base_annotations = self._base_kubernetes_annotations()
178
173
  self._workflow_template = self._compile_workflow_template()
179
174
  self._sensor = self._compile_sensor()
180
175
 
@@ -311,7 +306,7 @@ class ArgoWorkflows(object):
311
306
  try:
312
307
  # Check that the workflow was deployed through Metaflow
313
308
  workflow_template["metadata"]["annotations"]["metaflow/owner"]
314
- except KeyError as e:
309
+ except KeyError:
315
310
  raise ArgoWorkflowsException(
316
311
  "An existing non-metaflow workflow with the same name as "
317
312
  "*%s* already exists in Argo Workflows. \nPlease modify the "
@@ -325,18 +320,42 @@ class ArgoWorkflows(object):
325
320
  except Exception as e:
326
321
  raise ArgoWorkflowsException(str(e))
327
322
 
328
- @staticmethod
329
- def _get_kubernetes_labels():
323
+ def _base_kubernetes_labels(self):
330
324
  """
331
- Get Kubernetes labels from environment variable.
332
- Parses the string into a dict and validates that values adhere to Kubernetes restrictions.
325
+ Get shared Kubernetes labels for Argo resources.
333
326
  """
334
- if not KUBERNETES_LABELS:
335
- return {}
336
- env_labels = KUBERNETES_LABELS.split(",")
337
- env_labels = parse_kube_keyvalue_list(env_labels, False)
338
- validate_kube_labels(env_labels)
339
- return env_labels
327
+ # TODO: Add configuration through an environment variable or Metaflow config in the future if required.
328
+ labels = {"app.kubernetes.io/part-of": "metaflow"}
329
+
330
+ return labels
331
+
332
+ def _base_kubernetes_annotations(self):
333
+ """
334
+ Get shared Kubernetes annotations for Argo resources.
335
+ """
336
+ from datetime import datetime, timezone
337
+
338
+ # TODO: Add configuration through an environment variable or Metaflow config in the future if required.
339
+ # base annotations
340
+ annotations = {
341
+ "metaflow/production_token": self.production_token,
342
+ "metaflow/owner": self.username,
343
+ "metaflow/user": "argo-workflows",
344
+ "metaflow/flow_name": self.flow.name,
345
+ "metaflow/deployment_timestamp": str(
346
+ datetime.now(timezone.utc).isoformat()
347
+ ),
348
+ }
349
+
350
+ if current.get("project_name"):
351
+ annotations.update(
352
+ {
353
+ "metaflow/project_name": current.project_name,
354
+ "metaflow/branch_name": current.branch_name,
355
+ "metaflow/project_flow_name": current.project_flow_name,
356
+ }
357
+ )
358
+ return annotations
340
359
 
341
360
  def _get_schedule(self):
342
361
  schedule = self.flow._flow_decorators.get("schedule")
@@ -412,7 +431,7 @@ class ArgoWorkflows(object):
412
431
  "metaflow/production_token"
413
432
  ],
414
433
  )
415
- except KeyError as e:
434
+ except KeyError:
416
435
  raise ArgoWorkflowsException(
417
436
  "An existing non-metaflow workflow with the same name as "
418
437
  "*%s* already exists in Argo Workflows. \nPlease modify the "
@@ -677,18 +696,7 @@ class ArgoWorkflows(object):
677
696
  # generate container templates at the top level (in WorkflowSpec) and maintain
678
697
  # references to them within the DAGTask.
679
698
 
680
- from datetime import datetime, timezone
681
-
682
- annotations = {
683
- "metaflow/production_token": self.production_token,
684
- "metaflow/owner": self.username,
685
- "metaflow/user": "argo-workflows",
686
- "metaflow/flow_name": self.flow.name,
687
- "metaflow/deployment_timestamp": str(
688
- datetime.now(timezone.utc).isoformat()
689
- ),
690
- }
691
-
699
+ annotations = {}
692
700
  if self._schedule is not None:
693
701
  # timezone is an optional field and json dumps on None will result in null
694
702
  # hence configuring it to an empty string
@@ -700,15 +708,6 @@ class ArgoWorkflows(object):
700
708
  if self.parameters:
701
709
  annotations.update({"metaflow/parameters": json.dumps(self.parameters)})
702
710
 
703
- if current.get("project_name"):
704
- annotations.update(
705
- {
706
- "metaflow/project_name": current.project_name,
707
- "metaflow/branch_name": current.branch_name,
708
- "metaflow/project_flow_name": current.project_flow_name,
709
- }
710
- )
711
-
712
711
  # Some more annotations to populate the Argo UI nicely
713
712
  if self.tags:
714
713
  annotations.update({"metaflow/tags": json.dumps(self.tags)})
@@ -745,6 +744,17 @@ class ArgoWorkflows(object):
745
744
  )
746
745
  }
747
746
  )
747
+ try:
748
+ # Build the DAG based on the DAGNodes given by the FlowGraph for the found FlowSpec class.
749
+ _steps_info, graph_structure = self.graph.output_steps()
750
+ graph_info = {
751
+ # for the time being, we only need the graph_structure. Being mindful of annotation size limits we do not include anything extra.
752
+ "graph_structure": graph_structure
753
+ }
754
+ except Exception:
755
+ graph_info = None
756
+
757
+ dag_annotation = {"metaflow/dag": json.dumps(graph_info)}
748
758
 
749
759
  return (
750
760
  WorkflowTemplate()
@@ -756,9 +766,11 @@ class ArgoWorkflows(object):
756
766
  # is released, we should be able to support multi-namespace /
757
767
  # multi-cluster scheduling.
758
768
  .namespace(KUBERNETES_NAMESPACE)
759
- .label("app.kubernetes.io/name", "metaflow-flow")
760
- .label("app.kubernetes.io/part-of", "metaflow")
761
769
  .annotations(annotations)
770
+ .annotations(self._base_annotations)
771
+ .labels(self._base_labels)
772
+ .label("app.kubernetes.io/name", "metaflow-flow")
773
+ .annotations(dag_annotation)
762
774
  )
763
775
  .spec(
764
776
  WorkflowSpec()
@@ -788,10 +800,14 @@ class ArgoWorkflows(object):
788
800
  # Set workflow metadata
789
801
  .workflow_metadata(
790
802
  Metadata()
803
+ .labels(self._base_labels)
791
804
  .label("app.kubernetes.io/name", "metaflow-run")
792
- .label("app.kubernetes.io/part-of", "metaflow")
793
805
  .annotations(
794
- {**annotations, **{"metaflow/run_id": "argo-{{workflow.name}}"}}
806
+ {
807
+ **annotations,
808
+ **self._base_annotations,
809
+ **{"metaflow/run_id": "argo-{{workflow.name}}"},
810
+ }
795
811
  )
796
812
  # TODO: Set dynamic labels using labels_from. Ideally, we would
797
813
  # want to expose run_id as a label. It's easy to add labels,
@@ -824,10 +840,10 @@ class ArgoWorkflows(object):
824
840
  # Set common pod metadata.
825
841
  .pod_metadata(
826
842
  Metadata()
843
+ .labels(self._base_labels)
827
844
  .label("app.kubernetes.io/name", "metaflow-task")
828
- .label("app.kubernetes.io/part-of", "metaflow")
829
845
  .annotations(annotations)
830
- .labels(self.kubernetes_labels)
846
+ .annotations(self._base_annotations)
831
847
  )
832
848
  # Set the entrypoint to flow name
833
849
  .entrypoint(self.flow.name)
@@ -1911,15 +1927,7 @@ class ArgoWorkflows(object):
1911
1927
  # twice, but due to issues with variable substitution, we will have to
1912
1928
  # live with this routine.
1913
1929
  if node.parallel_step:
1914
- # Explicitly add the task-id-hint label. This is important because this label
1915
- # is returned as an Output parameter of this step and is used subsequently as an
1916
- # an input in the join step.
1917
- kubernetes_labels = self.kubernetes_labels.copy()
1918
1930
  jobset_name = "{{inputs.parameters.jobset-name}}"
1919
- kubernetes_labels["task_id_entropy"] = (
1920
- "{{inputs.parameters.task-id-entropy}}"
1921
- )
1922
- kubernetes_labels["num_parallel"] = "{{inputs.parameters.num-parallel}}"
1923
1931
  jobset = KubernetesArgoJobSet(
1924
1932
  kubernetes_sdk=kubernetes_sdk,
1925
1933
  name=jobset_name,
@@ -1975,8 +1983,22 @@ class ArgoWorkflows(object):
1975
1983
  for k, v in env.items():
1976
1984
  jobset.environment_variable(k, v)
1977
1985
 
1978
- for k, v in kubernetes_labels.items():
1979
- jobset.label(k, v)
1986
+ # Set labels. Do not allow user-specified task labels to override internal ones.
1987
+ #
1988
+ # Explicitly add the task-id-hint label. This is important because this label
1989
+ # is returned as an Output parameter of this step and is used subsequently as an
1990
+ # an input in the join step.
1991
+ kubernetes_labels = {
1992
+ "task_id_entropy": "{{inputs.parameters.task-id-entropy}}",
1993
+ "num_parallel": "{{inputs.parameters.num-parallel}}",
1994
+ }
1995
+ jobset.labels(
1996
+ {
1997
+ **resources["labels"],
1998
+ **self._base_labels,
1999
+ **kubernetes_labels,
2000
+ }
2001
+ )
1980
2002
 
1981
2003
  jobset.environment_variable(
1982
2004
  "MF_MASTER_ADDR", jobset.jobset_control_addr
@@ -2005,27 +2027,23 @@ class ArgoWorkflows(object):
2005
2027
  "TASK_ID_SUFFIX": "metadata.annotations['jobset.sigs.k8s.io/job-index']",
2006
2028
  }
2007
2029
  )
2030
+
2031
+ # Set annotations. Do not allow user-specified task-specific annotations to override internal ones.
2008
2032
  annotations = {
2009
2033
  # setting annotations explicitly as they wont be
2010
2034
  # passed down from WorkflowTemplate level
2011
2035
  "metaflow/step_name": node.name,
2012
2036
  "metaflow/attempt": str(retry_count),
2013
2037
  "metaflow/run_id": run_id,
2014
- "metaflow/production_token": self.production_token,
2015
- "metaflow/owner": self.username,
2016
- "metaflow/user": "argo-workflows",
2017
- "metaflow/flow_name": self.flow.name,
2018
2038
  }
2019
- if current.get("project_name"):
2020
- annotations.update(
2021
- {
2022
- "metaflow/project_name": current.project_name,
2023
- "metaflow/branch_name": current.branch_name,
2024
- "metaflow/project_flow_name": current.project_flow_name,
2025
- }
2026
- )
2027
- for k, v in annotations.items():
2028
- jobset.annotation(k, v)
2039
+
2040
+ jobset.annotations(
2041
+ {
2042
+ **resources["annotations"],
2043
+ **self._base_annotations,
2044
+ **annotations,
2045
+ }
2046
+ )
2029
2047
 
2030
2048
  jobset.control.replicas(1)
2031
2049
  jobset.worker.replicas("{{=asInt(inputs.parameters.workerCount)}}")
@@ -2082,13 +2100,16 @@ class ArgoWorkflows(object):
2082
2100
  minutes_between_retries=minutes_between_retries,
2083
2101
  )
2084
2102
  .metadata(
2085
- ObjectMeta().annotation("metaflow/step_name", node.name)
2103
+ ObjectMeta()
2104
+ .annotation("metaflow/step_name", node.name)
2086
2105
  # Unfortunately, we can't set the task_id since it is generated
2087
2106
  # inside the pod. However, it can be inferred from the annotation
2088
2107
  # set by argo-workflows - `workflows.argoproj.io/outputs` - refer
2089
2108
  # the field 'task-id' in 'parameters'
2090
2109
  # .annotation("metaflow/task_id", ...)
2091
2110
  .annotation("metaflow/attempt", retry_count)
2111
+ .annotations(resources["annotations"])
2112
+ .labels(resources["labels"])
2092
2113
  )
2093
2114
  # Set emptyDir volume for state management
2094
2115
  .empty_dir_volume("out")
@@ -2871,33 +2892,6 @@ class ArgoWorkflows(object):
2871
2892
  "sdk (https://pypi.org/project/kubernetes/) first."
2872
2893
  )
2873
2894
 
2874
- labels = {"app.kubernetes.io/part-of": "metaflow"}
2875
-
2876
- annotations = {
2877
- "metaflow/production_token": self.production_token,
2878
- "metaflow/owner": self.username,
2879
- "metaflow/user": "argo-workflows",
2880
- "metaflow/flow_name": self.flow.name,
2881
- }
2882
- if current.get("project_name"):
2883
- annotations.update(
2884
- {
2885
- "metaflow/project_name": current.project_name,
2886
- "metaflow/branch_name": current.branch_name,
2887
- "metaflow/project_flow_name": current.project_flow_name,
2888
- }
2889
- )
2890
-
2891
- # Useful to paint the UI
2892
- trigger_annotations = {
2893
- "metaflow/triggered_by": json.dumps(
2894
- [
2895
- {key: trigger.get(key) for key in ["name", "type"]}
2896
- for trigger in self.triggers
2897
- ]
2898
- )
2899
- }
2900
-
2901
2895
  return (
2902
2896
  Sensor()
2903
2897
  .metadata(
@@ -2905,10 +2899,9 @@ class ArgoWorkflows(object):
2905
2899
  ObjectMeta()
2906
2900
  .name(ArgoWorkflows._sensor_name(self.name))
2907
2901
  .namespace(KUBERNETES_NAMESPACE)
2902
+ .labels(self._base_labels)
2908
2903
  .label("app.kubernetes.io/name", "metaflow-sensor")
2909
- .label("app.kubernetes.io/part-of", "metaflow")
2910
- .labels(self.kubernetes_labels)
2911
- .annotations(annotations)
2904
+ .annotations(self._base_annotations)
2912
2905
  )
2913
2906
  .spec(
2914
2907
  SensorSpec().template(
@@ -2918,7 +2911,7 @@ class ArgoWorkflows(object):
2918
2911
  ObjectMeta()
2919
2912
  .label("app.kubernetes.io/name", "metaflow-sensor")
2920
2913
  .label("app.kubernetes.io/part-of", "metaflow")
2921
- .annotations(annotations)
2914
+ .annotations(self._base_annotations)
2922
2915
  )
2923
2916
  .container(
2924
2917
  # Run sensor in guaranteed QoS. The sensor isn't doing a lot
@@ -2965,6 +2958,7 @@ class ArgoWorkflows(object):
2965
2958
  "metadata": {
2966
2959
  "generateName": "%s-" % self.name,
2967
2960
  "namespace": KUBERNETES_NAMESPACE,
2961
+ # Useful to paint the UI
2968
2962
  "annotations": {
2969
2963
  "metaflow/triggered_by": json.dumps(
2970
2964
  [
@@ -8,7 +8,6 @@ from time import sleep
8
8
 
9
9
  from metaflow import JSONType, Run, current, decorators, parameters
10
10
  from metaflow._vendor import click
11
- from metaflow.client.core import get_metadata
12
11
  from metaflow.exception import (
13
12
  MetaflowException,
14
13
  MetaflowInternalError,
@@ -1,14 +1,12 @@
1
1
  import json
2
2
  import os
3
- import time
4
3
 
5
4
 
6
5
  from metaflow import current
7
6
  from metaflow.decorators import StepDecorator
8
7
  from metaflow.events import Trigger
9
8
  from metaflow.metadata_provider import MetaDatum
10
- from metaflow.metaflow_config import ARGO_EVENTS_WEBHOOK_URL
11
- from metaflow.graph import DAGNode, FlowGraph
9
+ from metaflow.graph import FlowGraph
12
10
  from metaflow.flowspec import FlowSpec
13
11
  from .argo_events import ArgoEvent
14
12
 
@@ -42,7 +40,7 @@ class ArgoWorkflowsInternalDecorator(StepDecorator):
42
40
  if payload != "null": # Argo-Workflow's None
43
41
  try:
44
42
  payload = json.loads(payload)
45
- except (TypeError, ValueError) as e:
43
+ except (TypeError, ValueError):
46
44
  # There could be arbitrary events that Metaflow doesn't know of
47
45
  payload = {}
48
46
  triggers.append(
@@ -1,5 +1,4 @@
1
1
  import sys
2
- from hashlib import md5
3
2
 
4
3
 
5
4
  def generate_input_paths(run_id, step_name, task_id_entropy, num_parallel):
@@ -1,5 +1,4 @@
1
1
  import re
2
- import requests
3
2
 
4
3
  from metaflow.exception import MetaflowException
5
4
  from metaflow.metaflow_config import MAX_MEMORY_PER_TASK, MAX_CPU_PER_TASK
@@ -31,6 +30,10 @@ def get_ec2_instance_metadata():
31
30
  - ec2-region
32
31
  - ec2-availability-zone
33
32
  """
33
+
34
+ # TODO: Remove dependency on requests
35
+ import requests
36
+
34
37
  meta = {}
35
38
  # Capture AWS instance identity metadata. This is best-effort only since
36
39
  # access to this end-point might be blocked on AWS and not available
@@ -160,6 +163,8 @@ def compute_resource_attributes(decos, compute_deco, step_name, resource_default
160
163
  # Here we don't have ints, so we compare the value and raise
161
164
  # an exception if not equal
162
165
  if my_val != v:
166
+ # TODO: Throw a better exception since the user has no
167
+ # knowledge of 'compute' decorator
163
168
  raise MetaflowException(
164
169
  "'resources' and compute decorator have conflicting "
165
170
  "values for '%s'. Please use consistent values or "
@@ -1,9 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
- from collections import defaultdict, deque
2
+ from collections import defaultdict
3
3
  import copy
4
4
  import random
5
- import select
6
- import sys
7
5
  import time
8
6
  import hashlib
9
7
 
@@ -1,34 +1,30 @@
1
1
  import os
2
- import sys
3
2
  import platform
4
- import requests
3
+ import sys
5
4
  import time
6
5
 
7
- from metaflow import util
8
6
  from metaflow import R, current
9
-
10
7
  from metaflow.decorators import StepDecorator
11
- from metaflow.plugins.resources_decorator import ResourcesDecorator
12
- from metaflow.plugins.timeout_decorator import get_run_time_limit_for_task
13
8
  from metaflow.metadata_provider import MetaDatum
14
9
  from metaflow.metadata_provider.util import sync_local_metadata_to_datastore
15
10
  from metaflow.metaflow_config import (
16
- ECS_S3_ACCESS_IAM_ROLE,
17
- BATCH_JOB_QUEUE,
18
11
  BATCH_CONTAINER_IMAGE,
19
12
  BATCH_CONTAINER_REGISTRY,
20
- ECS_FARGATE_EXECUTION_ROLE,
13
+ BATCH_JOB_QUEUE,
21
14
  DATASTORE_LOCAL_DIR,
15
+ ECS_FARGATE_EXECUTION_ROLE,
16
+ ECS_S3_ACCESS_IAM_ROLE,
22
17
  )
18
+ from metaflow.plugins.timeout_decorator import get_run_time_limit_for_task
23
19
  from metaflow.sidecar import Sidecar
24
20
  from metaflow.unbounded_foreach import UBF_CONTROL
25
21
 
26
- from .batch import BatchException
27
22
  from ..aws_utils import (
28
23
  compute_resource_attributes,
29
24
  get_docker_registry,
30
25
  get_ec2_instance_metadata,
31
26
  )
27
+ from .batch import BatchException
32
28
 
33
29
 
34
30
  class BatchDecorator(StepDecorator):
@@ -280,6 +276,10 @@ class BatchDecorator(StepDecorator):
280
276
  # Metaflow would be running the container agent compatible with
281
277
  # version V4.
282
278
  # https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-metadata-endpoint.html
279
+
280
+ # TODO: Remove dependency on requests
281
+ import requests
282
+
283
283
  try:
284
284
  logs_meta = (
285
285
  requests.get(url=os.environ["ECS_CONTAINER_METADATA_URI_V4"])
@@ -386,7 +386,7 @@ class BatchDecorator(StepDecorator):
386
386
  len(flow._control_mapper_tasks),
387
387
  )
388
388
  )
389
- except Exception as e:
389
+ except Exception:
390
390
  pass
391
391
  raise Exception(
392
392
  "Batch secondary workers did not finish in %s seconds" % TIMEOUT
@@ -1,8 +1,5 @@
1
- import os
2
1
  import time
3
2
 
4
- import requests
5
-
6
3
  from metaflow.metaflow_config import SFN_DYNAMO_DB_TABLE
7
4
 
8
5
 
@@ -3,7 +3,7 @@ import os
3
3
  import random
4
4
  import string
5
5
  import zlib
6
- from itertools import dropwhile, islice
6
+ from itertools import dropwhile
7
7
 
8
8
  from metaflow.util import to_bytes
9
9