metaflow 2.18.0__tar.gz → 2.18.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.
Files changed (447) hide show
  1. {metaflow-2.18.0/metaflow.egg-info → metaflow-2.18.1}/PKG-INFO +2 -2
  2. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/metaflow_config.py +2 -0
  3. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/argo/argo_workflows_cli.py +7 -1
  4. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/aws_utils.py +32 -0
  5. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/batch/batch.py +8 -0
  6. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/batch/batch_cli.py +21 -3
  7. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/batch/batch_decorator.py +44 -1
  8. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/step_functions/step_functions.py +6 -1
  9. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/step_functions/step_functions_cli.py +22 -0
  10. metaflow-2.18.1/metaflow/plugins/cards/card_modules/bundle.css +1 -0
  11. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_modules/main.js +25 -25
  12. metaflow-2.18.1/metaflow/version.py +1 -0
  13. {metaflow-2.18.0 → metaflow-2.18.1/metaflow.egg-info}/PKG-INFO +2 -2
  14. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow.egg-info/requires.txt +1 -1
  15. metaflow-2.18.0/metaflow/plugins/cards/card_modules/bundle.css +0 -1
  16. metaflow-2.18.0/metaflow/version.py +0 -1
  17. {metaflow-2.18.0 → metaflow-2.18.1}/LICENSE +0 -0
  18. {metaflow-2.18.0 → metaflow-2.18.1}/MANIFEST.in +0 -0
  19. {metaflow-2.18.0 → metaflow-2.18.1}/README.md +0 -0
  20. {metaflow-2.18.0 → metaflow-2.18.1}/devtools/Makefile +0 -0
  21. {metaflow-2.18.0 → metaflow-2.18.1}/devtools/Tiltfile +0 -0
  22. {metaflow-2.18.0 → metaflow-2.18.1}/devtools/pick_services.sh +0 -0
  23. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/R.py +0 -0
  24. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/__init__.py +0 -0
  25. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/__init__.py +0 -0
  26. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/click/__init__.py +0 -0
  27. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/click/_bashcomplete.py +0 -0
  28. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/click/_compat.py +0 -0
  29. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/click/_termui_impl.py +0 -0
  30. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/click/_textwrap.py +0 -0
  31. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/click/_unicodefun.py +0 -0
  32. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/click/_winconsole.py +0 -0
  33. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/click/core.py +0 -0
  34. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/click/decorators.py +0 -0
  35. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/click/exceptions.py +0 -0
  36. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/click/formatting.py +0 -0
  37. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/click/globals.py +0 -0
  38. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/click/parser.py +0 -0
  39. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/click/termui.py +0 -0
  40. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/click/testing.py +0 -0
  41. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/click/types.py +0 -0
  42. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/click/utils.py +0 -0
  43. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/imghdr/__init__.py +0 -0
  44. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/importlib_metadata/__init__.py +0 -0
  45. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/importlib_metadata/_adapters.py +0 -0
  46. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/importlib_metadata/_collections.py +0 -0
  47. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/importlib_metadata/_compat.py +0 -0
  48. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/importlib_metadata/_functools.py +0 -0
  49. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/importlib_metadata/_itertools.py +0 -0
  50. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/importlib_metadata/_meta.py +0 -0
  51. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/importlib_metadata/_text.py +0 -0
  52. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/importlib_metadata/py.typed +0 -0
  53. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/packaging/__init__.py +0 -0
  54. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/packaging/_elffile.py +0 -0
  55. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/packaging/_manylinux.py +0 -0
  56. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/packaging/_musllinux.py +0 -0
  57. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/packaging/_parser.py +0 -0
  58. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/packaging/_structures.py +0 -0
  59. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/packaging/_tokenizer.py +0 -0
  60. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/packaging/markers.py +0 -0
  61. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/packaging/py.typed +0 -0
  62. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/packaging/requirements.py +0 -0
  63. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/packaging/specifiers.py +0 -0
  64. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/packaging/tags.py +0 -0
  65. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/packaging/utils.py +0 -0
  66. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/packaging/version.py +0 -0
  67. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/typeguard/__init__.py +0 -0
  68. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/typeguard/_checkers.py +0 -0
  69. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/typeguard/_config.py +0 -0
  70. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/typeguard/_decorators.py +0 -0
  71. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/typeguard/_exceptions.py +0 -0
  72. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/typeguard/_functions.py +0 -0
  73. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/typeguard/_importhook.py +0 -0
  74. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/typeguard/_memo.py +0 -0
  75. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/typeguard/_pytest_plugin.py +0 -0
  76. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/typeguard/_suppression.py +0 -0
  77. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/typeguard/_transformer.py +0 -0
  78. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/typeguard/_union_transformer.py +0 -0
  79. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/typeguard/_utils.py +0 -0
  80. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/typeguard/py.typed +0 -0
  81. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/typing_extensions.py +0 -0
  82. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_6/__init__.py +0 -0
  83. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_6/importlib_metadata/__init__.py +0 -0
  84. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_6/importlib_metadata/_adapters.py +0 -0
  85. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_6/importlib_metadata/_collections.py +0 -0
  86. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_6/importlib_metadata/_compat.py +0 -0
  87. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_6/importlib_metadata/_functools.py +0 -0
  88. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_6/importlib_metadata/_itertools.py +0 -0
  89. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_6/importlib_metadata/_meta.py +0 -0
  90. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_6/importlib_metadata/_text.py +0 -0
  91. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_6/importlib_metadata/py.typed +0 -0
  92. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_6/typing_extensions.py +0 -0
  93. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_6/zipp.py +0 -0
  94. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/__init__.py +0 -0
  95. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/importlib_metadata/__init__.py +0 -0
  96. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/importlib_metadata/_adapters.py +0 -0
  97. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/importlib_metadata/_collections.py +0 -0
  98. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/importlib_metadata/_compat.py +0 -0
  99. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/importlib_metadata/_functools.py +0 -0
  100. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/importlib_metadata/_itertools.py +0 -0
  101. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/importlib_metadata/_meta.py +0 -0
  102. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/importlib_metadata/_text.py +0 -0
  103. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/importlib_metadata/py.typed +0 -0
  104. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/typeguard/__init__.py +0 -0
  105. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/typeguard/_checkers.py +0 -0
  106. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/typeguard/_config.py +0 -0
  107. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/typeguard/_decorators.py +0 -0
  108. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/typeguard/_exceptions.py +0 -0
  109. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/typeguard/_functions.py +0 -0
  110. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/typeguard/_importhook.py +0 -0
  111. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/typeguard/_memo.py +0 -0
  112. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/typeguard/_pytest_plugin.py +0 -0
  113. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/typeguard/_suppression.py +0 -0
  114. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/typeguard/_transformer.py +0 -0
  115. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/typeguard/_union_transformer.py +0 -0
  116. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/typeguard/_utils.py +0 -0
  117. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/typeguard/py.typed +0 -0
  118. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/typing_extensions.py +0 -0
  119. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/v3_7/zipp.py +0 -0
  120. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/yaml/__init__.py +0 -0
  121. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/yaml/composer.py +0 -0
  122. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/yaml/constructor.py +0 -0
  123. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/yaml/cyaml.py +0 -0
  124. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/yaml/dumper.py +0 -0
  125. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/yaml/emitter.py +0 -0
  126. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/yaml/error.py +0 -0
  127. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/yaml/events.py +0 -0
  128. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/yaml/loader.py +0 -0
  129. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/yaml/nodes.py +0 -0
  130. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/yaml/parser.py +0 -0
  131. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/yaml/reader.py +0 -0
  132. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/yaml/representer.py +0 -0
  133. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/yaml/resolver.py +0 -0
  134. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/yaml/scanner.py +0 -0
  135. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/yaml/serializer.py +0 -0
  136. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/yaml/tokens.py +0 -0
  137. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/_vendor/zipp.py +0 -0
  138. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cards.py +0 -0
  139. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cli.py +0 -0
  140. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cli_args.py +0 -0
  141. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cli_components/__init__.py +0 -0
  142. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cli_components/dump_cmd.py +0 -0
  143. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cli_components/init_cmd.py +0 -0
  144. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cli_components/run_cmds.py +0 -0
  145. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cli_components/step_cmd.py +0 -0
  146. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cli_components/utils.py +0 -0
  147. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/client/__init__.py +0 -0
  148. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/client/core.py +0 -0
  149. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/client/filecache.py +0 -0
  150. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/clone_util.py +0 -0
  151. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cmd/__init__.py +0 -0
  152. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cmd/code/__init__.py +0 -0
  153. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cmd/configure_cmd.py +0 -0
  154. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cmd/develop/__init__.py +0 -0
  155. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cmd/develop/stub_generator.py +0 -0
  156. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cmd/develop/stubs.py +0 -0
  157. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cmd/main_cli.py +0 -0
  158. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cmd/make_wrapper.py +0 -0
  159. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cmd/tutorials_cmd.py +0 -0
  160. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cmd/util.py +0 -0
  161. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/cmd_with_io.py +0 -0
  162. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/datastore/__init__.py +0 -0
  163. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/datastore/content_addressed_store.py +0 -0
  164. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/datastore/datastore_set.py +0 -0
  165. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/datastore/datastore_storage.py +0 -0
  166. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/datastore/exceptions.py +0 -0
  167. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/datastore/flow_datastore.py +0 -0
  168. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/datastore/inputs.py +0 -0
  169. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/datastore/task_datastore.py +0 -0
  170. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/debug.py +0 -0
  171. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/decorators.py +0 -0
  172. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/event_logger.py +0 -0
  173. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/events.py +0 -0
  174. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/exception.py +0 -0
  175. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/extension_support/__init__.py +0 -0
  176. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/extension_support/_empty_file.py +0 -0
  177. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/extension_support/cmd.py +0 -0
  178. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/extension_support/integrations.py +0 -0
  179. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/extension_support/plugins.py +0 -0
  180. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/flowspec.py +0 -0
  181. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/graph.py +0 -0
  182. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/includefile.py +0 -0
  183. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/integrations.py +0 -0
  184. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/lint.py +0 -0
  185. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/meta_files.py +0 -0
  186. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/metadata_provider/__init__.py +0 -0
  187. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/metadata_provider/heartbeat.py +0 -0
  188. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/metadata_provider/metadata.py +0 -0
  189. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/metadata_provider/util.py +0 -0
  190. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/metaflow_config_funcs.py +0 -0
  191. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/metaflow_current.py +0 -0
  192. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/metaflow_environment.py +0 -0
  193. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/metaflow_git.py +0 -0
  194. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/metaflow_profile.py +0 -0
  195. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/metaflow_version.py +0 -0
  196. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/mflog/__init__.py +0 -0
  197. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/mflog/mflog.py +0 -0
  198. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/mflog/save_logs.py +0 -0
  199. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/mflog/save_logs_periodically.py +0 -0
  200. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/mflog/tee.py +0 -0
  201. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/monitor.py +0 -0
  202. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/multicore_utils.py +0 -0
  203. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/package/__init__.py +0 -0
  204. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/packaging_sys/__init__.py +0 -0
  205. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/packaging_sys/backend.py +0 -0
  206. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/packaging_sys/distribution_support.py +0 -0
  207. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/packaging_sys/tar_backend.py +0 -0
  208. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/packaging_sys/utils.py +0 -0
  209. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/packaging_sys/v1.py +0 -0
  210. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/parameters.py +0 -0
  211. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/__init__.py +0 -0
  212. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/airflow/__init__.py +0 -0
  213. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/airflow/airflow.py +0 -0
  214. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/airflow/airflow_cli.py +0 -0
  215. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/airflow/airflow_decorator.py +0 -0
  216. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/airflow/airflow_utils.py +0 -0
  217. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/airflow/dag.py +0 -0
  218. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/airflow/exception.py +0 -0
  219. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/airflow/plumbing/__init__.py +0 -0
  220. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/airflow/plumbing/set_parameters.py +0 -0
  221. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/airflow/sensors/__init__.py +0 -0
  222. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/airflow/sensors/base_sensor.py +0 -0
  223. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/airflow/sensors/external_task_sensor.py +0 -0
  224. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/airflow/sensors/s3_sensor.py +0 -0
  225. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/argo/__init__.py +0 -0
  226. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/argo/argo_client.py +0 -0
  227. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/argo/argo_events.py +0 -0
  228. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/argo/argo_workflows.py +0 -0
  229. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/argo/argo_workflows_decorator.py +0 -0
  230. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/argo/argo_workflows_deployer.py +0 -0
  231. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/argo/argo_workflows_deployer_objects.py +0 -0
  232. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/argo/capture_error.py +0 -0
  233. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/argo/conditional_input_paths.py +0 -0
  234. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/argo/exit_hooks.py +0 -0
  235. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/argo/generate_input_paths.py +0 -0
  236. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/argo/jobset_input_paths.py +0 -0
  237. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/__init__.py +0 -0
  238. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/aws_client.py +0 -0
  239. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/batch/__init__.py +0 -0
  240. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/batch/batch_client.py +0 -0
  241. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/secrets_manager/__init__.py +0 -0
  242. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/secrets_manager/aws_secrets_manager_secrets_provider.py +0 -0
  243. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/step_functions/__init__.py +0 -0
  244. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/step_functions/dynamo_db_client.py +0 -0
  245. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/step_functions/event_bridge_client.py +0 -0
  246. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/step_functions/production_token.py +0 -0
  247. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/step_functions/schedule_decorator.py +0 -0
  248. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/step_functions/set_batch_environment.py +0 -0
  249. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/step_functions/step_functions_client.py +0 -0
  250. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/step_functions/step_functions_decorator.py +0 -0
  251. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/step_functions/step_functions_deployer.py +0 -0
  252. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/aws/step_functions/step_functions_deployer_objects.py +0 -0
  253. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/azure/__init__.py +0 -0
  254. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/azure/azure_credential.py +0 -0
  255. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/azure/azure_exceptions.py +0 -0
  256. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/azure/azure_secret_manager_secrets_provider.py +0 -0
  257. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/azure/azure_tail.py +0 -0
  258. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/azure/azure_utils.py +0 -0
  259. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/azure/blob_service_client_factory.py +0 -0
  260. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/azure/includefile_support.py +0 -0
  261. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/__init__.py +0 -0
  262. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_cli.py +0 -0
  263. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_client.py +0 -0
  264. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_creator.py +0 -0
  265. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_datastore.py +0 -0
  266. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_decorator.py +0 -0
  267. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_modules/__init__.py +0 -0
  268. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_modules/base.html +0 -0
  269. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_modules/basic.py +0 -0
  270. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_modules/card.py +0 -0
  271. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_modules/chevron/__init__.py +0 -0
  272. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_modules/chevron/main.py +0 -0
  273. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_modules/chevron/metadata.py +0 -0
  274. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_modules/chevron/renderer.py +0 -0
  275. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_modules/chevron/tokenizer.py +0 -0
  276. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_modules/components.py +0 -0
  277. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_modules/convert_to_native_type.py +0 -0
  278. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_modules/main.css +0 -0
  279. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_modules/renderer_tools.py +0 -0
  280. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_modules/test_cards.py +0 -0
  281. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_resolver.py +0 -0
  282. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_server.py +0 -0
  283. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/card_viewer/viewer.html +0 -0
  284. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/component_serializer.py +0 -0
  285. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/exception.py +0 -0
  286. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/cards/metadata.py +0 -0
  287. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/catch_decorator.py +0 -0
  288. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/datastores/__init__.py +0 -0
  289. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/datastores/azure_storage.py +0 -0
  290. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/datastores/gs_storage.py +0 -0
  291. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/datastores/local_storage.py +0 -0
  292. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/datastores/s3_storage.py +0 -0
  293. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/datatools/__init__.py +0 -0
  294. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/datatools/local.py +0 -0
  295. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/datatools/s3/__init__.py +0 -0
  296. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/datatools/s3/s3.py +0 -0
  297. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/datatools/s3/s3op.py +0 -0
  298. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/datatools/s3/s3tail.py +0 -0
  299. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/datatools/s3/s3util.py +0 -0
  300. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/debug_logger.py +0 -0
  301. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/debug_monitor.py +0 -0
  302. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/__init__.py +0 -0
  303. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/client.py +0 -0
  304. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/client_modules.py +0 -0
  305. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/communication/__init__.py +0 -0
  306. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/communication/bytestream.py +0 -0
  307. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/communication/channel.py +0 -0
  308. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/communication/socket_bytestream.py +0 -0
  309. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/communication/utils.py +0 -0
  310. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/configurations/emulate_test_lib/__init__.py +0 -0
  311. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/configurations/emulate_test_lib/overrides.py +0 -0
  312. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/configurations/emulate_test_lib/server_mappings.py +0 -0
  313. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/configurations/test_lib_impl/__init__.py +0 -0
  314. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/configurations/test_lib_impl/test_lib.py +0 -0
  315. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/consts.py +0 -0
  316. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/data_transferer.py +0 -0
  317. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/exception_transferer.py +0 -0
  318. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/override_decorators.py +0 -0
  319. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/server.py +0 -0
  320. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/stub.py +0 -0
  321. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/env_escape/utils.py +0 -0
  322. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/environment_decorator.py +0 -0
  323. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/events_decorator.py +0 -0
  324. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/exit_hook/__init__.py +0 -0
  325. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/exit_hook/exit_hook_decorator.py +0 -0
  326. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/exit_hook/exit_hook_script.py +0 -0
  327. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/frameworks/__init__.py +0 -0
  328. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/frameworks/pytorch.py +0 -0
  329. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/gcp/__init__.py +0 -0
  330. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/gcp/gcp_secret_manager_secrets_provider.py +0 -0
  331. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/gcp/gs_exceptions.py +0 -0
  332. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/gcp/gs_storage_client_factory.py +0 -0
  333. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/gcp/gs_tail.py +0 -0
  334. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/gcp/gs_utils.py +0 -0
  335. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/gcp/includefile_support.py +0 -0
  336. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/kubernetes/__init__.py +0 -0
  337. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/kubernetes/kube_utils.py +0 -0
  338. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/kubernetes/kubernetes.py +0 -0
  339. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/kubernetes/kubernetes_cli.py +0 -0
  340. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/kubernetes/kubernetes_client.py +0 -0
  341. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/kubernetes/kubernetes_decorator.py +0 -0
  342. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/kubernetes/kubernetes_job.py +0 -0
  343. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/kubernetes/kubernetes_jobsets.py +0 -0
  344. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/kubernetes/spot_metadata_cli.py +0 -0
  345. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/kubernetes/spot_monitor_sidecar.py +0 -0
  346. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/logs_cli.py +0 -0
  347. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/metadata_providers/__init__.py +0 -0
  348. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/metadata_providers/local.py +0 -0
  349. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/metadata_providers/service.py +0 -0
  350. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/package_cli.py +0 -0
  351. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/parallel_decorator.py +0 -0
  352. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/project_decorator.py +0 -0
  353. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/pypi/__init__.py +0 -0
  354. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/pypi/bootstrap.py +0 -0
  355. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/pypi/conda_decorator.py +0 -0
  356. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/pypi/conda_environment.py +0 -0
  357. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/pypi/micromamba.py +0 -0
  358. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/pypi/parsers.py +0 -0
  359. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/pypi/pip.py +0 -0
  360. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/pypi/pypi_decorator.py +0 -0
  361. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/pypi/pypi_environment.py +0 -0
  362. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/pypi/utils.py +0 -0
  363. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/resources_decorator.py +0 -0
  364. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/retry_decorator.py +0 -0
  365. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/secrets/__init__.py +0 -0
  366. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/secrets/inline_secrets_provider.py +0 -0
  367. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/secrets/secrets_decorator.py +0 -0
  368. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/secrets/secrets_func.py +0 -0
  369. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/secrets/secrets_spec.py +0 -0
  370. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/secrets/utils.py +0 -0
  371. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/storage_executor.py +0 -0
  372. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/tag_cli.py +0 -0
  373. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/test_unbounded_foreach_decorator.py +0 -0
  374. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/timeout_decorator.py +0 -0
  375. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/uv/__init__.py +0 -0
  376. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/uv/bootstrap.py +0 -0
  377. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/plugins/uv/uv_environment.py +0 -0
  378. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/procpoll.py +0 -0
  379. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/py.typed +0 -0
  380. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/pylint_wrapper.py +0 -0
  381. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/runner/__init__.py +0 -0
  382. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/runner/click_api.py +0 -0
  383. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/runner/deployer.py +0 -0
  384. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/runner/deployer_impl.py +0 -0
  385. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/runner/metaflow_runner.py +0 -0
  386. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/runner/nbdeploy.py +0 -0
  387. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/runner/nbrun.py +0 -0
  388. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/runner/subprocess_manager.py +0 -0
  389. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/runner/utils.py +0 -0
  390. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/runtime.py +0 -0
  391. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/sidecar/__init__.py +0 -0
  392. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/sidecar/sidecar.py +0 -0
  393. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/sidecar/sidecar_messages.py +0 -0
  394. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/sidecar/sidecar_subprocess.py +0 -0
  395. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/sidecar/sidecar_worker.py +0 -0
  396. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/system/__init__.py +0 -0
  397. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/system/system_logger.py +0 -0
  398. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/system/system_monitor.py +0 -0
  399. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/system/system_utils.py +0 -0
  400. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tagging_util.py +0 -0
  401. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/task.py +0 -0
  402. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tracing/__init__.py +0 -0
  403. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tracing/propagator.py +0 -0
  404. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tracing/span_exporter.py +0 -0
  405. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tracing/tracing_modules.py +0 -0
  406. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tuple_util.py +0 -0
  407. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/00-helloworld/README.md +0 -0
  408. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/00-helloworld/helloworld.py +0 -0
  409. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/01-playlist/README.md +0 -0
  410. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/01-playlist/movies.csv +0 -0
  411. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/01-playlist/playlist.ipynb +0 -0
  412. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/01-playlist/playlist.py +0 -0
  413. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/02-statistics/README.md +0 -0
  414. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/02-statistics/movies.csv +0 -0
  415. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/02-statistics/stats.ipynb +0 -0
  416. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/02-statistics/stats.py +0 -0
  417. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/03-playlist-redux/README.md +0 -0
  418. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/03-playlist-redux/playlist.py +0 -0
  419. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/04-playlist-plus/README.md +0 -0
  420. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/04-playlist-plus/playlist.py +0 -0
  421. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/05-hello-cloud/README.md +0 -0
  422. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/05-hello-cloud/hello-cloud.ipynb +0 -0
  423. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/05-hello-cloud/hello-cloud.py +0 -0
  424. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/06-statistics-redux/README.md +0 -0
  425. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/06-statistics-redux/stats.ipynb +0 -0
  426. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/07-worldview/README.md +0 -0
  427. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/07-worldview/worldview.ipynb +0 -0
  428. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/08-autopilot/README.md +0 -0
  429. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/tutorials/08-autopilot/autopilot.ipynb +0 -0
  430. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/unbounded_foreach.py +0 -0
  431. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/user_configs/__init__.py +0 -0
  432. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/user_configs/config_options.py +0 -0
  433. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/user_configs/config_parameters.py +0 -0
  434. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/user_decorators/__init__.py +0 -0
  435. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/user_decorators/common.py +0 -0
  436. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/user_decorators/mutable_flow.py +0 -0
  437. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/user_decorators/mutable_step.py +0 -0
  438. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/user_decorators/user_flow_decorator.py +0 -0
  439. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/user_decorators/user_step_decorator.py +0 -0
  440. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/util.py +0 -0
  441. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow/vendor.py +0 -0
  442. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow.egg-info/SOURCES.txt +0 -0
  443. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow.egg-info/dependency_links.txt +0 -0
  444. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow.egg-info/entry_points.txt +0 -0
  445. {metaflow-2.18.0 → metaflow-2.18.1}/metaflow.egg-info/top_level.txt +0 -0
  446. {metaflow-2.18.0 → metaflow-2.18.1}/setup.cfg +0 -0
  447. {metaflow-2.18.0 → metaflow-2.18.1}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: metaflow
