ob-metaflow 2.11.10.3__tar.gz → 2.11.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 (316) hide show
  1. {ob_metaflow-2.11.10.3/ob_metaflow.egg-info → ob_metaflow-2.11.14.1}/PKG-INFO +2 -2
  2. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/metaflow_config.py +10 -0
  3. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/argo/argo_workflows.py +160 -26
  4. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/argo/argo_workflows_decorator.py +3 -0
  5. ob_metaflow-2.11.14.1/metaflow/plugins/argo/generate_input_paths.py +23 -0
  6. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/aws/aws_utils.py +21 -5
  7. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/aws/step_functions/step_functions.py +1 -1
  8. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/datastores/azure_storage.py +7 -0
  9. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/datatools/s3/s3.py +1 -0
  10. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/env_escape/__init__.py +2 -1
  11. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/kubernetes/kubernetes_decorator.py +12 -0
  12. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/pypi/conda_environment.py +3 -1
  13. ob_metaflow-2.11.14.1/metaflow/version.py +1 -0
  14. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1/ob_metaflow.egg-info}/PKG-INFO +2 -2
  15. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/ob_metaflow.egg-info/SOURCES.txt +1 -1
  16. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/ob_metaflow.egg-info/requires.txt +1 -1
  17. ob_metaflow-2.11.10.3/metaflow/plugins/argo/process_input_paths.py +0 -19
  18. ob_metaflow-2.11.10.3/metaflow/version.py +0 -1
  19. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/LICENSE +0 -0
  20. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/MANIFEST.in +0 -0
  21. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/README.md +0 -0
  22. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/R.py +0 -0
  23. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/__init__.py +0 -0
  24. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/__init__.py +0 -0
  25. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/click/__init__.py +0 -0
  26. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/click/_bashcomplete.py +0 -0
  27. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/click/_compat.py +0 -0
  28. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/click/_termui_impl.py +0 -0
  29. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/click/_textwrap.py +0 -0
  30. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/click/_unicodefun.py +0 -0
  31. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/click/_winconsole.py +0 -0
  32. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/click/core.py +0 -0
  33. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/click/decorators.py +0 -0
  34. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/click/exceptions.py +0 -0
  35. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/click/formatting.py +0 -0
  36. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/click/globals.py +0 -0
  37. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/click/parser.py +0 -0
  38. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/click/termui.py +0 -0
  39. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/click/testing.py +0 -0
  40. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/click/types.py +0 -0
  41. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/click/utils.py +0 -0
  42. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/packaging/__init__.py +0 -0
  43. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/packaging/_elffile.py +0 -0
  44. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/packaging/_manylinux.py +0 -0
  45. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/packaging/_musllinux.py +0 -0
  46. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/packaging/_parser.py +0 -0
  47. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/packaging/_structures.py +0 -0
  48. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/packaging/_tokenizer.py +0 -0
  49. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/packaging/markers.py +0 -0
  50. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/packaging/py.typed +0 -0
  51. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/packaging/requirements.py +0 -0
  52. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/packaging/specifiers.py +0 -0
  53. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/packaging/tags.py +0 -0
  54. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/packaging/utils.py +0 -0
  55. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/packaging/version.py +0 -0
  56. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/v3_5/__init__.py +0 -0
  57. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/v3_5/importlib_metadata/__init__.py +0 -0
  58. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/v3_5/importlib_metadata/_compat.py +0 -0
  59. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/v3_5/zipp.py +0 -0
  60. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/v3_6/__init__.py +0 -0
  61. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/v3_6/importlib_metadata/__init__.py +0 -0
  62. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/v3_6/importlib_metadata/_adapters.py +0 -0
  63. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/v3_6/importlib_metadata/_collections.py +0 -0
  64. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/v3_6/importlib_metadata/_compat.py +0 -0
  65. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/v3_6/importlib_metadata/_functools.py +0 -0
  66. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/v3_6/importlib_metadata/_itertools.py +0 -0
  67. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/v3_6/importlib_metadata/_meta.py +0 -0
  68. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/v3_6/importlib_metadata/_text.py +0 -0
  69. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/v3_6/importlib_metadata/py.typed +0 -0
  70. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/v3_6/typing_extensions.py +0 -0
  71. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/v3_6/zipp.py +0 -0
  72. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/v3_7/__init__.py +0 -0
  73. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/_vendor/v3_7/zipp.py +0 -0
  74. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/cards.py +0 -0
  75. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/cli.py +0 -0
  76. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/cli_args.py +0 -0
  77. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/client/__init__.py +0 -0
  78. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/client/core.py +0 -0
  79. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/client/filecache.py +0 -0
  80. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/clone_util.py +0 -0
  81. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/cmd/__init__.py +0 -0
  82. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/cmd/configure_cmd.py +0 -0
  83. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/cmd/develop/__init__.py +0 -0
  84. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/cmd/develop/stub_generator.py +0 -0
  85. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/cmd/develop/stubs.py +0 -0
  86. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/cmd/main_cli.py +0 -0
  87. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/cmd/tutorials_cmd.py +0 -0
  88. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/cmd/util.py +0 -0
  89. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/cmd_with_io.py +0 -0
  90. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/datastore/__init__.py +0 -0
  91. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/datastore/content_addressed_store.py +0 -0
  92. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/datastore/datastore_set.py +0 -0
  93. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/datastore/datastore_storage.py +0 -0
  94. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/datastore/exceptions.py +0 -0
  95. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/datastore/flow_datastore.py +0 -0
  96. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/datastore/inputs.py +0 -0
  97. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/datastore/task_datastore.py +0 -0
  98. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/debug.py +0 -0
  99. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/decorators.py +0 -0
  100. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/event_logger.py +0 -0
  101. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/events.py +0 -0
  102. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/exception.py +0 -0
  103. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/extension_support/__init__.py +0 -0
  104. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/extension_support/_empty_file.py +0 -0
  105. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/extension_support/cmd.py +0 -0
  106. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/extension_support/integrations.py +0 -0
  107. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/extension_support/plugins.py +0 -0
  108. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/flowspec.py +0 -0
  109. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/graph.py +0 -0
  110. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/includefile.py +0 -0
  111. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/integrations.py +0 -0
  112. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/lint.py +0 -0
  113. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/metadata/__init__.py +0 -0
  114. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/metadata/heartbeat.py +0 -0
  115. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/metadata/metadata.py +0 -0
  116. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/metadata/util.py +0 -0
  117. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/metaflow_config_funcs.py +0 -0
  118. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/metaflow_current.py +0 -0
  119. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/metaflow_environment.py +0 -0
  120. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/metaflow_profile.py +0 -0
  121. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/metaflow_version.py +0 -0
  122. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/mflog/__init__.py +0 -0
  123. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/mflog/mflog.py +0 -0
  124. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/mflog/save_logs.py +0 -0
  125. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/mflog/save_logs_periodically.py +0 -0
  126. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/mflog/tee.py +0 -0
  127. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/monitor.py +0 -0
  128. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/multicore_utils.py +0 -0
  129. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/package.py +0 -0
  130. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/parameters.py +0 -0
  131. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/__init__.py +0 -0
  132. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/airflow/__init__.py +0 -0
  133. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/airflow/airflow.py +0 -0
  134. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/airflow/airflow_cli.py +0 -0
  135. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/airflow/airflow_decorator.py +0 -0
  136. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/airflow/airflow_utils.py +0 -0
  137. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/airflow/dag.py +0 -0
  138. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/airflow/exception.py +0 -0
  139. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/airflow/plumbing/__init__.py +0 -0
  140. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/airflow/plumbing/set_parameters.py +0 -0
  141. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/airflow/sensors/__init__.py +0 -0
  142. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/airflow/sensors/base_sensor.py +0 -0
  143. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/airflow/sensors/external_task_sensor.py +0 -0
  144. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/airflow/sensors/s3_sensor.py +0 -0
  145. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/argo/__init__.py +0 -0
  146. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/argo/argo_client.py +0 -0
  147. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/argo/argo_events.py +0 -0
  148. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/argo/argo_workflows_cli.py +0 -0
  149. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/aws/__init__.py +0 -0
  150. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/aws/aws_client.py +0 -0
  151. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/aws/batch/__init__.py +0 -0
  152. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/aws/batch/batch.py +0 -0
  153. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/aws/batch/batch_cli.py +0 -0
  154. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/aws/batch/batch_client.py +0 -0
  155. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/aws/batch/batch_decorator.py +0 -0
  156. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/aws/secrets_manager/__init__.py +0 -0
  157. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/aws/secrets_manager/aws_secrets_manager_secrets_provider.py +0 -0
  158. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/aws/step_functions/__init__.py +0 -0
  159. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/aws/step_functions/dynamo_db_client.py +0 -0
  160. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/aws/step_functions/event_bridge_client.py +0 -0
  161. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/aws/step_functions/production_token.py +0 -0
  162. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/aws/step_functions/schedule_decorator.py +0 -0
  163. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/aws/step_functions/set_batch_environment.py +0 -0
  164. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/aws/step_functions/step_functions_cli.py +0 -0
  165. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/aws/step_functions/step_functions_client.py +0 -0
  166. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/aws/step_functions/step_functions_decorator.py +0 -0
  167. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/azure/__init__.py +0 -0
  168. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/azure/azure_credential.py +0 -0
  169. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/azure/azure_exceptions.py +0 -0
  170. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/azure/azure_tail.py +0 -0
  171. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/azure/azure_utils.py +0 -0
  172. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/azure/blob_service_client_factory.py +0 -0
  173. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/azure/includefile_support.py +0 -0
  174. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/cards/__init__.py +0 -0
  175. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/cards/card_cli.py +0 -0
  176. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/cards/card_client.py +0 -0
  177. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/cards/card_creator.py +0 -0
  178. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/cards/card_datastore.py +0 -0
  179. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/cards/card_decorator.py +0 -0
  180. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/cards/card_modules/__init__.py +0 -0
  181. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/cards/card_modules/base.html +0 -0
  182. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/cards/card_modules/basic.py +0 -0
  183. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/cards/card_modules/bundle.css +0 -0
  184. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/cards/card_modules/card.py +0 -0
  185. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/cards/card_modules/chevron/__init__.py +0 -0
  186. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/cards/card_modules/chevron/main.py +0 -0
  187. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/cards/card_modules/chevron/metadata.py +0 -0
  188. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/cards/card_modules/chevron/renderer.py +0 -0
  189. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/cards/card_modules/chevron/tokenizer.py +0 -0
  190. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/cards/card_modules/components.py +0 -0
  191. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/cards/card_modules/convert_to_native_type.py +0 -0
  192. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/cards/card_modules/main.js +0 -0
  193. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/cards/card_modules/renderer_tools.py +0 -0
  194. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/cards/card_modules/test_cards.py +0 -0
  195. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/cards/card_resolver.py +0 -0
  196. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/cards/card_server.py +0 -0
  197. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/cards/card_viewer/viewer.html +0 -0
  198. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/cards/component_serializer.py +0 -0
  199. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/cards/exception.py +0 -0
  200. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/catch_decorator.py +0 -0
  201. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/datastores/__init__.py +0 -0
  202. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/datastores/gs_storage.py +0 -0
  203. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/datastores/local_storage.py +0 -0
  204. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/datastores/s3_storage.py +0 -0
  205. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/datatools/__init__.py +0 -0
  206. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/datatools/local.py +0 -0
  207. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/datatools/s3/__init__.py +0 -0
  208. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/datatools/s3/s3op.py +0 -0
  209. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/datatools/s3/s3tail.py +0 -0
  210. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/datatools/s3/s3util.py +0 -0
  211. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/debug_logger.py +0 -0
  212. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/debug_monitor.py +0 -0
  213. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/env_escape/client.py +0 -0
  214. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/env_escape/client_modules.py +0 -0
  215. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/env_escape/communication/__init__.py +0 -0
  216. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/env_escape/communication/bytestream.py +0 -0
  217. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/env_escape/communication/channel.py +0 -0
  218. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/env_escape/communication/socket_bytestream.py +0 -0
  219. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/env_escape/communication/utils.py +0 -0
  220. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/env_escape/configurations/emulate_test_lib/__init__.py +0 -0
  221. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/env_escape/configurations/emulate_test_lib/overrides.py +0 -0
  222. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/env_escape/configurations/emulate_test_lib/server_mappings.py +0 -0
  223. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/env_escape/configurations/test_lib_impl/__init__.py +0 -0
  224. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/env_escape/configurations/test_lib_impl/test_lib.py +0 -0
  225. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/env_escape/consts.py +0 -0
  226. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/env_escape/data_transferer.py +0 -0
  227. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/env_escape/exception_transferer.py +0 -0
  228. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/env_escape/override_decorators.py +0 -0
  229. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/env_escape/server.py +0 -0
  230. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/env_escape/stub.py +0 -0
  231. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/env_escape/utils.py +0 -0
  232. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/environment_decorator.py +0 -0
  233. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/events_decorator.py +0 -0
  234. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/frameworks/__init__.py +0 -0
  235. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/frameworks/pytorch.py +0 -0
  236. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/gcp/__init__.py +0 -0
  237. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/gcp/gcp_secret_manager_secrets_provider.py +0 -0
  238. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/gcp/gs_exceptions.py +0 -0
  239. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/gcp/gs_storage_client_factory.py +0 -0
  240. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/gcp/gs_tail.py +0 -0
  241. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/gcp/gs_utils.py +0 -0
  242. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/gcp/includefile_support.py +0 -0
  243. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/kubernetes/__init__.py +0 -0
  244. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/kubernetes/kubernetes.py +0 -0
  245. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/kubernetes/kubernetes_cli.py +0 -0
  246. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/kubernetes/kubernetes_client.py +0 -0
  247. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/kubernetes/kubernetes_job.py +0 -0
  248. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/metadata/__init__.py +0 -0
  249. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/metadata/local.py +0 -0
  250. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/metadata/service.py +0 -0
  251. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/package_cli.py +0 -0
  252. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/parallel_decorator.py +0 -0
  253. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/project_decorator.py +0 -0
  254. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/pypi/__init__.py +0 -0
  255. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/pypi/bootstrap.py +0 -0
  256. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/pypi/conda_decorator.py +0 -0
  257. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/pypi/micromamba.py +0 -0
  258. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/pypi/pip.py +0 -0
  259. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/pypi/pypi_decorator.py +0 -0
  260. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/pypi/pypi_environment.py +0 -0
  261. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/pypi/utils.py +0 -0
  262. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/resources_decorator.py +0 -0
  263. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/retry_decorator.py +0 -0
  264. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/secrets/__init__.py +0 -0
  265. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/secrets/inline_secrets_provider.py +0 -0
  266. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/secrets/secrets_decorator.py +0 -0
  267. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/storage_executor.py +0 -0
  268. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/tag_cli.py +0 -0
  269. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/test_unbounded_foreach_decorator.py +0 -0
  270. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/plugins/timeout_decorator.py +0 -0
  271. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/procpoll.py +0 -0
  272. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/py.typed +0 -0
  273. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/pylint_wrapper.py +0 -0
  274. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/runtime.py +0 -0
  275. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/sidecar/__init__.py +0 -0
  276. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/sidecar/sidecar.py +0 -0
  277. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/sidecar/sidecar_messages.py +0 -0
  278. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/sidecar/sidecar_subprocess.py +0 -0
  279. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/sidecar/sidecar_worker.py +0 -0
  280. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/tagging_util.py +0 -0
  281. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/task.py +0 -0
  282. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/tracing/__init__.py +0 -0
  283. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/tracing/propagator.py +0 -0
  284. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/tracing/span_exporter.py +0 -0
  285. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/tracing/tracing_modules.py +0 -0
  286. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/tutorials/00-helloworld/README.md +0 -0
  287. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/tutorials/00-helloworld/helloworld.py +0 -0
  288. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/tutorials/01-playlist/README.md +0 -0
  289. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/tutorials/01-playlist/movies.csv +0 -0
  290. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/tutorials/01-playlist/playlist.ipynb +0 -0
  291. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/tutorials/01-playlist/playlist.py +0 -0
  292. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/tutorials/02-statistics/README.md +0 -0
  293. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/tutorials/02-statistics/movies.csv +0 -0
  294. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/tutorials/02-statistics/stats.ipynb +0 -0
  295. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/tutorials/02-statistics/stats.py +0 -0
  296. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/tutorials/03-playlist-redux/README.md +0 -0
  297. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/tutorials/03-playlist-redux/playlist.py +0 -0
  298. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/tutorials/04-playlist-plus/README.md +0 -0
  299. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/tutorials/04-playlist-plus/playlist.py +0 -0
  300. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/tutorials/05-hello-cloud/README.md +0 -0
  301. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/tutorials/05-hello-cloud/hello-cloud.ipynb +0 -0
  302. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/tutorials/05-hello-cloud/hello-cloud.py +0 -0
  303. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/tutorials/06-statistics-redux/README.md +0 -0
  304. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/tutorials/06-statistics-redux/stats.ipynb +0 -0
  305. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/tutorials/07-worldview/README.md +0 -0
  306. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/tutorials/07-worldview/worldview.ipynb +0 -0
  307. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/tutorials/08-autopilot/README.md +0 -0
  308. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/tutorials/08-autopilot/autopilot.ipynb +0 -0
  309. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/unbounded_foreach.py +0 -0
  310. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/util.py +0 -0
  311. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/metaflow/vendor.py +0 -0
  312. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/ob_metaflow.egg-info/dependency_links.txt +0 -0
  313. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/ob_metaflow.egg-info/entry_points.txt +0 -0
  314. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/ob_metaflow.egg-info/top_level.txt +0 -0
  315. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/setup.cfg +0 -0
  316. {ob_metaflow-2.11.10.3 → ob_metaflow-2.11.14.1}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ob-metaflow
