ob-metaflow 2.12.36.3__tar.gz → 2.13.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of ob-metaflow might be problematic. Click here for more details.

Files changed (375) hide show
  1. {ob_metaflow-2.12.36.3/ob_metaflow.egg-info → ob_metaflow-2.13.0.1}/PKG-INFO +3 -2
  2. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/README.md +1 -0
  3. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/__init__.py +3 -0
  4. ob_metaflow-2.13.0.1/metaflow/cli.py +651 -0
  5. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/cli_args.py +17 -0
  6. ob_metaflow-2.13.0.1/metaflow/cli_components/dump_cmd.py +96 -0
  7. ob_metaflow-2.13.0.1/metaflow/cli_components/init_cmd.py +51 -0
  8. ob_metaflow-2.13.0.1/metaflow/cli_components/run_cmds.py +360 -0
  9. ob_metaflow-2.13.0.1/metaflow/cli_components/step_cmd.py +189 -0
  10. ob_metaflow-2.13.0.1/metaflow/cli_components/utils.py +140 -0
  11. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/cmd/develop/stub_generator.py +9 -2
  12. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/datastore/flow_datastore.py +2 -2
  13. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/decorators.py +63 -2
  14. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/exception.py +8 -2
  15. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/extension_support/plugins.py +41 -27
  16. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/flowspec.py +175 -23
  17. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/graph.py +28 -27
  18. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/includefile.py +50 -22
  19. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/lint.py +35 -20
  20. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/metaflow_config.py +6 -1
  21. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/package.py +17 -3
  22. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/parameters.py +87 -23
  23. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/__init__.py +4 -0
  24. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/airflow/airflow_cli.py +1 -0
  25. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/argo/argo_workflows.py +41 -1
  26. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/argo/argo_workflows_cli.py +1 -0
  27. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/argo/argo_workflows_deployer_objects.py +47 -1
  28. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/aws/batch/batch_decorator.py +2 -2
  29. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/aws/secrets_manager/aws_secrets_manager_secrets_provider.py +13 -10
  30. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/aws/step_functions/step_functions.py +32 -0
  31. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/aws/step_functions/step_functions_cli.py +1 -0
  32. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/aws/step_functions/step_functions_deployer_objects.py +3 -0
  33. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_creator.py +1 -0
  34. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_decorator.py +46 -8
  35. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/kubernetes/kubernetes_decorator.py +2 -2
  36. ob_metaflow-2.13.0.1/metaflow/plugins/pypi/bootstrap.py +275 -0
  37. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/pypi/conda_decorator.py +20 -10
  38. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/pypi/conda_environment.py +76 -21
  39. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/pypi/micromamba.py +42 -15
  40. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/pypi/pip.py +8 -3
  41. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/pypi/pypi_decorator.py +11 -9
  42. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/timeout_decorator.py +2 -2
  43. ob_metaflow-2.13.0.1/metaflow/runner/__init__.py +0 -0
  44. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/runner/click_api.py +240 -50
  45. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/runner/deployer.py +1 -1
  46. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/runner/deployer_impl.py +8 -3
  47. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/runner/metaflow_runner.py +10 -2
  48. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/runner/nbdeploy.py +2 -0
  49. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/runner/nbrun.py +1 -1
  50. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/runner/subprocess_manager.py +3 -1
  51. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/runner/utils.py +41 -19
  52. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/runtime.py +111 -73
  53. ob_metaflow-2.13.0.1/metaflow/user_configs/__init__.py +0 -0
  54. ob_metaflow-2.13.0.1/metaflow/user_configs/config_decorators.py +563 -0
  55. ob_metaflow-2.13.0.1/metaflow/user_configs/config_options.py +548 -0
  56. ob_metaflow-2.13.0.1/metaflow/user_configs/config_parameters.py +405 -0
  57. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/util.py +17 -0
  58. ob_metaflow-2.13.0.1/metaflow/version.py +1 -0
  59. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1/ob_metaflow.egg-info}/PKG-INFO +3 -2
  60. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/ob_metaflow.egg-info/SOURCES.txt +10 -0
  61. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/ob_metaflow.egg-info/requires.txt +1 -1
  62. ob_metaflow-2.12.36.3/metaflow/cli.py +0 -1189
  63. ob_metaflow-2.12.36.3/metaflow/plugins/pypi/bootstrap.py +0 -140
  64. ob_metaflow-2.12.36.3/metaflow/version.py +0 -1
  65. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/LICENSE +0 -0
  66. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/MANIFEST.in +0 -0
  67. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/R.py +0 -0
  68. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/__init__.py +0 -0
  69. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/click/__init__.py +0 -0
  70. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/click/_bashcomplete.py +0 -0
  71. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/click/_compat.py +0 -0
  72. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/click/_termui_impl.py +0 -0
  73. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/click/_textwrap.py +0 -0
  74. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/click/_unicodefun.py +0 -0
  75. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/click/_winconsole.py +0 -0
  76. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/click/core.py +0 -0
  77. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/click/decorators.py +0 -0
  78. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/click/exceptions.py +0 -0
  79. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/click/formatting.py +0 -0
  80. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/click/globals.py +0 -0
  81. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/click/parser.py +0 -0
  82. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/click/termui.py +0 -0
  83. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/click/testing.py +0 -0
  84. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/click/types.py +0 -0
  85. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/click/utils.py +0 -0
  86. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/importlib_metadata/__init__.py +0 -0
  87. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/importlib_metadata/_adapters.py +0 -0
  88. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/importlib_metadata/_collections.py +0 -0
  89. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/importlib_metadata/_compat.py +0 -0
  90. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/importlib_metadata/_functools.py +0 -0
  91. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/importlib_metadata/_itertools.py +0 -0
  92. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/importlib_metadata/_meta.py +0 -0
  93. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/importlib_metadata/_text.py +0 -0
  94. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/importlib_metadata/py.typed +0 -0
  95. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/packaging/__init__.py +0 -0
  96. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/packaging/_elffile.py +0 -0
  97. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/packaging/_manylinux.py +0 -0
  98. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/packaging/_musllinux.py +0 -0
  99. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/packaging/_parser.py +0 -0
  100. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/packaging/_structures.py +0 -0
  101. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/packaging/_tokenizer.py +0 -0
  102. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/packaging/markers.py +0 -0
  103. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/packaging/py.typed +0 -0
  104. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/packaging/requirements.py +0 -0
  105. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/packaging/specifiers.py +0 -0
  106. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/packaging/tags.py +0 -0
  107. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/packaging/utils.py +0 -0
  108. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/packaging/version.py +0 -0
  109. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/typeguard/__init__.py +0 -0
  110. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/typeguard/_checkers.py +0 -0
  111. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/typeguard/_config.py +0 -0
  112. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/typeguard/_decorators.py +0 -0
  113. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/typeguard/_exceptions.py +0 -0
  114. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/typeguard/_functions.py +0 -0
  115. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/typeguard/_importhook.py +0 -0
  116. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/typeguard/_memo.py +0 -0
  117. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/typeguard/_pytest_plugin.py +0 -0
  118. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/typeguard/_suppression.py +0 -0
  119. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/typeguard/_transformer.py +0 -0
  120. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/typeguard/_union_transformer.py +0 -0
  121. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/typeguard/_utils.py +0 -0
  122. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/typeguard/py.typed +0 -0
  123. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/typing_extensions.py +0 -0
  124. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/v3_5/__init__.py +0 -0
  125. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/v3_5/importlib_metadata/__init__.py +0 -0
  126. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/v3_5/importlib_metadata/_compat.py +0 -0
  127. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/v3_5/zipp.py +0 -0
  128. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/v3_6/__init__.py +0 -0
  129. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/v3_6/importlib_metadata/__init__.py +0 -0
  130. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/v3_6/importlib_metadata/_adapters.py +0 -0
  131. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/v3_6/importlib_metadata/_collections.py +0 -0
  132. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/v3_6/importlib_metadata/_compat.py +0 -0
  133. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/v3_6/importlib_metadata/_functools.py +0 -0
  134. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/v3_6/importlib_metadata/_itertools.py +0 -0
  135. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/v3_6/importlib_metadata/_meta.py +0 -0
  136. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/v3_6/importlib_metadata/_text.py +0 -0
  137. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/v3_6/importlib_metadata/py.typed +0 -0
  138. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/v3_6/typing_extensions.py +0 -0
  139. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/v3_6/zipp.py +0 -0
  140. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/_vendor/zipp.py +0 -0
  141. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/cards.py +0 -0
  142. {ob_metaflow-2.12.36.3/metaflow/plugins/airflow → ob_metaflow-2.13.0.1/metaflow/cli_components}/__init__.py +0 -0
  143. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/client/__init__.py +0 -0
  144. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/client/core.py +0 -0
  145. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/client/filecache.py +0 -0
  146. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/clone_util.py +0 -0
  147. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/cmd/__init__.py +0 -0
  148. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/cmd/configure_cmd.py +0 -0
  149. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/cmd/develop/__init__.py +0 -0
  150. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/cmd/develop/stubs.py +0 -0
  151. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/cmd/main_cli.py +0 -0
  152. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/cmd/tutorials_cmd.py +0 -0
  153. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/cmd/util.py +0 -0
  154. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/cmd_with_io.py +0 -0
  155. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/datastore/__init__.py +0 -0
  156. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/datastore/content_addressed_store.py +0 -0
  157. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/datastore/datastore_set.py +0 -0
  158. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/datastore/datastore_storage.py +0 -0
  159. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/datastore/exceptions.py +0 -0
  160. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/datastore/inputs.py +0 -0
  161. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/datastore/task_datastore.py +0 -0
  162. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/debug.py +0 -0
  163. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/event_logger.py +0 -0
  164. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/events.py +0 -0
  165. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/extension_support/__init__.py +0 -0
  166. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/extension_support/_empty_file.py +0 -0
  167. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/extension_support/cmd.py +0 -0
  168. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/extension_support/integrations.py +0 -0
  169. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/info_file.py +0 -0
  170. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/integrations.py +0 -0
  171. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/metadata_provider/__init__.py +0 -0
  172. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/metadata_provider/heartbeat.py +0 -0
  173. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/metadata_provider/metadata.py +0 -0
  174. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/metadata_provider/util.py +0 -0
  175. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/metaflow_config_funcs.py +0 -0
  176. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/metaflow_current.py +0 -0
  177. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/metaflow_environment.py +0 -0
  178. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/metaflow_profile.py +0 -0
  179. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/metaflow_version.py +0 -0
  180. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/mflog/__init__.py +0 -0
  181. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/mflog/mflog.py +0 -0
  182. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/mflog/save_logs.py +0 -0
  183. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/mflog/save_logs_periodically.py +0 -0
  184. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/mflog/tee.py +0 -0
  185. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/monitor.py +0 -0
  186. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/multicore_utils.py +0 -0
  187. {ob_metaflow-2.12.36.3/metaflow/plugins/airflow/plumbing → ob_metaflow-2.13.0.1/metaflow/plugins/airflow}/__init__.py +0 -0
  188. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/airflow/airflow.py +0 -0
  189. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/airflow/airflow_decorator.py +0 -0
  190. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/airflow/airflow_utils.py +0 -0
  191. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/airflow/dag.py +0 -0
  192. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/airflow/exception.py +0 -0
  193. {ob_metaflow-2.12.36.3/metaflow/plugins/argo → ob_metaflow-2.13.0.1/metaflow/plugins/airflow/plumbing}/__init__.py +0 -0
  194. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/airflow/plumbing/set_parameters.py +0 -0
  195. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/airflow/sensors/__init__.py +0 -0
  196. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/airflow/sensors/base_sensor.py +0 -0
  197. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/airflow/sensors/external_task_sensor.py +0 -0
  198. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/airflow/sensors/s3_sensor.py +0 -0
  199. {ob_metaflow-2.12.36.3/metaflow/plugins/aws → ob_metaflow-2.13.0.1/metaflow/plugins/argo}/__init__.py +0 -0
  200. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/argo/argo_client.py +0 -0
  201. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/argo/argo_events.py +0 -0
  202. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/argo/argo_workflows_decorator.py +0 -0
  203. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/argo/argo_workflows_deployer.py +0 -0
  204. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/argo/capture_error.py +0 -0
  205. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/argo/generate_input_paths.py +0 -0
  206. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/argo/jobset_input_paths.py +0 -0
  207. {ob_metaflow-2.12.36.3/metaflow/plugins/aws/batch → ob_metaflow-2.13.0.1/metaflow/plugins/aws}/__init__.py +0 -0
  208. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/aws/aws_client.py +0 -0
  209. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/aws/aws_utils.py +0 -0
  210. {ob_metaflow-2.12.36.3/metaflow/plugins/aws/secrets_manager → ob_metaflow-2.13.0.1/metaflow/plugins/aws/batch}/__init__.py +0 -0
  211. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/aws/batch/batch.py +0 -0
  212. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/aws/batch/batch_cli.py +0 -0
  213. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/aws/batch/batch_client.py +0 -0
  214. {ob_metaflow-2.12.36.3/metaflow/plugins/aws/step_functions → ob_metaflow-2.13.0.1/metaflow/plugins/aws/secrets_manager}/__init__.py +0 -0
  215. {ob_metaflow-2.12.36.3/metaflow/plugins/cards → ob_metaflow-2.13.0.1/metaflow/plugins/aws/step_functions}/__init__.py +0 -0
  216. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/aws/step_functions/dynamo_db_client.py +0 -0
  217. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/aws/step_functions/event_bridge_client.py +0 -0
  218. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/aws/step_functions/production_token.py +0 -0
  219. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/aws/step_functions/schedule_decorator.py +0 -0
  220. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/aws/step_functions/set_batch_environment.py +0 -0
  221. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/aws/step_functions/step_functions_client.py +0 -0
  222. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/aws/step_functions/step_functions_decorator.py +0 -0
  223. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/aws/step_functions/step_functions_deployer.py +0 -0
  224. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/azure/__init__.py +0 -0
  225. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/azure/azure_credential.py +0 -0
  226. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/azure/azure_exceptions.py +0 -0
  227. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/azure/azure_secret_manager_secrets_provider.py +0 -0
  228. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/azure/azure_tail.py +0 -0
  229. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/azure/azure_utils.py +0 -0
  230. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/azure/blob_service_client_factory.py +0 -0
  231. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/azure/includefile_support.py +0 -0
  232. {ob_metaflow-2.12.36.3/metaflow/plugins/datastores → ob_metaflow-2.13.0.1/metaflow/plugins/cards}/__init__.py +0 -0
  233. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_cli.py +0 -0
  234. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_client.py +0 -0
  235. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_datastore.py +0 -0
  236. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_modules/__init__.py +0 -0
  237. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_modules/base.html +0 -0
  238. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_modules/basic.py +0 -0
  239. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_modules/bundle.css +0 -0
  240. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_modules/card.py +0 -0
  241. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_modules/chevron/__init__.py +0 -0
  242. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_modules/chevron/main.py +0 -0
  243. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_modules/chevron/metadata.py +0 -0
  244. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_modules/chevron/renderer.py +0 -0
  245. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_modules/chevron/tokenizer.py +0 -0
  246. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_modules/components.py +0 -0
  247. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_modules/convert_to_native_type.py +0 -0
  248. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_modules/main.js +0 -0
  249. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_modules/renderer_tools.py +0 -0
  250. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_modules/test_cards.py +0 -0
  251. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_resolver.py +0 -0
  252. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_server.py +0 -0
  253. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/card_viewer/viewer.html +0 -0
  254. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/component_serializer.py +0 -0
  255. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/cards/exception.py +0 -0
  256. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/catch_decorator.py +0 -0
  257. {ob_metaflow-2.12.36.3/metaflow/plugins/env_escape/configurations/emulate_test_lib → ob_metaflow-2.13.0.1/metaflow/plugins/datastores}/__init__.py +0 -0
  258. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/datastores/azure_storage.py +0 -0
  259. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/datastores/gs_storage.py +0 -0
  260. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/datastores/local_storage.py +0 -0
  261. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/datastores/s3_storage.py +0 -0
  262. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/datatools/__init__.py +0 -0
  263. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/datatools/local.py +0 -0
  264. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/datatools/s3/__init__.py +0 -0
  265. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/datatools/s3/s3.py +0 -0
  266. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/datatools/s3/s3op.py +3 -3
  267. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/datatools/s3/s3tail.py +0 -0
  268. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/datatools/s3/s3util.py +0 -0
  269. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/debug_logger.py +0 -0
  270. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/debug_monitor.py +0 -0
  271. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/env_escape/__init__.py +0 -0
  272. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/env_escape/client.py +0 -0
  273. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/env_escape/client_modules.py +0 -0
  274. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/env_escape/communication/__init__.py +0 -0
  275. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/env_escape/communication/bytestream.py +0 -0
  276. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/env_escape/communication/channel.py +0 -0
  277. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/env_escape/communication/socket_bytestream.py +0 -0
  278. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/env_escape/communication/utils.py +0 -0
  279. {ob_metaflow-2.12.36.3/metaflow/plugins/frameworks → ob_metaflow-2.13.0.1/metaflow/plugins/env_escape/configurations/emulate_test_lib}/__init__.py +0 -0
  280. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/env_escape/configurations/emulate_test_lib/overrides.py +0 -0
  281. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/env_escape/configurations/emulate_test_lib/server_mappings.py +0 -0
  282. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/env_escape/configurations/test_lib_impl/__init__.py +0 -0
  283. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/env_escape/configurations/test_lib_impl/test_lib.py +0 -0
  284. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/env_escape/consts.py +0 -0
  285. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/env_escape/data_transferer.py +0 -0
  286. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/env_escape/exception_transferer.py +0 -0
  287. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/env_escape/override_decorators.py +0 -0
  288. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/env_escape/server.py +0 -0
  289. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/env_escape/stub.py +0 -0
  290. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/env_escape/utils.py +0 -0
  291. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/environment_decorator.py +0 -0
  292. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/events_decorator.py +0 -0
  293. {ob_metaflow-2.12.36.3/metaflow/plugins/kubernetes → ob_metaflow-2.13.0.1/metaflow/plugins/frameworks}/__init__.py +0 -0
  294. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/frameworks/pytorch.py +0 -0
  295. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/gcp/__init__.py +0 -0
  296. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/gcp/gcp_secret_manager_secrets_provider.py +0 -0
  297. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/gcp/gs_exceptions.py +0 -0
  298. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/gcp/gs_storage_client_factory.py +0 -0
  299. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/gcp/gs_tail.py +0 -0
  300. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/gcp/gs_utils.py +0 -0
  301. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/gcp/includefile_support.py +0 -0
  302. {ob_metaflow-2.12.36.3/metaflow/runner → ob_metaflow-2.13.0.1/metaflow/plugins/kubernetes}/__init__.py +0 -0
  303. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/kubernetes/kube_utils.py +0 -0
  304. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/kubernetes/kubernetes.py +0 -0
  305. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/kubernetes/kubernetes_cli.py +1 -1
  306. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/kubernetes/kubernetes_client.py +0 -0
  307. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/kubernetes/kubernetes_job.py +0 -0
  308. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/kubernetes/kubernetes_jobsets.py +0 -0
  309. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/logs_cli.py +0 -0
  310. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/metadata_providers/__init__.py +0 -0
  311. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/metadata_providers/local.py +0 -0
  312. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/metadata_providers/service.py +0 -0
  313. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/package_cli.py +0 -0
  314. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/parallel_decorator.py +0 -0
  315. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/project_decorator.py +0 -0
  316. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/pypi/__init__.py +0 -0
  317. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/pypi/pypi_environment.py +0 -0
  318. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/pypi/utils.py +0 -0
  319. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/resources_decorator.py +0 -0
  320. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/retry_decorator.py +0 -0
  321. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/secrets/__init__.py +0 -0
  322. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/secrets/inline_secrets_provider.py +0 -0
  323. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/secrets/secrets_decorator.py +0 -0
  324. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/storage_executor.py +0 -0
  325. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/tag_cli.py +0 -0
  326. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/plugins/test_unbounded_foreach_decorator.py +0 -0
  327. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/procpoll.py +0 -0
  328. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/py.typed +0 -0
  329. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/pylint_wrapper.py +0 -0
  330. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/sidecar/__init__.py +0 -0
  331. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/sidecar/sidecar.py +0 -0
  332. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/sidecar/sidecar_messages.py +0 -0
  333. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/sidecar/sidecar_subprocess.py +0 -0
  334. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/sidecar/sidecar_worker.py +1 -1
  335. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/system/__init__.py +0 -0
  336. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/system/system_logger.py +0 -0
  337. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/system/system_monitor.py +0 -0
  338. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/system/system_utils.py +0 -0
  339. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tagging_util.py +0 -0
  340. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/task.py +0 -0
  341. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tracing/__init__.py +0 -0
  342. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tracing/propagator.py +0 -0
  343. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tracing/span_exporter.py +0 -0
  344. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tracing/tracing_modules.py +0 -0
  345. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tuple_util.py +0 -0
  346. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/00-helloworld/README.md +0 -0
  347. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/00-helloworld/helloworld.py +0 -0
  348. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/01-playlist/README.md +0 -0
  349. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/01-playlist/movies.csv +0 -0
  350. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/01-playlist/playlist.ipynb +0 -0
  351. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/01-playlist/playlist.py +0 -0
  352. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/02-statistics/README.md +0 -0
  353. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/02-statistics/movies.csv +0 -0
  354. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/02-statistics/stats.ipynb +0 -0
  355. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/02-statistics/stats.py +0 -0
  356. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/03-playlist-redux/README.md +0 -0
  357. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/03-playlist-redux/playlist.py +0 -0
  358. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/04-playlist-plus/README.md +0 -0
  359. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/04-playlist-plus/playlist.py +0 -0
  360. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/05-hello-cloud/README.md +0 -0
  361. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/05-hello-cloud/hello-cloud.ipynb +0 -0
  362. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/05-hello-cloud/hello-cloud.py +0 -0
  363. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/06-statistics-redux/README.md +0 -0
  364. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/06-statistics-redux/stats.ipynb +0 -0
  365. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/07-worldview/README.md +0 -0
  366. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/07-worldview/worldview.ipynb +0 -0
  367. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/08-autopilot/README.md +0 -0
  368. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/tutorials/08-autopilot/autopilot.ipynb +0 -0
  369. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/unbounded_foreach.py +0 -0
  370. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/metaflow/vendor.py +0 -0
  371. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/ob_metaflow.egg-info/dependency_links.txt +0 -0
  372. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/ob_metaflow.egg-info/entry_points.txt +0 -0
  373. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/ob_metaflow.egg-info/top_level.txt +0 -0
  374. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/setup.cfg +0 -0
  375. {ob_metaflow-2.12.36.3 → ob_metaflow-2.13.0.1}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ob-metaflow