3
- Version: 2.18.0
3
+ Version: 2.18.1
4
4
  Summary: Metaflow: More AI and ML, Less Engineering
5
5
  Author: Metaflow Developers
6
6
  Author-email: help@metaflow.org
@@ -26,7 +26,7 @@ License-File: LICENSE
26
26
  Requires-Dist: requests
27
27
  Requires-Dist: boto3
28
28
  Provides-Extra: stubs
29
- Requires-Dist: metaflow-stubs==2.18.0; extra == "stubs"
29
+ Requires-Dist: metaflow-stubs==2.18.1; extra == "stubs"
30
30
  Dynamic: author
31
31
  Dynamic: author-email
32
32
  Dynamic: classifier
@@ -314,6 +314,8 @@ SERVICE_INTERNAL_URL = from_conf("SERVICE_INTERNAL_URL", SERVICE_URL)
314
314
  # in all Metaflow deployments. Hopefully, some day we can flip the
315
315
  # default to True.
316
316
  BATCH_EMIT_TAGS = from_conf("BATCH_EMIT_TAGS", False)
317
+ # Default tags to add to AWS Batch jobs. These are in addition to the defaults set when BATCH_EMIT_TAGS is true.
318
+ BATCH_DEFAULT_TAGS = from_conf("BATCH_DEFAULT_TAGS", {})
317
319
 
