metaflow 2.13.5__tar.gz → 2.13.7__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 (375) hide show
  1. {metaflow-2.13.5/metaflow.egg-info → metaflow-2.13.7}/PKG-INFO +2 -2
  2. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/decorators.py +6 -2
  3. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/flowspec.py +30 -0
  4. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/parameters.py +1 -1
  5. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/argo/argo_workflows.py +23 -8
  6. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/events_decorator.py +79 -142
  7. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/kubernetes/kubernetes.py +0 -9
  8. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/runner/click_api.py +2 -0
  9. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/user_configs/config_options.py +7 -4
  10. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/user_configs/config_parameters.py +7 -7
  11. metaflow-2.13.7/metaflow/version.py +1 -0
  12. {metaflow-2.13.5 → metaflow-2.13.7/metaflow.egg-info}/PKG-INFO +2 -2
  13. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow.egg-info/requires.txt +1 -1
  14. metaflow-2.13.5/metaflow/version.py +0 -1
  15. {metaflow-2.13.5 → metaflow-2.13.7}/LICENSE +0 -0
  16. {metaflow-2.13.5 → metaflow-2.13.7}/MANIFEST.in +0 -0
  17. {metaflow-2.13.5 → metaflow-2.13.7}/README.md +0 -0
  18. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/R.py +0 -0
  19. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/__init__.py +0 -0
  20. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/__init__.py +0 -0
  21. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/click/__init__.py +0 -0
  22. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/click/_bashcomplete.py +0 -0
  23. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/click/_compat.py +0 -0
  24. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/click/_termui_impl.py +0 -0
  25. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/click/_textwrap.py +0 -0
  26. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/click/_unicodefun.py +0 -0
  27. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/click/_winconsole.py +0 -0
  28. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/click/core.py +0 -0
  29. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/click/decorators.py +0 -0
  30. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/click/exceptions.py +0 -0
  31. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/click/formatting.py +0 -0
  32. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/click/globals.py +0 -0
  33. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/click/parser.py +0 -0
  34. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/click/termui.py +0 -0
  35. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/click/testing.py +0 -0
  36. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/click/types.py +0 -0
  37. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/click/utils.py +0 -0
  38. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/importlib_metadata/__init__.py +0 -0
  39. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/importlib_metadata/_adapters.py +0 -0
  40. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/importlib_metadata/_collections.py +0 -0
  41. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/importlib_metadata/_compat.py +0 -0
  42. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/importlib_metadata/_functools.py +0 -0
  43. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/importlib_metadata/_itertools.py +0 -0
  44. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/importlib_metadata/_meta.py +0 -0
  45. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/importlib_metadata/_text.py +0 -0
  46. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/importlib_metadata/py.typed +0 -0
  47. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/packaging/__init__.py +0 -0
  48. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/packaging/_elffile.py +0 -0
  49. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/packaging/_manylinux.py +0 -0
  50. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/packaging/_musllinux.py +0 -0
  51. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/packaging/_parser.py +0 -0
  52. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/packaging/_structures.py +0 -0
  53. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/packaging/_tokenizer.py +0 -0
  54. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/packaging/markers.py +0 -0
  55. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/packaging/py.typed +0 -0
  56. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/packaging/requirements.py +0 -0
  57. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/packaging/specifiers.py +0 -0
  58. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/packaging/tags.py +0 -0
  59. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/packaging/utils.py +0 -0
  60. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/packaging/version.py +0 -0
  61. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/typeguard/__init__.py +0 -0
  62. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/typeguard/_checkers.py +0 -0
  63. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/typeguard/_config.py +0 -0
  64. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/typeguard/_decorators.py +0 -0
  65. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/typeguard/_exceptions.py +0 -0
  66. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/typeguard/_functions.py +0 -0
  67. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/typeguard/_importhook.py +0 -0
  68. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/typeguard/_memo.py +0 -0
  69. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/typeguard/_pytest_plugin.py +0 -0
  70. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/typeguard/_suppression.py +0 -0
  71. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/typeguard/_transformer.py +0 -0
  72. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/typeguard/_union_transformer.py +0 -0
  73. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/typeguard/_utils.py +0 -0
  74. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/typeguard/py.typed +0 -0
  75. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/typing_extensions.py +0 -0
  76. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/v3_5/__init__.py +0 -0
  77. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/v3_5/importlib_metadata/__init__.py +0 -0
  78. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/v3_5/importlib_metadata/_compat.py +0 -0
  79. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/v3_5/zipp.py +0 -0
  80. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/v3_6/__init__.py +0 -0
  81. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/v3_6/importlib_metadata/__init__.py +0 -0
  82. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/v3_6/importlib_metadata/_adapters.py +0 -0
  83. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/v3_6/importlib_metadata/_collections.py +0 -0
  84. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/v3_6/importlib_metadata/_compat.py +0 -0
  85. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/v3_6/importlib_metadata/_functools.py +0 -0
  86. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/v3_6/importlib_metadata/_itertools.py +0 -0
  87. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/v3_6/importlib_metadata/_meta.py +0 -0
  88. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/v3_6/importlib_metadata/_text.py +0 -0
  89. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/v3_6/importlib_metadata/py.typed +0 -0
  90. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/v3_6/typing_extensions.py +0 -0
  91. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/v3_6/zipp.py +0 -0
  92. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/_vendor/zipp.py +0 -0
  93. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/cards.py +0 -0
  94. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/cli.py +0 -0
  95. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/cli_args.py +0 -0
  96. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/cli_components/__init__.py +0 -0
  97. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/cli_components/dump_cmd.py +0 -0
  98. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/cli_components/init_cmd.py +0 -0
  99. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/cli_components/run_cmds.py +0 -0
  100. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/cli_components/step_cmd.py +0 -0
  101. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/cli_components/utils.py +0 -0
  102. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/client/__init__.py +0 -0
  103. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/client/core.py +0 -0
  104. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/client/filecache.py +0 -0
  105. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/clone_util.py +0 -0
  106. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/cmd/__init__.py +0 -0
  107. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/cmd/configure_cmd.py +0 -0
  108. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/cmd/develop/__init__.py +0 -0
  109. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/cmd/develop/stub_generator.py +0 -0
  110. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/cmd/develop/stubs.py +0 -0
  111. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/cmd/main_cli.py +0 -0
  112. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/cmd/tutorials_cmd.py +0 -0
  113. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/cmd/util.py +0 -0
  114. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/cmd_with_io.py +0 -0
  115. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/datastore/__init__.py +0 -0
  116. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/datastore/content_addressed_store.py +0 -0
  117. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/datastore/datastore_set.py +0 -0
  118. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/datastore/datastore_storage.py +0 -0
  119. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/datastore/exceptions.py +0 -0
  120. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/datastore/flow_datastore.py +0 -0
  121. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/datastore/inputs.py +0 -0
  122. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/datastore/task_datastore.py +0 -0
  123. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/debug.py +0 -0
  124. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/event_logger.py +0 -0
  125. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/events.py +0 -0
  126. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/exception.py +0 -0
  127. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/extension_support/__init__.py +0 -0
  128. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/extension_support/_empty_file.py +0 -0
  129. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/extension_support/cmd.py +0 -0
  130. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/extension_support/integrations.py +0 -0
  131. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/extension_support/plugins.py +0 -0
  132. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/graph.py +0 -0
  133. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/includefile.py +0 -0
  134. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/info_file.py +0 -0
  135. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/integrations.py +0 -0
  136. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/lint.py +0 -0
  137. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/metadata_provider/__init__.py +0 -0
  138. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/metadata_provider/heartbeat.py +0 -0
  139. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/metadata_provider/metadata.py +0 -0
  140. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/metadata_provider/util.py +0 -0
  141. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/metaflow_config.py +0 -0
  142. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/metaflow_config_funcs.py +0 -0
  143. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/metaflow_current.py +0 -0
  144. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/metaflow_environment.py +0 -0
  145. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/metaflow_profile.py +0 -0
  146. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/metaflow_version.py +0 -0
  147. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/mflog/__init__.py +0 -0
  148. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/mflog/mflog.py +0 -0
  149. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/mflog/save_logs.py +0 -0
  150. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/mflog/save_logs_periodically.py +0 -0
  151. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/mflog/tee.py +0 -0
  152. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/monitor.py +0 -0
  153. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/multicore_utils.py +0 -0
  154. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/package.py +0 -0
  155. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/__init__.py +0 -0
  156. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/airflow/__init__.py +0 -0
  157. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/airflow/airflow.py +0 -0
  158. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/airflow/airflow_cli.py +0 -0
  159. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/airflow/airflow_decorator.py +0 -0
  160. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/airflow/airflow_utils.py +0 -0
  161. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/airflow/dag.py +0 -0
  162. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/airflow/exception.py +0 -0
  163. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/airflow/plumbing/__init__.py +0 -0
  164. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/airflow/plumbing/set_parameters.py +0 -0
  165. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/airflow/sensors/__init__.py +0 -0
  166. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/airflow/sensors/base_sensor.py +0 -0
  167. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/airflow/sensors/external_task_sensor.py +0 -0
  168. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/airflow/sensors/s3_sensor.py +0 -0
  169. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/argo/__init__.py +0 -0
  170. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/argo/argo_client.py +0 -0
  171. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/argo/argo_events.py +0 -0
  172. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/argo/argo_workflows_cli.py +0 -0
  173. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/argo/argo_workflows_decorator.py +0 -0
  174. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/argo/argo_workflows_deployer.py +0 -0
  175. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/argo/argo_workflows_deployer_objects.py +0 -0
  176. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/argo/capture_error.py +0 -0
  177. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/argo/generate_input_paths.py +0 -0
  178. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/argo/jobset_input_paths.py +0 -0
  179. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/__init__.py +0 -0
  180. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/aws_client.py +0 -0
  181. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/aws_utils.py +0 -0
  182. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/batch/__init__.py +0 -0
  183. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/batch/batch.py +0 -0
  184. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/batch/batch_cli.py +0 -0
  185. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/batch/batch_client.py +0 -0
  186. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/batch/batch_decorator.py +0 -0
  187. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/secrets_manager/__init__.py +0 -0
  188. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/secrets_manager/aws_secrets_manager_secrets_provider.py +0 -0
  189. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/step_functions/__init__.py +0 -0
  190. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/step_functions/dynamo_db_client.py +0 -0
  191. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/step_functions/event_bridge_client.py +0 -0
  192. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/step_functions/production_token.py +0 -0
  193. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/step_functions/schedule_decorator.py +0 -0
  194. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/step_functions/set_batch_environment.py +0 -0
  195. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/step_functions/step_functions.py +0 -0
  196. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/step_functions/step_functions_cli.py +0 -0
  197. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/step_functions/step_functions_client.py +0 -0
  198. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/step_functions/step_functions_decorator.py +0 -0
  199. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/step_functions/step_functions_deployer.py +0 -0
  200. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/aws/step_functions/step_functions_deployer_objects.py +0 -0
  201. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/azure/__init__.py +0 -0
  202. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/azure/azure_credential.py +0 -0
  203. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/azure/azure_exceptions.py +0 -0
  204. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/azure/azure_secret_manager_secrets_provider.py +0 -0
  205. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/azure/azure_tail.py +0 -0
  206. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/azure/azure_utils.py +0 -0
  207. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/azure/blob_service_client_factory.py +0 -0
  208. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/azure/includefile_support.py +0 -0
  209. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/__init__.py +0 -0
  210. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_cli.py +0 -0
  211. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_client.py +0 -0
  212. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_creator.py +0 -0
  213. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_datastore.py +0 -0
  214. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_decorator.py +0 -0
  215. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_modules/__init__.py +0 -0
  216. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_modules/base.html +0 -0
  217. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_modules/basic.py +0 -0
  218. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_modules/bundle.css +0 -0
  219. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_modules/card.py +0 -0
  220. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_modules/chevron/__init__.py +0 -0
  221. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_modules/chevron/main.py +0 -0
  222. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_modules/chevron/metadata.py +0 -0
  223. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_modules/chevron/renderer.py +0 -0
  224. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_modules/chevron/tokenizer.py +0 -0
  225. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_modules/components.py +0 -0
  226. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_modules/convert_to_native_type.py +0 -0
  227. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_modules/main.js +0 -0
  228. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_modules/renderer_tools.py +0 -0
  229. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_modules/test_cards.py +0 -0
  230. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_resolver.py +0 -0
  231. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_server.py +0 -0
  232. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/card_viewer/viewer.html +0 -0
  233. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/component_serializer.py +0 -0
  234. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/cards/exception.py +0 -0
  235. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/catch_decorator.py +0 -0
  236. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/datastores/__init__.py +0 -0
  237. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/datastores/azure_storage.py +0 -0
  238. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/datastores/gs_storage.py +0 -0
  239. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/datastores/local_storage.py +0 -0
  240. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/datastores/s3_storage.py +0 -0
  241. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/datatools/__init__.py +0 -0
  242. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/datatools/local.py +0 -0
  243. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/datatools/s3/__init__.py +0 -0
  244. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/datatools/s3/s3.py +0 -0
  245. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/datatools/s3/s3op.py +0 -0
  246. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/datatools/s3/s3tail.py +0 -0
  247. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/datatools/s3/s3util.py +0 -0
  248. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/debug_logger.py +0 -0
  249. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/debug_monitor.py +0 -0
  250. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/__init__.py +0 -0
  251. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/client.py +0 -0
  252. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/client_modules.py +0 -0
  253. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/communication/__init__.py +0 -0
  254. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/communication/bytestream.py +0 -0
  255. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/communication/channel.py +0 -0
  256. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/communication/socket_bytestream.py +0 -0
  257. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/communication/utils.py +0 -0
  258. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/configurations/emulate_test_lib/__init__.py +0 -0
  259. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/configurations/emulate_test_lib/overrides.py +0 -0
  260. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/configurations/emulate_test_lib/server_mappings.py +0 -0
  261. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/configurations/test_lib_impl/__init__.py +0 -0
  262. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/configurations/test_lib_impl/test_lib.py +0 -0
  263. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/consts.py +0 -0
  264. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/data_transferer.py +0 -0
  265. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/exception_transferer.py +0 -0
  266. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/override_decorators.py +0 -0
  267. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/server.py +0 -0
  268. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/stub.py +0 -0
  269. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/env_escape/utils.py +0 -0
  270. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/environment_decorator.py +0 -0
  271. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/frameworks/__init__.py +0 -0
  272. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/frameworks/pytorch.py +0 -0
  273. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/gcp/__init__.py +0 -0
  274. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/gcp/gcp_secret_manager_secrets_provider.py +0 -0
  275. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/gcp/gs_exceptions.py +0 -0
  276. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/gcp/gs_storage_client_factory.py +0 -0
  277. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/gcp/gs_tail.py +0 -0
  278. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/gcp/gs_utils.py +0 -0
  279. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/gcp/includefile_support.py +0 -0
  280. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/kubernetes/__init__.py +0 -0
  281. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/kubernetes/kube_utils.py +0 -0
  282. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/kubernetes/kubernetes_cli.py +0 -0
  283. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/kubernetes/kubernetes_client.py +0 -0
  284. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/kubernetes/kubernetes_decorator.py +0 -0
  285. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/kubernetes/kubernetes_job.py +0 -0
  286. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/kubernetes/kubernetes_jobsets.py +0 -0
  287. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/kubernetes/spot_metadata_cli.py +0 -0
  288. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/kubernetes/spot_monitor_sidecar.py +0 -0
  289. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/logs_cli.py +0 -0
  290. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/metadata_providers/__init__.py +0 -0
  291. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/metadata_providers/local.py +0 -0
  292. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/metadata_providers/service.py +0 -0
  293. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/package_cli.py +0 -0
  294. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/parallel_decorator.py +0 -0
  295. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/project_decorator.py +0 -0
  296. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/pypi/__init__.py +0 -0
  297. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/pypi/bootstrap.py +0 -0
  298. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/pypi/conda_decorator.py +0 -0
  299. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/pypi/conda_environment.py +0 -0
  300. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/pypi/micromamba.py +0 -0
  301. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/pypi/pip.py +0 -0
  302. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/pypi/pypi_decorator.py +0 -0
  303. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/pypi/pypi_environment.py +0 -0
  304. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/pypi/utils.py +0 -0
  305. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/resources_decorator.py +0 -0
  306. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/retry_decorator.py +0 -0
  307. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/secrets/__init__.py +0 -0
  308. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/secrets/inline_secrets_provider.py +0 -0
  309. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/secrets/secrets_decorator.py +0 -0
  310. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/storage_executor.py +0 -0
  311. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/tag_cli.py +0 -0
  312. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/test_unbounded_foreach_decorator.py +0 -0
  313. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/plugins/timeout_decorator.py +0 -0
  314. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/procpoll.py +0 -0
  315. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/py.typed +0 -0
  316. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/pylint_wrapper.py +0 -0
  317. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/runner/__init__.py +0 -0
  318. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/runner/deployer.py +0 -0
  319. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/runner/deployer_impl.py +0 -0
  320. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/runner/metaflow_runner.py +0 -0
  321. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/runner/nbdeploy.py +0 -0
  322. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/runner/nbrun.py +0 -0
  323. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/runner/subprocess_manager.py +0 -0
  324. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/runner/utils.py +0 -0
  325. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/runtime.py +0 -0
  326. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/sidecar/__init__.py +0 -0
  327. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/sidecar/sidecar.py +0 -0
  328. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/sidecar/sidecar_messages.py +0 -0
  329. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/sidecar/sidecar_subprocess.py +0 -0
  330. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/sidecar/sidecar_worker.py +0 -0
  331. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/system/__init__.py +0 -0
  332. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/system/system_logger.py +0 -0
  333. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/system/system_monitor.py +0 -0
  334. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/system/system_utils.py +0 -0
  335. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tagging_util.py +0 -0
  336. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/task.py +0 -0
  337. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tracing/__init__.py +0 -0
  338. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tracing/propagator.py +0 -0
  339. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tracing/span_exporter.py +0 -0
  340. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tracing/tracing_modules.py +0 -0
  341. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tuple_util.py +0 -0
  342. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/00-helloworld/README.md +0 -0
  343. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/00-helloworld/helloworld.py +0 -0
  344. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/01-playlist/README.md +0 -0
  345. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/01-playlist/movies.csv +0 -0
  346. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/01-playlist/playlist.ipynb +0 -0
  347. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/01-playlist/playlist.py +0 -0
  348. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/02-statistics/README.md +0 -0
  349. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/02-statistics/movies.csv +0 -0
  350. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/02-statistics/stats.ipynb +0 -0
  351. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/02-statistics/stats.py +0 -0
  352. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/03-playlist-redux/README.md +0 -0
  353. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/03-playlist-redux/playlist.py +0 -0
  354. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/04-playlist-plus/README.md +0 -0
  355. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/04-playlist-plus/playlist.py +0 -0
  356. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/05-hello-cloud/README.md +0 -0
  357. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/05-hello-cloud/hello-cloud.ipynb +0 -0
  358. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/05-hello-cloud/hello-cloud.py +0 -0
  359. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/06-statistics-redux/README.md +0 -0
  360. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/06-statistics-redux/stats.ipynb +0 -0
  361. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/07-worldview/README.md +0 -0
  362. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/07-worldview/worldview.ipynb +0 -0
  363. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/08-autopilot/README.md +0 -0
  364. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/tutorials/08-autopilot/autopilot.ipynb +0 -0
  365. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/unbounded_foreach.py +0 -0
  366. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/user_configs/__init__.py +0 -0
  367. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/user_configs/config_decorators.py +0 -0
  368. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/util.py +0 -0
  369. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow/vendor.py +0 -0
  370. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow.egg-info/SOURCES.txt +0 -0
  371. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow.egg-info/dependency_links.txt +0 -0
  372. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow.egg-info/entry_points.txt +0 -0
  373. {metaflow-2.13.5 → metaflow-2.13.7}/metaflow.egg-info/top_level.txt +0 -0
  374. {metaflow-2.13.5 → metaflow-2.13.7}/setup.cfg +0 -0
  375. {metaflow-2.13.5 → metaflow-2.13.7}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: metaflow
