metaflow 2.12.5__tar.gz → 2.12.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 (351) hide show
  1. {metaflow-2.12.5/metaflow.egg-info → metaflow-2.12.7}/PKG-INFO +2 -2
  2. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/cli.py +3 -0
  3. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/client/core.py +5 -0
  4. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/argo/argo_workflows.py +6 -2
  5. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/pypi/conda_decorator.py +8 -0
  6. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/pypi/conda_environment.py +3 -1
  7. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/pypi/pip.py +31 -3
  8. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/pypi/pypi_decorator.py +8 -0
  9. metaflow-2.12.7/metaflow/system/__init__.py +5 -0
  10. metaflow-2.12.7/metaflow/system/system_logger.py +103 -0
  11. metaflow-2.12.7/metaflow/system/system_monitor.py +132 -0
  12. metaflow-2.12.7/metaflow/system/system_utils.py +19 -0
  13. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/task.py +240 -194
  14. metaflow-2.12.7/metaflow/version.py +1 -0
  15. {metaflow-2.12.5 → metaflow-2.12.7/metaflow.egg-info}/PKG-INFO +2 -2
  16. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow.egg-info/SOURCES.txt +4 -0
  17. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow.egg-info/requires.txt +1 -1
  18. metaflow-2.12.5/metaflow/version.py +0 -1
  19. {metaflow-2.12.5 → metaflow-2.12.7}/LICENSE +0 -0
  20. {metaflow-2.12.5 → metaflow-2.12.7}/MANIFEST.in +0 -0
  21. {metaflow-2.12.5 → metaflow-2.12.7}/README.md +0 -0
  22. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/R.py +0 -0
  23. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/__init__.py +0 -0
  24. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/__init__.py +0 -0
  25. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/click/__init__.py +0 -0
  26. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/click/_bashcomplete.py +0 -0
  27. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/click/_compat.py +0 -0
  28. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/click/_termui_impl.py +0 -0
  29. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/click/_textwrap.py +0 -0
  30. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/click/_unicodefun.py +0 -0
  31. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/click/_winconsole.py +0 -0
  32. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/click/core.py +0 -0
  33. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/click/decorators.py +0 -0
  34. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/click/exceptions.py +0 -0
  35. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/click/formatting.py +0 -0
  36. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/click/globals.py +0 -0
  37. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/click/parser.py +0 -0
  38. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/click/termui.py +0 -0
  39. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/click/testing.py +0 -0
  40. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/click/types.py +0 -0
  41. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/click/utils.py +0 -0
  42. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/importlib_metadata/__init__.py +0 -0
  43. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/importlib_metadata/_adapters.py +0 -0
  44. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/importlib_metadata/_collections.py +0 -0
  45. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/importlib_metadata/_compat.py +0 -0
  46. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/importlib_metadata/_functools.py +0 -0
  47. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/importlib_metadata/_itertools.py +0 -0
  48. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/importlib_metadata/_meta.py +0 -0
  49. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/importlib_metadata/_text.py +0 -0
  50. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/importlib_metadata/py.typed +0 -0
  51. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/packaging/__init__.py +0 -0
  52. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/packaging/_elffile.py +0 -0
  53. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/packaging/_manylinux.py +0 -0
  54. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/packaging/_musllinux.py +0 -0
  55. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/packaging/_parser.py +0 -0
  56. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/packaging/_structures.py +0 -0
  57. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/packaging/_tokenizer.py +0 -0
  58. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/packaging/markers.py +0 -0
  59. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/packaging/py.typed +0 -0
  60. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/packaging/requirements.py +0 -0
  61. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/packaging/specifiers.py +0 -0
  62. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/packaging/tags.py +0 -0
  63. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/packaging/utils.py +0 -0
  64. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/packaging/version.py +0 -0
  65. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/typeguard/__init__.py +0 -0
  66. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/typeguard/_checkers.py +0 -0
  67. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/typeguard/_config.py +0 -0
  68. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/typeguard/_decorators.py +0 -0
  69. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/typeguard/_exceptions.py +0 -0
  70. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/typeguard/_functions.py +0 -0
  71. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/typeguard/_importhook.py +0 -0
  72. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/typeguard/_memo.py +0 -0
  73. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/typeguard/_pytest_plugin.py +0 -0
  74. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/typeguard/_suppression.py +0 -0
  75. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/typeguard/_transformer.py +0 -0
  76. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/typeguard/_union_transformer.py +0 -0
  77. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/typeguard/_utils.py +0 -0
  78. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/typeguard/py.typed +0 -0
  79. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/typing_extensions.py +0 -0
  80. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/v3_5/__init__.py +0 -0
  81. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/v3_5/importlib_metadata/__init__.py +0 -0
  82. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/v3_5/importlib_metadata/_compat.py +0 -0
  83. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/v3_5/zipp.py +0 -0
  84. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/v3_6/__init__.py +0 -0
  85. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/v3_6/importlib_metadata/__init__.py +0 -0
  86. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/v3_6/importlib_metadata/_adapters.py +0 -0
  87. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/v3_6/importlib_metadata/_collections.py +0 -0
  88. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/v3_6/importlib_metadata/_compat.py +0 -0
  89. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/v3_6/importlib_metadata/_functools.py +0 -0
  90. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/v3_6/importlib_metadata/_itertools.py +0 -0
  91. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/v3_6/importlib_metadata/_meta.py +0 -0
  92. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/v3_6/importlib_metadata/_text.py +0 -0
  93. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/v3_6/importlib_metadata/py.typed +0 -0
  94. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/v3_6/typing_extensions.py +0 -0
  95. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/v3_6/zipp.py +0 -0
  96. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/_vendor/zipp.py +0 -0
  97. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/cards.py +0 -0
  98. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/cli_args.py +0 -0
  99. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/client/__init__.py +0 -0
  100. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/client/filecache.py +0 -0
  101. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/clone_util.py +0 -0
  102. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/cmd/__init__.py +0 -0
  103. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/cmd/configure_cmd.py +0 -0
  104. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/cmd/develop/__init__.py +0 -0
  105. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/cmd/develop/stub_generator.py +0 -0
  106. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/cmd/develop/stubs.py +0 -0
  107. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/cmd/main_cli.py +0 -0
  108. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/cmd/tutorials_cmd.py +0 -0
  109. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/cmd/util.py +0 -0
  110. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/cmd_with_io.py +0 -0
  111. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/datastore/__init__.py +0 -0
  112. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/datastore/content_addressed_store.py +0 -0
  113. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/datastore/datastore_set.py +0 -0
  114. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/datastore/datastore_storage.py +0 -0
  115. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/datastore/exceptions.py +0 -0
  116. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/datastore/flow_datastore.py +0 -0
  117. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/datastore/inputs.py +0 -0
  118. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/datastore/task_datastore.py +0 -0
  119. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/debug.py +0 -0
  120. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/decorators.py +0 -0
  121. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/event_logger.py +0 -0
  122. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/events.py +0 -0
  123. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/exception.py +0 -0
  124. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/extension_support/__init__.py +0 -0
  125. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/extension_support/_empty_file.py +0 -0
  126. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/extension_support/cmd.py +0 -0
  127. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/extension_support/integrations.py +0 -0
  128. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/extension_support/plugins.py +0 -0
  129. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/flowspec.py +0 -0
  130. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/graph.py +0 -0
  131. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/includefile.py +0 -0
  132. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/integrations.py +0 -0
  133. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/lint.py +0 -0
  134. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/metadata/__init__.py +0 -0
  135. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/metadata/heartbeat.py +0 -0
  136. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/metadata/metadata.py +0 -0
  137. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/metadata/util.py +0 -0
  138. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/metaflow_config.py +0 -0
  139. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/metaflow_config_funcs.py +0 -0
  140. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/metaflow_current.py +0 -0
  141. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/metaflow_environment.py +0 -0
  142. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/metaflow_profile.py +0 -0
  143. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/metaflow_version.py +0 -0
  144. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/mflog/__init__.py +0 -0
  145. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/mflog/mflog.py +0 -0
  146. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/mflog/save_logs.py +0 -0
  147. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/mflog/save_logs_periodically.py +0 -0
  148. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/mflog/tee.py +0 -0
  149. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/monitor.py +0 -0
  150. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/multicore_utils.py +0 -0
  151. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/package.py +0 -0
  152. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/parameters.py +0 -0
  153. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/__init__.py +0 -0
  154. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/airflow/__init__.py +0 -0
  155. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/airflow/airflow.py +0 -0
  156. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/airflow/airflow_cli.py +0 -0
  157. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/airflow/airflow_decorator.py +0 -0
  158. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/airflow/airflow_utils.py +0 -0
  159. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/airflow/dag.py +0 -0
  160. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/airflow/exception.py +0 -0
  161. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/airflow/plumbing/__init__.py +0 -0
  162. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/airflow/plumbing/set_parameters.py +0 -0
  163. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/airflow/sensors/__init__.py +0 -0
  164. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/airflow/sensors/base_sensor.py +0 -0
  165. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/airflow/sensors/external_task_sensor.py +0 -0
  166. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/airflow/sensors/s3_sensor.py +0 -0
  167. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/argo/__init__.py +0 -0
  168. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/argo/argo_client.py +0 -0
  169. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/argo/argo_events.py +0 -0
  170. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/argo/argo_workflows_cli.py +0 -0
  171. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/argo/argo_workflows_decorator.py +0 -0
  172. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/argo/generate_input_paths.py +0 -0
  173. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/aws/__init__.py +0 -0
  174. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/aws/aws_client.py +0 -0
  175. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/aws/aws_utils.py +0 -0
  176. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/aws/batch/__init__.py +0 -0
  177. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/aws/batch/batch.py +0 -0
  178. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/aws/batch/batch_cli.py +0 -0
  179. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/aws/batch/batch_client.py +0 -0
  180. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/aws/batch/batch_decorator.py +0 -0
  181. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/aws/secrets_manager/__init__.py +0 -0
  182. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/aws/secrets_manager/aws_secrets_manager_secrets_provider.py +0 -0
  183. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/aws/step_functions/__init__.py +0 -0
  184. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/aws/step_functions/dynamo_db_client.py +0 -0
  185. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/aws/step_functions/event_bridge_client.py +0 -0
  186. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/aws/step_functions/production_token.py +0 -0
  187. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/aws/step_functions/schedule_decorator.py +0 -0
  188. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/aws/step_functions/set_batch_environment.py +0 -0
  189. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/aws/step_functions/step_functions.py +0 -0
  190. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/aws/step_functions/step_functions_cli.py +0 -0
  191. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/aws/step_functions/step_functions_client.py +0 -0
  192. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/aws/step_functions/step_functions_decorator.py +0 -0
  193. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/azure/__init__.py +0 -0
  194. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/azure/azure_credential.py +0 -0
  195. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/azure/azure_exceptions.py +0 -0
  196. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/azure/azure_secret_manager_secrets_provider.py +0 -0
  197. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/azure/azure_tail.py +0 -0
  198. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/azure/azure_utils.py +0 -0
  199. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/azure/blob_service_client_factory.py +0 -0
  200. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/azure/includefile_support.py +0 -0
  201. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/cards/__init__.py +0 -0
  202. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/cards/card_cli.py +0 -0
  203. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/cards/card_client.py +0 -0
  204. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/cards/card_creator.py +0 -0
  205. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/cards/card_datastore.py +0 -0
  206. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/cards/card_decorator.py +0 -0
  207. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/cards/card_modules/__init__.py +0 -0
  208. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/cards/card_modules/base.html +0 -0
  209. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/cards/card_modules/basic.py +0 -0
  210. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/cards/card_modules/bundle.css +0 -0
  211. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/cards/card_modules/card.py +0 -0
  212. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/cards/card_modules/chevron/__init__.py +0 -0
  213. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/cards/card_modules/chevron/main.py +0 -0
  214. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/cards/card_modules/chevron/metadata.py +0 -0
  215. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/cards/card_modules/chevron/renderer.py +0 -0
  216. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/cards/card_modules/chevron/tokenizer.py +0 -0
  217. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/cards/card_modules/components.py +0 -0
  218. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/cards/card_modules/convert_to_native_type.py +0 -0
  219. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/cards/card_modules/main.js +0 -0
  220. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/cards/card_modules/renderer_tools.py +0 -0
  221. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/cards/card_modules/test_cards.py +0 -0
  222. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/cards/card_resolver.py +0 -0
  223. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/cards/card_server.py +0 -0
  224. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/cards/card_viewer/viewer.html +0 -0
  225. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/cards/component_serializer.py +0 -0
  226. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/cards/exception.py +0 -0
  227. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/catch_decorator.py +0 -0
  228. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/datastores/__init__.py +0 -0
  229. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/datastores/azure_storage.py +0 -0
  230. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/datastores/gs_storage.py +0 -0
  231. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/datastores/local_storage.py +0 -0
  232. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/datastores/s3_storage.py +0 -0
  233. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/datatools/__init__.py +0 -0
  234. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/datatools/local.py +0 -0
  235. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/datatools/s3/__init__.py +0 -0
  236. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/datatools/s3/s3.py +0 -0
  237. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/datatools/s3/s3op.py +0 -0
  238. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/datatools/s3/s3tail.py +0 -0
  239. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/datatools/s3/s3util.py +0 -0
  240. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/debug_logger.py +0 -0
  241. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/debug_monitor.py +0 -0
  242. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/env_escape/__init__.py +0 -0
  243. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/env_escape/client.py +0 -0
  244. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/env_escape/client_modules.py +0 -0
  245. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/env_escape/communication/__init__.py +0 -0
  246. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/env_escape/communication/bytestream.py +0 -0
  247. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/env_escape/communication/channel.py +0 -0
  248. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/env_escape/communication/socket_bytestream.py +0 -0
  249. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/env_escape/communication/utils.py +0 -0
  250. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/env_escape/configurations/emulate_test_lib/__init__.py +0 -0
  251. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/env_escape/configurations/emulate_test_lib/overrides.py +0 -0
  252. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/env_escape/configurations/emulate_test_lib/server_mappings.py +0 -0
  253. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/env_escape/configurations/test_lib_impl/__init__.py +0 -0
  254. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/env_escape/configurations/test_lib_impl/test_lib.py +0 -0
  255. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/env_escape/consts.py +0 -0
  256. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/env_escape/data_transferer.py +0 -0
  257. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/env_escape/exception_transferer.py +0 -0
  258. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/env_escape/override_decorators.py +0 -0
  259. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/env_escape/server.py +0 -0
  260. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/env_escape/stub.py +0 -0
  261. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/env_escape/utils.py +0 -0
  262. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/environment_decorator.py +0 -0
  263. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/events_decorator.py +0 -0
  264. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/frameworks/__init__.py +0 -0
  265. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/frameworks/pytorch.py +0 -0
  266. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/gcp/__init__.py +0 -0
  267. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/gcp/gcp_secret_manager_secrets_provider.py +0 -0
  268. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/gcp/gs_exceptions.py +0 -0
  269. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/gcp/gs_storage_client_factory.py +0 -0
  270. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/gcp/gs_tail.py +0 -0
  271. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/gcp/gs_utils.py +0 -0
  272. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/gcp/includefile_support.py +0 -0
  273. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/kubernetes/__init__.py +0 -0
  274. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/kubernetes/kubernetes.py +0 -0
  275. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/kubernetes/kubernetes_cli.py +0 -0
  276. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/kubernetes/kubernetes_client.py +0 -0
  277. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/kubernetes/kubernetes_decorator.py +0 -0
  278. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/kubernetes/kubernetes_job.py +0 -0
  279. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/kubernetes/kubernetes_jobsets.py +0 -0
  280. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/logs_cli.py +0 -0
  281. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/metadata/__init__.py +0 -0
  282. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/metadata/local.py +0 -0
  283. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/metadata/service.py +0 -0
  284. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/package_cli.py +0 -0
  285. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/parallel_decorator.py +0 -0
  286. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/project_decorator.py +0 -0
  287. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/pypi/__init__.py +0 -0
  288. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/pypi/bootstrap.py +0 -0
  289. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/pypi/micromamba.py +0 -0
  290. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/pypi/pypi_environment.py +0 -0
  291. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/pypi/utils.py +0 -0
  292. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/resources_decorator.py +0 -0
  293. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/retry_decorator.py +0 -0
  294. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/secrets/__init__.py +0 -0
  295. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/secrets/inline_secrets_provider.py +0 -0
  296. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/secrets/secrets_decorator.py +0 -0
  297. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/storage_executor.py +0 -0
  298. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/tag_cli.py +0 -0
  299. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/test_unbounded_foreach_decorator.py +0 -0
  300. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/plugins/timeout_decorator.py +0 -0
  301. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/procpoll.py +0 -0
  302. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/py.typed +0 -0
  303. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/pylint_wrapper.py +0 -0
  304. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/runner/__init__.py +0 -0
  305. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/runner/click_api.py +0 -0
  306. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/runner/metaflow_runner.py +0 -0
  307. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/runner/nbrun.py +0 -0
  308. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/runner/subprocess_manager.py +0 -0
  309. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/runtime.py +0 -0
  310. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/sidecar/__init__.py +0 -0
  311. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/sidecar/sidecar.py +0 -0
  312. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/sidecar/sidecar_messages.py +0 -0
  313. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/sidecar/sidecar_subprocess.py +0 -0
  314. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/sidecar/sidecar_worker.py +0 -0
  315. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/tagging_util.py +0 -0
  316. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/tracing/__init__.py +0 -0
  317. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/tracing/propagator.py +0 -0
  318. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/tracing/span_exporter.py +0 -0
  319. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/tracing/tracing_modules.py +0 -0
  320. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/tuple_util.py +0 -0
  321. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/tutorials/00-helloworld/README.md +0 -0
  322. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/tutorials/00-helloworld/helloworld.py +0 -0
  323. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/tutorials/01-playlist/README.md +0 -0
  324. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/tutorials/01-playlist/movies.csv +0 -0
  325. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/tutorials/01-playlist/playlist.ipynb +0 -0
  326. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/tutorials/01-playlist/playlist.py +0 -0
  327. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/tutorials/02-statistics/README.md +0 -0
  328. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/tutorials/02-statistics/movies.csv +0 -0
  329. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/tutorials/02-statistics/stats.ipynb +0 -0
  330. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/tutorials/02-statistics/stats.py +0 -0
  331. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/tutorials/03-playlist-redux/README.md +0 -0
  332. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/tutorials/03-playlist-redux/playlist.py +0 -0
  333. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/tutorials/04-playlist-plus/README.md +0 -0
  334. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/tutorials/04-playlist-plus/playlist.py +0 -0
  335. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/tutorials/05-hello-cloud/README.md +0 -0
  336. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/tutorials/05-hello-cloud/hello-cloud.ipynb +0 -0
  337. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/tutorials/05-hello-cloud/hello-cloud.py +0 -0
  338. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/tutorials/06-statistics-redux/README.md +0 -0
  339. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/tutorials/06-statistics-redux/stats.ipynb +0 -0
  340. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/tutorials/07-worldview/README.md +0 -0
  341. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/tutorials/07-worldview/worldview.ipynb +0 -0
  342. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/tutorials/08-autopilot/README.md +0 -0
  343. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/tutorials/08-autopilot/autopilot.ipynb +0 -0
  344. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/unbounded_foreach.py +0 -0
  345. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/util.py +0 -0
  346. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow/vendor.py +0 -0
  347. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow.egg-info/dependency_links.txt +0 -0
  348. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow.egg-info/entry_points.txt +0 -0
  349. {metaflow-2.12.5 → metaflow-2.12.7}/metaflow.egg-info/top_level.txt +0 -0
  350. {metaflow-2.12.5 → metaflow-2.12.7}/setup.cfg +0 -0
  351. {metaflow-2.12.5 → metaflow-2.12.7}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: metaflow