3
- Version: 2.11.10.3
3
+ Version: 2.11.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: ob-metaflow-stubs==2.11.10.3; extra == "stubs"
15
+ Requires-Dist: ob-metaflow-stubs==2.11.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
 
@@ -326,6 +326,10 @@ KUBERNETES_PORT = from_conf("KUBERNETES_PORT", None)
326
326
  KUBERNETES_SHARED_MEMORY = from_conf("KUBERNETES_SHARED_MEMORY", None)
327
327
  # Default port number to open on the pods
328
328
  KUBERNETES_PORT = from_conf("KUBERNETES_PORT", None)
329
+ # Default kubernetes resource requests for CPU, memory and disk
330
+ KUBERNETES_CPU = from_conf("KUBERNETES_CPU", None)
331
+ KUBERNETES_MEMORY = from_conf("KUBERNETES_MEMORY", None)
332
+ KUBERNETES_DISK = from_conf("KUBERNETES_DISK", None)
329
333
 
330
334
 
331
335
  ARGO_WORKFLOWS_KUBERNETES_SECRETS = from_conf("ARGO_WORKFLOWS_KUBERNETES_SECRETS", "")
@@ -376,6 +380,12 @@ CONDA_PACKAGE_GSROOT = from_conf("CONDA_PACKAGE_GSROOT")
376
380
  # should result in an appreciable speedup in flow environment initialization.