3
- Version: 2.13.5
3
+ Version: 2.13.7
4
4
  Summary: Metaflow: More Data Science, 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.13.5; extra == "stubs"
29
+ Requires-Dist: metaflow-stubs==2.13.7; extra == "stubs"
30
30
  Dynamic: author
31
31
  Dynamic: author-email
32
32
  Dynamic: classifier
@@ -591,9 +591,13 @@ def _init_flow_decorators(
591
591
  )
592
592
  else:
593
593
  # Each "non-multiple" flow decorator is only allowed to have one set of options
594
+ # Note that there may be no deco_options if a MutableFlow config injected
595
+ # the decorator.
594
596
  deco_flow_init_options = {
595
- option: deco_options[option.replace("-", "_")]
596
- for option in deco.options
597
+ option: deco_options.get(
598
+ option.replace("-", "_"), option_info["default"]
599
+ )
600
+ for option, option_info in deco.options.items()
597
601
  }
598
602
  for deco in decorators:
599
603
  deco.flow_init(
@@ -86,6 +86,11 @@ class FlowSpecMeta(type):
86
86
  super().__init__(name, bases, attrs)
87
87
  if name == "FlowSpec":
88
88
  return
89
+
90
+ from .decorators import (
91
+ DuplicateFlowDecoratorException,
92
+ ) # Prevent circular import
93
+
89
94
  # We store some state in the flow class itself. This is primarily used to
90
95
  # attach global state to a flow. It is *not* an actual global because of
91
96
  # Runner/NBRunner. This is also created here in the meta class to avoid it being
@@ -98,6 +103,31 @@ class FlowSpecMeta(type):
98
103
  # Keys are _FlowState enum values
99
104
  cls._flow_state = {}
100
105
 
106
+ # We inherit stuff from our parent classes as well -- we need to be careful
107
+ # in terms of the order; we will follow the MRO with the following rules:
108
+ # - decorators (cls._flow_decorators) will cause an error if they do not
109
+ # support multiple and we see multiple instances of the same
110
+ # - config decorators will be joined
111
+ # - configs will be added later directly by the class; base class configs will
112
+ # be taken into account as they would be inherited.
113
+
114
+ # We only need to do this for the base classes since the current class will
115
+ # get updated as decorators are parsed.
116
+ for base in cls.__mro__:
117
+ if base != cls and base != FlowSpec and issubclass(base, FlowSpec):
118
+ # Take care of decorators
119
+ for deco_name, deco in base._flow_decorators.items():
120
+ if deco_name in cls._flow_decorators and not deco.allow_multiple:
121
+ raise DuplicateFlowDecoratorException(deco_name)
122
+ cls._flow_decorators.setdefault(deco_name, []).extend(deco)
123
+
124
+ # Take care of configs and config decorators
125
+ base_configs = base._flow_state.get(_FlowState.CONFIG_DECORATORS)
126
+ if base_configs:
127
+ cls._flow_state.setdefault(_FlowState.CONFIG_DECORATORS, []).extend(
128
+ base_configs
129
+ )
130
+
101
131
  cls._init_attrs()
102
132
 
103
133
  def _init_attrs(cls):
@@ -316,7 +316,7 @@ class Parameter(object):
316
316
  help : str, optional, default None
317
317
  Help text to show in `run --help`.
318
318
  required : bool, optional, default None
319
- Require that the user specified a value for the parameter. Note that if
319
+ Require that the user specifies a value for the parameter. Note that if
320
320
  a default is provide, the required flag is ignored.
321
321
  A value of None is equivalent to False.
322
322
  show_default : bool, optional, default None
@@ -624,6 +624,16 @@ class ArgoWorkflows(object):
624
624
  for event in trigger_on_finish_deco.triggers:
625
625
  # Actual filters are deduced here since we don't have access to
626
626
  # the current object in the @trigger_on_finish decorator.
627
+ project_name = event.get("project") or current.get("project_name")
628
+ branch_name = event.get("branch") or current.get("branch_name")
629
+ # validate that we have complete project info for an event name
630
+ if project_name or branch_name:
631
+ if not (project_name and branch_name):
632
+ # if one of the two is missing, we would end up listening to an event that will never be broadcast.
633
+ raise ArgoWorkflowsException(
634
+ "Incomplete project info. Please specify both 'project' and 'project_branch' or use the @project decorator"
635
+ )
636
+
627
637
  triggers.append(
628
638
  {
629
639
  # Make sure this remains consistent with the event name format
@@ -632,18 +642,16 @@ class ArgoWorkflows(object):
632
642
  % ".".join(
633
643
  v
634
644
  for v in [
635
- event.get("project") or current.get("project_name"),
636
- event.get("branch") or current.get("branch_name"),
645
+ project_name,
646
+ branch_name,
637
647
  event["flow"],
638
648
  ]
639
649
  if v
640
650
  ),
641
651
  "filters": {
642
652
  "auto-generated-by-metaflow": True,
643
- "project_name": event.get("project")
644
- or current.get("project_name"),
645
- "branch_name": event.get("branch")
646
- or current.get("branch_name"),
653
+ "project_name": project_name,
654
+ "branch_name": branch_name,
647
655
  # TODO: Add a time filters to guard against cached events
648
656
  },
649
657
  "type": "run",
@@ -841,8 +849,15 @@ class ArgoWorkflows(object):
841
849
  Metadata()
842
850
  .labels(self._base_labels)
843
851
  .label("app.kubernetes.io/name", "metaflow-task")
844
- .annotations(annotations)
845
- .annotations(self._base_annotations)
852
+ .annotations(
853
+ {
854
+ **annotations,
855
+ **self._base_annotations,
856
+ **{
857
+ "metaflow/run_id": "argo-{{workflow.name}}"
858
+ }, # we want pods of the workflow to have the run_id as an annotation as well
859
+ }
860
+ )
846
861
  )
847
862
  # Set the entrypoint to flow name
848
863
  .entrypoint(self.flow.name)
@@ -398,111 +398,23 @@ class TriggerOnFinishDecorator(FlowDecorator):
398
398
  )
399
399
  elif self.attributes["flow"]:
400
400
  # flow supports the format @trigger_on_finish(flow='FooFlow')
401
- if is_stringish(self.attributes["flow"]):
402
- self.triggers.append(
403
- {
404
- "fq_name": self.attributes["flow"],
405
- }
406
- )
407
- elif isinstance(self.attributes["flow"], dict):
408
- if "name" not in self.attributes["flow"]:
409
- raise MetaflowException(
410
- "The *flow* attribute for *@trigger_on_finish* is missing the "
411
- "*name* key."
412
- )
413
- flow_name = self.attributes["flow"]["name"]
414
-
415
- if not is_stringish(flow_name) or "." in flow_name:
416
- raise MetaflowException(
417
- "The *name* attribute of the *flow* is not a valid string"
418
- )
419
- result = {"fq_name": flow_name}
420
- if "project" in self.attributes["flow"]:
421
- if is_stringish(self.attributes["flow"]["project"]):
422
- result["project"] = self.attributes["flow"]["project"]
423
- else:
424
- raise MetaflowException(
425
- "The *project* attribute of the *flow* is not a string"
426
- )
427
- if "project_branch" in self.attributes["flow"]:
428
- if is_stringish(self.attributes["flow"]["project_branch"]):
429
- result["branch"] = self.attributes["flow"]["project_branch"]
430
- else:
431
- raise MetaflowException(
432
- "The *project_branch* attribute of the *flow* is not a string"
433
- )
434
- self.triggers.append(result)
435
- elif callable(self.attributes["flow"]) and not isinstance(
401
+ flow = self.attributes["flow"]
402
+ if callable(flow) and not isinstance(
436
403
  self.attributes["flow"], DeployTimeField
437
404
  ):
438
- trig = DeployTimeField(
439
- "fq_name", [str, dict], None, self.attributes["flow"], False
440
- )
405
+ trig = DeployTimeField("fq_name", [str, dict], None, flow, False)
441
406
  self.triggers.append(trig)
442
407
  else:
443
- raise MetaflowException(
444
- "Incorrect type for *flow* attribute in *@trigger_on_finish* "
445
- " decorator. Supported type is string or Dict[str, str] - \n"
446
- "@trigger_on_finish(flow='FooFlow') or "
447
- "@trigger_on_finish(flow={'name':'FooFlow', 'project_branch': 'branch'})"
448
- )
408
+ self.triggers.extend(self._parse_static_triggers([flow]))
449
409
  elif self.attributes["flows"]:
450
410
  # flows attribute supports the following formats -
451
411
  # 1. flows=['FooFlow', 'BarFlow']
452
- if isinstance(self.attributes["flows"], list):
453
- for flow in self.attributes["flows"]:
454
- if is_stringish(flow):
455
- self.triggers.append(
456
- {
457
- "fq_name": flow,
458
- }
459
- )
460
- elif isinstance(flow, dict):
461
- if "name" not in flow:
462
- raise MetaflowException(
463
- "One or more flows in the *flows* attribute for "
464
- "*@trigger_on_finish* is missing the "
465
- "*name* key."
466
- )
467
- flow_name = flow["name"]
468
-
469
- if not is_stringish(flow_name) or "." in flow_name:
470
- raise MetaflowException(
471
- "The *name* attribute '%s' is not a valid string"
472
- % str(flow_name)
473
- )
474
- result = {"fq_name": flow_name}
475
- if "project" in flow:
476
- if is_stringish(flow["project"]):
477
- result["project"] = flow["project"]
478
- else:
479
- raise MetaflowException(
480
- "The *project* attribute of the *flow* '%s' is not "
481
- "a string" % flow_name
482
- )
483
- if "project_branch" in flow:
484
- if is_stringish(flow["project_branch"]):
485
- result["branch"] = flow["project_branch"]
486
- else:
487
- raise MetaflowException(
488
- "The *project_branch* attribute of the *flow* %s "
489
- "is not a string" % flow_name
490
- )
491
- self.triggers.append(result)
492
- else:
493
- raise MetaflowException(
494
- "One or more flows in *flows* attribute in "
495
- "*@trigger_on_finish* decorator have an incorrect type. "
496
- "Supported type is string or Dict[str, str]- \n"
497
- "@trigger_on_finish(flows=['FooFlow', 'BarFlow']"
498
- )
499
- elif callable(self.attributes["flows"]) and not isinstance(
500
- self.attributes["flows"], DeployTimeField
501
- ):
502
- trig = DeployTimeField(
503
- "flows", list, None, self.attributes["flows"], False
504
- )
412
+ flows = self.attributes["flows"]
413
+ if callable(flows) and not isinstance(flows, DeployTimeField):
414
+ trig = DeployTimeField("flows", list, None, flows, False)
505
415
  self.triggers.append(trig)
416
+ elif isinstance(flows, list):
417
+ self.triggers.extend(self._parse_static_triggers(flows))
506
418
  else:
507
419
  raise MetaflowException(
508
420
  "Incorrect type for *flows* attribute in *@trigger_on_finish* "
@@ -519,26 +431,7 @@ class TriggerOnFinishDecorator(FlowDecorator):
519
431
  for trigger in self.triggers:
520
432
  if isinstance(trigger, DeployTimeField):
521
433
  continue
522
- if trigger["fq_name"].count(".") == 0:
523
- # fully qualified name is just the flow name
524
- trigger["flow"] = trigger["fq_name"]
525
- elif trigger["fq_name"].count(".") >= 2:
526
- # fully qualified name is of the format - project.branch.flow_name
527
- trigger["project"], tail = trigger["fq_name"].split(".", maxsplit=1)
528
- trigger["branch"], trigger["flow"] = tail.rsplit(".", maxsplit=1)
529
- else:
530
- raise MetaflowException(
531
- "Incorrect format for *flow* in *@trigger_on_finish* "
532
- "decorator. Specify either just the *flow_name* or a fully "
533
- "qualified name like *project_name.branch_name.flow_name*."
534
- )
535
- # TODO: Also sanity check project and branch names
536
- if not re.match(r"^[A-Za-z0-9_]+$", trigger["flow"]):
537
- raise MetaflowException(
538
- "Invalid flow name *%s* in *@trigger_on_finish* "
539
- "decorator. Only alphanumeric characters and "
540
- "underscores(_) are allowed." % trigger["flow"]
541
- )
434
+ self._parse_fq_name(trigger)
542
435
 
543
436
  self.options = self.attributes["options"]
544
437
 
@@ -593,9 +486,67 @@ class TriggerOnFinishDecorator(FlowDecorator):
593
486
  run_objs.append(run_obj)
594
487
  current._update_env({"trigger": Trigger.from_runs(run_objs)})
595
488
 
489
+ @staticmethod
490
+ def _parse_static_triggers(flows):
491
+ results = []
492
+ for flow in flows:
493
+ if is_stringish(flow):
494
+ results.append(
495
+ {
496
+ "fq_name": flow,
497
+ }
498
+ )
499
+ elif isinstance(flow, dict):
500
+ if "name" not in flow:
501
+ if len(flows) > 1:
502
+ raise MetaflowException(
503
+ "One or more flows in the *flows* attribute for "
504
+ "*@trigger_on_finish* is missing the "
505
+ "*name* key."
506
+ )
507
+ raise MetaflowException(
508
+ "The *flow* attribute for *@trigger_on_finish* is missing the "
509
+ "*name* key."
510
+ )
511
+ flow_name = flow["name"]
512
+
513
+ if not is_stringish(flow_name) or "." in flow_name:
514
+ raise MetaflowException(
515
+ f"The *name* attribute of the *flow* {flow_name} is not a valid string"
516
+ )
517
+ result = {"fq_name": flow_name}
518
+ if "project" in flow:
519
+ if is_stringish(flow["project"]):
520
+ result["project"] = flow["project"]
521
+ else:
522
+ raise MetaflowException(
523
+ f"The *project* attribute of the *flow* {flow_name} is not a string"
524
+ )
525
+ if "project_branch" in flow:
526
+ if is_stringish(flow["project_branch"]):
527
+ result["branch"] = flow["project_branch"]
528
+ else:
529
+ raise MetaflowException(
530
+ f"The *project_branch* attribute of the *flow* {flow_name} is not a string"
531
+ )
532
+ results.append(result)
533
+ else:
534
+ if len(flows) > 1:
535
+ raise MetaflowException(
536
+ "One or more flows in the *flows* attribute for "
537
+ "*@trigger_on_finish* decorator have an incorrect type. "
538
+ "Supported type is string or Dict[str, str]- \n"
539
+ "@trigger_on_finish(flows=['FooFlow', 'BarFlow']"
540
+ )
541
+ raise MetaflowException(
542
+ "Incorrect type for *flow* attribute in *@trigger_on_finish* "
543
+ " decorator. Supported type is string or Dict[str, str] - \n"
544
+ "@trigger_on_finish(flow='FooFlow') or "
545
+ "@trigger_on_finish(flow={'name':'FooFlow', 'project_branch': 'branch'})"
546
+ )
547
+ return results
548
+
596
549
  def _parse_fq_name(self, trigger):
597
- if isinstance(trigger, DeployTimeField):
598
- trigger["fq_name"] = deploy_time_eval(trigger["fq_name"])
599
550
  if trigger["fq_name"].count(".") == 0:
600
551
  # fully qualified name is just the flow name
601
552
  trigger["flow"] = trigger["fq_name"]
@@ -615,32 +566,18 @@ class TriggerOnFinishDecorator(FlowDecorator):
615
566
  "decorator. Only alphanumeric characters and "
616
567
  "underscores(_) are allowed." % trigger["flow"]
617
568
  )
618
- return trigger
619
569
 
620
570
  def format_deploytime_value(self):
621
- for trigger in self.triggers:
622
- # Case were trigger is a function that returns a list
623
- # Need to do this bc we need to iterate over list and process
624
- if isinstance(trigger, DeployTimeField):
625
- deploy_value = deploy_time_eval(trigger)
626
- if isinstance(deploy_value, list):
627
- self.triggers = deploy_value
571
+ if len(self.triggers) == 1 and isinstance(self.triggers[0], DeployTimeField):
572
+ deploy_value = deploy_time_eval(self.triggers[0])
573
+ if isinstance(deploy_value, list):
574
+ self.triggers = deploy_value
628
575
  else:
629
- break
630
- for trigger in self.triggers:
631
- # Entire trigger is a function (returns either string or dict)
632
- old_trig = trigger
633
- if isinstance(trigger, DeployTimeField):
634
- trigger = deploy_time_eval(trigger)
635
- if isinstance(trigger, dict):
636
- trigger["fq_name"] = trigger.get("name")
637
- trigger["project"] = trigger.get("project")
638
- trigger["branch"] = trigger.get("project_branch")
639
- # We also added this bc it won't be formatted yet
640
- if isinstance(trigger, str):
641
- trigger = {"fq_name": trigger}
642
- trigger = self._parse_fq_name(trigger)
643
- self.triggers[self.triggers.index(old_trig)] = trigger
576
+ self.triggers = [deploy_value]
577
+ triggers = self._parse_static_triggers(self.triggers)
578
+ for trigger in triggers:
579
+ self._parse_fq_name(trigger)
580
+ self.triggers = triggers
644
581
 
645
582
  def get_top_level_options(self):
646
583
  return list(self._option_values.items())
@@ -669,15 +669,6 @@ class Kubernetes(object):
669
669
  for name, value in system_annotations.items():
670
670
  job.annotation(name, value)
671
671
 
672
- (
673
- job.annotation("metaflow/run_id", run_id)
674
- .annotation("metaflow/step_name", step_name)
675
- .annotation("metaflow/task_id", task_id)
676
- .annotation("metaflow/attempt", attempt)
677
- .label("app.kubernetes.io/name", "metaflow-task")
678
- .label("app.kubernetes.io/part-of", "metaflow")
679
- )
680
-
681
672
  return job
682
673
 
683
674
  def create_k8sjob(self, job):
@@ -371,6 +371,8 @@ class MetaflowAPI(object):
371
371
  else:
372
372
  components.append(v)
373
373
  for k, v in options.items():
374
+ if v is None:
375
+ continue
374
376
  if isinstance(v, list):
375
377
  for i in v:
376
378
  if isinstance(i, tuple):
@@ -169,7 +169,7 @@ class ConfigInput:
169
169
  "Please contact support."
170
170
  )
171
171
  cls.loaded_configs = all_configs
172
- return cls.loaded_configs.get(config_name, None)
172
+ return cls.loaded_configs[config_name]
173
173
 
174
174
  def process_configs(
175
175
  self,
@@ -326,6 +326,8 @@ class ConfigInput:
326
326
  for name, val in merged_configs.items():
327
327
  if val is None:
328
328
  missing_configs.add(name)
329
+ to_return[name] = None
330
+ flow_cls._flow_state[_FlowState.CONFIGS][name] = None
329
331
  continue
330
332
  if val.startswith(_CONVERTED_DEFAULT_NO_FILE):
331
333
  no_default_file.append(name)
@@ -339,15 +341,16 @@ class ConfigInput:
339
341
  val = val[len(_DEFAULT_PREFIX) :]
340
342
  if val.startswith("kv."):
341
343
  # This means to load it from a file
342
- read_value = self.get_config(val[3:])
343
- if read_value is None:
344
+ try:
345
+ read_value = self.get_config(val[3:])
346
+ except KeyError as e:
344
347
  exc = click.UsageError(
345
348
  "Could not find configuration '%s' in INFO file" % val
346
349
  )
347
350
  if click_obj:
348
351
  click_obj.delayed_config_exception = exc
349
352
  return None
350
- raise exc
353
+ raise exc from e
351
354
  flow_cls._flow_state[_FlowState.CONFIGS][name] = read_value
352
355
  to_return[name] = ConfigValue(read_value)
353
356
  else:
@@ -290,17 +290,17 @@ class Config(Parameter, collections.abc.Mapping):
290
290
  default : Union[str, Callable[[ParameterContext], str], optional, default None
291
291
  Default path from where to read this configuration. A function implies that the
292
292
  value will be computed using that function.
293
- You can only specify default or default_value.
293
+ You can only specify default or default_value, not both.
294
294
  default_value : Union[str, Dict[str, Any], Callable[[ParameterContext, Union[str, Dict[str, Any]]], Any], optional, default None
295
295
  Default value for the parameter. A function
296
296
  implies that the value will be computed using that function.
297
- You can only specify default or default_value.
297
+ You can only specify default or default_value, not both.
298
298
  help : str, optional, default None
299
299
  Help text to show in `run --help`.
300
300
  required : bool, optional, default None
301
- Require that the user specified a value for the configuration. Note that if
302
- a default is provided, the required flag is ignored. A value of None is
303
- equivalent to False.
301
+ Require that the user specifies a value for the configuration. Note that if
302
+ a default or default_value is provided, the required flag is ignored.
303
+ A value of None is equivalent to False.
304
304
  parser : Union[str, Callable[[str], Dict[Any, Any]]], optional, default None
305
305
  If a callable, it is a function that can parse the configuration string
306
306
  into an arbitrarily nested dictionary. If a string, the string should refer to
@@ -330,13 +330,13 @@ class Config(Parameter, collections.abc.Mapping):
330
330
  **kwargs: Dict[str, str]
331
331
  ):
332
332
 
333
- if default and default_value:
333
+ if default is not None and default_value is not None:
334
334
  raise MetaflowException(
335
335
  "For config '%s', you can only specify default or default_value, not both"
336
336
  % name
337
337
  )
338
338
  self._default_is_file = default is not None
339
- kwargs["default"] = default or default_value
339
+ kwargs["default"] = default if default is not None else default_value
340
340
  super(Config, self).__init__(
341
341
  name, required=required, help=help, type=str, **kwargs
342
342
  )
@@ -0,0 +1 @@
1
+ metaflow_version = "2.13.7"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: metaflow
3
- Version: 2.13.5
3
+ Version: 2.13.7
4
4
  Summary: Metaflow: More Data Science, 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.13.5; extra == "stubs"
29
+ Requires-Dist: metaflow-stubs==2.13.7; extra == "stubs"
30
30
  Dynamic: author
31
31
  Dynamic: author-email
32
32
  Dynamic: classifier
@@ -2,4 +2,4 @@ requests
2
2
  boto3
3
3
 
4
4
  [stubs]
5
- metaflow-stubs==2.13.5
5
+ metaflow-stubs==2.13.7
@@ -1 +0,0 @@
1
- metaflow_version = "2.13.5"
File without changes
File without changes
File without changes
File without changes