3
- Version: 2.12.36.3
3
+ Version: 2.13.0.1
4
4
  Summary: Metaflow: More Data Science, Less Engineering
5
5
  Author: Netflix, Outerbounds & the Metaflow Community
6
6
  Author-email: help@outerbounds.co
@@ -12,7 +12,7 @@ Requires-Dist: boto3
12
12
  Requires-Dist: pylint
13
13
  Requires-Dist: kubernetes
14
14
  Provides-Extra: stubs
15
- Requires-Dist: metaflow-stubs==2.12.36.3; extra == "stubs"
15
+ Requires-Dist: metaflow-stubs==2.13.0.1; extra == "stubs"
16
16
 
17
17
  ![Metaflow_Logo_Horizontal_FullColor_Ribbon_Dark_RGB](https://user-images.githubusercontent.com/763451/89453116-96a57e00-d713-11ea-9fa6-82b29d4d6eff.png)
18
18
 
@@ -83,3 +83,4 @@ There are several ways to get in touch with us:
83
83
 
84
84
  ## Contributing
85
85
  We welcome contributions to Metaflow. Please see our [contribution guide](https://docs.metaflow.org/introduction/contributing-to-metaflow) for more details.
86
+
@@ -67,3 +67,4 @@ There are several ways to get in touch with us:
67
67
 
68
68
  ## Contributing
69
69
  We welcome contributions to Metaflow. Please see our [contribution guide](https://docs.metaflow.org/introduction/contributing-to-metaflow) for more details.
70
+
@@ -103,6 +103,9 @@ from .flowspec import FlowSpec
103
103
 
104
104
  from .parameters import Parameter, JSONTypeClass, JSONType
105
105
 
106
+ from .user_configs.config_parameters import Config, ConfigValue, config_expr
107
+ from .user_configs.config_decorators import CustomFlowDecorator, CustomStepDecorator
108
+
106
109
  # data layer
107
110
  # For historical reasons, we make metaflow.plugins.datatools accessible as
108
111
  # metaflow.datatools. S3 is also a tool that has historically been available at the
@@ -0,0 +1,651 @@
1
+ import functools
2
+ import inspect
3
+ import sys
4
+ import traceback
5
+ from datetime import datetime
6
+
7
+ import metaflow.tracing as tracing
8
+ from metaflow._vendor import click
9
+
10
+ from . import decorators, lint, metaflow_version, parameters, plugins
11
+ from .cli_args import cli_args
12
+ from .cli_components.utils import LazyGroup, LazyPluginCommandCollection
13
+ from .datastore import FlowDataStore, TaskDataStoreSet
14
+ from .debug import debug
15
+ from .exception import CommandException, MetaflowException
16
+ from .flowspec import _FlowState
17
+ from .graph import FlowGraph
18
+ from .metaflow_config import (
19
+ DECOSPECS,
20
+ DEFAULT_DATASTORE,
21
+ DEFAULT_ENVIRONMENT,
22
+ DEFAULT_EVENT_LOGGER,
23
+ DEFAULT_METADATA,
24
+ DEFAULT_MONITOR,
25
+ DEFAULT_PACKAGE_SUFFIXES,
26
+ )
27
+ from .metaflow_current import current
28
+ from metaflow.system import _system_monitor, _system_logger
29
+ from .metaflow_environment import MetaflowEnvironment
30
+ from .plugins import (
31
+ DATASTORES,
32
+ ENVIRONMENTS,
33
+ LOGGING_SIDECARS,
34
+ METADATA_PROVIDERS,
35
+ MONITOR_SIDECARS,
36
+ )
37
+ from .pylint_wrapper import PyLint
38
+ from .R import metaflow_r_version, use_r
39
+ from .util import get_latest_run_id, resolve_identity
40
+ from .user_configs.config_options import LocalFileInput, config_options
41
+ from .user_configs.config_parameters import ConfigValue
42
+
43
+ ERASE_TO_EOL = "\033[K"
44
+ HIGHLIGHT = "red"
45
+ INDENT = " " * 4
46
+
47
+ LOGGER_TIMESTAMP = "magenta"
48
+ LOGGER_COLOR = "green"
49
+ LOGGER_BAD_COLOR = "red"
50
+
51
+
52
+ def echo_dev_null(*args, **kwargs):
53
+ pass
54
+
55
+
56
+ def echo_always(line, **kwargs):
57
+ kwargs["err"] = kwargs.get("err", True)
58
+ if kwargs.pop("indent", None):
59
+ line = "\n".join(INDENT + x for x in line.splitlines())
60
+ if "nl" not in kwargs or kwargs["nl"]:
61
+ line += ERASE_TO_EOL
62
+ top = kwargs.pop("padding_top", None)
63
+ bottom = kwargs.pop("padding_bottom", None)
64
+ highlight = kwargs.pop("highlight", HIGHLIGHT)
65
+ if top:
66
+ click.secho(ERASE_TO_EOL, **kwargs)
67
+
68
+ hl_bold = kwargs.pop("highlight_bold", True)
69
+ nl = kwargs.pop("nl", True)
70
+ fg = kwargs.pop("fg", None)
71
+ bold = kwargs.pop("bold", False)
72
+ kwargs["nl"] = False
73
+ hl = True
74
+ nobold = kwargs.pop("no_bold", False)
75
+ if nobold:
76
+ click.secho(line, **kwargs)
77
+ else:
78
+ for span in line.split("*"):
79
+ if hl:
80
+ hl = False
81
+ kwargs["fg"] = fg
82
+ kwargs["bold"] = bold
83
+ click.secho(span, **kwargs)
84
+ else:
85
+ hl = True
86
+ kwargs["fg"] = highlight
87
+ kwargs["bold"] = hl_bold
88
+ click.secho(span, **kwargs)
89
+ if nl:
90
+ kwargs["nl"] = True
91
+ click.secho("", **kwargs)
92
+ if bottom:
93
+ click.secho(ERASE_TO_EOL, **kwargs)
94
+
95
+
96
+ def logger(body="", system_msg=False, head="", bad=False, timestamp=True, nl=True):
97
+ if timestamp:
98
+ if timestamp is True:
99
+ dt = datetime.now()
100
+ else:
101
+ dt = timestamp
102
+ tstamp = dt.strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]
103
+ click.secho(tstamp + " ", fg=LOGGER_TIMESTAMP, nl=False)
104
+ if head:
105
+ click.secho(head, fg=LOGGER_COLOR, nl=False)
106
+ click.secho(body, bold=system_msg, fg=LOGGER_BAD_COLOR if bad else None, nl=nl)
107
+
108
+
109
+ def config_merge_cb(ctx, param, value):
110
+ # Callback to:
111
+ # - read the Click auto_envvar variable from both the
112
+ # environment AND the configuration
113
+ # - merge that value with the value passed in the command line (value)
114
+ # - return the value as a tuple
115
+ # Note that this function gets called even if there is no option passed on the
116
+ # command line.
117
+ # NOTE: Assumes that ctx.auto_envvar_prefix is set to METAFLOW (same as in
118
+ # from_conf)
119
+
120
+ # Special case where DECOSPECS and value are the same. This happens
121
+ # when there is no --with option at the TL and DECOSPECS is read from
122
+ # the env var. In this case, click also passes it as value
123
+ splits = DECOSPECS.split()
124
+ if len(splits) == len(value) and all([a == b for (a, b) in zip(splits, value)]):
125
+ return value
126
+ return tuple(list(value) + DECOSPECS.split())
127
+
128
+
129
+ @click.group(
130
+ cls=LazyGroup,
131
+ lazy_subcommands={
132
+ "init": "metaflow.cli_components.init_cmd.init",
133
+ "dump": "metaflow.cli_components.dump_cmd.dump",
134
+ "step": "metaflow.cli_components.step_cmd.step",
135
+ "run": "metaflow.cli_components.run_cmds.run",
136
+ "resume": "metaflow.cli_components.run_cmds.resume",
137
+ },
138
+ )
139
+ def cli(ctx):
140
+ pass
141
+
142
+
143
+ @cli.command(help="Check that the flow is valid (default).")
144
+ @click.option(
145
+ "--warnings/--no-warnings",
146
+ default=False,
147
+ show_default=True,
148
+ help="Show all Pylint warnings, not just errors.",
149
+ )
150
+ @click.pass_obj
151
+ def check(obj, warnings=False):
152
+ if obj.is_quiet:
153
+ echo = echo_dev_null
154
+ else:
155
+ echo = echo_always
156
+ _check(
157
+ echo, obj.graph, obj.flow, obj.environment, pylint=obj.pylint, warnings=warnings
158
+ )
159
+ fname = inspect.getfile(obj.flow.__class__)
160
+ echo(
161
+ "\n*'{cmd} show'* shows a description of this flow.\n"
162
+ "*'{cmd} run'* runs the flow locally.\n"
163
+ "*'{cmd} help'* shows all available commands and options.\n".format(cmd=fname),
164
+ highlight="magenta",
165
+ highlight_bold=False,
166
+ )
167
+
168
+
169
+ @cli.command(help="Show structure of the flow.")
170
+ @click.pass_obj
171
+ def show(obj):
172
+ echo_always("\n%s" % obj.graph.doc)
173
+ for node_name in obj.graph.sorted_nodes:
174
+ node = obj.graph[node_name]
175
+ echo_always("\nStep *%s*" % node.name, err=False)
176
+ echo_always(node.doc if node.doc else "?", indent=True, err=False)
177
+ if node.type != "end":
178
+ echo_always(
179
+ "*=>* %s" % ", ".join("*%s*" % n for n in node.out_funcs),
180
+ indent=True,
181
+ highlight="magenta",
182
+ highlight_bold=False,
183
+ err=False,
184
+ )
185
+ echo_always("")
186
+
187
+
188
+ @cli.command(help="Show all available commands.")
189
+ @click.pass_context
190
+ def help(ctx):
191
+ print(ctx.parent.get_help())
192
+
193
+
194
+ @cli.command(help="Output internal state of the flow graph.")
195
+ @click.option("--json", is_flag=True, help="Output the flow graph in JSON format.")
196
+ @click.pass_obj
197
+ def output_raw(obj, json):
198
+ if json:
199
+ import json as _json
200
+
201
+ _msg = "Internal representation of the flow in JSON format:"
202
+ _graph_dict, _graph_struct = obj.graph.output_steps()
203
+ _graph = _json.dumps(
204
+ dict(graph=_graph_dict, graph_structure=_graph_struct), indent=4
205
+ )
206
+ else:
207
+ _graph = str(obj.graph)
208
+ _msg = "Internal representation of the flow:"
209
+ echo(_msg, fg="magenta", bold=False)
210
+ echo_always(_graph, err=False)
211
+
212
+
213
+ @cli.command(help="Visualize the flow with Graphviz.")
214
+ @click.pass_obj
215
+ def output_dot(obj):
216
+ echo("Visualizing the flow as a GraphViz graph", fg="magenta", bold=False)
217
+ echo(
218
+ "Try piping the output to 'dot -Tpng -o graph.png' to produce "
219
+ "an actual image.",
220
+ indent=True,
221
+ )
222
+ echo_always(obj.graph.output_dot(), err=False)
223
+
224
+
225
+ @cli.command(help="Print the Metaflow version")
226
+ @click.pass_obj
227
+ def version(obj):
228
+ echo_always(obj.version)
229
+
230
+
231
+ # NOTE: add_decorator_options should be TL because it checks to make sure
232
+ # that no option conflict with the ones below
233
+ @decorators.add_decorator_options
234
+ @config_options
235
+ @click.command(
236
+ cls=LazyPluginCommandCollection,
237
+ sources=[cli],
238
+ lazy_sources=plugins.get_plugin_cli_path(),
239
+ invoke_without_command=True,
240
+ )
241
+ @tracing.cli_entrypoint("cli/start")
242
+ # Quiet is eager to make sure it is available when processing --config options since
243
+ # we need it to construct a context to pass to any DeployTimeField for the default
244
+ # value.
245
+ @click.option(
246
+ "--quiet/--not-quiet",
247
+ show_default=True,
248
+ default=False,
249
+ help="Suppress unnecessary messages",
250
+ is_eager=True,
251
+ )
252
+ @click.option(
253
+ "--metadata",
254
+ default=DEFAULT_METADATA,
255
+ show_default=True,
256
+ type=click.Choice([m.TYPE for m in METADATA_PROVIDERS]),
257
+ help="Metadata service type",
258
+ )
259
+ @click.option(
260
+ "--environment",
261
+ default=DEFAULT_ENVIRONMENT,
262
+ show_default=True,
263
+ type=click.Choice(["local"] + [m.TYPE for m in ENVIRONMENTS]),
264
+ help="Execution environment type",
265
+ )
266
+ # See comment for --quiet
267
+ @click.option(
268
+ "--datastore",
269
+ default=DEFAULT_DATASTORE,
270
+ show_default=True,
271
+ type=click.Choice([d.TYPE for d in DATASTORES]),
272
+ help="Data backend type",
273
+ is_eager=True,
274
+ )
275
+ @click.option("--datastore-root", help="Root path for datastore")
276
+ @click.option(
277
+ "--package-suffixes",
278
+ help="A comma-separated list of file suffixes to include in the code package.",
279
+ default=DEFAULT_PACKAGE_SUFFIXES,
280
+ show_default=True,
281
+ )
282
+ @click.option(
283
+ "--with",
284
+ "decospecs",
285
+ multiple=True,
286
+ help="Add a decorator to all steps. You can specify this option "
287
+ "multiple times to attach multiple decorators in steps.",
288
+ callback=config_merge_cb,
289
+ )
290
+ @click.option(
291
+ "--pylint/--no-pylint",
292
+ default=True,
293
+ show_default=True,
294
+ help="Run Pylint on the flow if pylint is installed.",
295
+ )
296
+ @click.option(
297
+ "--event-logger",
298
+ default=DEFAULT_EVENT_LOGGER,
299
+ show_default=True,
300
+ type=click.Choice(LOGGING_SIDECARS),
301
+ help="type of event logger used",
302
+ )
303
+ @click.option(
304
+ "--monitor",
305
+ default=DEFAULT_MONITOR,
306
+ show_default=True,
307
+ type=click.Choice(MONITOR_SIDECARS),
308
+ help="Monitoring backend type",
309
+ )
310
+ @click.option(
311
+ "--local-config-file",
312
+ type=LocalFileInput(exists=True, readable=True, dir_okay=False, resolve_path=True),
313
+ required=False,
314
+ default=None,
315
+ help="A filename containing the dumped configuration values. Internal use only.",
316
+ hidden=True,
317
+ is_eager=True,
318
+ )
319
+ @click.pass_context
320
+ def start(
321
+ ctx,
322
+ quiet=False,
323
+ metadata=None,
324
+ environment=None,
325
+ datastore=None,
326
+ datastore_root=None,
327
+ decospecs=None,
328
+ package_suffixes=None,
329
+ pylint=None,
330
+ event_logger=None,
331
+ monitor=None,
332
+ local_config_file=None,
333
+ config_file=None,
334
+ config_value=None,
335
+ **deco_options
336
+ ):
337
+ if quiet:
338
+ echo = echo_dev_null
339
+ else:
340
+ echo = echo_always
341
+
342
+ ctx.obj.version = metaflow_version.get_version()
343
+ version = ctx.obj.version
344
+ if use_r():
345
+ version = metaflow_r_version()
346
+
347
+ echo("Metaflow %s" % version, fg="magenta", bold=True, nl=False)
348
+ echo(" executing *%s*" % ctx.obj.flow.name, fg="magenta", nl=False)
349
+ echo(" for *%s*" % resolve_identity(), fg="magenta")
350
+
351
+ # Setup the context
352
+ cli_args._set_top_kwargs(ctx.params)
353
+ ctx.obj.echo = echo
354
+ ctx.obj.echo_always = echo_always
355
+ ctx.obj.is_quiet = quiet
356
+ ctx.obj.logger = logger
357
+ ctx.obj.pylint = pylint
358
+ ctx.obj.check = functools.partial(_check, echo)
359
+ ctx.obj.top_cli = cli
360
+ ctx.obj.package_suffixes = package_suffixes.split(",")
361
+
362
+ ctx.obj.datastore_impl = [d for d in DATASTORES if d.TYPE == datastore][0]
363
+
364
+ if datastore_root is None:
365
+ datastore_root = ctx.obj.datastore_impl.get_datastore_root_from_config(
366
+ ctx.obj.echo
367
+ )
368
+ if datastore_root is None:
369
+ raise CommandException(
370
+ "Could not find the location of the datastore -- did you correctly set the "
371
+ "METAFLOW_DATASTORE_SYSROOT_%s environment variable?" % datastore.upper()
372
+ )
373
+
374
+ ctx.obj.datastore_impl.datastore_root = datastore_root
375
+
376
+ FlowDataStore.default_storage_impl = ctx.obj.datastore_impl
377
+
378
+ # At this point, we are able to resolve the user-configuration options so we can
379
+ # process all those decorators that the user added that will modify the flow based
380
+ # on those configurations. It is important to do this as early as possible since it
381
+ # actually modifies the flow itself
382
+
383
+ # When we process the options, the first one processed will return None and the
384
+ # second one processed will return the actual options. The order of processing
385
+ # depends on what (and in what order) the user specifies on the command line.
386
+ config_options = config_file or config_value
387
+
388
+ if (
389
+ hasattr(ctx, "saved_args")
390
+ and ctx.saved_args
391
+ and ctx.saved_args[0] == "resume"
392
+ and getattr(ctx.obj, "has_config_options", False)
393
+ ):
394
+ # In the case of resume, we actually need to load the configurations
395
+ # from the resumed run to process them. This can be slightly onerous so check
396
+ # if we need to in the first place
397
+ if getattr(ctx.obj, "has_cl_config_options", False):
398
+ raise click.UsageError(
399
+ "Cannot specify --config-file or --config-value with 'resume'"
400
+ )
401
+ # We now load the config artifacts from the original run id
402
+ run_id = None
403
+ try:
404
+ idx = ctx.saved_args.index("--origin-run-id")
405
+ except ValueError:
406
+ idx = -1
407
+ if idx >= 0:
408
+ run_id = ctx.saved_args[idx + 1]
409
+ else:
410
+ run_id = get_latest_run_id(ctx.obj.echo, ctx.obj.flow.name)
411
+ if run_id is None:
412
+ raise CommandException(
413
+ "A previous run id was not found. Specify --origin-run-id."
414
+ )
415
+ # We get the name of the parameters we need to load from the datastore -- these
416
+ # are accessed using the *variable* name and not necessarily the *parameter* name
417
+ config_var_names = []
418
+ config_param_names = []
419
+ for name, param in ctx.obj.flow._get_parameters():
420
+ if not param.IS_CONFIG_PARAMETER:
421
+ continue
422
+ config_var_names.append(name)
423
+ config_param_names.append(param.name)
424
+
425
+ # We just need a task datastore that will be thrown away -- we do this so
426
+ # we don't have to create the logger, monitor, etc.
427
+ debug.userconf_exec("Loading config parameters from run %s" % run_id)
428
+ for d in TaskDataStoreSet(
429
+ FlowDataStore(ctx.obj.flow.name),
430
+ run_id,
431
+ steps=["_parameters"],
432
+ prefetch_data_artifacts=config_var_names,
433
+ ):
434
+ param_ds = d
435
+
436
+ # We can now set the the CONFIGS value in the flow properly. This will overwrite
437
+ # anything that may have been passed in by default and we will use exactly what
438
+ # the original flow had. Note that these are accessed through the parameter name
439
+ ctx.obj.flow._flow_state[_FlowState.CONFIGS].clear()
440
+ d = ctx.obj.flow._flow_state[_FlowState.CONFIGS]
441
+ for param_name, var_name in zip(config_param_names, config_var_names):
442
+ val = param_ds[var_name]
443
+ debug.userconf_exec("Loaded config %s as: %s" % (param_name, val))
444
+ d[param_name] = val
445
+
446
+ elif getattr(ctx.obj, "delayed_config_exception", None):
447
+ # If we are not doing a resume, any exception we had parsing configs needs to
448
+ # be raised. For resume, since we ignore those options, we ignore the error.
449
+ raise ctx.obj.delayed_config_exception
450
+
451
+ new_cls = ctx.obj.flow._process_config_decorators(config_options)
452
+ if new_cls:
453
+ ctx.obj.flow = new_cls(use_cli=False)
454
+
455
+ ctx.obj.graph = ctx.obj.flow._graph
456
+
457
+ ctx.obj.environment = [
458
+ e for e in ENVIRONMENTS + [MetaflowEnvironment] if e.TYPE == environment
459
+ ][0](ctx.obj.flow)
460
+ ctx.obj.environment.validate_environment(ctx.obj.logger, datastore)
461
+
462
+ ctx.obj.event_logger = LOGGING_SIDECARS[event_logger](
463
+ flow=ctx.obj.flow, env=ctx.obj.environment
464
+ )
465
+ ctx.obj.event_logger.start()
466
+ _system_logger.init_system_logger(ctx.obj.flow.name, ctx.obj.event_logger)
467
+
468
+ ctx.obj.monitor = MONITOR_SIDECARS[monitor](
469
+ flow=ctx.obj.flow, env=ctx.obj.environment
470
+ )
471
+ ctx.obj.monitor.start()
472
+ _system_monitor.init_system_monitor(ctx.obj.flow.name, ctx.obj.monitor)
473
+
474
+ ctx.obj.metadata = [m for m in METADATA_PROVIDERS if m.TYPE == metadata][0](
475
+ ctx.obj.environment, ctx.obj.flow, ctx.obj.event_logger, ctx.obj.monitor
476
+ )
477
+
478
+ ctx.obj.flow_datastore = FlowDataStore(
479
+ ctx.obj.flow.name,
480
+ ctx.obj.environment,
481
+ ctx.obj.metadata,
482
+ ctx.obj.event_logger,
483
+ ctx.obj.monitor,
484
+ )
485
+
486
+ ctx.obj.config_options = config_options
487
+
488
+ decorators._init(ctx.obj.flow)
489
+
490
+ # It is important to initialize flow decorators early as some of the
491
+ # things they provide may be used by some of the objects initialized after.
492
+ decorators._init_flow_decorators(
493
+ ctx.obj.flow,
494
+ ctx.obj.graph,
495
+ ctx.obj.environment,
496
+ ctx.obj.flow_datastore,
497
+ ctx.obj.metadata,
498
+ ctx.obj.logger,
499
+ echo,
500
+ deco_options,
501
+ )
502
+
503
+ # In the case of run/resume, we will want to apply the TL decospecs
504
+ # *after* the run decospecs so that they don't take precedence. In other
505
+ # words, for the same decorator, we want `myflow.py run --with foo` to
506
+ # take precedence over any other `foo` decospec
507
+ ctx.obj.tl_decospecs = list(decospecs or [])
508
+
509
+ # initialize current and parameter context for deploy-time parameters
510
+ current._set_env(flow=ctx.obj.flow, is_running=False)
511
+ parameters.set_parameter_context(
512
+ ctx.obj.flow.name,
513
+ ctx.obj.echo,
514
+ ctx.obj.flow_datastore,
515
+ {
516
+ k: ConfigValue(v)
517
+ for k, v in ctx.obj.flow.__class__._flow_state.get(
518
+ _FlowState.CONFIGS, {}
519
+ ).items()
520
+ },
521
+ )
522
+
523
+ if (
524
+ hasattr(ctx, "saved_args")
525
+ and ctx.saved_args
526
+ and ctx.saved_args[0] not in ("run", "resume")
527
+ ):
528
+ # run/resume are special cases because they can add more decorators with --with,
529
+ # so they have to take care of themselves.
530
+ all_decospecs = ctx.obj.tl_decospecs + list(
531
+ ctx.obj.environment.decospecs() or []
532
+ )
533
+ if all_decospecs:
534
+ decorators._attach_decorators(ctx.obj.flow, all_decospecs)
535
+ decorators._init(ctx.obj.flow)
536
+ # Regenerate graph if we attached more decorators
537
+ ctx.obj.flow.__class__._init_attrs()
538
+ ctx.obj.graph = ctx.obj.flow._graph
539
+
540
+ decorators._init_step_decorators(
541
+ ctx.obj.flow,
542
+ ctx.obj.graph,
543
+ ctx.obj.environment,
544
+ ctx.obj.flow_datastore,
545
+ ctx.obj.logger,
546
+ )
547
+
548
+ # TODO (savin): Enable lazy instantiation of package
549
+ ctx.obj.package = None
550
+
551
+ if ctx.invoked_subcommand is None:
552
+ ctx.invoke(check)
553
+
554
+
555
+ def _check(echo, graph, flow, environment, pylint=True, warnings=False, **kwargs):
556
+ echo("Validating your flow...", fg="magenta", bold=False)
557
+ linter = lint.linter
558
+ # TODO set linter settings
559
+ linter.run_checks(graph, **kwargs)
560
+ echo("The graph looks good!", fg="green", bold=True, indent=True)
561
+ if pylint:
562
+ echo("Running pylint...", fg="magenta", bold=False)
563
+ fname = inspect.getfile(flow.__class__)
564
+ pylint = PyLint(fname)
565
+ if pylint.has_pylint():
566
+ pylint_is_happy, pylint_exception_msg = pylint.run(
567
+ warnings=warnings,
568
+ pylint_config=environment.pylint_config(),
569
+ logger=echo_always,
570
+ )
571
+
572
+ if pylint_is_happy:
573
+ echo("Pylint is happy!", fg="green", bold=True, indent=True)
574
+ else:
575
+ echo(
576
+ "Pylint couldn't analyze your code.\n\tPylint exception: %s"
577
+ % pylint_exception_msg,
578
+ fg="red",
579
+ bold=True,
580
+ indent=True,
581
+ )
582
+ echo("Skipping Pylint checks.", fg="red", bold=True, indent=True)
583
+ else:
584
+ echo(
585
+ "Pylint not found, so extra checks are disabled.",
586
+ fg="green",
587
+ indent=True,
588
+ bold=False,
589
+ )
590
+
591
+
592
+ def print_metaflow_exception(ex):
593
+ echo_always(ex.headline, indent=True, nl=False, bold=True)
594
+ location = ""
595
+ if ex.source_file is not None:
596
+ location += " in file %s" % ex.source_file
597
+ if ex.line_no is not None:
598
+ location += " on line %d" % ex.line_no
599
+ location += ":"
600
+ echo_always(location, bold=True)
601
+ echo_always(ex.message, indent=True, bold=False, padding_bottom=True)
602
+
603
+
604
+ def print_unknown_exception(ex):
605
+ echo_always("Internal error", indent=True, bold=True)
606
+ echo_always(traceback.format_exc(), highlight=None, highlight_bold=False)
607
+
608
+
609
+ class CliState(object):
610
+ def __init__(self, flow):
611
+ self.flow = flow
612
+
613
+
614
+ def main(flow, args=None, handle_exceptions=True, entrypoint=None):
615
+ # Ignore warning(s) and prevent spamming the end-user.
616
+ # TODO: This serves as a short term workaround for RuntimeWarning(s) thrown
617
+ # in py3.8 related to log buffering (bufsize=1).
618
+ import warnings
619
+
620
+ warnings.filterwarnings("ignore")
621
+ if entrypoint is None:
622
+ entrypoint = [sys.executable, sys.argv[0]]
623
+
624
+ state = CliState(flow)
625
+ state.entrypoint = entrypoint
626
+
627
+ try:
628
+ if args is None:
629
+ start(auto_envvar_prefix="METAFLOW", obj=state)
630
+ else:
631
+ try:
632
+ start(args=args, obj=state, auto_envvar_prefix="METAFLOW")
633
+ except SystemExit as e:
634
+ return e.code
635
+ except MetaflowException as x:
636
+ if handle_exceptions:
637
+ print_metaflow_exception(x)
638
+ sys.exit(1)
639
+ else:
640
+ raise
641
+ except Exception as x:
642
+ if handle_exceptions:
643
+ print_unknown_exception(x)
644
+ sys.exit(1)
645
+ else:
646
+ raise
647
+ finally:
648
+ if hasattr(state, "monitor") and state.monitor is not None:
649
+ state.monitor.terminate()
650
+ if hasattr(state, "event_logger") and state.event_logger is not None:
651
+ state.event_logger.terminate()