3
- Version: 2.12.5
3
+ Version: 2.12.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.12.5; extra == "stubs"
29
+ Requires-Dist: metaflow-stubs==2.12.7; extra == "stubs"
30
30
 
31
31
  ![Metaflow_Logo_Horizontal_FullColor_Ribbon_Dark_RGB](https://user-images.githubusercontent.com/763451/89453116-96a57e00-d713-11ea-9fa6-82b29d4d6eff.png)
32
32
 
@@ -23,6 +23,7 @@ from .metaflow_config import (
23
23
  DEFAULT_PACKAGE_SUFFIXES,
24
24
  )
25
25
  from .metaflow_current import current
26
+ from metaflow.system import _system_monitor, _system_logger
26
27
  from .metaflow_environment import MetaflowEnvironment
27
28
  from .mflog import LOG_SOURCES, mflog
28
29
  from .package import MetaflowPackage
@@ -952,11 +953,13 @@ def start(
952
953
  flow=ctx.obj.flow, env=ctx.obj.environment
953
954
  )
954
955
  ctx.obj.event_logger.start()
956
+ _system_logger.init_system_logger(ctx.obj.flow.name, ctx.obj.event_logger)
955
957
 
956
958
  ctx.obj.monitor = MONITOR_SIDECARS[monitor](
957
959
  flow=ctx.obj.flow, env=ctx.obj.environment
958
960
  )
959
961
  ctx.obj.monitor.start()
962
+ _system_monitor.init_system_monitor(ctx.obj.flow.name, ctx.obj.monitor)
960
963
 
961
964
  ctx.obj.metadata = [m for m in METADATA_PROVIDERS if m.TYPE == metadata][0](
962
965
  ctx.obj.environment, ctx.obj.flow, ctx.obj.event_logger, ctx.obj.monitor
@@ -276,6 +276,11 @@ class MetaflowObject(object):
276
276
  self._attempt = attempt
277
277
  self._current_namespace = _current_namespace or get_namespace()
278
278
  self._namespace_check = _namespace_check
279
+ # If the current namespace is False, we disable checking for namespace for this
280
+ # and all children objects. Not setting namespace_check to False has the consequence
281
+ # of preventing access to children objects after the namespace changes
282
+ if self._current_namespace is None:
283
+ self._namespace_check = False
279
284
 
280
285
  if self._attempt is not None:
281
286
  if self._NAME not in ["task", "artifact"]:
@@ -6,6 +6,7 @@ import shlex
6
6
  import sys
7
7
  from collections import defaultdict
8
8
  from hashlib import sha1
9
+ from math import inf
9
10
 
10
11
  from metaflow import JSONType, current
11
12
  from metaflow.decorators import flow_decorators
@@ -901,7 +902,9 @@ class ArgoWorkflows(object):
901
902
  "argo-{{workflow.name}}/%s/{{tasks.%s.outputs.parameters.task-id}}"
902
903
  % (n, self._sanitize(n))
903
904
  for n in node.in_funcs
904
- ]
905
+ ],
906
+ # NOTE: We set zlibmin to infinite because zlib compression for the Argo input-paths breaks template value substitution.
907
+ zlibmin=inf,
905
908
  )