377
381
  CONDA_DEPENDENCY_RESOLVER = from_conf("CONDA_DEPENDENCY_RESOLVER", "conda")
378
382
 
383
+ ###
384
+ # Escape hatch configuration
385
+ ###
386
+ # Print out warning if escape hatch is not used for the target packages
387
+ ESCAPE_HATCH_WARNING = from_conf("ESCAPE_HATCH_WARNING", True)
388
+
379
389
  ###
380
390
  # Debug configuration
381
391
  ###
@@ -836,7 +836,9 @@ class ArgoWorkflows(object):
836
836
 
837
837
  # Visit every node and yield the uber DAGTemplate(s).
838
838
  def _dag_templates(self):
839
- def _visit(node, exit_node=None, templates=None, dag_tasks=None):
839
+ def _visit(
840
+ node, exit_node=None, templates=None, dag_tasks=None, parent_foreach=None
841
+ ):
840
842
  if node.parallel_foreach:
841
843
  raise ArgoWorkflowsException(
842
844
  "Deploying flows with @parallel decorator(s) "
@@ -889,6 +891,37 @@ class ArgoWorkflows(object):
889
891
  )
890
892
  )
891
893
  ]
894
+ # NOTE: Due to limitations with Argo Workflows Parameter size we
895
+ # can not pass arbitrarily large lists of task id's to join tasks.
896
+ # Instead we ensure that task id's for foreach tasks can be
897
+ # deduced deterministically and pass the relevant information to
898
+ # the join task.
899
+ #
900
+ # We need to add the split-index and root-input-path for the last
901
+ # step in any foreach scope and use these to generate the task id,
902
+ # as the join step uses the root and the cardinality of the
903
+ # foreach scope to generate the required id's.
904
+ if (
905
+ node.is_inside_foreach
906
+ and self.graph[node.out_funcs[0]].type == "join"
907
+ ):
908
+ if any(
909
+ self.graph[parent].matching_join
910
+ == self.graph[node.out_funcs[0]].name
911
+ and self.graph[parent].type == "foreach"
912
+ for parent in self.graph[node.out_funcs[0]].split_parents
913
+ ):
914
+ parameters.extend(
915
+ [
916
+ Parameter("split-index").value(
917
+ "{{inputs.parameters.split-index}}"
918
+ ),
919
+ Parameter("root-input-path").value(
920
+ "{{inputs.parameters.input-paths}}"
921
+ ),
922
+ ]
923
+ )
924
+
892
925
  dag_task = (
893
926
  DAGTask(self._sanitize(node.name))
894
927
  .dependencies(
@@ -909,9 +942,19 @@ class ArgoWorkflows(object):
909
942
  # For split nodes traverse all the children
910
943
  if node.type == "split":
911
944
  for n in node.out_funcs:
912
- _visit(self.graph[n], node.matching_join, templates, dag_tasks)
945
+ _visit(
946
+ self.graph[n],
947
+ node.matching_join,
948
+ templates,
949
+ dag_tasks,
950
+ parent_foreach,
951
+ )
913
952
  return _visit(
914
- self.graph[node.matching_join], exit_node, templates, dag_tasks
953
+ self.graph[node.matching_join],
954
+ exit_node,
955
+ templates,
956
+ dag_tasks,
957
+ parent_foreach,
915
958
  )
916
959
  # For foreach nodes generate a new sub DAGTemplate
917
960
  elif node.type == "foreach":
@@ -935,6 +978,16 @@ class ArgoWorkflows(object):
935
978
  ),
936
979
  Parameter("split-index").value("{{item}}"),
937
980
  ]
