ob-metaflow 2.11.4.2__tar.gz → 2.11.10.2__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 (320) hide show
  1. {ob-metaflow-2.11.4.2/ob_metaflow.egg-info → ob-metaflow-2.11.10.2}/PKG-INFO +2 -2
  2. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/cli.py +15 -10
  3. ob-metaflow-2.11.10.2/metaflow/clone_util.py +71 -0
  4. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/cmd/develop/stub_generator.py +2 -0
  5. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/cmd/develop/stubs.py +17 -8
  6. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/decorators.py +2 -1
  7. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/metaflow_config.py +16 -1
  8. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/metaflow_environment.py +1 -1
  9. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/package.py +4 -3
  10. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/parameters.py +2 -2
  11. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/__init__.py +4 -0
  12. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/airflow/airflow.py +3 -0
  13. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/argo/argo_workflows.py +13 -4
  14. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/argo/argo_workflows_decorator.py +1 -0
  15. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/aws/batch/batch.py +12 -0
  16. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/aws/batch/batch_cli.py +25 -0
  17. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/aws/batch/batch_client.py +40 -0
  18. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/aws/batch/batch_decorator.py +32 -1
  19. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/aws/step_functions/step_functions.py +3 -0
  20. ob-metaflow-2.11.10.2/metaflow/plugins/azure/__init__.py +3 -0
  21. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/datatools/s3/s3op.py +4 -3
  22. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/env_escape/client.py +154 -27
  23. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/env_escape/client_modules.py +15 -47
  24. ob-metaflow-2.11.10.2/metaflow/plugins/env_escape/configurations/emulate_test_lib/overrides.py +81 -0
  25. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/env_escape/configurations/emulate_test_lib/server_mappings.py +8 -3
  26. ob-metaflow-2.11.10.2/metaflow/plugins/env_escape/configurations/test_lib_impl/test_lib.py +152 -0
  27. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/env_escape/consts.py +1 -0
  28. ob-metaflow-2.11.10.2/metaflow/plugins/env_escape/exception_transferer.py +152 -0
  29. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/env_escape/override_decorators.py +8 -8
  30. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/env_escape/server.py +42 -5
  31. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/env_escape/stub.py +168 -23
  32. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/env_escape/utils.py +3 -3
  33. ob-metaflow-2.11.10.2/metaflow/plugins/gcp/__init__.py +1 -0
  34. ob-metaflow-2.11.10.2/metaflow/plugins/gcp/gcp_secret_manager_secrets_provider.py +164 -0
  35. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/kubernetes/kubernetes.py +10 -2
  36. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/kubernetes/kubernetes_cli.py +3 -3
  37. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/kubernetes/kubernetes_decorator.py +8 -7
  38. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/kubernetes/kubernetes_job.py +14 -8
  39. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/pypi/conda_environment.py +9 -0
  40. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/pypi/pip.py +17 -2
  41. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/runtime.py +252 -61
  42. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/sidecar/sidecar.py +11 -1
  43. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/sidecar/sidecar_subprocess.py +34 -18
  44. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/task.py +28 -54
  45. ob-metaflow-2.11.10.2/metaflow/version.py +1 -0
  46. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2/ob_metaflow.egg-info}/PKG-INFO +2 -2
  47. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/ob_metaflow.egg-info/SOURCES.txt +2 -0
  48. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/ob_metaflow.egg-info/requires.txt +1 -1
  49. ob-metaflow-2.11.4.2/metaflow/plugins/env_escape/configurations/emulate_test_lib/overrides.py +0 -92
  50. ob-metaflow-2.11.4.2/metaflow/plugins/env_escape/configurations/test_lib_impl/test_lib.py +0 -100
  51. ob-metaflow-2.11.4.2/metaflow/plugins/env_escape/exception_transferer.py +0 -218
  52. ob-metaflow-2.11.4.2/metaflow/plugins/gcp/__init__.py +0 -0
  53. ob-metaflow-2.11.4.2/metaflow/plugins/kubernetes/__init__.py +0 -0
  54. ob-metaflow-2.11.4.2/metaflow/version.py +0 -1
  55. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/LICENSE +0 -0
  56. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/MANIFEST.in +0 -0
  57. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/README.md +0 -0
  58. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/R.py +0 -0
  59. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/__init__.py +0 -0
  60. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/__init__.py +0 -0
  61. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/click/__init__.py +0 -0
  62. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/click/_bashcomplete.py +0 -0
  63. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/click/_compat.py +0 -0
  64. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/click/_termui_impl.py +0 -0
  65. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/click/_textwrap.py +0 -0
  66. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/click/_unicodefun.py +0 -0
  67. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/click/_winconsole.py +0 -0
  68. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/click/core.py +0 -0
  69. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/click/decorators.py +0 -0
  70. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/click/exceptions.py +0 -0
  71. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/click/formatting.py +0 -0
  72. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/click/globals.py +0 -0
  73. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/click/parser.py +0 -0
  74. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/click/termui.py +0 -0
  75. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/click/testing.py +0 -0
  76. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/click/types.py +0 -0
  77. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/click/utils.py +0 -0
  78. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/packaging/__init__.py +0 -0
  79. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/packaging/_elffile.py +0 -0
  80. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/packaging/_manylinux.py +0 -0
  81. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/packaging/_musllinux.py +0 -0
  82. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/packaging/_parser.py +0 -0
  83. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/packaging/_structures.py +0 -0
  84. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/packaging/_tokenizer.py +0 -0
  85. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/packaging/markers.py +0 -0
  86. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/packaging/py.typed +0 -0
  87. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/packaging/requirements.py +0 -0
  88. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/packaging/specifiers.py +0 -0
  89. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/packaging/tags.py +0 -0
  90. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/packaging/utils.py +0 -0
  91. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/packaging/version.py +0 -0
  92. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/v3_5/__init__.py +0 -0
  93. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/v3_5/importlib_metadata/__init__.py +0 -0
  94. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/v3_5/importlib_metadata/_compat.py +0 -0
  95. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/v3_5/zipp.py +0 -0
  96. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/v3_6/__init__.py +0 -0
  97. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/v3_6/importlib_metadata/__init__.py +0 -0
  98. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/v3_6/importlib_metadata/_adapters.py +0 -0
  99. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/v3_6/importlib_metadata/_collections.py +0 -0
  100. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/v3_6/importlib_metadata/_compat.py +0 -0
  101. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/v3_6/importlib_metadata/_functools.py +0 -0
  102. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/v3_6/importlib_metadata/_itertools.py +0 -0
  103. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/v3_6/importlib_metadata/_meta.py +0 -0
  104. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/v3_6/importlib_metadata/_text.py +0 -0
  105. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/v3_6/importlib_metadata/py.typed +0 -0
  106. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/v3_6/typing_extensions.py +0 -0
  107. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/v3_6/zipp.py +0 -0
  108. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/v3_7/__init__.py +0 -0
  109. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/_vendor/v3_7/zipp.py +0 -0
  110. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/cards.py +0 -0
  111. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/cli_args.py +0 -0
  112. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/client/__init__.py +0 -0
  113. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/client/core.py +0 -0
  114. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/client/filecache.py +0 -0
  115. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/cmd/__init__.py +0 -0
  116. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/cmd/configure_cmd.py +0 -0
  117. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/cmd/develop/__init__.py +0 -0
  118. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/cmd/main_cli.py +0 -0
  119. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/cmd/tutorials_cmd.py +0 -0
  120. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/cmd/util.py +0 -0
  121. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/cmd_with_io.py +0 -0
  122. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/datastore/__init__.py +0 -0
  123. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/datastore/content_addressed_store.py +0 -0
  124. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/datastore/datastore_set.py +0 -0
  125. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/datastore/datastore_storage.py +0 -0
  126. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/datastore/exceptions.py +0 -0
  127. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/datastore/flow_datastore.py +0 -0
  128. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/datastore/inputs.py +0 -0
  129. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/datastore/task_datastore.py +0 -0
  130. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/debug.py +0 -0
  131. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/event_logger.py +0 -0
  132. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/events.py +0 -0
  133. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/exception.py +0 -0
  134. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/extension_support/__init__.py +0 -0
  135. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/extension_support/_empty_file.py +0 -0
  136. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/extension_support/cmd.py +0 -0
  137. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/extension_support/integrations.py +0 -0
  138. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/extension_support/plugins.py +0 -0
  139. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/flowspec.py +0 -0
  140. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/graph.py +0 -0
  141. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/includefile.py +0 -0
  142. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/integrations.py +0 -0
  143. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/lint.py +0 -0
  144. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/metadata/__init__.py +0 -0
  145. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/metadata/heartbeat.py +0 -0
  146. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/metadata/metadata.py +0 -0
  147. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/metadata/util.py +0 -0
  148. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/metaflow_config_funcs.py +0 -0
  149. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/metaflow_current.py +0 -0
  150. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/metaflow_profile.py +0 -0
  151. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/metaflow_version.py +0 -0
  152. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/mflog/__init__.py +0 -0
  153. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/mflog/mflog.py +0 -0
  154. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/mflog/save_logs.py +0 -0
  155. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/mflog/save_logs_periodically.py +0 -0
  156. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/mflog/tee.py +0 -0
  157. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/monitor.py +0 -0
  158. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/multicore_utils.py +0 -0
  159. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/airflow/__init__.py +0 -0
  160. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/airflow/airflow_cli.py +0 -0
  161. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/airflow/airflow_decorator.py +0 -0
  162. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/airflow/airflow_utils.py +0 -0
  163. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/airflow/dag.py +0 -0
  164. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/airflow/exception.py +0 -0
  165. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/airflow/plumbing/__init__.py +0 -0
  166. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/airflow/plumbing/set_parameters.py +0 -0
  167. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/airflow/sensors/__init__.py +0 -0
  168. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/airflow/sensors/base_sensor.py +0 -0
  169. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/airflow/sensors/external_task_sensor.py +0 -0
  170. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/airflow/sensors/s3_sensor.py +0 -0
  171. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/argo/__init__.py +0 -0
  172. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/argo/argo_client.py +0 -0
  173. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/argo/argo_events.py +0 -0
  174. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/argo/argo_workflows_cli.py +0 -0
  175. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/argo/process_input_paths.py +0 -0
  176. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/aws/__init__.py +0 -0
  177. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/aws/aws_client.py +0 -0
  178. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/aws/aws_utils.py +0 -0
  179. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/aws/batch/__init__.py +0 -0
  180. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/aws/secrets_manager/__init__.py +0 -0
  181. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/aws/secrets_manager/aws_secrets_manager_secrets_provider.py +0 -0
  182. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/aws/step_functions/__init__.py +0 -0
  183. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/aws/step_functions/dynamo_db_client.py +0 -0
  184. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/aws/step_functions/event_bridge_client.py +0 -0
  185. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/aws/step_functions/production_token.py +0 -0
  186. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/aws/step_functions/schedule_decorator.py +0 -0
  187. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/aws/step_functions/set_batch_environment.py +0 -0
  188. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/aws/step_functions/step_functions_cli.py +0 -0
  189. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/aws/step_functions/step_functions_client.py +0 -0
  190. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/aws/step_functions/step_functions_decorator.py +0 -0
  191. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/azure/azure_credential.py +0 -0
  192. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/azure/azure_exceptions.py +0 -0
  193. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/azure/azure_tail.py +0 -0
  194. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/azure/azure_utils.py +0 -0
  195. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/azure/blob_service_client_factory.py +0 -0
  196. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/azure/includefile_support.py +0 -0
  197. {ob-metaflow-2.11.4.2/metaflow/plugins/azure → ob-metaflow-2.11.10.2/metaflow/plugins/cards}/__init__.py +0 -0
  198. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/cards/card_cli.py +0 -0
  199. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/cards/card_client.py +0 -0
  200. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/cards/card_creator.py +0 -0
  201. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/cards/card_datastore.py +0 -0
  202. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/cards/card_decorator.py +0 -0
  203. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/cards/card_modules/__init__.py +0 -0
  204. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/cards/card_modules/base.html +0 -0
  205. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/cards/card_modules/basic.py +0 -0
  206. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/cards/card_modules/bundle.css +0 -0
  207. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/cards/card_modules/card.py +0 -0
  208. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/cards/card_modules/chevron/__init__.py +0 -0
  209. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/cards/card_modules/chevron/main.py +0 -0
  210. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/cards/card_modules/chevron/metadata.py +0 -0
  211. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/cards/card_modules/chevron/renderer.py +0 -0
  212. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/cards/card_modules/chevron/tokenizer.py +0 -0
  213. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/cards/card_modules/components.py +0 -0
  214. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/cards/card_modules/convert_to_native_type.py +0 -0
  215. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/cards/card_modules/main.js +0 -0
  216. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/cards/card_modules/renderer_tools.py +0 -0
  217. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/cards/card_modules/test_cards.py +0 -0
  218. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/cards/card_resolver.py +0 -0
  219. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/cards/card_server.py +0 -0
  220. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/cards/card_viewer/viewer.html +0 -0
  221. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/cards/component_serializer.py +0 -0
  222. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/cards/exception.py +0 -0
  223. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/catch_decorator.py +0 -0
  224. {ob-metaflow-2.11.4.2/metaflow/plugins/cards → ob-metaflow-2.11.10.2/metaflow/plugins/datastores}/__init__.py +0 -0
  225. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/datastores/azure_storage.py +0 -0
  226. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/datastores/gs_storage.py +0 -0
  227. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/datastores/local_storage.py +0 -0
  228. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/datastores/s3_storage.py +0 -0
  229. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/datatools/__init__.py +0 -0
  230. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/datatools/local.py +0 -0
  231. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/datatools/s3/__init__.py +0 -0
  232. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/datatools/s3/s3.py +0 -0
  233. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/datatools/s3/s3tail.py +0 -0
  234. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/datatools/s3/s3util.py +0 -0
  235. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/debug_logger.py +0 -0
  236. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/debug_monitor.py +0 -0
  237. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/env_escape/__init__.py +0 -0
  238. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/env_escape/communication/__init__.py +0 -0
  239. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/env_escape/communication/bytestream.py +0 -0
  240. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/env_escape/communication/channel.py +0 -0
  241. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/env_escape/communication/socket_bytestream.py +0 -0
  242. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/env_escape/communication/utils.py +0 -0
  243. {ob-metaflow-2.11.4.2/metaflow/plugins/datastores → ob-metaflow-2.11.10.2/metaflow/plugins/env_escape/configurations/emulate_test_lib}/__init__.py +0 -0
  244. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/env_escape/configurations/test_lib_impl/__init__.py +0 -0
  245. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/env_escape/data_transferer.py +0 -0
  246. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/environment_decorator.py +0 -0
  247. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/events_decorator.py +0 -0
  248. {ob-metaflow-2.11.4.2/metaflow/plugins/env_escape/configurations/emulate_test_lib → ob-metaflow-2.11.10.2/metaflow/plugins/frameworks}/__init__.py +0 -0
  249. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/frameworks/pytorch.py +0 -0
  250. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/gcp/gs_exceptions.py +0 -0
  251. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/gcp/gs_storage_client_factory.py +0 -0
  252. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/gcp/gs_tail.py +0 -0
  253. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/gcp/gs_utils.py +0 -0
  254. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/gcp/includefile_support.py +0 -0
  255. {ob-metaflow-2.11.4.2/metaflow/plugins/frameworks → ob-metaflow-2.11.10.2/metaflow/plugins/kubernetes}/__init__.py +0 -0
  256. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/kubernetes/kubernetes_client.py +0 -0
  257. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/metadata/__init__.py +0 -0
  258. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/metadata/local.py +0 -0
  259. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/metadata/service.py +0 -0
  260. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/package_cli.py +0 -0
  261. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/parallel_decorator.py +0 -0
  262. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/project_decorator.py +0 -0
  263. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/pypi/__init__.py +0 -0
  264. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/pypi/bootstrap.py +0 -0
  265. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/pypi/conda_decorator.py +0 -0
  266. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/pypi/micromamba.py +0 -0
  267. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/pypi/pypi_decorator.py +0 -0
  268. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/pypi/pypi_environment.py +0 -0
  269. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/pypi/utils.py +0 -0
  270. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/resources_decorator.py +0 -0
  271. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/retry_decorator.py +0 -0
  272. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/secrets/__init__.py +0 -0
  273. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/secrets/inline_secrets_provider.py +0 -0
  274. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/secrets/secrets_decorator.py +0 -0
  275. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/storage_executor.py +0 -0
  276. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/tag_cli.py +0 -0
  277. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/test_unbounded_foreach_decorator.py +0 -0
  278. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/plugins/timeout_decorator.py +0 -0
  279. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/procpoll.py +0 -0
  280. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/py.typed +0 -0
  281. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/pylint_wrapper.py +0 -0
  282. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/sidecar/__init__.py +0 -0
  283. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/sidecar/sidecar_messages.py +0 -0
  284. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/sidecar/sidecar_worker.py +0 -0
  285. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/tagging_util.py +0 -0
  286. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/tracing/__init__.py +0 -0
  287. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/tracing/propagator.py +0 -0
  288. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/tracing/span_exporter.py +0 -0
  289. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/tracing/tracing_modules.py +0 -0
  290. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/tutorials/00-helloworld/README.md +0 -0
  291. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/tutorials/00-helloworld/helloworld.py +0 -0
  292. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/tutorials/01-playlist/README.md +0 -0
  293. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/tutorials/01-playlist/movies.csv +0 -0
  294. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/tutorials/01-playlist/playlist.ipynb +0 -0
  295. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/tutorials/01-playlist/playlist.py +0 -0
  296. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/tutorials/02-statistics/README.md +0 -0
  297. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/tutorials/02-statistics/movies.csv +0 -0
  298. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/tutorials/02-statistics/stats.ipynb +0 -0
  299. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/tutorials/02-statistics/stats.py +0 -0
  300. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/tutorials/03-playlist-redux/README.md +0 -0
  301. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/tutorials/03-playlist-redux/playlist.py +0 -0
  302. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/tutorials/04-playlist-plus/README.md +0 -0
  303. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/tutorials/04-playlist-plus/playlist.py +0 -0
  304. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/tutorials/05-hello-cloud/README.md +0 -0
  305. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/tutorials/05-hello-cloud/hello-cloud.ipynb +0 -0
  306. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/tutorials/05-hello-cloud/hello-cloud.py +0 -0
  307. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/tutorials/06-statistics-redux/README.md +0 -0
  308. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/tutorials/06-statistics-redux/stats.ipynb +0 -0
  309. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/tutorials/07-worldview/README.md +0 -0
  310. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/tutorials/07-worldview/worldview.ipynb +0 -0
  311. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/tutorials/08-autopilot/README.md +0 -0
  312. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/tutorials/08-autopilot/autopilot.ipynb +0 -0
  313. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/unbounded_foreach.py +0 -0
  314. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/util.py +0 -0
  315. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/metaflow/vendor.py +0 -0
  316. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/ob_metaflow.egg-info/dependency_links.txt +0 -0
  317. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/ob_metaflow.egg-info/entry_points.txt +0 -0
  318. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/ob_metaflow.egg-info/top_level.txt +0 -0
  319. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/setup.cfg +0 -0
  320. {ob-metaflow-2.11.4.2 → ob-metaflow-2.11.10.2}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ob-metaflow