906
909
  )
907
910
  ]
@@ -2154,7 +2157,8 @@ class ArgoWorkflows(object):
2154
2157
  # everything within the body.
2155
2158
  # NOTE: We need the conditional logic in order to successfully fall back to the default value
2156
2159
  # when the event payload does not contain a key for a parameter.
2157
- data_template='{{ if (hasKey $.Input.body.payload "%s") }}{{- (.Input.body.payload.%s | toJson) -}}{{- else -}}{{ (fail "use-default-instead") }}{{- end -}}'
2160
+ # NOTE: Keys might contain dashes, so use the safer 'get' for fetching the value
2161
+ data_template='{{ if (hasKey $.Input.body.payload "%s") }}{{- (get $.Input.body.payload "%s" | toRawJson) -}}{{- else -}}{{ (fail "use-default-instead") }}{{- end -}}'
2158
2162
  % (v, v),
2159
2163
  # Unfortunately the sensor needs to
2160
2164
  # record the default values for
@@ -100,6 +100,10 @@ class CondaStepDecorator(StepDecorator):
100
100
  # --environment=pypi to --environment=conda
101
101
  _supported_virtual_envs.extend(["pypi"])
102
102
 
103
+ # TODO: Hardcoded for now to support Docker environment.
104
+ # We should introduce a more robust mechanism for appending supported environments, for example from within extensions.
105
+ _supported_virtual_envs.extend(["docker"])
106
+
103
107
  # The --environment= requirement ensures that valid virtual environments are