981
+ + (
982
+ [
983
+ Parameter("root-input-path").value(
984
+ "argo-{{workflow.name}}/%s/{{tasks.%s.outputs.parameters.task-id}}"
985
+ % (node.name, self._sanitize(node.name))
986
+ ),
987
+ ]
988
+ if parent_foreach
989
+ else []
990
+ )
938
991
  )
939
992
  )
940
993
  .with_param(
@@ -944,13 +997,18 @@ class ArgoWorkflows(object):
944
997
  )
945
998
  dag_tasks.append(foreach_task)
946
999
  templates, dag_tasks_1 = _visit(
947
- self.graph[node.out_funcs[0]], node.matching_join, templates, []
1000
+ self.graph[node.out_funcs[0]],
1001
+ node.matching_join,
1002
+ templates,
1003
+ [],
1004
+ node.name,
948
1005
  )
949
1006
  templates.append(
950
1007
  Template(foreach_template_name)
951
1008
  .inputs(
952
1009
  Inputs().parameters(
953
1010
  [Parameter("input-paths"), Parameter("split-index")]
1011
+ + ([Parameter("root-input-path")] if parent_foreach else [])
954
1012
  )
955
1013
  )
956
1014
  .outputs(
@@ -977,13 +1035,26 @@ class ArgoWorkflows(object):
977
1035
  Arguments().parameters(
978
1036
  [
979
1037
  Parameter("input-paths").value(
980
- "argo-{{workflow.name}}/%s/{{tasks.%s.outputs.parameters}}"
981
- % (
982
- self.graph[node.matching_join].in_funcs[-1],
983
- foreach_template_name,
984
- )
985
- )
1038
+ "argo-{{workflow.name}}/%s/{{tasks.%s.outputs.parameters.task-id}}"
1039
+ % (node.name, self._sanitize(node.name))
1040
+ ),
1041
+ Parameter("split-cardinality").value(
1042
+ "{{tasks.%s.outputs.parameters.split-cardinality}}"
1043
+ % self._sanitize(node.name)
1044
+ ),
986
1045
  ]
1046
+ + (
1047
+ [
1048
+ Parameter("split-index").value(
1049
+ "{{inputs.parameters.split-index}}"
1050
+ ),
1051
+ Parameter("root-input-path").value(
1052
+ "{{inputs.parameters.input-paths}}"
1053
+ ),
1054
+ ]
1055
+ if parent_foreach
1056
+ else []
1057
+ )
987
1058
  )
988
1059
  )