318
320
  ###
319
321
  # AWS Step Functions configuration
@@ -1369,7 +1369,7 @@ def sanitize_for_argo(text):
1369
1369
  Sanitizes a string so it does not contain characters that are not permitted in
1370
1370
  Argo Workflow resource names.
1371
1371
  """
1372
- return (
1372
+ sanitized = (
1373
1373
  re.compile(r"^[^A-Za-z0-9]+")
1374
1374
  .sub("", text)
1375
1375
  .replace("_", "")
@@ -1377,6 +1377,12 @@ def sanitize_for_argo(text):
1377
1377
  .replace("+", "")
1378
1378
  .lower()
1379
1379
  )
1380
+ # This is added in order to get sanitized and truncated project branch names to adhere to RFC 1123 subdomain requirements
1381
+ # f.ex. after truncation a project flow name might be project.branch-cut-short-.flowname
1382
+ # sanitize around the . separators by removing any non-alphanumeric characters
1383
+ sanitized = re.compile(r"[^a-z0-9]*\.[^a-z0-9]*").sub(".", sanitized)
1384
+
1385
+ return sanitized
1380
1386
 
1381
1387
 
1382
1388
  def remap_status(status):
@@ -194,3 +194,35 @@ def sanitize_batch_tag(key, value):
194
194
  _value = re.sub(RE_NOT_PERMITTED, "", value)[:256]
195
195
 
196
196
  return _key, _value
197
+
198
+
199
+ def validate_aws_tag(key: str, value: str):
200
+ PERMITTED = r"[A-Za-z0-9\s\+\-\=\.\_\:\/\@]"
201
+
202
+ AWS_PREFIX = r"^aws\:" # case-insensitive.
203
+ if re.match(AWS_PREFIX, key, re.IGNORECASE) or re.match(
204
+ AWS_PREFIX, value, re.IGNORECASE
205
+ ):
206
+ raise MetaflowException(
207
+ "'aws:' is not an allowed prefix for either tag keys or values"
208
+ )
209
+
210
+ if len(key) > 128:
211
+ raise MetaflowException(
212
+ "Tag key *%s* is too long. Maximum allowed tag key length is 128." % key
213
+ )
214
+ if len(value) > 256:
215
+ raise MetaflowException(
216
+ "Tag value *%s* is too long. Maximum allowed tag value length is 256."
217
+ % value
218
+ )
219
+
220
+ if not re.match(PERMITTED, key):
221
+ raise MetaflowException(
222
+ "Key *s* is not permitted. Tags must match pattern: %s" % (key, PERMITTED)
223
+ )
224
+ if not re.match(PERMITTED, value):
225
+ raise MetaflowException(
226
+ "Value *%s* is not permitted. Tags must match pattern: %s"
227
+ % (value, PERMITTED)
228
+ )
@@ -199,6 +199,7 @@ class Batch(object):
199
199
  host_volumes=None,
200
200
  efs_volumes=None,
201
201
  use_tmpfs=None,
202
+ aws_batch_tags=None,
202
203
  tmpfs_tempdir=None,
203
204
  tmpfs_size=None,
204
205
  tmpfs_path=None,
@@ -344,6 +345,11 @@ class Batch(object):
344
345
  if key in attrs:
345
346
  k, v = sanitize_batch_tag(key, attrs.get(key))
346
347
  job.tag(k, v)
348
+
349
+ if aws_batch_tags is not None:
350
+ for key, value in aws_batch_tags.items():
351
+ job.tag(key, value)
352
+
347
353
  return job
348
354
 
349
355
  def launch_job(
@@ -371,6 +377,7 @@ class Batch(object):
371
377
  host_volumes=None,
372
378
  efs_volumes=None,
373
379
  use_tmpfs=None,
380
+ aws_batch_tags=None,
374
381
  tmpfs_tempdir=None,
375
382
  tmpfs_size=None,
376
383
  tmpfs_path=None,
@@ -414,6 +421,7 @@ class Batch(object):
414
421
  host_volumes=host_volumes,
415
422
  efs_volumes=efs_volumes,
416
423
  use_tmpfs=use_tmpfs,
424
+ aws_batch_tags=aws_batch_tags,
417
425
  tmpfs_tempdir=tmpfs_tempdir,
418
426
  tmpfs_size=tmpfs_size,
419
427
  tmpfs_path=tmpfs_path,
@@ -12,6 +12,7 @@ from metaflow.metaflow_config import DATASTORE_LOCAL_DIR
12
12
  from metaflow.mflog import TASK_LOG_SOURCE
13
13
  from metaflow.unbounded_foreach import UBF_CONTROL, UBF_TASK
14
14
  from .batch import Batch, BatchKilledException
15
+ from ..aws_utils import validate_aws_tag
15
16
 
16
17
 
17
18
  @click.group()
@@ -47,7 +48,7 @@ def _execute_cmd(func, flow_name, run_id, user, my_runs, echo):
47
48
  func(flow_name, run_id, user, echo)
48
49
 
49
50
 
50
- @batch.command(help="List unfinished AWS Batch tasks of this flow")
51
+ @batch.command("list", help="List unfinished AWS Batch tasks of this flow")
51
52
  @click.option(
52
53
  "--my-runs",
53
54
  default=False,
@@ -61,7 +62,7 @@ def _execute_cmd(func, flow_name, run_id, user, my_runs, echo):
61
62
  help="List unfinished tasks corresponding to the run id.",
62
63
  )
63
64
  @click.pass_context
64
- def list(ctx, run_id, user, my_runs):
65
+ def _list(ctx, run_id, user, my_runs):
65
66
  batch = Batch(ctx.obj.metadata, ctx.obj.environment)
66
67
  _execute_cmd(
67
68
  batch.list_jobs, ctx.obj.flow.name, run_id, user, my_runs, ctx.obj.echo
@@ -147,6 +148,13 @@ def kill(ctx, run_id, user, my_runs):
147
148
  help="Activate designated number of elastic fabric adapter devices. "
148
149
  "EFA driver must be installed and instance type compatible with EFA",
149
150
  )
151
+ @click.option(
152
+ "--aws-batch-tag",
153
+ "aws_batch_tags",
154
+ multiple=True,
155
+ default=None,
156
+ help="AWS tags. Format: key=value, multiple allowed",
157
+ )
150
158
  @click.option("--use-tmpfs", is_flag=True, help="tmpfs requirement for AWS Batch.")
151
159
  @click.option("--tmpfs-tempdir", is_flag=True, help="tmpfs requirement for AWS Batch.")
152
160
  @click.option("--tmpfs-size", help="tmpfs requirement for AWS Batch.")
@@ -203,6 +211,7 @@ def step(
203
211
  swappiness=None,
204
212
  inferentia=None,
205
213
  efa=None,
214
+ aws_batch_tags=None,
206
215
  use_tmpfs=None,
207
216
  tmpfs_tempdir=None,
208
217
  tmpfs_size=None,
@@ -213,7 +222,7 @@ def step(
213
222
  log_driver=None,
214
223
  log_options=None,
215
224
  num_parallel=None,
216
- **kwargs,
225
+ **kwargs
217
226
  ):
218
227
  def echo(msg, stream="stderr", batch_id=None, **kwargs):
219
228
  msg = util.to_unicode(msg)
@@ -277,6 +286,14 @@ def step(
277
286
 
278
287
  env = {"METAFLOW_FLOW_FILENAME": os.path.basename(sys.argv[0])}
279
288
 
289
+ if aws_batch_tags is not None:
290
+ # We do not need to validate these again,
291
+ # as they come supplied by the batch decorator which already performed validation.
292
+ batch_tags = {}
293
+ for item in list(aws_batch_tags):
294
+ key, value = item.split("=")
295
+ batch_tags[key] = value
296
+
280
297
  env_deco = [deco for deco in node.decorators if deco.name == "environment"]
281
298
  if env_deco:
282
299
  env.update(env_deco[0].attributes["vars"])
@@ -341,6 +358,7 @@ def step(
341
358
  host_volumes=host_volumes,
342
359
  efs_volumes=efs_volumes,
343
360
  use_tmpfs=use_tmpfs,
361
+ aws_batch_tags=batch_tags,
344
362
  tmpfs_tempdir=tmpfs_tempdir,
345
363
  tmpfs_size=tmpfs_size,
346
364
  tmpfs_path=tmpfs_path,
@@ -10,6 +10,7 @@ from metaflow.metadata_provider.util import sync_local_metadata_to_datastore
10
10
  from metaflow.metaflow_config import (
11
11
  BATCH_CONTAINER_IMAGE,
12
12
  BATCH_CONTAINER_REGISTRY,
13
+ BATCH_DEFAULT_TAGS,
13
14
  BATCH_JOB_QUEUE,
14
15
  DATASTORE_LOCAL_DIR,
15
16
  ECS_FARGATE_EXECUTION_ROLE,
@@ -24,6 +25,7 @@ from ..aws_utils import (
24
25
  compute_resource_attributes,
25
26
  get_docker_registry,
26
27
  get_ec2_instance_metadata,
28
+ validate_aws_tag,
27
29
  )
28
30
  from .batch import BatchException
29
31
 
@@ -68,6 +70,9 @@ class BatchDecorator(StepDecorator):
68
70
  A swappiness value of 0 causes swapping not to happen unless absolutely
69
71
  necessary. A swappiness value of 100 causes pages to be swapped very
70
72
  aggressively. Accepted values are whole numbers between 0 and 100.
73
+ aws_batch_tags: Dict[str, str], optional, default None
74
+ Sets arbitrary AWS tags on the AWS Batch compute environment.
75
+ Set as string key-value pairs.
71
76
  use_tmpfs : bool, default False
72
77
  This enables an explicit tmpfs mount for this step. Note that tmpfs is
73
78
  not available on Fargate compute environments
@@ -114,6 +119,7 @@ class BatchDecorator(StepDecorator):
114
119
  "host_volumes": None,
115
120
  "efs_volumes": None,
116
121
  "use_tmpfs": False,
122
+ "aws_batch_tags": None,
117
123
  "tmpfs_tempdir": True,
118
124
  "tmpfs_size": None,
119
125
  "tmpfs_path": "/metaflow_temp",
@@ -175,6 +181,29 @@ class BatchDecorator(StepDecorator):
175
181
  if self.attributes["trainium"] is not None:
176
182
  self.attributes["inferentia"] = self.attributes["trainium"]
177
183
 
184
+ if not isinstance(BATCH_DEFAULT_TAGS, dict) and not all(
185
+ isinstance(k, str) and isinstance(v, str)
186
+ for k, v in BATCH_DEFAULT_TAGS.items()
187
+ ):
188
+ raise BatchException(
189
+ "BATCH_DEFAULT_TAGS environment variable must be Dict[str, str]"
190
+ )
191
+
192
+ if self.attributes["aws_batch_tags"] is not None:
193
+ if not isinstance(self.attributes["aws_batch_tags"], dict) and not all(
194
+ isinstance(k, str) and isinstance(v, str)
195
+ for k, v in self.attributes["aws_batch_tags"].items()
196
+ ):
197
+ raise BatchException("aws_batch_tags must be Dict[str, str]")
198
+ else:
199
+ self.attributes["aws_batch_tags"] = {}
200
+
201
+ if BATCH_DEFAULT_TAGS:
202
+ self.attributes["aws_batch_tags"] = {
203
+ **BATCH_DEFAULT_TAGS,
204
+ **self.attributes["aws_batch_tags"],
205
+ }
206
+
178
207
  # clean up the alias attribute so it is not passed on.
179
208
  self.attributes.pop("trainium", None)
180
209
 
@@ -207,6 +236,11 @@ class BatchDecorator(StepDecorator):
207
236
  if self.attributes["tmpfs_path"] and self.attributes["tmpfs_path"][0] != "/":
208
237
  raise BatchException("'tmpfs_path' needs to be an absolute path")
209
238
 
239
+ # Validate Batch tags
240
+ if self.attributes["aws_batch_tags"]:
241
+ for key, val in self.attributes["aws_batch_tags"].items():
242
+ validate_aws_tag(key, val)
243
+
210
244
  def runtime_init(self, flow, graph, package, run_id):
211
245
  # Set some more internal state.
212
246
  self.flow = flow
@@ -231,8 +265,17 @@ class BatchDecorator(StepDecorator):
231
265
  cli_args.command_args.append(self.package_metadata)
232
266
  cli_args.command_args.append(self.package_sha)
233
267
  cli_args.command_args.append(self.package_url)
234
- cli_args.command_options.update(self.attributes)
268
+ # skip certain keys as CLI arguments
269
+ _skip_keys = ["aws_batch_tags"]
270
+ cli_args.command_options.update(
271
+ {k: v for k, v in self.attributes.items() if k not in _skip_keys}
272
+ )
235
273
  cli_args.command_options["run-time-limit"] = self.run_time_limit
274
+
275
+ # Pass the supplied AWS batch tags to the step CLI cmd
276
+ cli_args.command_options["aws-batch-tag"] = [
277
+ "%s=%s" % (k, v) for k, v in self.attributes["aws_batch_tags"].items()
278
+ ]
236
279
  if not R.use_r():
237
280
  cli_args.entrypoint[0] = sys.executable
238
281
 
@@ -50,6 +50,7 @@ class StepFunctions(object):
50
50
  event_logger,
51
51
  monitor,
52
52
  tags=None,
53
+ aws_batch_tags=None,
53
54
  namespace=None,
54
55
  username=None,
55
56
  max_workers=None,
@@ -70,6 +71,7 @@ class StepFunctions(object):
70
71
  self.event_logger = event_logger
71
72
  self.monitor = monitor
72
73
  self.tags = tags
74
+ self.aws_batch_tags = aws_batch_tags or {}
73
75
  self.namespace = namespace
74
76
  self.username = username
75
77
  self.max_workers = max_workers
@@ -194,6 +196,7 @@ class StepFunctions(object):
194
196
  "on AWS Step Functions. Please "
195
197
  "deploy your flow first." % name
196
198
  )
199
+
197
200
  # Dump parameters into `Parameters` input field.
198
201
  input = json.dumps({"Parameters": json.dumps(parameters)})
199
202
  # AWS Step Functions limits input to be 32KiB, but AWS Batch
@@ -852,7 +855,8 @@ class StepFunctions(object):
852
855
  # AWS_BATCH_JOB_ATTEMPT as the job counter.
853
856
  "retry_count": "$((AWS_BATCH_JOB_ATTEMPT-1))",
854
857
  }
855
-
858
+ # merge batch tags supplied through step-fuctions CLI and ones defined in decorator
859
+ batch_tags = {**self.aws_batch_tags, **resources["aws_batch_tags"]}
856
860
  return (
857
861
  Batch(self.metadata, self.environment)
858
862
  .create_job(
@@ -878,6 +882,7 @@ class StepFunctions(object):
878
882
  swappiness=resources["swappiness"],
879
883
  efa=resources["efa"],
880
884
  use_tmpfs=resources["use_tmpfs"],
885
+ aws_batch_tags=batch_tags,
881
886
  tmpfs_tempdir=resources["tmpfs_tempdir"],
882
887
  tmpfs_size=resources["tmpfs_size"],
883
888
  tmpfs_path=resources["tmpfs_path"],
@@ -19,6 +19,8 @@ from metaflow.util import get_username, to_bytes, to_unicode, version_parse
19
19
 
20
20
  from .production_token import load_token, new_token, store_token
21
21
  from .step_functions import StepFunctions
22
+ from metaflow.tagging_util import validate_tags
23
+ from ..aws_utils import validate_aws_tag
22
24
 
23
25
  VALID_NAME = re.compile(r"[^a-zA-Z0-9_\-\.]")
24
26
 
@@ -97,6 +99,13 @@ def step_functions(obj, name=None):
97
99
  "with the given tag. You can specify this option multiple "
98
100
  "times to attach multiple tags.",
99
101
  )
102
+ @click.option(
103
+ "--aws-batch-tag",
104
+ "aws_batch_tags",
105
+ multiple=True,
106
+ default=None,
107
+ help="AWS Batch tags.",
108
+ )
100
109
  @click.option(
101
110
  "--namespace",
102
111
  "user_namespace",
@@ -143,6 +152,7 @@ def step_functions(obj, name=None):
143
152
  def create(
144
153
  obj,
145
154
  tags=None,
155
+ aws_batch_tags=None,
146
156
  user_namespace=None,
147
157
  only_json=False,
148
158
  authorize=None,
@@ -196,6 +206,7 @@ def create(
196
206
  token,
197
207
  obj.state_machine_name,
198
208
  tags,
209
+ aws_batch_tags,
199
210
  user_namespace,
200
211
  max_workers,
201
212
  workflow_timeout,
@@ -315,6 +326,7 @@ def make_flow(
315
326
  token,
316
327
  name,
317
328
  tags,
329
+ aws_batch_tags,
318
330
  namespace,
319
331
  max_workers,
320
332
  workflow_timeout,
@@ -348,6 +360,15 @@ def make_flow(
348
360
  [obj.package.blob], len_hint=1
349
361
  )[0]
350
362
 
363
+ if aws_batch_tags is not None:
364
+ batch_tags = {}
365
+ for item in list(aws_batch_tags):
366
+ key, value = item.split("=")
367
+ # These are fresh AWS tags provided by the user through the CLI,
368
+ # so we must validate them.
369
+ validate_aws_tag(key, value)
370
+ batch_tags[key] = value
371
+
351
372
  return StepFunctions(
352
373
  name,
353
374
  obj.graph,
@@ -362,6 +383,7 @@ def make_flow(
362
383
  obj.event_logger,
363
384
  obj.monitor,
364
385
  tags=tags,
386
+ aws_batch_tags=batch_tags,
365
387
  namespace=namespace,
366
388
  max_workers=max_workers,
367
389
  username=get_username(),
@@ -0,0 +1 @@
1
+ @import"https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap";code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:#ffffff80}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}:root{--bg: #ffffff;--black: #333;--blue: #0c66de;--dk-grey: #767676;--dk-primary: #ef863b;--dk-secondary: #13172d;--dk-tertiary: #0f426e;--error: #cf483e;--grey: rgba(0, 0, 0, .125);--highlight: #f8d9d8;--lt-blue: #4fa7ff;--lt-grey: #f3f3f3;--lt-lt-grey: #f9f9f9;--lt-primary: #ffcb8b;--lt-secondary: #434d81;--lt-tertiary: #4189c9;--primary: #faab4a;--quadrary: #f8d9d8;--secondary: #2e3454;--tertiary: #2a679d;--white: #ffffff;--component-spacer: 3rem;--aside-width: 20rem;--embed-card-min-height: 12rem;--mono-font: ui-monospace, Menlo, Monaco, "Cascadia Mono", "Segoe UI Mono", "Roboto Mono", "Oxygen Mono", "Ubuntu Monospace", "Source Code Pro", "Fira Mono", "Droid Sans Mono", "Courier New", monospace}html,body{margin:0;min-height:100vh;overflow-y:visible;padding:0;width:100%}.card_app{width:100%;min-height:100vh}.embed .card_app{min-height:var(--embed-card-min-height)}.mf-card *{box-sizing:border-box}.mf-card{background:var(--bg);color:var(--black);font-family:Roboto,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-size:14px;font-weight:400;line-height:1.5;text-size-adjust:100%;margin:0;min-height:100vh;overflow-y:visible;padding:0;text-align:left;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;width:100%}.embed .mf-card{min-height:var(--embed-card-min-height)}.mf-card :is(.mono,code.mono,pre.mono){font-family:var(--mono-font);font-weight:lighter}.mf-card :is(table,th,td){border-spacing:1px;text-align:center;color:var(--black)}.mf-card table{position:relative;min-width:100%;table-layout:inherit!important}.mf-card td{padding:.66rem 1.25rem;background:var(--lt-lt-grey);border:none}.mf-card th{border:none;color:var(--dk-grey);font-weight:400;padding:.5rem}.mf-card :is(h1,h2,h3,h4,h5){font-weight:700;margin:.5rem 0}.mf-card ul{margin:0;padding:0}.mf-card p{margin:0 0 1rem}.mf-card p:last-of-type{margin:0}.mf-card button{font-size:1rem}.mf-card .textButton{cursor:pointer;text-align:left;background:none;border:1px solid transparent;outline:none;padding:0}.mf-card :is(button.textButton:focus,a:focus,button.textButton:active){border:1px dashed var(--grey);background:transparent}.mf-card button.textButton:hover{color:var(--blue);text-decoration:none}.mf-card :is(:not(pre)>code[class*=language-],pre[class*=language-]){background:transparent!important;text-shadow:none;-webkit-user-select:auto;user-select:auto}aside.svelte-1okdv0e{display:none;line-height:2;text-align:left}@media (min-width: 60rem){aside.svelte-1okdv0e{display:flex;flex-direction:column;height:100vh;justify-content:space-between;padding:2.5rem 0 1.5rem 1.5rem;position:fixed;width:var(--aside-width)}}.embed aside{display:none}aside ul{list-style-type:none}aside a,aside button,aside a:visited{text-decoration:none;cursor:pointer;font-weight:700;color:var(--black)}aside a:hover,aside button:hover{text-decoration:underline}.logoContainer svg{width:100%;max-width:140px;margin-bottom:3.75rem;height:auto}.idCell.svelte-pt8vzv{font-weight:700;text-align:right;background:var(--lt-grey);width:12%}.codeCell.svelte-pt8vzv{text-align:left;-webkit-user-select:all;user-select:all}.container.svelte-ubs992{width:100%;overflow:auto}table.svelte-ubs992{width:100%}:root{--dag-border: #282828;--dag-bg-static: var(--lt-grey);--dag-bg-success: #a5d46a;--dag-bg-running: #ffdf80;--dag-bg-error: #ffa080;--dag-connector: #cccccc;--dag-gap: 5rem;--dag-step-height: 6.25rem;--dag-step-width: 11.25rem;--dag-selected: #ffd700}.connectorwrapper.svelte-19jpdwh{transform-origin:0 0;position:absolute;z-index:0;min-width:var(--strokeWidth)}.flip.svelte-19jpdwh{transform:scaleX(-1)}.path.svelte-19jpdwh{--strokeWidth:.5rem;--strokeColor:var(--dag-connector);--borderRadius:1.25rem;box-sizing:border-box}.straightLine.svelte-19jpdwh{position:absolute;top:0;bottom:0;left:0;right:0;border-left:var(--strokeWidth) solid var(--strokeColor)}.loop.svelte-19jpdwh{position:absolute;top:-50%;left:0;width:100%;height:100%;border-radius:var(--borderRadius);border:var(--strokeWidth) solid var(--strokeColor)}.topLeft.svelte-19jpdwh{position:absolute;top:0;left:0;right:50%;bottom:calc(var(--dag-gap) / 2 - var(--strokeWidth) / 2);border-radius:0 0 0 var(--borderRadius);border-left:var(--strokeWidth) solid var(--strokeColor);border-bottom:var(--strokeWidth) solid var(--strokeColor)}.bottomRight.svelte-19jpdwh{position:absolute;top:calc(100% - (var(--dag-gap) / 2 + var(--strokeWidth) / 2));left:50%;right:0;bottom:0;border-radius:0 var(--borderRadius) 0 0;border-top:var(--strokeWidth) solid var(--strokeColor);border-right:var(--strokeWidth) solid var(--strokeColor)}.wrapper.svelte-117ceti.svelte-117ceti{position:relative;z-index:1}.step.svelte-117ceti.svelte-117ceti{font-size:.75rem;padding:.5rem;color:var(--dk-grey)}.rectangle.svelte-117ceti.svelte-117ceti{background-color:var(--dag-bg-static);border:1px solid var(--dag-border);box-sizing:border-box;position:relative;height:var(--dag-step-height);width:var(--dag-step-width)}.rectangle.error.svelte-117ceti.svelte-117ceti{background-color:var(--dag-bg-error)}.rectangle.success.svelte-117ceti.svelte-117ceti{background-color:var(--dag-bg-success)}.rectangle.running.svelte-117ceti.svelte-117ceti{background-color:var(--dag-bg-running)}.level.svelte-117ceti.svelte-117ceti{z-index:-1;filter:contrast(.5);position:absolute}.inner.svelte-117ceti.svelte-117ceti{position:relative;height:100%;width:100%}.name.svelte-117ceti.svelte-117ceti{font-weight:700;overflow:hidden;text-overflow:ellipsis;display:block}.description.svelte-117ceti.svelte-117ceti{position:absolute;max-height:4rem;bottom:0;left:0;right:0;overflow:hidden;-webkit-line-clamp:4;line-clamp:4;display:-webkit-box;-webkit-box-orient:vertical}.overflown.description.svelte-117ceti.svelte-117ceti{cursor:help}.current.svelte-117ceti .rectangle.svelte-117ceti{box-shadow:0 0 10px var(--dag-selected)}.levelstoshow.svelte-117ceti.svelte-117ceti{position:absolute;bottom:100%;right:0;font-size:.75rem;font-weight:100;text-align:right}.stepwrapper.svelte-18aex7a{display:flex;align-items:center;flex-direction:column;width:100%;position:relative;min-width:var(--dag-step-width)}.childwrapper.svelte-18aex7a{display:flex;width:100%}.gap.svelte-18aex7a{height:var(--dag-gap)}.title.svelte-117s0ws{text-align:left}.subtitle.svelte-lu9pnn{font-size:1rem;text-align:left}header.svelte-1ugmt5d{margin-bottom:var(--component-spacer)}figure.svelte-1x96yvr{background:var(--lt-grey);padding:1rem;border-radius:5px;text-align:center;margin:0 auto var(--component-spacer)}@media (min-width: 60rem){figure.svelte-1x96yvr{margin-bottom:0}}img.svelte-1x96yvr{max-width:100%;max-height:500px}.label.svelte-1x96yvr{font-weight:700;margin:.5rem 0}.description.svelte-1x96yvr{font-size:.9rem;font-style:italic;text-align:center;margin:.5rem 0}.log.svelte-1jhmsu{background:var(--lt-grey)!important;font-size:.9rem;padding:2rem}.page.svelte-v7ihqd:last-of-type{margin-bottom:var(--component-spacer)}.page:last-of-type section:last-of-type hr{display:none}progress.svelte-ljrmzp::-webkit-progress-bar{background-color:#fff!important;min-width:100%}progress.svelte-ljrmzp{background-color:#fff;color:#326cded9!important}progress.svelte-ljrmzp::-moz-progress-bar{background-color:#326cde!important}table .container{background:transparent!important;font-size:10px!important;padding:0!important}table progress{height:4px!important}.container.svelte-ljrmzp{display:flex;align-items:center;justify-content:center;font-size:12px;border-radius:3px;background:#edf5ff;padding:3rem}.inner.svelte-ljrmzp{max-width:410px;width:100%;text-align:center}.info.svelte-ljrmzp{display:flex;justify-content:space-between}table .info{text-align:left;flex-direction:column}label.svelte-ljrmzp{font-weight:700}.labelValue.svelte-ljrmzp{border-left:1px solid rgba(0,0,0,.1);margin-left:.25rem;padding-left:.5rem}.details.svelte-ljrmzp{font-family:var(--mono-font);font-size:8px;color:#333433;line-height:18px;overflow:hidden;white-space:nowrap}progress.svelte-ljrmzp{width:100%;border:none;border-radius:5px;height:8px;background:#fff}.heading.svelte-17n0qr8{margin-bottom:1.5rem}.sectionItems.svelte-17n0qr8{display:block}.sectionItems .imageContainer{max-height:500px}.container.svelte-17n0qr8{scroll-margin:var(--component-spacer)}hr.svelte-17n0qr8{background:var(--grey);border:none;height:1px;margin:var(--component-spacer) 0;padding:0}@media (min-width: 60rem){.sectionItems.svelte-17n0qr8{display:grid;grid-gap:2rem}}td.svelte-gl9h79{text-align:left}td.labelColumn.svelte-gl9h79{text-align:right;background-color:var(--lt-grey);font-weight:700;width:12%;white-space:nowrap}.tableContainer.svelte-q3hq57{overflow:auto}th.svelte-q3hq57{position:sticky;top:-1px;z-index:2;white-space:nowrap;background:var(--white)}.mainContainer.svelte-mqeomk{max-width:110rem}main.svelte-mqeomk{flex:0 1 auto;max-width:100rem;padding:1.5rem}@media (min-width: 60rem){main.svelte-mqeomk{margin-left:var(--aside-width)}}.embed main{margin:0 auto;min-width:80%}.modal.svelte-1hhf5ym{align-items:center;background:#00000080;bottom:0;cursor:pointer;display:flex;height:100%;justify-content:center;left:0;overflow:hidden;position:fixed;right:0;top:0;width:100%;z-index:100}.modalContainer>*{background-color:#fff;border-radius:5px;cursor:default;flex:0 1 auto;padding:1rem;position:relative}.modal img{max-height:80vh!important}.cancelButton.svelte-1hhf5ym{color:#fff;cursor:pointer;font-size:2rem;position:absolute;right:1rem;top:1rem}.cancelButton.svelte-1hhf5ym:hover{color:var(--blue)}.nav.svelte-1kdpgko.svelte-1kdpgko{border-radius:0 0 5px;display:none;margin:0;top:0}ul.navList.svelte-1kdpgko.svelte-1kdpgko{list-style-type:none}ul.navList.svelte-1kdpgko ul.svelte-1kdpgko{margin:.5rem 1rem 2rem}.navList.svelte-1kdpgko li.svelte-1kdpgko{display:block;margin:0}.navItem.svelte-1kdpgko li.svelte-1kdpgko:hover{color:var(--blue)}.pageId.svelte-1kdpgko.svelte-1kdpgko{display:block;border-bottom:1px solid var(--grey);padding:0 .5rem;margin-bottom:1rem}@media (min-width: 60rem){.nav.svelte-1kdpgko.svelte-1kdpgko{display:block}ul.navList.svelte-1kdpgko.svelte-1kdpgko{text-align:left}.navList.svelte-1kdpgko li.svelte-1kdpgko{display:block;margin:.5rem 0}}.container.svelte-teyund{width:100%;display:flex;flex-direction:column;position:relative}