104
108
  # created for every step to execute it, greatly simplifying the @conda
105
109
  # implementation.
@@ -340,6 +344,10 @@ class CondaFlowDecorator(FlowDecorator):
340
344
  # --environment=pypi to --environment=conda
341
345
  _supported_virtual_envs.extend(["pypi"])
342
346
 
347
+ # TODO: Hardcoded for now to support Docker environment.
348
+ # We should introduce a more robust mechanism for appending supported environments, for example from within extensions.
349
+ _supported_virtual_envs.extend(["docker"])
350
+
343
351
  # The --environment= requirement ensures that valid virtual environments are
344
352
  # created for every step to execute it, greatly simplifying the @conda
345
353
  # implementation.
@@ -65,7 +65,7 @@ class CondaEnvironment(MetaflowEnvironment):
65
65
  micromamba = Micromamba()
66
66
  self.solvers = {"conda": micromamba, "pypi": Pip(micromamba)}
67
67
 
68
- def init_environment(self, echo):
68
+ def init_environment(self, echo, only_steps=None):
69
69
  # The implementation optimizes for latency to ensure as many operations can
70
70
  # be turned into cheap no-ops as feasible. Otherwise, we focus on maintaining
71
71
  # a balance between latency and maintainability of code without re-implementing
@@ -77,6 +77,8 @@ class CondaEnvironment(MetaflowEnvironment):
77
77
  def environments(type_):