989
1060
  )
@@ -993,11 +1064,16 @@ class ArgoWorkflows(object):
993
1064
  exit_node,
994
1065
  templates,
995
1066
  dag_tasks,
1067
+ parent_foreach,
996
1068
  )
997
1069
  # For linear nodes continue traversing to the next node
998
1070
  if node.type in ("linear", "join", "start"):
999
1071
  return _visit(
1000
- self.graph[node.out_funcs[0]], exit_node, templates, dag_tasks
1072
+ self.graph[node.out_funcs[0]],
1073
+ exit_node,
1074
+ templates,
1075
+ dag_tasks,
1076
+ parent_foreach,
1001
1077
  )
1002
1078
  else:
1003
1079
  raise ArgoWorkflowsException(
@@ -1041,17 +1117,42 @@ class ArgoWorkflows(object):
1041
1117
  # (modulo retry suffix) on Argo Workflows but that doesn't seem feasible
1042
1118
  # right now.
1043
1119
 
1044
- task_str = node.name + "-{{workflow.creationTimestamp}}"
1045
- # The input paths might be quite large for foreach joins,
1046
- # so we need to take care not to unnecessarily repeat these in the scripts due to a template max size limit with Argo.
1047
- # Note: We inline a Python script here because jq might not be present, and bundling this as an utility will not work
1048
- # as the metaflow module initializes only after this line.
1049
- # read input-paths directly from ARGO_TEMPLATE environment variable.
1050
- input_paths_expr = """export INPUT_PATHS=$(python -c \\"import sys, os, json; template = json.loads(os.environ['ARGO_TEMPLATE']); input_paths = next((param['value'] for param in template.get('inputs', {'parameters': []})['parameters'] if param['name'] == 'input-paths'), None); sys.stdout.write(input_paths if input_paths else '')\\")"""
1120
+ task_idx = ""
1121
+ input_paths = ""
1122
+ root_input = None
1123
+ # export input_paths as it is used multiple times in the container script
1124
+ # and we do not want to repeat the values.
1125
+ input_paths_expr = "export INPUT_PATHS=''"
1051
1126
  if node.name != "start":
1052
- task_str += "-$(echo $INPUT_PATHS)"
1127
+ input_paths_expr = (
1128
+ "export INPUT_PATHS={{inputs.parameters.input-paths}}"
1129
+ )
1130
+ input_paths = "$(echo $INPUT_PATHS)"
1053
1131
  if any(self.graph[n].type == "foreach" for n in node.in_funcs):
1054
- task_str += "-{{inputs.parameters.split-index}}"
1132
+ task_idx = "{{inputs.parameters.split-index}}"
1133
+ if node.is_inside_foreach and self.graph[node.out_funcs[0]].type == "join":
1134
+ if any(
1135
+ self.graph[parent].matching_join
1136
+ == self.graph[node.out_funcs[0]].name
1137
+ for parent in self.graph[node.out_funcs[0]].split_parents
1138
+ if self.graph[parent].type == "foreach"
1139
+ ) and any(not self.graph[f].type == "foreach" for f in node.in_funcs):
1140
+ # we need to propagate the split-index and root-input-path info for
1141
+ # the last step inside a foreach for correctly joining nested
1142
+ # foreaches
1143
+ task_idx = "{{inputs.parameters.split-index}}"
1144
+ root_input = "{{inputs.parameters.root-input-path}}"
1145
+
1146
+ # Task string to be hashed into an ID
1147
+ task_str = "-".join(
1148
+ [
1149
+ node.name,
1150
+ "{{workflow.creationTimestamp}}",
1151
+ root_input or input_paths,
1152
+ task_idx,
1153
+ ]
1154
+ )
1155
+
1055
1156
  # Generated task_ids need to be non-numeric - see register_task_id in
1056
1157
  # service.py. We do so by prefixing `t-`
1057
1158
  task_id_expr = (
@@ -1112,8 +1213,6 @@ class ArgoWorkflows(object):
1112
1213
  node.name, self.flow_datastore.TYPE
1113
1214
  )
1114
1215
 
1115
- input_paths = "$(echo $INPUT_PATHS)"
1116
-
1117
1216
  top_opts_dict = {
1118
1217
  "with": [
1119
1218
  decorator.make_decorator_spec()
@@ -1182,10 +1281,16 @@ class ArgoWorkflows(object):
1182
1281
  node.type == "join"
1183
1282
  and self.graph[node.split_parents[-1]].type == "foreach"
1184
1283
  ):
1185
- # Set aggregated input-paths for a foreach-join
1284
+ # Set aggregated input-paths for a for-each join
1285
+ foreach_step = next(
1286
+ n for n in node.in_funcs if self.graph[n].is_inside_foreach
1287
+ )
1186
1288
  input_paths = (
1187
- "$(python -m metaflow.plugins.argo.process_input_paths %s)"
1188
- % input_paths
1289
+ "$(python -m metaflow.plugins.argo.generate_input_paths %s {{workflow.creationTimestamp}} %s {{inputs.parameters.split-cardinality}})"
1290
+ % (
1291
+ foreach_step,
1292
+ input_paths,
1293
+ )
1189
1294
  )
1190
1295
  step = [
1191
1296
  "step",
@@ -1352,13 +1457,37 @@ class ArgoWorkflows(object):
1352
1457
  # input. Analogously, if the node under consideration is a foreach
1353
1458
  # node, then we emit split cardinality as an extra output. I would like
1354
1459
  # to thank the designers of Argo Workflows for making this so
1355
- # straightforward!
1460
+ # straightforward! Things become a bit more complicated to support very
1461
+ # wide foreaches where we have to resort to passing a root-input-path
1462
+ # so that we can compute the task ids for each parent task of a for-each
1463
+ # join task deterministically inside the join task without resorting to
1464
+ # passing a rather long list of (albiet compressed)
1356
1465
  inputs = []
1357
1466
  if node.name != "start":
1358
1467
  inputs.append(Parameter("input-paths"))
1359
1468
  if any(self.graph[n].type == "foreach" for n in node.in_funcs):
1360
1469
  # Fetch split-index from parent
1361
1470
  inputs.append(Parameter("split-index"))
1471
+ if (
1472
+ node.type == "join"
1473
+ and self.graph[node.split_parents[-1]].type == "foreach"
1474
+ ):
1475
+ # append this only for joins of foreaches, not static splits
1476
+ inputs.append(Parameter("split-cardinality"))
1477
+ if node.is_inside_foreach and self.graph[node.out_funcs[0]].type == "join":
1478
+ if any(
1479
+ self.graph[parent].matching_join
1480
+ == self.graph[node.out_funcs[0]].name
1481
+ for parent in self.graph[node.out_funcs[0]].split_parents
1482
+ if self.graph[parent].type == "foreach"
1483
+ ) and any(not self.graph[f].type == "foreach" for f in node.in_funcs):
1484
+ # we need to propagate the split-index and root-input-path info for
1485
+ # the last step inside a foreach for correctly joining nested
1486
+ # foreaches
1487
+ if not any(self.graph[n].type == "foreach" for n in node.in_funcs):
1488
+ # Don't add duplicate split index parameters.
1489
+ inputs.append(Parameter("split-index"))
1490
+ inputs.append(Parameter("root-input-path"))
1362
1491
 
1363
1492
  outputs = []
1364
1493
  if node.name != "end":
@@ -1368,6 +1497,11 @@ class ArgoWorkflows(object):
1368
1497
  outputs.append(
1369
1498
  Parameter("num-splits").valueFrom({"path": "/mnt/out/splits"})
1370
1499
  )
1500
+ outputs.append(
1501
+ Parameter("split-cardinality").valueFrom(
1502
+ {"path": "/mnt/out/split_cardinality"}
1503
+ )
1504
+ )
1371
1505
 
1372
1506
  # It makes no sense to set env vars to None (shows up as "None" string)
1373
1507
  # Also we skip some env vars (e.g. in case we want to pull them from KUBERNETES_SECRETS)
@@ -102,6 +102,9 @@ class ArgoWorkflowsInternalDecorator(StepDecorator):
102
102
  if graph[step_name].type == "foreach":
103
103
  with open("/mnt/out/splits", "w") as file:
104
104
  json.dump(list(range(flow._foreach_num_splits)), file)
105
+ with open("/mnt/out/split_cardinality", "w") as file:
106
+ json.dump(flow._foreach_num_splits, file)
107
+
105
108
  # Unfortunately, we can't always use pod names as task-ids since the pod names
106
109
  # are not static across retries. We write the task-id to a file that is read
107
110
  # by the next task here.
@@ -0,0 +1,23 @@
1
+ import sys
2
+ from hashlib import md5
3
+
4
+
5
+ def generate_input_paths(step_name, timestamp, input_paths, split_cardinality):
6
+ # => run_id/step/:foo,bar
7
+ run_id = input_paths.split("/")[0]
8
+ foreach_base_id = "{}-{}-{}".format(step_name, timestamp, input_paths)
9
+
10
+ ids = [_generate_task_id(foreach_base_id, i) for i in range(int(split_cardinality))]
11
+ return "{}/{}/:{}".format(run_id, step_name, ",".join(ids))
12
+
13
+
14
+ def _generate_task_id(base, idx):
15
+ # For foreach splits generate the expected input-paths based on split_cardinality and base_id.
16
+ # newline required at the end due to 'echo' appending one in the shell side task_id creation.
17
+ task_str = "%s-%s\n" % (base, idx)
18
+ hash = md5(task_str.encode("utf-8")).hexdigest()[-8:]
19
+ return "t-" + hash
20
+
21
+
22
+ if __name__ == "__main__":
23
+ print(generate_input_paths(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4]))
@@ -20,14 +20,30 @@ def get_ec2_instance_metadata():
20
20
  # access to this end-point might be blocked on AWS and not available
21
21
  # for non-AWS deployments.
22
22
  # https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-identity-documents.html
23
+ # Set a very aggressive timeout, as the communication is happening in the same subnet,
24
+ # there should not be any significant delay in the response.
25
+ # Having a long default timeout here introduces unnecessary delay in launching tasks when the
26
+ # instance is unreachable.
27
+ timeout = (1, 10)
28
+ token = None
23
29
  try:
24
- # Set a very aggressive timeout, as the communication is happening in the same subnet,
25
- # there should not be any significant delay in the response.
26
- # Having a long default timeout here introduces unnecessary delay in launching tasks when the
27
- # instance is unreachable.
30
+ # Try to get an IMDSv2 token.
31
+ token = requests.put(
32
+ url="http://169.254.169.254/latest/api/token",
33
+ headers={"X-aws-ec2-metadata-token-ttl-seconds": 100},
34
+ timeout=timeout,
35
+ ).text
36
+ except:
37
+ pass
38
+ try:
39
+ headers = {}
40
+ # Add IMDSv2 token if available, else fall back to IMDSv1.
41
+ if token:
42
+ headers["X-aws-ec2-metadata-token"] = token
28
43
  instance_meta = requests.get(
29
44
  url="http://169.254.169.254/latest/dynamic/instance-identity/document",
30
- timeout=(1, 10),
45
+ headers=headers,
46
+ timeout=timeout,
31
47
  ).json()
32
48
  meta["ec2-instance-id"] = instance_meta.get("instanceId")
33
49
  meta["ec2-instance-type"] = instance_meta.get("instanceType")
@@ -439,7 +439,7 @@ class StepFunctions(object):
439
439
  JSONItemReader()
440
440
  .resource("arn:aws:states:::s3:getObject")
441
441
  .parameter("Bucket.$", "$.Body.DestinationBucket")
442
- .parameter("Key.$", "$.Body.ResultFiles.SUCCEEDED.[0].Key")
442
+ .parameter("Key.$", "$.Body.ResultFiles.SUCCEEDED[0].Key")
443
443
  )
444
444
  .output_path("$.[0]")
445
445
  )
