ob-metaflow 2.12.11.0__tar.gz → 2.12.14.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 (359) hide show
  1. {ob_metaflow-2.12.11.0/ob_metaflow.egg-info → ob_metaflow-2.12.14.1}/PKG-INFO +2 -2
  2. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/cli.py +3 -3
  3. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/client/core.py +2 -0
  4. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/flowspec.py +2 -1
  5. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/graph.py +7 -3
  6. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/metaflow_config.py +11 -3
  7. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/metaflow_config_funcs.py +51 -3
  8. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/metaflow_environment.py +36 -21
  9. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/argo/argo_workflows.py +12 -12
  10. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/argo/argo_workflows_cli.py +2 -2
  11. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/argo/argo_workflows_deployer.py +3 -1
  12. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/aws/aws_utils.py +16 -0
  13. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/aws/batch/batch_decorator.py +1 -0
  14. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/aws/step_functions/step_functions_deployer.py +3 -1
  15. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/kubernetes/kubernetes.py +26 -0
  16. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/kubernetes/kubernetes_decorator.py +15 -0
  17. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/pypi/conda_decorator.py +4 -4
  18. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/pypi/conda_environment.py +4 -7
  19. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/pypi/pypi_decorator.py +13 -4
  20. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/runner/deployer.py +46 -3
  21. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/runner/metaflow_runner.py +7 -1
  22. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/runner/nbdeploy.py +3 -0
  23. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/runner/nbrun.py +5 -0
  24. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/runtime.py +26 -13
  25. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/util.py +19 -0
  26. ob_metaflow-2.12.14.1/metaflow/version.py +1 -0
  27. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1/ob_metaflow.egg-info}/PKG-INFO +2 -2
  28. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/ob_metaflow.egg-info/requires.txt +1 -1
  29. ob_metaflow-2.12.11.0/metaflow/version.py +0 -1
  30. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/LICENSE +0 -0
  31. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/MANIFEST.in +0 -0
  32. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/README.md +0 -0
  33. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/R.py +0 -0
  34. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/__init__.py +0 -0
  35. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/__init__.py +0 -0
  36. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/click/__init__.py +0 -0
  37. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/click/_bashcomplete.py +0 -0
  38. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/click/_compat.py +0 -0
  39. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/click/_termui_impl.py +0 -0
  40. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/click/_textwrap.py +0 -0
  41. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/click/_unicodefun.py +0 -0
  42. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/click/_winconsole.py +0 -0
  43. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/click/core.py +0 -0
  44. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/click/decorators.py +0 -0
  45. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/click/exceptions.py +0 -0
  46. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/click/formatting.py +0 -0
  47. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/click/globals.py +0 -0
  48. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/click/parser.py +0 -0
  49. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/click/termui.py +0 -0
  50. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/click/testing.py +0 -0
  51. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/click/types.py +0 -0
  52. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/click/utils.py +0 -0
  53. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/importlib_metadata/__init__.py +0 -0
  54. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/importlib_metadata/_adapters.py +0 -0
  55. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/importlib_metadata/_collections.py +0 -0
  56. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/importlib_metadata/_compat.py +0 -0
  57. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/importlib_metadata/_functools.py +0 -0
  58. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/importlib_metadata/_itertools.py +0 -0
  59. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/importlib_metadata/_meta.py +0 -0
  60. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/importlib_metadata/_text.py +0 -0
  61. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/importlib_metadata/py.typed +0 -0
  62. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/packaging/__init__.py +0 -0
  63. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/packaging/_elffile.py +0 -0
  64. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/packaging/_manylinux.py +0 -0
  65. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/packaging/_musllinux.py +0 -0
  66. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/packaging/_parser.py +0 -0
  67. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/packaging/_structures.py +0 -0
  68. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/packaging/_tokenizer.py +0 -0
  69. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/packaging/markers.py +0 -0
  70. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/packaging/py.typed +0 -0
  71. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/packaging/requirements.py +0 -0
  72. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/packaging/specifiers.py +0 -0
  73. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/packaging/tags.py +0 -0
  74. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/packaging/utils.py +0 -0
  75. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/packaging/version.py +0 -0
  76. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/typeguard/__init__.py +0 -0
  77. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/typeguard/_checkers.py +0 -0
  78. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/typeguard/_config.py +0 -0
  79. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/typeguard/_decorators.py +0 -0
  80. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/typeguard/_exceptions.py +0 -0
  81. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/typeguard/_functions.py +0 -0
  82. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/typeguard/_importhook.py +0 -0
  83. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/typeguard/_memo.py +0 -0
  84. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/typeguard/_pytest_plugin.py +0 -0
  85. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/typeguard/_suppression.py +0 -0
  86. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/typeguard/_transformer.py +0 -0
  87. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/typeguard/_union_transformer.py +0 -0
  88. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/typeguard/_utils.py +0 -0
  89. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/typeguard/py.typed +0 -0
  90. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/typing_extensions.py +0 -0
  91. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/v3_5/__init__.py +0 -0
  92. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/v3_5/importlib_metadata/__init__.py +0 -0
  93. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/v3_5/importlib_metadata/_compat.py +0 -0
  94. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/v3_5/zipp.py +0 -0
  95. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/v3_6/__init__.py +0 -0
  96. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/v3_6/importlib_metadata/__init__.py +0 -0
  97. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/v3_6/importlib_metadata/_adapters.py +0 -0
  98. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/v3_6/importlib_metadata/_collections.py +0 -0
  99. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/v3_6/importlib_metadata/_compat.py +0 -0
  100. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/v3_6/importlib_metadata/_functools.py +0 -0
  101. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/v3_6/importlib_metadata/_itertools.py +0 -0
  102. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/v3_6/importlib_metadata/_meta.py +0 -0
  103. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/v3_6/importlib_metadata/_text.py +0 -0
  104. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/v3_6/importlib_metadata/py.typed +0 -0
  105. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/v3_6/typing_extensions.py +0 -0
  106. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/v3_6/zipp.py +0 -0
  107. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/_vendor/zipp.py +0 -0
  108. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/cards.py +0 -0
  109. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/cli_args.py +0 -0
  110. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/client/__init__.py +0 -0
  111. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/client/filecache.py +0 -0
  112. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/clone_util.py +0 -0
  113. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/cmd/__init__.py +0 -0
  114. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/cmd/configure_cmd.py +0 -0
  115. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/cmd/develop/__init__.py +0 -0
  116. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/cmd/develop/stub_generator.py +0 -0
  117. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/cmd/develop/stubs.py +0 -0
  118. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/cmd/main_cli.py +0 -0
  119. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/cmd/tutorials_cmd.py +0 -0
  120. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/cmd/util.py +0 -0
  121. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/cmd_with_io.py +0 -0
  122. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/datastore/__init__.py +0 -0
  123. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/datastore/content_addressed_store.py +0 -0
  124. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/datastore/datastore_set.py +0 -0
  125. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/datastore/datastore_storage.py +0 -0
  126. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/datastore/exceptions.py +0 -0
  127. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/datastore/flow_datastore.py +0 -0
  128. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/datastore/inputs.py +0 -0
  129. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/datastore/task_datastore.py +0 -0
  130. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/debug.py +0 -0
  131. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/decorators.py +0 -0
  132. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/event_logger.py +0 -0
  133. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/events.py +0 -0
  134. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/exception.py +0 -0
  135. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/extension_support/__init__.py +0 -0
  136. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/extension_support/_empty_file.py +0 -0
  137. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/extension_support/cmd.py +0 -0
  138. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/extension_support/integrations.py +0 -0
  139. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/extension_support/plugins.py +0 -0
  140. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/includefile.py +0 -0
  141. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/integrations.py +0 -0
  142. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/lint.py +0 -0
  143. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/metadata/__init__.py +0 -0
  144. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/metadata/heartbeat.py +0 -0
  145. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/metadata/metadata.py +0 -0
  146. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/metadata/util.py +0 -0
  147. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/metaflow_current.py +0 -0
  148. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/metaflow_profile.py +0 -0
  149. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/metaflow_version.py +0 -0
  150. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/mflog/__init__.py +0 -0
  151. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/mflog/mflog.py +0 -0
  152. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/mflog/save_logs.py +0 -0
  153. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/mflog/save_logs_periodically.py +0 -0
  154. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/mflog/tee.py +0 -0
  155. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/monitor.py +0 -0
  156. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/multicore_utils.py +0 -0
  157. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/package.py +0 -0
  158. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/parameters.py +0 -0
  159. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/__init__.py +0 -0
  160. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/airflow/__init__.py +0 -0
  161. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/airflow/airflow.py +0 -0
  162. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/airflow/airflow_cli.py +0 -0
  163. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/airflow/airflow_decorator.py +0 -0
  164. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/airflow/airflow_utils.py +0 -0
  165. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/airflow/dag.py +0 -0
  166. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/airflow/exception.py +0 -0
  167. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/airflow/plumbing/__init__.py +0 -0
  168. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/airflow/plumbing/set_parameters.py +0 -0
  169. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/airflow/sensors/__init__.py +0 -0
  170. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/airflow/sensors/base_sensor.py +0 -0
  171. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/airflow/sensors/external_task_sensor.py +0 -0
  172. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/airflow/sensors/s3_sensor.py +0 -0
  173. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/argo/__init__.py +0 -0
  174. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/argo/argo_client.py +0 -0
  175. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/argo/argo_events.py +0 -0
  176. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/argo/argo_workflows_decorator.py +0 -0
  177. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/argo/capture_error.py +0 -0
  178. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/argo/daemon.py +0 -0
  179. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/argo/generate_input_paths.py +0 -0
  180. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/argo/jobset_input_paths.py +0 -0
  181. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/aws/__init__.py +0 -0
  182. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/aws/aws_client.py +0 -0
  183. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/aws/batch/__init__.py +0 -0
  184. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/aws/batch/batch.py +0 -0
  185. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/aws/batch/batch_cli.py +0 -0
  186. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/aws/batch/batch_client.py +0 -0
  187. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/aws/secrets_manager/__init__.py +0 -0
  188. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/aws/secrets_manager/aws_secrets_manager_secrets_provider.py +0 -0
  189. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/aws/step_functions/__init__.py +0 -0
  190. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/aws/step_functions/dynamo_db_client.py +0 -0
  191. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/aws/step_functions/event_bridge_client.py +0 -0
  192. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/aws/step_functions/production_token.py +0 -0
  193. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/aws/step_functions/schedule_decorator.py +0 -0
  194. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/aws/step_functions/set_batch_environment.py +0 -0
  195. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/aws/step_functions/step_functions.py +0 -0
  196. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/aws/step_functions/step_functions_cli.py +0 -0
  197. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/aws/step_functions/step_functions_client.py +0 -0
  198. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/aws/step_functions/step_functions_decorator.py +0 -0
  199. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/azure/__init__.py +0 -0
  200. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/azure/azure_credential.py +0 -0
  201. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/azure/azure_exceptions.py +0 -0
  202. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/azure/azure_secret_manager_secrets_provider.py +0 -0
  203. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/azure/azure_tail.py +0 -0
  204. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/azure/azure_utils.py +0 -0
  205. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/azure/blob_service_client_factory.py +0 -0
  206. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/azure/includefile_support.py +0 -0
  207. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/cards/__init__.py +0 -0
  208. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/cards/card_cli.py +0 -0
  209. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/cards/card_client.py +0 -0
  210. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/cards/card_creator.py +0 -0
  211. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/cards/card_datastore.py +0 -0
  212. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/cards/card_decorator.py +0 -0
  213. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/cards/card_modules/__init__.py +0 -0
  214. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/cards/card_modules/base.html +0 -0
  215. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/cards/card_modules/basic.py +0 -0
  216. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/cards/card_modules/bundle.css +0 -0
  217. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/cards/card_modules/card.py +0 -0
  218. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/cards/card_modules/chevron/__init__.py +0 -0
  219. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/cards/card_modules/chevron/main.py +0 -0
  220. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/cards/card_modules/chevron/metadata.py +0 -0
  221. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/cards/card_modules/chevron/renderer.py +0 -0
  222. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/cards/card_modules/chevron/tokenizer.py +0 -0
  223. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/cards/card_modules/components.py +0 -0
  224. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/cards/card_modules/convert_to_native_type.py +0 -0
  225. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/cards/card_modules/main.js +0 -0
  226. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/cards/card_modules/renderer_tools.py +0 -0
  227. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/cards/card_modules/test_cards.py +0 -0
  228. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/cards/card_resolver.py +0 -0
  229. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/cards/card_server.py +0 -0
  230. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/cards/card_viewer/viewer.html +0 -0
  231. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/cards/component_serializer.py +0 -0
  232. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/cards/exception.py +0 -0
  233. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/catch_decorator.py +0 -0
  234. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/datastores/__init__.py +0 -0
  235. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/datastores/azure_storage.py +0 -0
  236. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/datastores/gs_storage.py +0 -0
  237. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/datastores/local_storage.py +0 -0
  238. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/datastores/s3_storage.py +0 -0
  239. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/datatools/__init__.py +0 -0
  240. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/datatools/local.py +0 -0
  241. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/datatools/s3/__init__.py +0 -0
  242. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/datatools/s3/s3.py +0 -0
  243. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/datatools/s3/s3op.py +0 -0
  244. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/datatools/s3/s3tail.py +0 -0
  245. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/datatools/s3/s3util.py +0 -0
  246. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/debug_logger.py +0 -0
  247. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/debug_monitor.py +0 -0
  248. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/env_escape/__init__.py +0 -0
  249. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/env_escape/client.py +0 -0
  250. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/env_escape/client_modules.py +0 -0
  251. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/env_escape/communication/__init__.py +0 -0
  252. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/env_escape/communication/bytestream.py +0 -0
  253. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/env_escape/communication/channel.py +0 -0
  254. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/env_escape/communication/socket_bytestream.py +0 -0
  255. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/env_escape/communication/utils.py +0 -0
  256. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/env_escape/configurations/emulate_test_lib/__init__.py +0 -0
  257. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/env_escape/configurations/emulate_test_lib/overrides.py +0 -0
  258. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/env_escape/configurations/emulate_test_lib/server_mappings.py +0 -0
  259. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/env_escape/configurations/test_lib_impl/__init__.py +0 -0
  260. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/env_escape/configurations/test_lib_impl/test_lib.py +0 -0
  261. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/env_escape/consts.py +0 -0
  262. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/env_escape/data_transferer.py +0 -0
  263. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/env_escape/exception_transferer.py +0 -0
  264. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/env_escape/override_decorators.py +0 -0
  265. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/env_escape/server.py +0 -0
  266. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/env_escape/stub.py +0 -0
  267. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/env_escape/utils.py +0 -0
  268. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/environment_decorator.py +0 -0
  269. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/events_decorator.py +0 -0
  270. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/frameworks/__init__.py +0 -0
  271. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/frameworks/pytorch.py +0 -0
  272. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/gcp/__init__.py +0 -0
  273. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/gcp/gcp_secret_manager_secrets_provider.py +0 -0
  274. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/gcp/gs_exceptions.py +0 -0
  275. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/gcp/gs_storage_client_factory.py +0 -0
  276. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/gcp/gs_tail.py +0 -0
  277. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/gcp/gs_utils.py +0 -0
  278. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/gcp/includefile_support.py +0 -0
  279. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/kubernetes/__init__.py +0 -0
  280. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/kubernetes/kubernetes_cli.py +0 -0
  281. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/kubernetes/kubernetes_client.py +0 -0
  282. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/kubernetes/kubernetes_job.py +0 -0
  283. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/kubernetes/kubernetes_jobsets.py +0 -0
  284. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/logs_cli.py +0 -0
  285. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/metadata/__init__.py +0 -0
  286. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/metadata/local.py +0 -0
  287. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/metadata/service.py +0 -0
  288. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/package_cli.py +0 -0
  289. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/parallel_decorator.py +0 -0
  290. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/project_decorator.py +0 -0
  291. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/pypi/__init__.py +0 -0
  292. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/pypi/bootstrap.py +0 -0
  293. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/pypi/micromamba.py +0 -0
  294. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/pypi/pip.py +0 -0
  295. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/pypi/pypi_environment.py +0 -0
  296. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/pypi/utils.py +0 -0
  297. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/resources_decorator.py +0 -0
  298. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/retry_decorator.py +0 -0
  299. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/secrets/__init__.py +0 -0
  300. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/secrets/inline_secrets_provider.py +0 -0
  301. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/secrets/secrets_decorator.py +0 -0
  302. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/storage_executor.py +0 -0
  303. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/tag_cli.py +0 -0
  304. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/test_unbounded_foreach_decorator.py +0 -0
  305. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/plugins/timeout_decorator.py +0 -0
  306. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/procpoll.py +0 -0
  307. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/py.typed +0 -0
  308. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/pylint_wrapper.py +0 -0
  309. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/runner/__init__.py +0 -0
  310. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/runner/click_api.py +0 -0
  311. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/runner/subprocess_manager.py +0 -0
  312. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/runner/utils.py +0 -0
  313. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/sidecar/__init__.py +0 -0
  314. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/sidecar/sidecar.py +0 -0
  315. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/sidecar/sidecar_messages.py +0 -0
  316. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/sidecar/sidecar_subprocess.py +0 -0
  317. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/sidecar/sidecar_worker.py +0 -0
  318. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/system/__init__.py +0 -0
  319. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/system/system_logger.py +0 -0
  320. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/system/system_monitor.py +0 -0
  321. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/system/system_utils.py +0 -0
  322. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/tagging_util.py +0 -0
  323. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/task.py +0 -0
  324. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/tracing/__init__.py +0 -0
  325. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/tracing/propagator.py +0 -0
  326. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/tracing/span_exporter.py +0 -0
  327. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/tracing/tracing_modules.py +0 -0
  328. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/tuple_util.py +0 -0
  329. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/tutorials/00-helloworld/README.md +0 -0
  330. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/tutorials/00-helloworld/helloworld.py +0 -0
  331. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/tutorials/01-playlist/README.md +0 -0
  332. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/tutorials/01-playlist/movies.csv +0 -0
  333. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/tutorials/01-playlist/playlist.ipynb +0 -0
  334. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/tutorials/01-playlist/playlist.py +0 -0
  335. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/tutorials/02-statistics/README.md +0 -0
  336. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/tutorials/02-statistics/movies.csv +0 -0
  337. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/tutorials/02-statistics/stats.ipynb +0 -0
  338. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/tutorials/02-statistics/stats.py +0 -0
  339. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/tutorials/03-playlist-redux/README.md +0 -0
  340. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/tutorials/03-playlist-redux/playlist.py +0 -0
  341. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/tutorials/04-playlist-plus/README.md +0 -0
  342. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/tutorials/04-playlist-plus/playlist.py +0 -0
  343. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/tutorials/05-hello-cloud/README.md +0 -0
  344. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/tutorials/05-hello-cloud/hello-cloud.ipynb +0 -0
  345. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/tutorials/05-hello-cloud/hello-cloud.py +0 -0
  346. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/tutorials/06-statistics-redux/README.md +0 -0
  347. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/tutorials/06-statistics-redux/stats.ipynb +0 -0
  348. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/tutorials/07-worldview/README.md +0 -0
  349. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/tutorials/07-worldview/worldview.ipynb +0 -0
  350. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/tutorials/08-autopilot/README.md +0 -0
  351. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/tutorials/08-autopilot/autopilot.ipynb +0 -0
  352. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/unbounded_foreach.py +0 -0
  353. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/metaflow/vendor.py +0 -0
  354. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/ob_metaflow.egg-info/SOURCES.txt +0 -0
  355. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/ob_metaflow.egg-info/dependency_links.txt +0 -0
  356. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/ob_metaflow.egg-info/entry_points.txt +0 -0
  357. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/ob_metaflow.egg-info/top_level.txt +0 -0
  358. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/setup.cfg +0 -0
  359. {ob_metaflow-2.12.11.0 → ob_metaflow-2.12.14.1}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ob-metaflow