78
78
  seen = set()
79
79
  for step in self.flow:
80
+ if only_steps and step.name not in only_steps:
81
+ continue
80
82
  environment = self.get_environment(step)
81
83
  if type_ in environment and environment["id_"] not in seen:
82
84
  seen.add(environment["id_"])
@@ -9,7 +9,6 @@ from itertools import chain, product
9
9
  from urllib.parse import unquote
10
10
 
11
11
  from metaflow.exception import MetaflowException
12
- from metaflow.util import which
13
12
 
14
13
  from .micromamba import Micromamba
15
14
  from .utils import pip_tags, wheel_tags
@@ -25,6 +24,23 @@ class PipException(MetaflowException):
25
24
  super(PipException, self).__init__(msg)
26
25
 
27
26
 
27
+ class PipPackageNotFound(Exception):
28
+ "Wrapper for pip package resolve errors."
29
+
30
+ def __init__(self, error):
31
+ self.error = error
32
+ try:
33
+ # Parse the package spec from error message:
34
+ # ERROR: ERROR: Could not find a version that satisfies the requirement pkg==0.0.1 (from versions: none)
35
+ # ERROR: No matching distribution found for pkg==0.0.1
36
+ self.package_spec = re.search(
37
+ "ERROR: No matching distribution found for (.*)", self.error
38
+ )[1]
39
+ self.package_name = re.match("\w*", self.package_spec)[0]
40
+ except Exception:
41
+ pass
42
+
43
+
28
44
  METADATA_FILE = "{prefix}/.pip/metadata"