@@ -145,12 +145,19 @@ class _AzureRootClient(object):
145
145
  # It is good enough 99.9% of the time.
146
146
  # Depending on ResourceExistsError is more costly, though
147
147
  # we are still going to handle it right.
148
+
149
+ # The default timeout in the Azure blobstore python SDK
150
+ # doesn't work well on slower network connections and largish
151
+ # files. Hence increasing the connection_timeout below.
152
+ # For more details, see this:
153
+ # https://github.com/Azure/azure-sdk-for-python/issues/23232
148
154
  if overwrite or not blob.exists():
149
155
  blob.upload_blob(
150
156
  byte_stream,
151
157
  overwrite=overwrite,
152
158
  metadata=metadata_to_upload,
153
159
  max_concurrency=AZURE_STORAGE_UPLOAD_MAX_CONCURRENCY,
160
+ connection_timeout=14400,
154
161
  )
155
162
  except ResourceExistsError:
156
163
  if overwrite:
@@ -1626,6 +1626,7 @@ class S3(object):
1626
1626
  # Run the operation.
1627
1627
  env = os.environ.copy()
1628
1628
  tracing.inject_tracing_vars(env)
1629
+ env["METAFLOW_ESCAPE_HATCH_WARNING"] = "False"
1629
1630
  stdout = subprocess.check_output(
1630
1631
  cmdline + addl_cmdline,
1631
1632
  cwd=self._tmpdir,
@@ -110,6 +110,7 @@ import importlib
110
110
  import os
111
111
  import sys
112
112
  from metaflow.plugins.env_escape.client_modules import ModuleImporter
113
+ from metaflow.metaflow_config import ESCAPE_HATCH_WARNING
113
114
 
114
115
  # This is a trampoline file to ensure that the ModuleImporter to handle the emulated
115
116
  # modules gets properly loaded. If multiple modules are emulated by a single configuration
@@ -146,7 +147,7 @@ def load():
146
147
  # print("Env escape using executable {python_executable}")
147
148
  else:
148
149
  # Inverse logic as above here.
149
- if sys.executable != "{python_executable}":
150
+ if sys.executable != "{python_executable}" and ESCAPE_HATCH_WARNING:
150
151
  # We use the package locally and warn user.
151
152
  print("Not using environment escape for '%s' as module present" % prefix)
152
153
  # In both cases, we don't load our loader since
@@ -24,6 +24,9 @@ from metaflow.metaflow_config import (
24
24
  KUBERNETES_PORT,
25
25
  KUBERNETES_SHARED_MEMORY,
26
26
  KUBERNETES_PORT,
27
+ KUBERNETES_CPU,
28
+ KUBERNETES_MEMORY,
29
+ KUBERNETES_DISK,
27
30
  )
28
31
  from metaflow.plugins.resources_decorator import ResourcesDecorator
29
32
  from metaflow.plugins.timeout_decorator import get_run_time_limit_for_task
@@ -179,6 +182,15 @@ class KubernetesDecorator(StepDecorator):
179
182
  except (NameError, ImportError):
180
183
  pass
181
184
 
185
+ # parse the CPU, memory, disk, values from the KUBERNETES_ environment variable (you would need to export the METAFLOW_KUBERNETES_CPU, METAFLOW_KUBERNETES_MEMORY and/or METAFLOW_KUBERNTES_DISK environment variable with the desired values before running the flow)
186
+ # find the values from the environment variables, then validate if the values are still the default ones, if so, then replace them with the values from the environment variables (otherwise, keep the values from the decorator)
187
+ if self.attributes["cpu"] == self.defaults["cpu"] and KUBERNETES_CPU:
188
+ self.attributes["cpu"] = KUBERNETES_CPU
189
+ if self.attributes["memory"] == self.defaults["memory"] and KUBERNETES_MEMORY:
190
+ self.attributes["memory"] = KUBERNETES_MEMORY
191
+ if self.attributes["disk"] == self.defaults["disk"] and KUBERNETES_DISK:
192
+ self.attributes["disk"] = KUBERNETES_DISK
193
+
182
194
  # If no docker image is explicitly specified, impute a default image.
183
195
  if not self.attributes["image"]:
184
196
  # If metaflow-config specifies a docker image, just use that.
@@ -266,7 +266,9 @@ class CondaEnvironment(MetaflowEnvironment):
266
266
  # Resolve `linux-64` Conda environments if @batch or @kubernetes are in play
267
267
  target_platform = conda_platform()
268
268
  for decorator in step.decorators:
269
- if decorator.name in ["batch", "kubernetes"]:
269
+ # TODO: rather than relying on decorator names, rely on attributes
270
+ # to make them extensible.
271
+ if decorator.name in ["batch", "kubernetes", "nvidia"]:
270
272
  # TODO: Support arm architectures
271
273
  target_platform = "linux-64"
272
274
  break
@@ -0,0 +1 @@
1
+ metaflow_version = "2.11.14.1"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ob-metaflow
3
- Version: 2.11.10.3
3
+ Version: 2.11.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: ob-metaflow-stubs==2.11.10.3; extra == "stubs"
15
+ Requires-Dist: ob-metaflow-stubs==2.11.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
 
@@ -157,7 +157,7 @@ metaflow/plugins/argo/argo_events.py
157
157
  metaflow/plugins/argo/argo_workflows.py
158
158
  metaflow/plugins/argo/argo_workflows_cli.py
159
159
  metaflow/plugins/argo/argo_workflows_decorator.py
160
- metaflow/plugins/argo/process_input_paths.py
160
+ metaflow/plugins/argo/generate_input_paths.py
161
161
  metaflow/plugins/aws/__init__.py
162
162
  metaflow/plugins/aws/aws_client.py
163
163
  metaflow/plugins/aws/aws_utils.py
@@ -4,4 +4,4 @@ pylint
4
4
  kubernetes
5
5
 
6
6
  [stubs]
7
- ob-metaflow-stubs==2.11.10.3
7
+ ob-metaflow-stubs==2.11.14.1
@@ -1,19 +0,0 @@
1
- import re
2
- import sys
3
-
4
-
5
- def process_input_paths(input_paths):
6
- # Convert Argo Workflows provided input-paths string to something that Metaflow
7
- # understands
8
- #
9
- # flow/step/[{task-id:foo},{task-id:bar}] => flow/step/:foo,bar
10
-
11
- flow, run_id, task_ids = input_paths.split("/")
12
- task_ids = re.sub("[\[\]{}]", "", task_ids)
13
- task_ids = task_ids.split(",")
14
- tasks = [t.split(":")[1].strip('"') for t in task_ids]
15
- return "{}/{}/:{}".format(flow, run_id, ",".join(tasks))
16
-
17
-
18
- if __name__ == "__main__":
19
- print(process_input_paths(sys.argv[1]))
@@ -1 +0,0 @@
1
- metaflow_version = "2.11.10.3"
File without changes