3
- Version: 2.11.4.2
3
+ Version: 2.11.10.2
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: ob-metaflow-stubs==2.11.4.2; extra == "stubs"
15
+ Requires-Dist: ob-metaflow-stubs==2.11.10.2; 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
 
@@ -473,13 +473,6 @@ def logs(obj, input_path, stdout=None, stderr=None, both=None, timestamps=False)
473
473
  help="Pathspec of the origin task for this task to clone. Do "
474
474
  "not execute anything.",
475
475
  )
476
- @click.option(
477
- "--clone-wait-only/--no-clone-wait-only",
478
- default=False,
479
- show_default=True,
480
- help="If specified, waits for an external process to clone the task",
481
- hidden=True,
482
- )
483
476
  @click.option(
484
477
  "--clone-run-id",
485
478
  default=None,
@@ -519,7 +512,6 @@ def step(
519
512
  retry_count=None,
520
513
  max_user_code_retries=None,
521
514
  clone_only=None,
522
- clone_wait_only=False,
523
515
  clone_run_id=None,
524
516
  decospecs=None,
525
517
  ubf_context="none",
@@ -575,7 +567,6 @@ def step(
575
567
  task_id,
576
568
  clone_only,
577
569
  retry_count,
578
- wait_only=clone_wait_only,
579
570
  )
580
571
  else:
581
572
  task.run_step(
@@ -719,6 +710,13 @@ def common_run_options(func):
719
710
  hidden=True,
720
711
  help="If specified, allows this call to be called in parallel",
721
712
  )
713
+ @click.option(
714
+ "--resume-identifier",
715
+ default=None,
716
+ show_default=True,
717
+ hidden=True,
718
+ help="If specified, it identifies the task that started this resume call. It is in the form of {step_name}-{task_id}",
719
+ )
722
720
  @click.argument("step-to-rerun", required=False)
723
721
  @cli.command(help="Resume execution of a previous run of this flow.")
724
722
  @common_run_options
@@ -736,6 +734,7 @@ def resume(
736
734
  max_log_size=None,
737
735
  decospecs=None,
738
736
  run_id_file=None,
737
+ resume_identifier=None,
739
738
  ):
740
739
  before_run(obj, tags, decospecs + obj.environment.decospecs())
741
740
 
@@ -789,10 +788,15 @@ def resume(
789
788
  max_workers=max_workers,
790
789
  max_num_splits=max_num_splits,
791
790
  max_log_size=max_log_size * 1024 * 1024,
791
+ resume_identifier=resume_identifier,
792
792
  )
793
793
  write_run_id(run_id_file, runtime.run_id)
794
+ runtime.print_workflow_info()
794
795
  runtime.persist_constants()
795
- runtime.execute()
796
+ if clone_only:
797
+ runtime.clone_original_run()
798
+ else:
799
+ runtime.execute()
796
800
 
797
801
 
798
802
  @tracing.cli_entrypoint("cli/run")
@@ -845,6 +849,7 @@ def run(
845
849
  write_run_id(run_id_file, runtime.run_id)
846
850
 
847
851
  obj.flow._set_constants(obj.graph, kwargs)
852
+ runtime.print_workflow_info()
848
853
  runtime.persist_constants()
849
854
  runtime.execute()
850
855
 
@@ -0,0 +1,71 @@
1
+ import time
2
+ from .metadata import MetaDatum
3
+
4
+
5
+ def clone_task_helper(
6
+ flow_name,
7
+ clone_run_id,
8
+ run_id,
9
+ step_name,
10
+ clone_task_id,
11
+ task_id,
12
+ flow_datastore,
13
+ metadata_service,
14
+ origin_ds_set=None,
15
+ attempt_id=0,
16
+ ):
17
+ # 1. initialize output datastore
18
+ output = flow_datastore.get_task_datastore(
19
+ run_id, step_name, task_id, attempt=attempt_id, mode="w"
20
+ )
21
+ output.init_task()
22
+
23
+ origin_run_id, origin_step_name, origin_task_id = (
24
+ clone_run_id,
25
+ step_name,
26
+ clone_task_id,
27
+ )
28
+ # 2. initialize origin datastore
29
+ origin = None
30
+ if origin_ds_set:
31
+ origin = origin_ds_set.get_with_pathspec(
32
+ "{}/{}/{}".format(origin_run_id, origin_step_name, origin_task_id)
33
+ )
34
+ else:
35
+ origin = flow_datastore.get_task_datastore(
36
+ origin_run_id, origin_step_name, origin_task_id
37
+ )
38
+ metadata_tags = ["attempt_id:{0}".format(attempt_id)]
39
+ output.clone(origin)
40
+ _ = metadata_service.register_task_id(
41
+ run_id,
42
+ step_name,
43
+ task_id,
44
+ attempt_id,
45
+ )
46
+ metadata_service.register_metadata(
47
+ run_id,
48
+ step_name,
49
+ task_id,
50
+ [
51
+ MetaDatum(
52
+ field="origin-task-id",
53
+ value=str(origin_task_id),
54
+ type="origin-task-id",
55
+ tags=metadata_tags,
56
+ ),
57
+ MetaDatum(
58
+ field="origin-run-id",
59
+ value=str(origin_run_id),
60
+ type="origin-run-id",
61
+ tags=metadata_tags,
62
+ ),
63
+ MetaDatum(
64
+ field="attempt",
65
+ value=str(attempt_id),
66
+ type="attempt",
67
+ tags=metadata_tags,
68
+ ),
69
+ ],
70
+ )
71
+ output.done()
@@ -30,6 +30,7 @@ from typing import (
30
30
  from metaflow import FlowSpec, step
31
31
  from metaflow.debug import debug
32
32
  from metaflow.decorators import Decorator, FlowDecorator
33
+ from metaflow.extension_support import get_aliased_modules
33
34
  from metaflow.graph import deindent_docstring
34
35
  from metaflow.metaflow_version import get_version
35
36
 
@@ -116,6 +117,7 @@ class StubGenerator:
116
117
 
117
118
  self._write_generated_for = include_generated_for
118
119
  self._pending_modules = ["metaflow"] # type: List[str]
120
+ self._pending_modules.extend(get_aliased_modules())
119
121
  self._root_module = "metaflow."
120
122
  self._safe_modules = ["metaflow.", "metaflow_extensions."]
121
123
 
@@ -323,17 +323,26 @@ def get_packages_for_stubs() -> Tuple[List[Tuple[str, str]], List[str]]:
323
323
  return [], []
324
324
 
325
325
  dist_list = []
326
- for dist in _metadata_package.distributions():
326
+
327
+ # We check the type because if the user has multiple importlib metadata, for
328
+ # some reason it shows up multiple times.
329
+ interesting_dists = [
330
+ d
331
+ for d in _metadata_package.distributions()
327
332
  if any(
328
333
  [
329
- pkg == "metaflow-stubs"
330
- for pkg in (dist.read_text("top_level.txt") or "").split()
334
+ p == "metaflow-stubs"
335
+ for p in (d.read_text("top_level.txt") or "").split()
331
336
  ]
332
- ):
333
- # This is a package we care about
334
- root_path = dist.locate_file("metaflow-stubs").as_posix()
335
- dist_list.append((dist.metadata["Name"], root_path))
336
- all_paths.discard(root_path)
337
+ )
338
+ and isinstance(d, _metadata_package.PathDistribution)
339
+ ]
340
+
341
+ for dist in interesting_dists:
342
+ # This is a package we care about
343
+ root_path = dist.locate_file("metaflow-stubs").as_posix()
344
+ dist_list.append((dist.metadata["Name"], root_path))
345
+ all_paths.discard(root_path)
337
346
  return dist_list, list(all_paths)
338
347
 
339
348
 
@@ -518,7 +518,8 @@ def _init_flow_decorators(
518
518
  else:
519
519
  # Each "non-multiple" flow decorator is only allowed to have one set of options
520
520
  deco_flow_init_options = {
521
- option: deco_options[option] for option in deco.options
521
+ option: deco_options[option.replace("-", "_")]
522
+ for option in deco.options
522
523
  }
523
524
  for deco in decorators:
524
525
  deco.flow_init(
@@ -26,7 +26,7 @@ DEFAULT_METADATA = from_conf("DEFAULT_METADATA", "local")
26
26
  DEFAULT_MONITOR = from_conf("DEFAULT_MONITOR", "nullSidecarMonitor")
27
27
  DEFAULT_PACKAGE_SUFFIXES = from_conf("DEFAULT_PACKAGE_SUFFIXES", ".py,.R,.RDS")
28
28
  DEFAULT_AWS_CLIENT_PROVIDER = from_conf("DEFAULT_AWS_CLIENT_PROVIDER", "boto3")
29
- DEFAULT_GCP_CLIENT_PROVIDER = from_conf("DEFAULT_ACP_CLIENT_PROVIDER", "gcp-default")
29
+ DEFAULT_GCP_CLIENT_PROVIDER = from_conf("DEFAULT_GCP_CLIENT_PROVIDER", "gcp-default")
30
30
  DEFAULT_SECRETS_BACKEND_TYPE = from_conf("DEFAULT_SECRETS_BACKEND_TYPE")
31
31
  DEFAULT_SECRETS_ROLE = from_conf("DEFAULT_SECRETS_ROLE")
32
32
 
@@ -82,6 +82,9 @@ S3_SERVER_SIDE_ENCRYPTION = from_conf("S3_SERVER_SIDE_ENCRYPTION")
82
82
  # so setting it to 0 means each operation will be tried once.
83
83
  S3_RETRY_COUNT = from_conf("S3_RETRY_COUNT", 7)
84
84
 
85
+ # Number of concurrent S3 processes for parallel operations.
86
+ S3_WORKER_COUNT = from_conf("S3_WORKER_COUNT", 64)
87
+
85
88
  # Number of retries on *transient* failures (such as SlowDown errors). Note
86
89
  # that if after S3_TRANSIENT_RETRY_COUNT times, all operations haven't been done,
87
90
  # it will try up to S3_RETRY_COUNT again so the total number of tries can be up to
@@ -142,6 +145,15 @@ DATATOOLS_LOCALROOT = from_conf(
142
145
  # Secrets Backend - AWS Secrets Manager configuration
143
146
  AWS_SECRETS_MANAGER_DEFAULT_REGION = from_conf("AWS_SECRETS_MANAGER_DEFAULT_REGION")
144
147
 
148
+ # Secrets Backend - GCP Secrets name prefix. With this, users don't have
149
+ # to specify the full secret name in the @secret decorator.
150
+ #
151
+ # Note that it makes a difference whether the prefix ends with a slash or not
152
+ # E.g. if secret name passed to @secret decorator is mysecret:
153
+ # - "projects/1234567890/secrets/" -> "projects/1234567890/secrets/mysecret"
154
+ # - "projects/1234567890/secrets/foo-" -> "projects/1234567890/secrets/foo-mysecret"
155
+ GCP_SECRET_MANAGER_PREFIX = from_conf("GCP_SECRET_MANAGER_PREFIX")
156
+
145
157
  # The root directory to save artifact pulls in, when using S3 or Azure
146
158
  ARTIFACT_LOCALROOT = from_conf("ARTIFACT_LOCALROOT", os.getcwd())
147
159
 
@@ -312,6 +324,8 @@ KUBERNETES_FETCH_EC2_METADATA = from_conf("KUBERNETES_FETCH_EC2_METADATA", False
312
324
  KUBERNETES_PORT = from_conf("KUBERNETES_PORT", None)
313
325
  # Shared memory in MB to use for this step
314
326
  KUBERNETES_SHARED_MEMORY = from_conf("KUBERNETES_SHARED_MEMORY", None)
327
+ # Default port number to open on the pods
328
+ KUBERNETES_PORT = from_conf("KUBERNETES_PORT", None)
315
329
 
316
330
 
317
331
  ARGO_WORKFLOWS_KUBERNETES_SECRETS = from_conf("ARGO_WORKFLOWS_KUBERNETES_SECRETS", "")
@@ -450,6 +464,7 @@ def get_pinned_conda_libs(python_version, datastore_type):
450
464
  elif datastore_type == "gs":
451
465
  pins["google-cloud-storage"] = ">=2.5.0"
452
466
  pins["google-auth"] = ">=2.11.0"
467
+ pins["google-cloud-secret-manager"] = ">=2.10.0"
453
468
  elif datastore_type == "local":
454
469
  pass
455
470
  else:
@@ -129,7 +129,7 @@ class MetaflowEnvironment(object):
129
129
  )
130
130
  elif datastore_type == "gs":
131
131
  cmds.append(
132
- "%s -m pip install google-cloud-storage google-auth simple-gcp-object-downloader -qqq"
132
+ "%s -m pip install google-cloud-storage google-auth simple-gcp-object-downloader google-cloud-secret-manager -qqq"
133
133
  % self._python()
134
134
  )
135
135
  else:
@@ -88,9 +88,10 @@ class MetaflowPackage(object):
88
88
  # if path and (path[0] == '.' or './' in path):
89
89
  # continue
90
90
  for fname in files:
91
- if fname[0] == ".":
92
- continue
93
- if any(fname.endswith(suffix) for suffix in suffixes):
91
+ if (fname[0] == "." and fname in suffixes) or (
92
+ fname[0] != "."
93
+ and any(fname.endswith(suffix) for suffix in suffixes)
94
+ ):
94
95
  p = os.path.join(path, fname)
95
96
  yield p, p[prefixlen:]
96
97
 
@@ -342,10 +342,10 @@ class Parameter(object):
342
342
  )
343
343
 
344
344
  def __repr__(self):
345
- return "metaflow.Parameter(name=%s, kwargs=%s)" % (name, kwargs)
345
+ return "metaflow.Parameter(name=%s, kwargs=%s)" % (self.name, self.kwargs)
346
346
 
347
347
  def __str__(self):
348
- return "metaflow.Parameter(name=%s, kwargs=%s)" % (name, kwargs)
348
+ return "metaflow.Parameter(name=%s, kwargs=%s)" % (self.name, self.kwargs)
349
349
 
350
350
  def option_kwargs(self, deploy_mode):
351
351
  kwargs = self.kwargs
@@ -120,6 +120,10 @@ SECRETS_PROVIDERS_DESC = [
120
120
  "aws-secrets-manager",
121
121
  ".aws.secrets_manager.aws_secrets_manager_secrets_provider.AwsSecretsManagerSecretsProvider",
122
122
  ),
123
+ (
124
+ "gcp-secret-manager",
125
+ ".gcp.gcp_secret_manager_secrets_provider.GcpSecretManagerSecretsProvider",
126
+ ),
123
127
  ]
124
128
 
125
129
  AZURE_CLIENT_PROVIDERS_DESC = [
@@ -17,6 +17,7 @@ from metaflow.metaflow_config import (
17
17
  AIRFLOW_KUBERNETES_KUBECONFIG_FILE,
18
18
  AIRFLOW_KUBERNETES_STARTUP_TIMEOUT_SECONDS,
19
19
  AWS_SECRETS_MANAGER_DEFAULT_REGION,
20
+ GCP_SECRET_MANAGER_PREFIX,
20
21
  AZURE_STORAGE_BLOB_SERVICE_ENDPOINT,
21
22
  CARD_AZUREROOT,
22
23
  CARD_GSROOT,
@@ -408,6 +409,8 @@ class Airflow(object):
408
409
  env[
409
410
  "METAFLOW_AWS_SECRETS_MANAGER_DEFAULT_REGION"
410
411
  ] = AWS_SECRETS_MANAGER_DEFAULT_REGION
412
+ if GCP_SECRET_MANAGER_PREFIX:
413
+ env["METAFLOW_GCP_SECRET_MANAGER_PREFIX"] = GCP_SECRET_MANAGER_PREFIX
411
414
 
412
415
  env.update(additional_mf_variables)
413
416
 
@@ -32,6 +32,7 @@ from metaflow.metaflow_config import (
32
32
  DATATOOLS_S3ROOT,
33
33
  DEFAULT_METADATA,
34
34
  DEFAULT_SECRETS_BACKEND_TYPE,
35
+ GCP_SECRET_MANAGER_PREFIX,
35
36
  KUBERNETES_FETCH_EC2_METADATA,
36
37
  KUBERNETES_LABELS,
37
38
  KUBERNETES_NAMESPACE,
@@ -1313,6 +1314,7 @@ class ArgoWorkflows(object):
1313
1314
  env[
1314
1315
  "METAFLOW_AWS_SECRETS_MANAGER_DEFAULT_REGION"
1315
1316
  ] = AWS_SECRETS_MANAGER_DEFAULT_REGION
1317
+ env["METAFLOW_GCP_SECRET_MANAGER_PREFIX"] = GCP_SECRET_MANAGER_PREFIX
1316
1318
 
1317
1319
  # support for Azure
1318
1320
  env[
@@ -1384,12 +1386,14 @@ class ArgoWorkflows(object):
1384
1386
  # Set shared_memory to 0 if it isn't specified. This results
1385
1387
  # in Kubernetes using it's default value when the pod is created.
1386
1388
  shared_memory = resources.get("shared_memory", 0)
1389
+ port = resources.get("port", None)
1390
+ if port:
1391
+ port = int(port)
1387
1392
 
1388
1393
  tmpfs_enabled = use_tmpfs or (tmpfs_size and not use_tmpfs)
1389
1394
 
1390
1395
  if tmpfs_enabled and tmpfs_tempdir:
1391
1396
  env["METAFLOW_TEMPDIR"] = tmpfs_path
1392
-
1393
1397
  # Create a ContainerTemplate for this node. Ideally, we would have
1394
1398
  # liked to inline this ContainerTemplate and avoid scanning the workflow
1395
1399
  # twice, but due to issues with variable substitution, we will have to
@@ -1448,6 +1452,9 @@ class ArgoWorkflows(object):
1448
1452
  kubernetes_sdk.V1Container(
1449
1453
  name=self._sanitize(node.name),
1450
1454
  command=cmds,
1455
+ ports=[kubernetes_sdk.V1ContainerPort(container_port=port)]
1456
+ if port
1457
+ else None,
1451
1458
  env=[
1452
1459
  kubernetes_sdk.V1EnvVar(name=k, value=str(v))
1453
1460
  for k, v in env.items()
@@ -1996,8 +2003,10 @@ class ArgoWorkflows(object):
1996
2003
  # Technically, we don't need to create
1997
2004
  # a payload carry-on and can stuff
1998
2005
  # everything within the body.
1999
- data_template="{{ .Input.body.payload.%s | toJson }}"
2000
- % v,
2006
+ # NOTE: We need the conditional logic in order to successfully fall back to the default value
2007
+ # when the event payload does not contain a key for a parameter.
2008
+ data_template='{{ if (hasKey $.Input.body.payload "%s") }}{{- (.Input.body.payload.%s | toJson) -}}{{- else -}}{{ (fail "use-default-instead") }}{{- end -}}'
2009
+ % (v, v),
2001
2010
  # Unfortunately the sensor needs to
2002
2011
  # record the default values for
2003
2012
  # the parameters - there doesn't seem
@@ -2926,4 +2935,4 @@ class LifecycleHook(object):
2926
2935
  return self.payload
2927
2936
 
2928
2937
  def __str__(self):
2929
- return json.dumps(self.payload, indent=4)
2938
+ return json.dumps(self.payload, indent=4)
@@ -72,6 +72,7 @@ class ArgoWorkflowsInternalDecorator(StepDecorator):
72
72
  meta["argo-workflow-name"] = os.environ["ARGO_WORKFLOW_NAME"]
73
73
  meta["argo-workflow-namespace"] = os.environ["ARGO_WORKFLOW_NAMESPACE"]
74
74
  meta["auto-emit-argo-events"] = self.attributes["auto-emit-argo-events"]
75
+ meta["argo-workflow-template-owner"] = os.environ["METAFLOW_OWNER"]
75
76
  entries = [
76
77
  MetaDatum(
77
78
  field=k, value=v, type=k, tags=["attempt_id:{0}".format(retry_count)]
@@ -192,6 +192,9 @@ class Batch(object):
192
192
  tmpfs_size=None,
193
193
  tmpfs_path=None,
194
194
  num_parallel=0,
195
+ ephemeral_storage=None,
196
+ log_driver=None,
197
+ log_options=None,
195
198
  ):
196
199
  job_name = self._job_name(
197
200
  attrs.get("metaflow.user"),
@@ -240,6 +243,9 @@ class Batch(object):
240
243
  tmpfs_size=tmpfs_size,
241
244
  tmpfs_path=tmpfs_path,
242
245
  num_parallel=num_parallel,
246
+ ephemeral_storage=ephemeral_storage,
247
+ log_driver=log_driver,
248
+ log_options=log_options,
243
249
  )
244
250
  .task_id(attrs.get("metaflow.task_id"))
245
251
  .environment_variable("AWS_DEFAULT_REGION", self._client.region())
@@ -353,6 +359,9 @@ class Batch(object):
353
359
  num_parallel=0,
354
360
  env={},
355
361
  attrs={},
362
+ ephemeral_storage=None,
363
+ log_driver=None,
364
+ log_options=None,
356
365
  ):
357
366
  if queue is None:
358
367
  queue = next(self._client.active_job_queues(), None)
@@ -390,6 +399,9 @@ class Batch(object):
390
399
  tmpfs_size=tmpfs_size,
391
400
  tmpfs_path=tmpfs_path,
392
401
  num_parallel=num_parallel,
402
+ ephemeral_storage=ephemeral_storage,
403
+ log_driver=log_driver,
404
+ log_options=log_options,
393
405
  )
394
406
  self.num_parallel = num_parallel
395
407
  self.job = job.execute()
@@ -154,6 +154,25 @@ def kill(ctx, run_id, user, my_runs):
154
154
  @click.option("--ubf-context", default=None, type=click.Choice([None, "ubf_control"]))
155
155
  @click.option("--host-volumes", multiple=True)
156
156
  @click.option("--efs-volumes", multiple=True)
157
+ @click.option(
158
+ "--ephemeral-storage",
159
+ default=None,
160
+ type=int,
161
+ help="Ephemeral storage (for AWS Batch only)",
162
+ )
163
+ @click.option(
164
+ "--log-driver",
165
+ default=None,
166
+ type=str,
167
+ help="Log driver for AWS ECS container",
168
+ )
169
+ @click.option(
170
+ "--log-options",
171
+ default=None,
172
+ type=str,
173
+ multiple=True,
174
+ help="Log options for the chosen log driver",
175
+ )
157
176
  @click.option(
158
177
  "--num-parallel",
159
178
  default=0,
@@ -186,6 +205,9 @@ def step(
186
205
  tmpfs_path=None,
187
206
  host_volumes=None,
188
207
  efs_volumes=None,
208
+ ephemeral_storage=None,
209
+ log_driver=None,
210
+ log_options=None,
189
211
  num_parallel=None,
190
212
  **kwargs
191
213
  ):
@@ -317,6 +339,9 @@ def step(
317
339
  tmpfs_tempdir=tmpfs_tempdir,
318
340
  tmpfs_size=tmpfs_size,
319
341
  tmpfs_path=tmpfs_path,
342
+ ephemeral_storage=ephemeral_storage,
343
+ log_driver=log_driver,
344
+ log_options=log_options,
320
345
  num_parallel=num_parallel,
321
346
  )
322
347
  except Exception as e:
@@ -158,6 +158,9 @@ class BatchJob(object):
158
158
  tmpfs_size,
159
159
  tmpfs_path,
160
160
  num_parallel,
161
+ ephemeral_storage,
162
+ log_driver,
163
+ log_options,
161
164
  ):
162
165
  # identify platform from any compute environment associated with the
163
166
  # queue
@@ -195,6 +198,25 @@ class BatchJob(object):
195
198
  "propagateTags": True,
196
199
  }
197
200
 
201
+ log_options_dict = {}
202
+ if log_options:
203
+ if isinstance(log_options, str):
204
+ log_options = [log_options]
205
+ for each_log_option in log_options:
206
+ k, v = each_log_option.split(":", 1)
207
+ log_options_dict[k] = v
208
+
209
+ if log_driver or log_options:
210
+ job_definition["containerProperties"]["logConfiguration"] = {}
211
+ if log_driver:
212
+ job_definition["containerProperties"]["logConfiguration"][
213
+ "logDriver"
214
+ ] = log_driver
215
+ if log_options:
216
+ job_definition["containerProperties"]["logConfiguration"][
217
+ "options"
218
+ ] = log_options_dict
219
+
198
220
  if platform == "FARGATE" or platform == "FARGATE_SPOT":
199
221
  if num_parallel > 1:
200
222
  raise BatchJobException("Fargate does not support multinode jobs.")
@@ -210,6 +232,10 @@ class BatchJob(object):
210
232
  job_definition["containerProperties"]["networkConfiguration"] = {
211
233
  "assignPublicIp": "ENABLED"
212
234
  }
235
+ if ephemeral_storage:
236
+ job_definition["containerProperties"]["ephemeralStorage"] = {
237
+ "sizeInGiB": ephemeral_storage
238
+ }
213
239
 
214
240
  if platform == "EC2" or platform == "SPOT":
215
241
  if "linuxParameters" not in job_definition["containerProperties"]:
@@ -254,6 +280,10 @@ class BatchJob(object):
254
280
  job_definition["containerProperties"]["linuxParameters"][
255
281
  "maxSwap"
256
282
  ] = int(max_swap)
283
+ if ephemeral_storage:
284
+ raise BatchJobException(
285
+ "The ephemeral_storage parameter is only available for FARGATE compute environments"
286
+ )
257
287
 
258
288
  if inferentia:
259
289
  if not (isinstance(inferentia, (int, unicode, basestring))):
@@ -315,6 +345,10 @@ class BatchJob(object):
315
345
  {"sourceVolume": name, "containerPath": container_path}
316
346
  )
317
347
 
348
+ if use_tmpfs and (platform == "FARGATE" or platform == "FARGATE_SPOT"):
349
+ raise BatchJobException(
350
+ "tmpfs is not available for Fargate compute resources"
351
+ )
318
352
  if use_tmpfs or (tmpfs_size and not use_tmpfs):
319
353
  if tmpfs_size:
320
354
  if not (isinstance(tmpfs_size, (int, unicode, basestring))):
@@ -442,6 +476,9 @@ class BatchJob(object):
442
476
  tmpfs_size,
443
477
  tmpfs_path,
444
478
  num_parallel,
479
+ ephemeral_storage,
480
+ log_driver,
481
+ log_options,
445
482
  ):
446
483
  self.payload["jobDefinition"] = self._register_job_definition(
447
484
  image,
@@ -461,6 +498,9 @@ class BatchJob(object):
461
498
  tmpfs_size,
462
499
  tmpfs_path,
463
500
  num_parallel,
501
+ ephemeral_storage,
502
+ log_driver,
503
+ log_options,
464
504
  )
465
505
  return self
466
506
 
@@ -72,7 +72,8 @@ class BatchDecorator(StepDecorator):
72
72
  necessary. A swappiness value of 100 causes pages to be swapped very
73
73
  aggressively. Accepted values are whole numbers between 0 and 100.
74
74
  use_tmpfs : bool, default False
75
- This enables an explicit tmpfs mount for this step.
75
+ This enables an explicit tmpfs mount for this step. Note that tmpfs is
76
+ not available on Fargate compute environments
76
77
  tmpfs_tempdir : bool, default True
77
78
  sets METAFLOW_TEMPDIR to tmpfs_path if set for this step.
78
79
  tmpfs_size : int, optional, default None
@@ -83,8 +84,19 @@ class BatchDecorator(StepDecorator):
83
84
  Path to tmpfs mount for this step. Defaults to /metaflow_temp.
84
85
  inferentia : int, default 0
85
86
  Number of Inferentia chips required for this step.
87
+ trainium : int, default None
88
+ Alias for inferentia. Use only one of the two.
86
89
  efa : int, default 0
87
90
  Number of elastic fabric adapter network devices to attach to container
91
+ ephemeral_storage: int, default None
92
+ The total amount, in GiB, of ephemeral storage to set for the task (21-200)
93
+ This is only relevant for Fargate compute environments
94
+ log_driver: str, optional, default None
95
+ The log driver to use for the Amazon ECS container.
96
+ log_options: List[str], optional, default None
97
+ List of strings containing options for the chosen log driver. The configurable values
98
+ depend on the `log driver` chosen. Validation of these options is not supported yet.
99
+ Example usage: ["awslogs-group:aws/batch/job"]
88
100
  """
89
101
 
90
102
  name = "batch"
@@ -100,6 +112,7 @@ class BatchDecorator(StepDecorator):
100
112
  "max_swap": None,
101
113
  "swappiness": None,
102
114
  "inferentia": None,
115
+ "trainium": None, # alias for inferentia
103
116
  "efa": None,
104
117
  "host_volumes": None,
105
118
  "efs_volumes": None,
@@ -107,6 +120,9 @@ class BatchDecorator(StepDecorator):
107
120
  "tmpfs_tempdir": True,
108
121
  "tmpfs_size": None,
109
122
  "tmpfs_path": "/metaflow_temp",
123
+ "ephemeral_storage": None,
124
+ "log_driver": None,
125
+ "log_options": None,
110
126
  }
111
127
  resource_defaults = {
112
128
  "cpu": "1",
@@ -146,6 +162,21 @@ class BatchDecorator(StepDecorator):
146
162
  self.attributes["image"],
147
163
  )
148
164
 
165
+ # Alias trainium to inferentia and check that both are not in use.
166
+ if (
167
+ self.attributes["inferentia"] is not None
168
+ and self.attributes["trainium"] is not None
169
+ ):
170
+ raise BatchException(
171
+ "only specify a value for 'inferentia' or 'trainium', not both."
172
+ )
173
+
174
+ if self.attributes["trainium"] is not None:
175
+ self.attributes["inferentia"] = self.attributes["trainium"]
176
+
177
+ # clean up the alias attribute so it is not passed on.
178
+ self.attributes.pop("trainium", None)
179
+
149
180
  # Refer https://github.com/Netflix/metaflow/blob/master/docs/lifecycle.png
150
181
  # to understand where these functions are invoked in the lifecycle of a
151
182
  # Metaflow flow.
@@ -839,6 +839,9 @@ class StepFunctions(object):
839
839
  attrs=attrs,
840
840
  host_volumes=resources["host_volumes"],
841
841
  efs_volumes=resources["efs_volumes"],
842
+ ephemeral_storage=resources["ephemeral_storage"],
843
+ log_driver=resources["log_driver"],
844
+ log_options=resources["log_options"],
842
845
  )
843
846
  .attempts(total_retries + 1)
844
847
  )