29
45
  INSTALLATION_MARKER = "{prefix}/.pip/id"
30
46
 
@@ -81,7 +97,16 @@ class Pip(object):
81
97
  cmd.append(f"{package}{version}")
82
98
  else:
83
99
  cmd.append(f"{package}=={version}")
84
- self._call(prefix, cmd)
100
+ try:
101
+ self._call(prefix, cmd)
102
+ except PipPackageNotFound as ex:
103
+ # pretty print package errors
104
+ raise PipException(
105
+ "Could not find a binary distribution for %s \n"
106
+ "for the platform %s\n\n"
107
+ "Note that ***@pypi*** does not currently support source distributions"
108
+ % (ex.package_spec, platform)
109
+ )
85
110
 
86
111
  def _format(dl_info):
87
112
  res = {k: v for k, v in dl_info.items() if k in ["url"]}
@@ -302,11 +327,14 @@ class Pip(object):
302
327
  .strip()
303
328
  )
304
329
  except subprocess.CalledProcessError as e:
330
+ errors = e.stderr.decode()
331
+ if "No matching distribution" in errors:
332
+ raise PipPackageNotFound(errors)
305
333
  raise PipException(
306
334
  "command '{cmd}' returned error ({code}) {output}\n{stderr}".format(
307
335
  cmd=" ".join(e.cmd),
308
336
  code=e.returncode,
309
337
  output=e.output.decode(),
310
- stderr=e.stderr.decode(),
338
+ stderr=errors,
311
339
  )
312
340
  )
@@ -70,6 +70,10 @@ class PyPIStepDecorator(StepDecorator):
70
70
  # --environment=pypi to --environment=conda
71
71
  _supported_virtual_envs.extend(["pypi"])
72
72
 