3
- Version: 2.12.11.0
3
+ Version: 2.12.14.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.12.11.0; extra == "stubs"
15
+ Requires-Dist: metaflow-stubs==2.12.14.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
 
@@ -650,7 +650,7 @@ def resume(
650
650
  )
651
651
 
652
652
  if step_to_rerun is None:
653
- clone_steps = set()
653
+ steps_to_rerun = set()
654
654
  else:
655
655
  # validate step name
656
656
  if step_to_rerun not in obj.graph.nodes:
@@ -660,7 +660,7 @@ def resume(
660
660
  step_to_rerun, ",".join(list(obj.graph.nodes.keys()))
661
661
  )
662
662
  )
663
- clone_steps = {step_to_rerun}
663
+ steps_to_rerun = {step_to_rerun}
664
664
 
665
665
  if run_id:
666
666
  # Run-ids that are provided by the metadata service are always integers.
@@ -688,7 +688,7 @@ def resume(
688
688
  clone_run_id=origin_run_id,
689
689
  clone_only=clone_only,
690
690
  reentrant=reentrant,
691
- clone_steps=clone_steps,
691
+ steps_to_rerun=steps_to_rerun,
692
692
  max_workers=max_workers,
693
693
  max_num_splits=max_num_splits,
694
694
  max_log_size=max_log_size * 1024 * 1024,
@@ -1027,6 +1027,8 @@ class MetaflowData(object):
1027
1027
  self._artifacts = dict((art.id, art) for art in artifacts)
1028
1028
 
1029
1029
  def __getattr__(self, name: str):
1030
+ if name not in self._artifacts:
1031
+ raise AttributeError(name)
1030
1032
  return self._artifacts[name].data
1031
1033
 
1032
1034
  def __contains__(self, var):
@@ -17,6 +17,7 @@ from .exception import (
17
17
  )
18
18
  from .graph import FlowGraph
19
19
  from .unbounded_foreach import UnboundedForeachInput
20
+ from .util import to_pod
20
21
  from .metaflow_config import INCLUDE_FOREACH_STACK, MAXIMUM_FOREACH_VALUE_CHARS
21
22
 
22
23
  # For Python 3 compatibility
@@ -201,7 +202,7 @@ class FlowSpec(metaclass=_FlowSpecMeta):
201
202
  "decorators": [
202
203
  {
203
204
  "name": deco.name,
204
- "attributes": deco.attributes,
205
+ "attributes": to_pod(deco.attributes),
205
206
  "statically_defined": deco.statically_defined,
206
207
  }
207
208
  for deco in flow_decorators(self)
@@ -3,6 +3,9 @@ import ast
3
3
  import re
4
4
 
5
5
 
6
+ from .util import to_pod
7
+
8
+
6
9
  def deindent_docstring(doc):
7
10
  if doc:
8
11
  # Find the indent to remove from the docstring. We consider the following possibilities:
@@ -72,7 +75,6 @@ class DAGNode(object):
72
75
  return "%s.%s" % (expr.value.id, expr.attr)
73
76
 
74
77
  def _parse(self, func_ast):
75
-
76
78
  self.num_args = len(func_ast.args.args)
77
79
  tail = func_ast.body[-1]
78
80
 
@@ -171,6 +173,8 @@ class FlowGraph(object):
171
173
  self.name = flow.__name__
172
174
  self.nodes = self._create_nodes(flow)
173
175
  self.doc = deindent_docstring(flow.__doc__)
176
+ # nodes sorted in topological order.
177
+ self.sorted_nodes = []
174
178
  self._traverse_graph()
175
179
  self._postprocess()
176
180
 
@@ -197,6 +201,7 @@ class FlowGraph(object):
197
201
 
198
202
  def _traverse_graph(self):
199
203
  def traverse(node, seen, split_parents):
204
+ self.sorted_nodes.append(node.name)
200
205
  if node.type in ("split", "foreach"):
201
206
  node.split_parents = split_parents
202
207
  split_parents = split_parents + [node.name]
@@ -262,7 +267,6 @@ class FlowGraph(object):
262
267
  )
263
268
 
264
269
  def output_steps(self):
265
-
266
270
  steps_info = {}
267
271
  graph_structure = []
268
272
 
@@ -286,7 +290,7 @@ class FlowGraph(object):
286
290
  "decorators": [
287
291
  {
288
292
  "name": deco.name,
289
- "attributes": deco.attributes,
293
+ "attributes": to_pod(deco.attributes),
290
294
  "statically_defined": deco.statically_defined,
291
295
  }
292
296
  for deco in node.decorators
@@ -15,6 +15,17 @@ if sys.platform == "darwin":
15
15
  ## value, either set `METAFLOW_DEFAULT_DATASTORE` in your configuration file or set
16
16
  ## an environment variable called `METAFLOW_DEFAULT_DATASTORE`
17
17
 
18
+ ##
19
+ # Constants (NOTE: these need to live before any from_conf)
20
+ ##
21
+
22
+ # Path to the local directory to store artifacts for 'local' datastore.
23
+ DATASTORE_LOCAL_DIR = ".metaflow"
24
+
25
+ # Local configuration file (in .metaflow) containing overrides per-project
26
+ LOCAL_CONFIG_FILE = "config.json"
27
+
28
+
18
29
  ###
19
30
  # Default configuration
20
31
  ###
@@ -42,8 +53,6 @@ USER = from_conf("USER")
42
53
  ###
43
54
  # Datastore configuration
44
55
  ###
45
- # Path to the local directory to store artifacts for 'local' datastore.
46
- DATASTORE_LOCAL_DIR = ".metaflow"
47
56
  DATASTORE_SYSROOT_LOCAL = from_conf("DATASTORE_SYSROOT_LOCAL")
48
57
  # S3 bucket and prefix to store artifacts for 's3' datastore.
49
58
  DATASTORE_SYSROOT_S3 = from_conf("DATASTORE_SYSROOT_S3")
@@ -247,7 +256,6 @@ DEFAULT_RUNTIME_LIMIT = from_conf("DEFAULT_RUNTIME_LIMIT", 5 * 24 * 60 * 60)
247
256
  # Organization customizations
248
257
  ###
249
258
  UI_URL = from_conf("UI_URL")
250
- PAGERDUTY_TEMPLATE_URL = from_conf("PAGERDUTY_TEMPLATE_URL")
251
259
 
252
260
  ###
253
261
  # Capture error logs from argo
@@ -32,8 +32,40 @@ def init_config():
32
32
  return config
33
33
 
34
34
 
35
+ def init_local_config():
36
+ # This function is heavily inspired from LocalStorage.get_datastore_root_from_config
37
+ # but simplifies certain things and also does not depend on DATASTORE_SYSROOT_LOCAL.
38
+ #
39
+ # In other words, since this config is meant to be local to a directory, it does not
40
+ # check in DATASTORE_SYSROOT_LOCAL but only up the current getcwd() path. This also
41
+ # prevents nasty circular dependencies :)
42
+
43
+ from metaflow.metaflow_config import DATASTORE_LOCAL_DIR, LOCAL_CONFIG_FILE
44
+
45
+ current_path = os.getcwd()
46
+ check_dir = os.path.join(current_path, DATASTORE_LOCAL_DIR)
47
+ check_dir = os.path.realpath(check_dir)
48
+ while not os.path.isdir(check_dir):
49
+ new_path = os.path.dirname(current_path)
50
+ if new_path == current_path: # No longer making upward progress
51
+ return {}
52
+ current_path = new_path
53
+ check_dir = os.path.join(current_path, DATASTORE_LOCAL_DIR)
54
+ path_to_config = os.path.join(check_dir, LOCAL_CONFIG_FILE)
55
+ # We found a directory to look for the config file in
56
+ if os.path.exists(path_to_config):
57
+ with open(path_to_config, encoding="utf-8") as f:
58
+ return json.load(f)
59
+ return {}
60
+
61
+
35
62
  # Initialize defaults required to setup environment variables.
36
- METAFLOW_CONFIG = init_config()
63
+ # (initialized lazily in from_conf since init_local_config requires
64
+ # some configuration values
65
+
66
+ METAFLOW_CONFIG = None
67
+
68
+ METAFLOW_LOCAL_CONFIG = None
37
69
 
38
70
  _all_configs = {}
39
71
 
@@ -51,7 +83,13 @@ def config_values(include=0):
51
83
 
52
84
  def from_conf(name, default=None, validate_fn=None):
53
85
  """
54
- First try to pull value from environment, then from metaflow config JSON
86
+ Pull value from the environment or configuration.
87
+ Order is:
88
+ 1. Environment (use any environment variable explicitly set by user)
89
+ 2. Local config (use any value set in the local config file -- so stuff in
90
+ .metaflow/project.json for example)
91
+ 3. Global config (use any value set in the global config file)
92
+ 4. Default
55
93
 
56
94
  Prior to a value being returned, we will validate using validate_fn (if provided).
57
95
  Only non-None values are validated.
@@ -59,9 +97,19 @@ def from_conf(name, default=None, validate_fn=None):
59
97
  validate_fn should accept (name, value).
60
98
  If the value validates, return None, else raise an MetaflowException.
61
99
  """
100
+ global METAFLOW_CONFIG, METAFLOW_LOCAL_CONFIG
101
+
102
+ if METAFLOW_CONFIG is None:
103
+ METAFLOW_CONFIG = init_config()
104
+ if METAFLOW_LOCAL_CONFIG is None:
105
+ METAFLOW_LOCAL_CONFIG = init_local_config()
106
+
62
107
  is_default = True
63
108
  env_name = "METAFLOW_%s" % name
64
- value = os.environ.get(env_name, METAFLOW_CONFIG.get(env_name, default))
109
+ value = os.environ.get(
110
+ env_name,
111
+ METAFLOW_LOCAL_CONFIG.get(env_name, METAFLOW_CONFIG.get(env_name, default)),
112
+ )
65
113
  if validate_fn and value is not None:
66
114
  validate_fn(env_name, value)
67
115
  if default is not None:
@@ -89,10 +89,16 @@ class MetaflowEnvironment(object):
89
89
  It should work silently if everything goes well.
90
90
  """
91
91
  if datastore_type == "s3":
92
- return (
93
- '%s -m awscli ${METAFLOW_S3_ENDPOINT_URL:+--endpoint-url=\\"${METAFLOW_S3_ENDPOINT_URL}\\"} '
94
- + "s3 cp %s job.tar >/dev/null"
95
- ) % (self._python(), code_package_url)
92
+ from .plugins.aws.aws_utils import parse_s3_full_path
93
+
94
+ bucket, s3_object = parse_s3_full_path(code_package_url)
95
+ # NOTE: the script quoting is extremely sensitive due to the way shlex.split operates and this being inserted
96
+ # into a quoted command elsewhere.
97
+ return "{python} -c '{script}'".format(
98
+ python=self._python(),
99
+ script='import boto3, os; boto3.client(\\"s3\\", endpoint_url=os.getenv(\\"METAFLOW_S3_ENDPOINT_URL\\")).download_file(\\"%s\\", \\"%s\\", \\"job.tar\\")'
100
+ % (bucket, s3_object),
101
+ )
96
102
  elif datastore_type == "azure":
97
103
  from .plugins.azure.azure_utils import parse_azure_full_path
98
104
 
@@ -119,25 +125,34 @@ class MetaflowEnvironment(object):
119
125
  )
120
126
 
121
127
  def _get_install_dependencies_cmd(self, datastore_type):
122
- cmds = ["%s -m pip install requests -qqq" % self._python()]
123
- if datastore_type == "s3":
124
- cmds.append("%s -m pip install awscli boto3 -qqq" % self._python())
125
- elif datastore_type == "azure":
126
- cmds.append(
127
- "%s -m pip install azure-identity azure-storage-blob azure-keyvault-secrets simple-azure-blob-downloader -qqq"
128
- % self._python()
129
- )
130
- elif datastore_type == "gs":
131
- cmds.append(
132
- "%s -m pip install google-cloud-storage google-auth simple-gcp-object-downloader google-cloud-secret-manager -qqq"
133
- % self._python()
134
- )
135
- else:
128
+ base_cmd = "{} -m pip install -qqq".format(self._python())
129
+
130
+ datastore_packages = {
131
+ "s3": ["boto3"],
132
+ "azure": [
133
+ "azure-identity",
134
+ "azure-storage-blob",
135
+ "azure-keyvault-secrets",
136
+ "simple-azure-blob-downloader",
137
+ ],
138
+ "gs": [
139
+ "google-cloud-storage",
140
+ "google-auth",
141
+ "simple-gcp-object-downloader",
142
+ "google-cloud-secret-manager",
143
+ ],
144
+ }
145
+
146
+ if datastore_type not in datastore_packages:
136
147
  raise NotImplementedError(
137
- "We don't know how to generate an install dependencies cmd for datastore %s"
138
- % datastore_type
148
+ "Unknown datastore type: {}".format(datastore_type)
139
149
  )
140
- return " && ".join(cmds)
150
+
151
+ cmd = "{} {}".format(
152
+ base_cmd, " ".join(datastore_packages[datastore_type] + ["requests"])
153
+ )
154
+ # skip pip installs if we know that packages might already be available
155
+ return "if [ -z $METAFLOW_SKIP_INSTALL_DEPENDENCIES ]; then {}; fi".format(cmd)
141
156
 
142
157
  def get_package_commands(self, code_package_url, datastore_type):
143
158
  cmds = [
@@ -49,7 +49,6 @@ from metaflow.metaflow_config import (
49
49
  SERVICE_HEADERS,
50
50
  SERVICE_INTERNAL_URL,
51
51
  UI_URL,
52
- PAGERDUTY_TEMPLATE_URL,
53
52
  )
54
53
  from metaflow.metaflow_config_funcs import config_values
55
54
  from metaflow.mflog import BASH_SAVE_LOGS, bash_capture_logs, export_mflog_env_vars
@@ -1659,6 +1658,9 @@ class ArgoWorkflows(object):
1659
1658
 
1660
1659
  # support Metaflow sandboxes
1661
1660
  env["METAFLOW_INIT_SCRIPT"] = KUBERNETES_SANDBOX_INIT_SCRIPT
1661
+ env["METAFLOW_KUBERNETES_SANDBOX_INIT_SCRIPT"] = (
1662
+ KUBERNETES_SANDBOX_INIT_SCRIPT
1663
+ )
1662
1664
 
1663
1665
  # support for @secret
1664
1666
  env["METAFLOW_DEFAULT_SECRETS_BACKEND_TYPE"] = DEFAULT_SECRETS_BACKEND_TYPE
@@ -1674,6 +1676,12 @@ class ArgoWorkflows(object):
1674
1676
  )
1675
1677
  env["METAFLOW_DATASTORE_SYSROOT_AZURE"] = DATASTORE_SYSROOT_AZURE
1676
1678
  env["METAFLOW_CARD_AZUREROOT"] = CARD_AZUREROOT
1679
+ env["METAFLOW_ARGO_WORKFLOWS_KUBERNETES_SECRETS"] = (
1680
+ ARGO_WORKFLOWS_KUBERNETES_SECRETS
1681
+ )
1682
+ env["METAFLOW_ARGO_WORKFLOWS_ENV_VARS_TO_SKIP"] = (
1683
+ ARGO_WORKFLOWS_ENV_VARS_TO_SKIP
1684
+ )
1677
1685
 
1678
1686
  # support for GCP
1679
1687
  env["METAFLOW_DATASTORE_SYSROOT_GS"] = DATASTORE_SYSROOT_GS
@@ -2228,7 +2236,7 @@ class ArgoWorkflows(object):
2228
2236
  """python -c 'import json, os; error_obj=os.getenv(\\"METAFLOW_ARGO_ERROR\\");data=json.loads(error_obj); print(data[\\"message\\"])'"""
2229
2237
  ]
2230
2238
  + [
2231
- 'if [ -n \\"${ARGO_WORKFLOWS_CAPTURE_ERROR_SCRIPT}\\" ]; then eval \\"${ARGO_WORKFLOWS_CAPTURE_ERROR_SCRIPT}\\"; fi'
2239
+ 'if [ -n \\"${METAFLOW_ARGO_WORKFLOWS_CAPTURE_ERROR_SCRIPT}\\" ]; then eval \\"${METAFLOW_ARGO_WORKFLOWS_CAPTURE_ERROR_SCRIPT}\\"; fi'
2232
2240
  ]
2233
2241
  )
2234
2242
 
@@ -2379,18 +2387,10 @@ class ArgoWorkflows(object):
2379
2387
  def _pager_duty_notification_links(self):
2380
2388
  links = []
2381
2389
  if UI_URL:
2382
- if PAGERDUTY_TEMPLATE_URL:
2383
- pdproject = ''
2384
- pdbranch = ''
2385
- if getattr(current, "project_name", None):
2386
- pdproject = current.project_name
2387
- pdbranch = current.branch_name
2388
- href_val = PAGERDUTY_TEMPLATE_URL.format(pd_flow=self.flow.name, pd_namespace=KUBERNETES_NAMESPACE,pd_template=self.name,pd_project=pdproject, pd_branch=pdbranch)
2389
- else:
2390
- href_val = "%s/%s/%s"% (UI_URL.rstrip("/"), self.flow.name, "argo-{{workflow.name}}")
2391
2390
  links.append(
2392
2391
  {
2393
- "href": href_val,
2392
+ "href": "%s/%s/%s"
2393
+ % (UI_URL.rstrip("/"), self.flow.name, "argo-{{workflow.name}}"),
2394
2394
  "text": "Metaflow UI",
2395
2395
  }
2396
2396
  )
@@ -172,7 +172,7 @@ def argo_workflows(obj, name=None):
172
172
  )
173
173
  @click.option(
174
174
  "--enable-heartbeat-daemon/--no-enable-heartbeat-daemon",
175
- default=False,
175
+ default=True,
176
176
  show_default=True,
177
177
  help="Use a daemon container to broadcast heartbeats.",
178
178
  )
@@ -186,7 +186,7 @@ def argo_workflows(obj, name=None):
186
186
  )
187
187
  @click.option(
188
188
  "--enable-error-msg-capture/--no-enable-error-msg-capture",
189
- default=False,
189
+ default=True,
190
190
  show_default=True,
191
191
  help="Capture stack trace of first failed task in exit hook.",
192
192
  )
@@ -226,7 +226,9 @@ def trigger(instance: DeployedFlow, **kwargs):
226
226
  )
227
227
 
228
228
  command_obj = instance.deployer.spm.get(pid)
229
- content = handle_timeout(tfp_runner_attribute, command_obj)
229
+ content = handle_timeout(
230
+ tfp_runner_attribute, command_obj, instance.deployer.file_read_timeout
231
+ )
230
232
 
231
233
  if command_obj.process.returncode == 0:
232
234
  triggered_run = TriggeredRun(deployer=instance.deployer, content=content)
@@ -5,6 +5,22 @@ from metaflow.exception import MetaflowException
5
5
  from metaflow.metaflow_config import MAX_MEMORY_PER_TASK, MAX_CPU_PER_TASK
6
6
 
7
7
 
8
+ def parse_s3_full_path(s3_uri):
9
+ from urllib.parse import urlparse
10
+
11
+ # <scheme>://<netloc>/<path>;<params>?<query>#<fragment>
12
+ scheme, netloc, path, _, _, _ = urlparse(s3_uri)
13
+ assert scheme == "s3"
14
+ assert netloc is not None
15
+
16
+ bucket = netloc
17
+ path = path.lstrip("/").rstrip("/")
18
+ if path == "":
19
+ path = None
20
+
21
+ return bucket, path
22
+
23
+
8
24
  def get_ec2_instance_metadata():
9
25
  """
10
26
  Fetches the EC2 instance metadata through AWS instance metadata service
@@ -123,6 +123,7 @@ class BatchDecorator(StepDecorator):
123
123
  "ephemeral_storage": None,
124
124
  "log_driver": None,
125
125
  "log_options": None,
126
+ "executable": None,
126
127
  }
127
128
  resource_defaults = {
128
129
  "cpu": "1",
@@ -193,7 +193,9 @@ def trigger(instance: DeployedFlow, **kwargs):
193
193
  )
194
194
 
195
195
  command_obj = instance.deployer.spm.get(pid)
196
- content = handle_timeout(tfp_runner_attribute, command_obj)
196
+ content = handle_timeout(
197
+ tfp_runner_attribute, command_obj, instance.deployer.file_read_timeout
198
+ )
197
199
 
198
200
  if command_obj.process.returncode == 0:
199
201
  triggered_run = TriggeredRun(deployer=instance.deployer, content=content)
@@ -17,6 +17,8 @@ from metaflow.metaflow_config import (
17
17
  ARGO_EVENTS_INTERNAL_WEBHOOK_URL,
18
18
  ARGO_EVENTS_SERVICE_ACCOUNT,
19
19
  ARGO_EVENTS_WEBHOOK_AUTH,
20
+ ARGO_WORKFLOWS_KUBERNETES_SECRETS,
21
+ ARGO_WORKFLOWS_ENV_VARS_TO_SKIP,
20
22
  AWS_SECRETS_MANAGER_DEFAULT_REGION,
21
23
  AZURE_KEY_VAULT_PREFIX,
22
24
  AZURE_STORAGE_BLOB_SERVICE_ENDPOINT,
@@ -280,6 +282,18 @@ class Kubernetes(object):
280
282
  .environment_variable(
281
283
  "METAFLOW_INIT_SCRIPT", KUBERNETES_SANDBOX_INIT_SCRIPT
282
284
  )
285
+ .environment_variable(
286
+ "METAFLOW_KUBERNETES_SANDBOX_INIT_SCRIPT",
287
+ KUBERNETES_SANDBOX_INIT_SCRIPT,
288
+ )
289
+ .environment_variable(
290
+ "METAFLOW_ARGO_WORKFLOWS_KUBERNETES_SECRETS",
291
+ ARGO_WORKFLOWS_KUBERNETES_SECRETS,
292
+ )
293
+ .environment_variable(
294
+ "METAFLOW_ARGO_WORKFLOWS_ENV_VARS_TO_SKIP",
295
+ ARGO_WORKFLOWS_ENV_VARS_TO_SKIP,
296
+ )
283
297
  .environment_variable("METAFLOW_OTEL_ENDPOINT", OTEL_ENDPOINT)
284
298
  # Skip setting METAFLOW_DATASTORE_SYSROOT_LOCAL because metadata sync
285
299
  # between the local user instance and the remote Kubernetes pod
@@ -565,6 +579,18 @@ class Kubernetes(object):
565
579
  .environment_variable(
566
580
  "METAFLOW_INIT_SCRIPT", KUBERNETES_SANDBOX_INIT_SCRIPT
567
581
  )
582
+ .environment_variable(
583
+ "METAFLOW_KUBERNETES_SANDBOX_INIT_SCRIPT",
584
+ KUBERNETES_SANDBOX_INIT_SCRIPT,
585
+ )
586
+ .environment_variable(
587
+ "METAFLOW_ARGO_WORKFLOWS_KUBERNETES_SECRETS",
588
+ ARGO_WORKFLOWS_KUBERNETES_SECRETS,
589
+ )
590
+ .environment_variable(
591
+ "METAFLOW_ARGO_WORKFLOWS_ENV_VARS_TO_SKIP",
592
+ ARGO_WORKFLOWS_ENV_VARS_TO_SKIP,
593
+ )
568
594
  .environment_variable("METAFLOW_OTEL_ENDPOINT", OTEL_ENDPOINT)
569
595
  # Skip setting METAFLOW_DATASTORE_SYSROOT_LOCAL because metadata sync
570
596
  # between the local user instance and the remote Kubernetes pod
@@ -99,6 +99,9 @@ class KubernetesDecorator(StepDecorator):
99
99
  Shared memory size (in MiB) required for this step
100
100
  port: int, optional
101
101
  Port number to specify in the Kubernetes job object
102
+ compute_pool : str, optional, default None
103
+ Compute pool to be used for for this step.
104
+ If not specified, any accessible compute pool within the perimeter is used.
102
105
  """
103
106
 
104
107
  name = "kubernetes"
@@ -123,6 +126,8 @@ class KubernetesDecorator(StepDecorator):
123
126
  "persistent_volume_claims": None, # e.g., {"pvc-name": "/mnt/vol", "another-pvc": "/mnt/vol2"}
124
127
  "shared_memory": None,
125
128
  "port": None,
129
+ "compute_pool": None,
130
+ "executable": None,
126
131
  }
127
132
  package_url = None
128
133
  package_sha = None
@@ -155,6 +160,12 @@ class KubernetesDecorator(StepDecorator):
155
160
  self.attributes["node_selector"] = parse_kube_keyvalue_list(
156
161
  self.attributes["node_selector"].split(",")
157
162
  )
163
+ if self.attributes["compute_pool"]:
164
+ if self.attributes["node_selector"] is None:
165
+ self.attributes["node_selector"] = {}
166
+ self.attributes["node_selector"].update(
167
+ {"outerbounds.co/compute-pool": self.attributes["compute_pool"]}
168
+ )
158
169
 
159
170
  if self.attributes["tolerations"]:
160
171
  try:
@@ -385,9 +396,13 @@ class KubernetesDecorator(StepDecorator):
385
396
  cli_args.command_args.append(self.package_sha)
386
397
  cli_args.command_args.append(self.package_url)
387
398
 
399
+ # skip certain keys as CLI arguments
400
+ _skip_keys = ["compute_pool"]
388
401
  # --namespace is used to specify Metaflow namespace (a different
389
402
  # concept from k8s namespace).
390
403
  for k, v in self.attributes.items():
404
+ if k in _skip_keys:
405
+ continue
391
406
  if k == "namespace":
392
407
  cli_args.command_options["k8s_namespace"] = v
393
408
  elif k in {"node_selector"} and v:
@@ -100,9 +100,9 @@ class CondaStepDecorator(StepDecorator):
100
100
  # --environment=pypi to --environment=conda
101
101
  _supported_virtual_envs.extend(["pypi"])
102
102
 
103
- # TODO: Hardcoded for now to support Docker environment.
103
+ # TODO: Hardcoded for now to support the fast bakery environment.
104
104
  # We should introduce a more robust mechanism for appending supported environments, for example from within extensions.
105
- _supported_virtual_envs.extend(["docker"])
105
+ _supported_virtual_envs.extend(["fast-bakery"])
106
106
 
107
107
  # The --environment= requirement ensures that valid virtual environments are
108
108
  # created for every step to execute it, greatly simplifying the @conda
@@ -344,9 +344,9 @@ class CondaFlowDecorator(FlowDecorator):
344
344
  # --environment=pypi to --environment=conda
345
345
  _supported_virtual_envs.extend(["pypi"])
346
346
 
347
- # TODO: Hardcoded for now to support Docker environment.
347
+ # TODO: Hardcoded for now to support the fast bakery environment.
348
348
  # We should introduce a more robust mechanism for appending supported environments, for example from within extensions.
349
- _supported_virtual_envs.extend(["docker"])
349
+ _supported_virtual_envs.extend(["fast-bakery"])
350
350
 
351
351
  # The --environment= requirement ensures that valid virtual environments are
352
352
  # created for every step to execute it, greatly simplifying the @conda
@@ -288,13 +288,10 @@ class CondaEnvironment(MetaflowEnvironment):
288
288
  # PyPI registries, the usage of environment variable `GOOGLE_APPLICATION_CREDENTIALS`
289
289
  # demands that `keyrings.google-artifactregistry-auth` has to be installed
290
290
  # and available in the underlying python environment.
291
-
292
- # commenting this out per https://outerboundsco.slack.com/archives/C040K733FND/p1719262399355449
293
- # this should be a temporary workaround. Need to find a better fix
294
- # if os.getenv("GOOGLE_APPLICATION_CREDENTIALS"):
295
- # environment["conda"]["packages"][
296
- # "keyrings.google-artifactregistry-auth"
297
- # ] = ">=1.1.1"
291
+ if os.getenv("GOOGLE_APPLICATION_CREDENTIALS"):
292
+ environment["conda"]["packages"][
293
+ "keyrings.google-artifactregistry-auth"
294
+ ] = ">=1.1.1"
298
295
 
299
296
  # Z combinator for a recursive lambda
300
297
  deep_sort = (lambda f: f(f))(
@@ -24,6 +24,12 @@ class PyPIStepDecorator(StepDecorator):
24
24
  name = "pypi"
25
25
  defaults = {"packages": {}, "python": None, "disabled": None} # wheels
26
26
 
27
+ def __init__(self, attributes=None, statically_defined=False):
28
+ self._user_defined_attributes = (
29
+ attributes.copy() if attributes is not None else {}
30
+ )
31
+ super().__init__(attributes, statically_defined)
32
+
27
33
  def step_init(self, flow, graph, step, decos, environment, flow_datastore, logger):
28
34
  # The init_environment hook for Environment creates the relevant virtual
29
35
  # environments. The step_init hook sets up the relevant state for that hook to
@@ -70,9 +76,9 @@ class PyPIStepDecorator(StepDecorator):
70
76
  # --environment=pypi to --environment=conda
71
77
  _supported_virtual_envs.extend(["pypi"])
72
78
 
73
- # TODO: Hardcoded for now to support Docker environment.
79
+ # TODO: Hardcoded for now to support the fast bakery environment.
74
80
  # We should introduce a more robust mechanism for appending supported environments, for example from within extensions.
75
- _supported_virtual_envs.extend(["docker"])
81
+ _supported_virtual_envs.extend(["fast-bakery"])
76
82
 
77
83
  # The --environment= requirement ensures that valid virtual environments are
78
84
  # created for every step to execute it, greatly simplifying the @pypi
@@ -88,6 +94,9 @@ class PyPIStepDecorator(StepDecorator):
88
94
  )
89
95
  )
90
96
 
97
+ def is_attribute_user_defined(self, name):
98
+ return name in self._user_defined_attributes
99
+
91
100
 
92
101
  class PyPIFlowDecorator(FlowDecorator):
93
102
  """
@@ -123,9 +132,9 @@ class PyPIFlowDecorator(FlowDecorator):
123
132
  # --environment=pypi to --environment=conda
124
133
  _supported_virtual_envs.extend(["pypi"])
125
134
 
126
- # TODO: Hardcoded for now to support Docker environment.
135
+ # TODO: Hardcoded for now to support the fast bakery environment.
127
136
  # We should introduce a more robust mechanism for appending supported environments, for example from within extensions.
128
- _supported_virtual_envs.extend(["docker"])
137
+ _supported_virtual_envs.extend(["fast-bakery"])
129
138
 
130
139
  # The --environment= requirement ensures that valid virtual environments are
131
140
  # created for every step to execute it, greatly simplifying the @conda