73
+ # TODO: Hardcoded for now to support Docker environment.
74
+ # We should introduce a more robust mechanism for appending supported environments, for example from within extensions.
75
+ _supported_virtual_envs.extend(["docker"])
76
+
73
77
  # The --environment= requirement ensures that valid virtual environments are
74
78
  # created for every step to execute it, greatly simplifying the @pypi
75
79
  # implementation.
@@ -119,6 +123,10 @@ class PyPIFlowDecorator(FlowDecorator):
119
123
  # --environment=pypi to --environment=conda
120
124
  _supported_virtual_envs.extend(["pypi"])
121
125
 
126
+ # TODO: Hardcoded for now to support Docker environment.
127
+ # We should introduce a more robust mechanism for appending supported environments, for example from within extensions.
128
+ _supported_virtual_envs.extend(["docker"])
129
+
122
130
  # The --environment= requirement ensures that valid virtual environments are
123
131
  # created for every step to execute it, greatly simplifying the @conda
124
132
  # implementation.
@@ -0,0 +1,5 @@
1
+ from .system_monitor import SystemMonitor
2
+ from .system_logger import SystemLogger
3
+
4
+ _system_logger = SystemLogger()
5
+ _system_monitor = SystemMonitor()
@@ -0,0 +1,103 @@
1
+ import os
2
+ import sys
3
+ from typing import Dict, Any, Optional, Union
4
+
5
+
6
+ class SystemLogger(object):
7
+ def __init__(self):
8
+ self._logger = None
9
+ self._flow_name = None
10
+ self._context = {}
11
+ self._is_context_updated = False
12
+
13
+ def __del__(self):
14
+ if self._flow_name == "not_a_real_flow":
15
+ self.logger.terminate()
16
+
17
+ def update_context(self, context: Dict[str, Any]):
18
+ """
19
+ Update the global context maintained by the system logger.
20
+
21
+ Parameters
22
+ ----------
23
+ context : Dict[str, Any]
24
+ A dictionary containing the context to update.
25
+
26
+ """
27
+ self._is_context_updated = True
28
+ self._context.update(context)
29
+
30
+ def init_system_logger(
31
+ self, flow_name: str, logger: "metaflow.event_logger.NullEventLogger"
32
+ ):
33
+ self._flow_name = flow_name
34
+ self._logger = logger
35
+
36
+ def _init_logger_outside_flow(self):
37
+ from .system_utils import DummyFlow
38
+ from .system_utils import init_environment_outside_flow
39
+ from metaflow.plugins import LOGGING_SIDECARS
40
+ from metaflow.metaflow_config import DEFAULT_EVENT_LOGGER
41
+
42
+ self._flow_name = "not_a_real_flow"
43
+ _flow = DummyFlow(self._flow_name)
44
+ _environment = init_environment_outside_flow(_flow)
45
+ _logger = LOGGING_SIDECARS[DEFAULT_EVENT_LOGGER](_flow, _environment)
46
+ return _logger
47
+
48
+ @property
49
+ def logger(self) -> Optional["metaflow.event_logger.NullEventLogger"]:
50
+ if self._logger is None:
51
+ # This happens if the logger is being accessed outside of a flow
52
+ # We start a logger with a dummy flow and a default environment
53
+ self._debug("Started logger outside of a flow")
54
+ self._logger = self._init_logger_outside_flow()
55
+ self._logger.start()
56
+ return self._logger
57
+
58
+ @staticmethod
59
+ def _debug(msg: str):
60
+ """
61
+ Log a debug message to stderr.
62
+
63
+ Parameters
64
+ ----------
65
+ msg : str
66
+ Message to log.
67
+
68
+ """
69
+ if os.environ.get("METAFLOW_DEBUG_SIDECAR", "0").lower() not in (
70
+ "0",
71
+ "false",
72
+ "",
73
+ ):
74
+ print("system monitor: %s" % msg, file=sys.stderr)
75
+
76
+ def log_event(
77
+ self, level: str, module: str, name: str, payload: Optional[Any] = None
78
+ ):
79
+ """
80
+ Log an event to the event logger.
81
+
82
+ Parameters
83
+ ----------
84
+ level : str
85
+ Log level of the event. Can be one of "info", "warning", "error", "critical", "debug".
86
+ module : str
87
+ Module of the event. Usually the name of the class, function, or module that the event is being logged from.
88
+ name : str
89
+ Name of the event. Used to qualify the event type.
90
+ payload : Optional[Any], default None
91
+ Payload of the event. Contains the event data.
92
+ """
93
+ self.logger.log(
94
+ {
95
+ "level": level,
96
+ "module": module,
97
+ "name": name,
98
+ "payload": payload if payload is not None else {},
99
+ "context": self._context,
100
+ "is_context_updated": self._is_context_updated,
101
+ }
102
+ )
103
+ self._is_context_updated = False
@@ -0,0 +1,132 @@
1
+ import os
2
+ import sys
3
+ from ..debug import debug
4
+ from contextlib import contextmanager
5
+ from typing import Optional, Union, Dict, Any
6
+
7
+
8
+ class SystemMonitor(object):
9
+ def __init__(self):
10
+ self._monitor = None
11
+ self._flow_name = None
12
+ self._context = {}
13
+
14
+ def __del__(self):
15
+ if self._flow_name == "not_a_real_flow":
16
+ self.monitor.terminate()
17
+
18
+ def update_context(self, context: Dict[str, Any]):
19
+ """
20
+ Update the global context maintained by the system monitor.
21
+
22
+ Parameters
23
+ ----------
24
+ context : Dict[str, Any]
25
+ A dictionary containing the context to update.
26
+
27
+ """
28
+ from metaflow.sidecar import Message, MessageTypes
29
+
30
+ self._context.update(context)
31
+ self.monitor.send(
32
+ Message(
33
+ MessageTypes.MUST_SEND,
34
+ {
35
+ "is_context_updated": True,
36
+ **self._context,
37
+ },
38
+ )
39
+ )
40
+
41
+ def init_system_monitor(
42
+ self, flow_name: str, monitor: "metaflow.monitor.NullMonitor"
43
+ ):
44
+ self._flow_name = flow_name
45
+ self._monitor = monitor
46
+
47
+ def _init_system_monitor_outside_flow(self):
48
+ from .system_utils import DummyFlow
49
+ from .system_utils import init_environment_outside_flow
50
+ from metaflow.plugins import MONITOR_SIDECARS
51
+ from metaflow.metaflow_config import DEFAULT_MONITOR
52
+
53
+ self._flow_name = "not_a_real_flow"
54
+ _flow = DummyFlow(self._flow_name)
55
+ _environment = init_environment_outside_flow(_flow)
56
+ _monitor = MONITOR_SIDECARS[DEFAULT_MONITOR](_flow, _environment)
57
+ return _monitor
58
+
59
+ @property
60
+ def monitor(self) -> Optional["metaflow.monitor.NullMonitor"]:
61
+ if self._monitor is None:
62
+ # This happens if the monitor is being accessed outside of a flow
63
+ self._debug("Started monitor outside of a flow")
64
+ self._monitor = self._init_system_monitor_outside_flow()
65
+ self._monitor.start()
66
+ return self._monitor
67
+
68
+ @staticmethod
69
+ def _debug(msg: str):
70
+ """
71
+ Log a debug message to stderr.
72
+
73
+ Parameters
74
+ ----------
75
+ msg : str
76
+ Message to log.
77
+
78
+ """
79
+ if os.environ.get("METAFLOW_DEBUG_SIDECAR", "0").lower() not in (
80
+ "0",
81
+ "false",
82
+ "",
83
+ ):
84
+ print("system monitor: %s" % msg, file=sys.stderr)
85
+
86
+ @contextmanager
87
+ def measure(self, name: str):
88
+ """
89
+ Context manager to measure the execution duration and counter of a block of code.
90
+
91
+ Parameters
92
+ ----------
93
+ name : str
94
+ The name to associate with the timer and counter.
95
+
96
+ Yields
97
+ ------
98
+ None
99
+ """
100
+ # Delegating the context management to the monitor's measure method
101
+ with self.monitor.measure(name):
102
+ yield
103
+
104
+ @contextmanager
105
+ def count(self, name: str):
106
+ """
107
+ Context manager to increment a counter.
108
+
109
+ Parameters
110
+ ----------
111
+ name : str
112
+ The name of the counter.
113
+
114
+ Yields
115
+ ------
116
+ None
117
+ """
118
+ # Delegating the context management to the monitor's count method
119
+ with self.monitor.count(name):
120
+ yield
121
+
122
+ def gauge(self, gauge: "metaflow.monitor.Gauge"):
123
+ """
124
+ Log a gauge.
125
+
126
+ Parameters
127
+ ----------
128
+ gauge : metaflow.monitor.Gauge
129
+ The gauge to log.
130
+
131
+ """
132
+ self.monitor.gauge(gauge)
@@ -0,0 +1,19 @@
1
+ from typing import Union
2
+
3
+
4
+ class DummyFlow(object):
5
+ def __init__(self, name="not_a_real_flow"):
6
+ self.name = name
7
+
8
+
9
+ # This function is used to initialize the environment outside a flow.
10
+ def init_environment_outside_flow(
11
+ flow: Union["metaflow.flowspec.FlowSpec", "metaflow.sidecar.DummyFlow"]
12
+ ) -> "metaflow.metaflow_environment.MetaflowEnvironment":
13
+ from metaflow.plugins import ENVIRONMENTS
14
+ from metaflow.metaflow_config import DEFAULT_ENVIRONMENT
15
+ from metaflow.metaflow_environment import MetaflowEnvironment
16
+
17
+ return [
18
+ e for e in ENVIRONMENTS + [MetaflowEnvironment] if e.TYPE == DEFAULT_ENVIRONMENT
19
+ ][0](flow)