ob-metaflow-stubs 6.0.3.125__py2.py3-none-any.whl → 6.0.3.126__py2.py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (182) hide show
  1. metaflow-stubs/__init__.pyi +289 -285
  2. metaflow-stubs/cards.pyi +2 -2
  3. metaflow-stubs/cli.pyi +9 -21
  4. metaflow-stubs/{plugins/package_cli.pyi → cli_components/__init__.pyi} +3 -3
  5. metaflow-stubs/cli_components/utils.pyi +35 -0
  6. metaflow-stubs/client/__init__.pyi +2 -2
  7. metaflow-stubs/client/core.pyi +5 -5
  8. metaflow-stubs/client/filecache.pyi +3 -3
  9. metaflow-stubs/events.pyi +3 -3
  10. metaflow-stubs/exception.pyi +2 -2
  11. metaflow-stubs/flowspec.pyi +12 -5
  12. metaflow-stubs/generated_for.txt +1 -1
  13. metaflow-stubs/includefile.pyi +20 -13
  14. metaflow-stubs/info_file.pyi +2 -2
  15. metaflow-stubs/metadata_provider/__init__.pyi +2 -2
  16. metaflow-stubs/metadata_provider/heartbeat.pyi +2 -2
  17. metaflow-stubs/metadata_provider/metadata.pyi +2 -2
  18. metaflow-stubs/metadata_provider/util.pyi +2 -2
  19. metaflow-stubs/metaflow_config.pyi +4 -2
  20. metaflow-stubs/metaflow_current.pyi +131 -131
  21. metaflow-stubs/mf_extensions/__init__.pyi +2 -2
  22. metaflow-stubs/mf_extensions/obcheckpoint/__init__.pyi +2 -2
  23. metaflow-stubs/mf_extensions/obcheckpoint/plugins/__init__.pyi +2 -2
  24. metaflow-stubs/mf_extensions/obcheckpoint/plugins/machine_learning_utilities/__init__.pyi +2 -2
  25. metaflow-stubs/mf_extensions/obcheckpoint/plugins/machine_learning_utilities/checkpoints/__init__.pyi +2 -2
  26. metaflow-stubs/mf_extensions/obcheckpoint/plugins/machine_learning_utilities/checkpoints/checkpoint_storage.pyi +3 -3
  27. metaflow-stubs/mf_extensions/obcheckpoint/plugins/machine_learning_utilities/checkpoints/constructors.pyi +2 -2
  28. metaflow-stubs/mf_extensions/obcheckpoint/plugins/machine_learning_utilities/checkpoints/core.pyi +5 -5
  29. metaflow-stubs/mf_extensions/obcheckpoint/plugins/machine_learning_utilities/checkpoints/exceptions.pyi +2 -2
  30. metaflow-stubs/mf_extensions/obcheckpoint/plugins/machine_learning_utilities/checkpoints/final_api.pyi +3 -3
  31. metaflow-stubs/mf_extensions/obcheckpoint/plugins/machine_learning_utilities/datastore/__init__.pyi +2 -2
  32. metaflow-stubs/mf_extensions/obcheckpoint/plugins/machine_learning_utilities/datastore/core.pyi +3 -3
  33. metaflow-stubs/mf_extensions/obcheckpoint/plugins/machine_learning_utilities/datastore/exceptions.pyi +2 -2
  34. metaflow-stubs/mf_extensions/obcheckpoint/plugins/machine_learning_utilities/datastore/task_utils.pyi +3 -3
  35. metaflow-stubs/mf_extensions/obcheckpoint/plugins/machine_learning_utilities/datastore/utils.pyi +2 -2
  36. metaflow-stubs/mf_extensions/obcheckpoint/plugins/machine_learning_utilities/datastructures.pyi +3 -3
  37. metaflow-stubs/mf_extensions/obcheckpoint/plugins/machine_learning_utilities/exceptions.pyi +2 -2
  38. metaflow-stubs/mf_extensions/obcheckpoint/plugins/machine_learning_utilities/utils/__init__.pyi +2 -2
  39. metaflow-stubs/mf_extensions/obcheckpoint/plugins/machine_learning_utilities/utils/flowspec_utils.pyi +2 -2
  40. metaflow-stubs/mf_extensions/obcheckpoint/plugins/machine_learning_utilities/utils/general.pyi +2 -2
  41. metaflow-stubs/mf_extensions/obcheckpoint/plugins/machine_learning_utilities/utils/identity_utils.pyi +2 -2
  42. metaflow-stubs/mf_extensions/obcheckpoint/plugins/machine_learning_utilities/utils/tar_utils.pyi +3 -3
  43. metaflow-stubs/mf_extensions/outerbounds/__init__.pyi +2 -2
  44. metaflow-stubs/mf_extensions/outerbounds/plugins/__init__.pyi +2 -2
  45. metaflow-stubs/mf_extensions/outerbounds/plugins/snowflake/__init__.pyi +2 -2
  46. metaflow-stubs/mf_extensions/outerbounds/plugins/snowflake/snowflake.pyi +2 -2
  47. metaflow-stubs/mf_extensions/outerbounds/profilers/__init__.pyi +2 -2
  48. metaflow-stubs/mf_extensions/outerbounds/profilers/gpu.pyi +2 -2
  49. metaflow-stubs/mf_extensions/outerbounds/remote_config.pyi +2 -2
  50. metaflow-stubs/mf_extensions/outerbounds/toplevel/__init__.pyi +2 -2
  51. metaflow-stubs/mf_extensions/outerbounds/toplevel/global_aliases_for_metaflow_package.pyi +2 -2
  52. metaflow-stubs/multicore_utils.pyi +2 -2
  53. metaflow-stubs/parameters.pyi +35 -18
  54. metaflow-stubs/plugins/__init__.pyi +14 -14
  55. metaflow-stubs/plugins/airflow/__init__.pyi +2 -2
  56. metaflow-stubs/plugins/airflow/airflow_utils.pyi +2 -2
  57. metaflow-stubs/plugins/airflow/exception.pyi +2 -2
  58. metaflow-stubs/plugins/airflow/sensors/__init__.pyi +2 -2
  59. metaflow-stubs/plugins/airflow/sensors/base_sensor.pyi +2 -2
  60. metaflow-stubs/plugins/airflow/sensors/external_task_sensor.pyi +2 -2
  61. metaflow-stubs/plugins/airflow/sensors/s3_sensor.pyi +2 -2
  62. metaflow-stubs/plugins/argo/__init__.pyi +2 -5
  63. metaflow-stubs/plugins/argo/argo_client.pyi +2 -2
  64. metaflow-stubs/plugins/argo/argo_events.pyi +2 -2
  65. metaflow-stubs/plugins/argo/argo_workflows.pyi +3 -2
  66. metaflow-stubs/plugins/argo/argo_workflows_decorator.pyi +3 -3
  67. metaflow-stubs/plugins/argo/argo_workflows_deployer.pyi +4 -4
  68. metaflow-stubs/plugins/argo/argo_workflows_deployer_objects.pyi +31 -3
  69. metaflow-stubs/plugins/aws/__init__.pyi +2 -2
  70. metaflow-stubs/plugins/aws/aws_client.pyi +2 -2
  71. metaflow-stubs/plugins/aws/aws_utils.pyi +2 -2
  72. metaflow-stubs/plugins/aws/batch/__init__.pyi +2 -2
  73. metaflow-stubs/plugins/aws/batch/batch.pyi +2 -2
  74. metaflow-stubs/plugins/aws/batch/batch_client.pyi +2 -2
  75. metaflow-stubs/plugins/aws/batch/batch_decorator.pyi +3 -3
  76. metaflow-stubs/plugins/aws/secrets_manager/__init__.pyi +2 -2
  77. metaflow-stubs/plugins/aws/secrets_manager/aws_secrets_manager_secrets_provider.pyi +4 -4
  78. metaflow-stubs/plugins/aws/step_functions/__init__.pyi +2 -3
  79. metaflow-stubs/plugins/aws/step_functions/event_bridge_client.pyi +2 -2
  80. metaflow-stubs/plugins/aws/step_functions/schedule_decorator.pyi +2 -2
  81. metaflow-stubs/plugins/aws/step_functions/step_functions.pyi +3 -2
  82. metaflow-stubs/plugins/aws/step_functions/step_functions_client.pyi +2 -2
  83. metaflow-stubs/plugins/aws/step_functions/step_functions_deployer.pyi +5 -5
  84. metaflow-stubs/plugins/aws/step_functions/step_functions_deployer_objects.pyi +3 -3
  85. metaflow-stubs/plugins/azure/__init__.pyi +2 -2
  86. metaflow-stubs/plugins/azure/azure_credential.pyi +2 -2
  87. metaflow-stubs/plugins/azure/azure_exceptions.pyi +2 -2
  88. metaflow-stubs/plugins/azure/azure_secret_manager_secrets_provider.pyi +4 -4
  89. metaflow-stubs/plugins/azure/azure_utils.pyi +2 -2
  90. metaflow-stubs/plugins/azure/blob_service_client_factory.pyi +2 -2
  91. metaflow-stubs/plugins/azure/includefile_support.pyi +2 -2
  92. metaflow-stubs/plugins/cards/__init__.pyi +2 -3
  93. metaflow-stubs/plugins/cards/card_client.pyi +3 -3
  94. metaflow-stubs/plugins/cards/card_creator.pyi +2 -2
  95. metaflow-stubs/plugins/cards/card_datastore.pyi +2 -2
  96. metaflow-stubs/plugins/cards/card_decorator.pyi +2 -2
  97. metaflow-stubs/plugins/cards/card_modules/__init__.pyi +2 -2
  98. metaflow-stubs/plugins/cards/card_modules/basic.pyi +2 -2
  99. metaflow-stubs/plugins/cards/card_modules/card.pyi +2 -2
  100. metaflow-stubs/plugins/cards/card_modules/components.pyi +4 -4
  101. metaflow-stubs/plugins/cards/card_modules/convert_to_native_type.pyi +2 -2
  102. metaflow-stubs/plugins/cards/card_modules/renderer_tools.pyi +2 -2
  103. metaflow-stubs/plugins/cards/card_modules/test_cards.pyi +2 -2
  104. metaflow-stubs/plugins/cards/card_resolver.pyi +2 -2
  105. metaflow-stubs/plugins/cards/component_serializer.pyi +2 -2
  106. metaflow-stubs/plugins/cards/exception.pyi +2 -2
  107. metaflow-stubs/plugins/catch_decorator.pyi +3 -3
  108. metaflow-stubs/plugins/datatools/__init__.pyi +2 -2
  109. metaflow-stubs/plugins/datatools/local.pyi +2 -2
  110. metaflow-stubs/plugins/datatools/s3/__init__.pyi +2 -2
  111. metaflow-stubs/plugins/datatools/s3/s3.pyi +4 -4
  112. metaflow-stubs/plugins/datatools/s3/s3tail.pyi +2 -2
  113. metaflow-stubs/plugins/datatools/s3/s3util.pyi +2 -2
  114. metaflow-stubs/plugins/debug_logger.pyi +2 -2
  115. metaflow-stubs/plugins/debug_monitor.pyi +2 -2
  116. metaflow-stubs/plugins/environment_decorator.pyi +2 -2
  117. metaflow-stubs/plugins/events_decorator.pyi +2 -2
  118. metaflow-stubs/plugins/frameworks/__init__.pyi +2 -2
  119. metaflow-stubs/plugins/frameworks/pytorch.pyi +2 -2
  120. metaflow-stubs/plugins/gcp/__init__.pyi +2 -2
  121. metaflow-stubs/plugins/gcp/gcp_secret_manager_secrets_provider.pyi +4 -4
  122. metaflow-stubs/plugins/gcp/gs_exceptions.pyi +2 -2
  123. metaflow-stubs/plugins/gcp/gs_storage_client_factory.pyi +2 -2
  124. metaflow-stubs/plugins/gcp/gs_utils.pyi +2 -2
  125. metaflow-stubs/plugins/gcp/includefile_support.pyi +2 -2
  126. metaflow-stubs/plugins/kubernetes/__init__.pyi +2 -5
  127. metaflow-stubs/plugins/kubernetes/kube_utils.pyi +2 -2
  128. metaflow-stubs/plugins/kubernetes/kubernetes.pyi +3 -3
  129. metaflow-stubs/plugins/kubernetes/kubernetes_client.pyi +2 -2
  130. metaflow-stubs/plugins/kubernetes/kubernetes_decorator.pyi +3 -3
  131. metaflow-stubs/plugins/kubernetes/kubernetes_jobsets.pyi +2 -2
  132. metaflow-stubs/plugins/parallel_decorator.pyi +2 -2
  133. metaflow-stubs/plugins/perimeters.pyi +2 -2
  134. metaflow-stubs/plugins/project_decorator.pyi +2 -2
  135. metaflow-stubs/plugins/pypi/__init__.pyi +3 -3
  136. metaflow-stubs/plugins/pypi/conda_decorator.pyi +6 -2
  137. metaflow-stubs/plugins/pypi/conda_environment.pyi +4 -4
  138. metaflow-stubs/plugins/pypi/pypi_decorator.pyi +2 -2
  139. metaflow-stubs/plugins/pypi/pypi_environment.pyi +2 -2
  140. metaflow-stubs/plugins/pypi/utils.pyi +2 -2
  141. metaflow-stubs/plugins/resources_decorator.pyi +2 -2
  142. metaflow-stubs/plugins/retry_decorator.pyi +2 -2
  143. metaflow-stubs/plugins/secrets/__init__.pyi +3 -3
  144. metaflow-stubs/plugins/secrets/inline_secrets_provider.pyi +4 -4
  145. metaflow-stubs/plugins/secrets/secrets_decorator.pyi +2 -2
  146. metaflow-stubs/plugins/snowflake/__init__.pyi +2 -2
  147. metaflow-stubs/plugins/storage_executor.pyi +2 -2
  148. metaflow-stubs/plugins/test_unbounded_foreach_decorator.pyi +2 -2
  149. metaflow-stubs/plugins/timeout_decorator.pyi +4 -4
  150. metaflow-stubs/profilers/__init__.pyi +2 -2
  151. metaflow-stubs/pylint_wrapper.pyi +2 -2
  152. metaflow-stubs/runner/__init__.pyi +2 -2
  153. metaflow-stubs/runner/deployer.pyi +30 -30
  154. metaflow-stubs/runner/deployer_impl.pyi +4 -4
  155. metaflow-stubs/runner/metaflow_runner.pyi +5 -5
  156. metaflow-stubs/runner/nbdeploy.pyi +4 -2
  157. metaflow-stubs/runner/nbrun.pyi +3 -3
  158. metaflow-stubs/runner/subprocess_manager.pyi +5 -2
  159. metaflow-stubs/runner/utils.pyi +7 -7
  160. metaflow-stubs/system/__init__.pyi +2 -2
  161. metaflow-stubs/system/system_logger.pyi +3 -3
  162. metaflow-stubs/system/system_monitor.pyi +2 -2
  163. metaflow-stubs/tagging_util.pyi +2 -2
  164. metaflow-stubs/tuple_util.pyi +2 -2
  165. metaflow-stubs/{plugins/aws/step_functions/production_token.pyi → user_configs/__init__.pyi} +5 -11
  166. metaflow-stubs/user_configs/config_decorators.pyi +253 -0
  167. metaflow-stubs/user_configs/config_options.pyi +82 -0
  168. metaflow-stubs/user_configs/config_parameters.pyi +217 -0
  169. {ob_metaflow_stubs-6.0.3.125.dist-info → ob_metaflow_stubs-6.0.3.126.dist-info}/METADATA +1 -1
  170. ob_metaflow_stubs-6.0.3.126.dist-info/RECORD +173 -0
  171. metaflow-stubs/clone_util.pyi +0 -14
  172. metaflow-stubs/mflog/__init__.pyi +0 -6
  173. metaflow-stubs/mflog/mflog.pyi +0 -69
  174. metaflow-stubs/plugins/argo/argo_workflows_cli.pyi +0 -103
  175. metaflow-stubs/plugins/cards/card_cli.pyi +0 -146
  176. metaflow-stubs/plugins/kubernetes/kubernetes_cli.pyi +0 -33
  177. metaflow-stubs/plugins/logs_cli.pyi +0 -46
  178. metaflow-stubs/plugins/tag_cli.pyi +0 -19
  179. metaflow-stubs/procpoll.pyi +0 -53
  180. ob_metaflow_stubs-6.0.3.125.dist-info/RECORD +0 -178
  181. {ob_metaflow_stubs-6.0.3.125.dist-info → ob_metaflow_stubs-6.0.3.126.dist-info}/WHEEL +0 -0
  182. {ob_metaflow_stubs-6.0.3.125.dist-info → ob_metaflow_stubs-6.0.3.126.dist-info}/top_level.txt +0 -0
@@ -1,15 +1,15 @@
1
1
  ######################################################################################################
2
2
  # Auto-generated Metaflow stub file #
3
- # MF version: 2.12.36.3+obcheckpoint(0.1.4);ob(v1) #
4
- # Generated on 2024-12-10T22:06:22.196386 #
3
+ # MF version: 2.12.39.1+obcheckpoint(0.1.4);ob(v1) #
4
+ # Generated on 2024-12-17T01:10:55.898283 #
5
5
  ######################################################################################################
6
6
 
7
7
  from __future__ import annotations
8
8
 
9
9
  import typing
10
10
  if typing.TYPE_CHECKING:
11
- import datetime
12
11
  import typing
12
+ import datetime
13
13
  FlowSpecDerived = typing.TypeVar("FlowSpecDerived", bound="FlowSpec", contravariant=False, covariant=False)
14
14
  StepFlag = typing.NewType("StepFlag", bool)
15
15
 
@@ -22,6 +22,7 @@ from .multicore_utils import parallel_map as parallel_map
22
22
  from . import metaflow_current as metaflow_current
23
23
  from .metaflow_current import current as current
24
24
  from . import parameters as parameters
25
+ from . import user_configs as user_configs
25
26
  from . import tagging_util as tagging_util
26
27
  from . import metadata_provider as metadata_provider
27
28
  from . import flowspec as flowspec
@@ -29,9 +30,13 @@ from .flowspec import FlowSpec as FlowSpec
29
30
  from .parameters import Parameter as Parameter
30
31
  from .parameters import JSONTypeClass as JSONTypeClass
31
32
  from .parameters import JSONType as JSONType
33
+ from .user_configs.config_parameters import Config as Config
34
+ from .user_configs.config_parameters import config_expr as config_expr
35
+ from .user_configs.config_decorators import CustomFlowDecorator as CustomFlowDecorator
36
+ from .user_configs.config_decorators import CustomStepDecorator as CustomStepDecorator
37
+ from . import events as events
32
38
  from . import tuple_util as tuple_util
33
39
  from . import cards as cards
34
- from . import events as events
35
40
  from . import runner as runner
36
41
  from . import plugins as plugins
37
42
  from .mf_extensions.outerbounds.toplevel.global_aliases_for_metaflow_package import S3 as S3
@@ -59,10 +64,9 @@ from .mf_extensions.obcheckpoint.plugins.machine_learning_utilities.checkpoints.
59
64
  from .mf_extensions.obcheckpoint.plugins.machine_learning_utilities.datastructures import load_model as load_model
60
65
  from .mf_extensions.outerbounds.toplevel.global_aliases_for_metaflow_package import get_aws_client as get_aws_client
61
66
  from .mf_extensions.outerbounds.plugins.snowflake.snowflake import Snowflake as Snowflake
67
+ from . import cli_components as cli_components
62
68
  from . import system as system
63
69
  from . import pylint_wrapper as pylint_wrapper
64
- from . import procpoll as procpoll
65
- from . import clone_util as clone_util
66
70
  from . import cli as cli
67
71
  from . import profilers as profilers
68
72
 
@@ -142,89 +146,135 @@ def step(f: typing.Union[typing.Callable[[FlowSpecDerived], None], typing.Callab
142
146
  ...
143
147
 
144
148
  @typing.overload
145
- def fast_bakery_internal(f: typing.Callable[[FlowSpecDerived, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, StepFlag], None]:
149
+ def conda(*, packages: typing.Dict[str, str] = {}, libraries: typing.Dict[str, str] = {}, python: typing.Optional[str] = None, disabled: bool = False) -> typing.Callable[[typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]], typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]]:
146
150
  """
147
- Internal decorator to support Fast bakery
151
+ Specifies the Conda environment for the step.
152
+
153
+ Information in this decorator will augment any
154
+ attributes set in the `@conda_base` flow-level decorator. Hence,
155
+ you can use `@conda_base` to set packages required by all
156
+ steps and use `@conda` to specify step-specific overrides.
148
157
  """
149
158
  ...
150
159
 
151
160
  @typing.overload
152
- def fast_bakery_internal(f: typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]:
161
+ def conda(f: typing.Callable[[FlowSpecDerived, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, StepFlag], None]:
153
162
  ...
154
163
 
155
- def fast_bakery_internal(f: typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None], None] = None):
164
+ @typing.overload
165
+ def conda(f: typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]:
166
+ ...
167
+
168
+ def conda(f: typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None], None] = None, *, packages: typing.Dict[str, str] = {}, libraries: typing.Dict[str, str] = {}, python: typing.Optional[str] = None, disabled: bool = False):
156
169
  """
157
- Internal decorator to support Fast bakery
170
+ Specifies the Conda environment for the step.
171
+
172
+ Information in this decorator will augment any
173
+ attributes set in the `@conda_base` flow-level decorator. Hence,
174
+ you can use `@conda_base` to set packages required by all
175
+ steps and use `@conda` to specify step-specific overrides.
158
176
  """
159
177
  ...
160
178
 
161
179
  @typing.overload
162
- def environment(*, vars: typing.Dict[str, str] = {}) -> typing.Callable[[typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]], typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]]:
180
+ def parallel(f: typing.Callable[[FlowSpecDerived, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, StepFlag], None]:
163
181
  """
164
- Specifies environment variables to be set prior to the execution of a step.
182
+ Decorator prototype for all step decorators. This function gets specialized
183
+ and imported for all decorators types by _import_plugin_decorators().
165
184
  """
166
185
  ...
167
186
 
168
187
  @typing.overload
169
- def environment(f: typing.Callable[[FlowSpecDerived, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, StepFlag], None]:
188
+ def parallel(f: typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]:
189
+ ...
190
+
191
+ def parallel(f: typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None], None] = None):
192
+ """
193
+ Decorator prototype for all step decorators. This function gets specialized
194
+ and imported for all decorators types by _import_plugin_decorators().
195
+ """
170
196
  ...
171
197
 
172
198
  @typing.overload
173
- def environment(f: typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]:
199
+ def secrets(*, sources: typing.List[typing.Union[str, typing.Dict[str, typing.Any]]] = []) -> typing.Callable[[typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]], typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]]:
200
+ """
201
+ Specifies secrets to be retrieved and injected as environment variables prior to
202
+ the execution of a step.
203
+ """
174
204
  ...
175
205
 
176
- def environment(f: typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None], None] = None, *, vars: typing.Dict[str, str] = {}):
206
+ @typing.overload
207
+ def secrets(f: typing.Callable[[FlowSpecDerived, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, StepFlag], None]:
208
+ ...
209
+
210
+ @typing.overload
211
+ def secrets(f: typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]:
212
+ ...
213
+
214
+ def secrets(f: typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None], None] = None, *, sources: typing.List[typing.Union[str, typing.Dict[str, typing.Any]]] = []):
177
215
  """
178
- Specifies environment variables to be set prior to the execution of a step.
216
+ Specifies secrets to be retrieved and injected as environment variables prior to
217
+ the execution of a step.
179
218
  """
180
219
  ...
181
220
 
182
221
  @typing.overload
183
- def resources(*, cpu: int = 1, gpu: typing.Optional[int] = None, disk: typing.Optional[int] = None, memory: int = 4096, shared_memory: typing.Optional[int] = None) -> typing.Callable[[typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]], typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]]:
222
+ def timeout(*, seconds: int = 0, minutes: int = 0, hours: int = 0) -> typing.Callable[[typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]], typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]]:
184
223
  """
185
- Specifies the resources needed when executing this step.
224
+ Specifies a timeout for your step.
186
225
 
187
- Use `@resources` to specify the resource requirements
188
- independently of the specific compute layer (`@batch`, `@kubernetes`).
226
+ This decorator is useful if this step may hang indefinitely.
189
227
 
190
- You can choose the compute layer on the command line by executing e.g.
191
- ```
192
- python myflow.py run --with batch
193
- ```
194
- or
195
- ```
196
- python myflow.py run --with kubernetes
197
- ```
198
- which executes the flow on the desired system using the
199
- requirements specified in `@resources`.
228
+ This can be used in conjunction with the `@retry` decorator as well as the `@catch` decorator.
229
+ A timeout is considered to be an exception thrown by the step. It will cause the step to be
230
+ retried if needed and the exception will be caught by the `@catch` decorator, if present.
231
+
232
+ Note that all the values specified in parameters are added together so if you specify
233
+ 60 seconds and 1 hour, the decorator will have an effective timeout of 1 hour and 1 minute.
200
234
  """
201
235
  ...
202
236
 
203
237
  @typing.overload
204
- def resources(f: typing.Callable[[FlowSpecDerived, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, StepFlag], None]:
238
+ def timeout(f: typing.Callable[[FlowSpecDerived, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, StepFlag], None]:
205
239
  ...
206
240
 
207
241
  @typing.overload
208
- def resources(f: typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]:
242
+ def timeout(f: typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]:
209
243
  ...
210
244
 
211
- def resources(f: typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None], None] = None, *, cpu: int = 1, gpu: typing.Optional[int] = None, disk: typing.Optional[int] = None, memory: int = 4096, shared_memory: typing.Optional[int] = None):
245
+ def timeout(f: typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None], None] = None, *, seconds: int = 0, minutes: int = 0, hours: int = 0):
212
246
  """
213
- Specifies the resources needed when executing this step.
247
+ Specifies a timeout for your step.
214
248
 
215
- Use `@resources` to specify the resource requirements
216
- independently of the specific compute layer (`@batch`, `@kubernetes`).
249
+ This decorator is useful if this step may hang indefinitely.
217
250
 
218
- You can choose the compute layer on the command line by executing e.g.
219
- ```
220
- python myflow.py run --with batch
221
- ```
222
- or
223
- ```
224
- python myflow.py run --with kubernetes
225
- ```
226
- which executes the flow on the desired system using the
227
- requirements specified in `@resources`.
251
+ This can be used in conjunction with the `@retry` decorator as well as the `@catch` decorator.
252
+ A timeout is considered to be an exception thrown by the step. It will cause the step to be
253
+ retried if needed and the exception will be caught by the `@catch` decorator, if present.
254
+
255
+ Note that all the values specified in parameters are added together so if you specify
256
+ 60 seconds and 1 hour, the decorator will have an effective timeout of 1 hour and 1 minute.
257
+ """
258
+ ...
259
+
260
+ @typing.overload
261
+ def checkpoint(*, load_policy: str = 'fresh', temp_dir_root: str = None) -> typing.Callable[[typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]], typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]]:
262
+ """
263
+ Enables checkpointing for a step.
264
+ """
265
+ ...
266
+
267
+ @typing.overload
268
+ def checkpoint(f: typing.Callable[[FlowSpecDerived, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, StepFlag], None]:
269
+ ...
270
+
271
+ @typing.overload
272
+ def checkpoint(f: typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]:
273
+ ...
274
+
275
+ def checkpoint(f: typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None], None] = None, *, load_policy: str = 'fresh', temp_dir_root: str = None):
276
+ """
277
+ Enables checkpointing for a step.
228
278
  """
229
279
  ...
230
280
 
@@ -260,23 +310,57 @@ def catch(f: typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], ty
260
310
  ...
261
311
 
262
312
  @typing.overload
263
- def model(*, load: typing.Union[typing.List[str], str, typing.List[typing.Tuple[str, typing.Optional[str]]]] = None, temp_dir_root: str = None) -> typing.Callable[[typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]], typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]]:
313
+ def resources(*, cpu: int = 1, gpu: typing.Optional[int] = None, disk: typing.Optional[int] = None, memory: int = 4096, shared_memory: typing.Optional[int] = None) -> typing.Callable[[typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]], typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]]:
264
314
  """
265
- Enables loading / saving of models within a step.
315
+ Specifies the resources needed when executing this step.
316
+
317
+ Use `@resources` to specify the resource requirements
318
+ independently of the specific compute layer (`@batch`, `@kubernetes`).
319
+
320
+ You can choose the compute layer on the command line by executing e.g.
321
+ ```
322
+ python myflow.py run --with batch
323
+ ```
324
+ or
325
+ ```
326
+ python myflow.py run --with kubernetes
327
+ ```
328
+ which executes the flow on the desired system using the
329
+ requirements specified in `@resources`.
266
330
  """
267
331
  ...
268
332
 
269
333
  @typing.overload
270
- def model(f: typing.Callable[[FlowSpecDerived, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, StepFlag], None]:
334
+ def resources(f: typing.Callable[[FlowSpecDerived, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, StepFlag], None]:
271
335
  ...
272
336
 
273
337
  @typing.overload
274
- def model(f: typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]:
338
+ def resources(f: typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]:
275
339
  ...
276
340
 
277
- def model(f: typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None], None] = None, *, load: typing.Union[typing.List[str], str, typing.List[typing.Tuple[str, typing.Optional[str]]]] = None, temp_dir_root: str = None):
341
+ def resources(f: typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None], None] = None, *, cpu: int = 1, gpu: typing.Optional[int] = None, disk: typing.Optional[int] = None, memory: int = 4096, shared_memory: typing.Optional[int] = None):
278
342
  """
279
- Enables loading / saving of models within a step.
343
+ Specifies the resources needed when executing this step.
344
+
345
+ Use `@resources` to specify the resource requirements
346
+ independently of the specific compute layer (`@batch`, `@kubernetes`).
347
+
348
+ You can choose the compute layer on the command line by executing e.g.
349
+ ```
350
+ python myflow.py run --with batch
351
+ ```
352
+ or
353
+ ```
354
+ python myflow.py run --with kubernetes
355
+ ```
356
+ which executes the flow on the desired system using the
357
+ requirements specified in `@resources`.
358
+ """
359
+ ...
360
+
361
+ def kubernetes(*, cpu: int = 1, memory: int = 4096, disk: int = 10240, image: typing.Optional[str] = None, image_pull_policy: str = 'KUBERNETES_IMAGE_PULL_POLICY', service_account: str = 'METAFLOW_KUBERNETES_SERVICE_ACCOUNT', secrets: typing.Optional[typing.List[str]] = None, node_selector: typing.Union[typing.Dict[str, str], str, None] = None, namespace: str = 'METAFLOW_KUBERNETES_NAMESPACE', gpu: typing.Optional[int] = None, gpu_vendor: str = 'KUBERNETES_GPU_VENDOR', tolerations: typing.List[str] = [], use_tmpfs: bool = False, tmpfs_tempdir: bool = True, tmpfs_size: typing.Optional[int] = None, tmpfs_path: typing.Optional[str] = '/metaflow_temp', persistent_volume_claims: typing.Optional[typing.Dict[str, str]] = None, shared_memory: typing.Optional[int] = None, port: typing.Optional[int] = None, compute_pool: typing.Optional[str] = None, hostname_resolution_timeout: int = 600, qos: str = 'Burstable') -> typing.Callable[[typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]], typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]]:
362
+ """
363
+ Specifies that this step should execute on Kubernetes.
280
364
  """
281
365
  ...
282
366
 
@@ -311,212 +395,165 @@ def pypi(f: typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typ
311
395
  """
312
396
  ...
313
397
 
398
+ def huggingface_hub(*, temp_dir_root: typing.Optional[str] = None, load: typing.Union[typing.List[str], typing.List[typing.Tuple[typing.Dict, str]], typing.List[typing.Tuple[str, str]], typing.List[typing.Dict], None]) -> typing.Callable[[typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]], typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]]:
399
+ """
400
+ Decorator that helps cache, version and store models/datasets from huggingface hub.
401
+ """
402
+ ...
403
+
314
404
  @typing.overload
315
- def conda(*, packages: typing.Dict[str, str] = {}, libraries: typing.Dict[str, str] = {}, python: typing.Optional[str] = None, disabled: bool = False) -> typing.Callable[[typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]], typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]]:
405
+ def model(*, load: typing.Union[typing.List[str], str, typing.List[typing.Tuple[str, typing.Optional[str]]]] = None, temp_dir_root: str = None) -> typing.Callable[[typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]], typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]]:
316
406
  """
317
- Specifies the Conda environment for the step.
318
-
319
- Information in this decorator will augment any
320
- attributes set in the `@conda_base` flow-level decorator. Hence,
321
- you can use `@conda_base` to set packages required by all
322
- steps and use `@conda` to specify step-specific overrides.
407
+ Enables loading / saving of models within a step.
323
408
  """
324
409
  ...
325
410
 
326
411
  @typing.overload
327
- def conda(f: typing.Callable[[FlowSpecDerived, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, StepFlag], None]:
412
+ def model(f: typing.Callable[[FlowSpecDerived, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, StepFlag], None]:
328
413
  ...
329
414
 
330
415
  @typing.overload
331
- def conda(f: typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]:
416
+ def model(f: typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]:
332
417
  ...
333
418
 
334
- def conda(f: typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None], None] = None, *, packages: typing.Dict[str, str] = {}, libraries: typing.Dict[str, str] = {}, python: typing.Optional[str] = None, disabled: bool = False):
419
+ def model(f: typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None], None] = None, *, load: typing.Union[typing.List[str], str, typing.List[typing.Tuple[str, typing.Optional[str]]]] = None, temp_dir_root: str = None):
335
420
  """
336
- Specifies the Conda environment for the step.
337
-
338
- Information in this decorator will augment any
339
- attributes set in the `@conda_base` flow-level decorator. Hence,
340
- you can use `@conda_base` to set packages required by all
341
- steps and use `@conda` to specify step-specific overrides.
421
+ Enables loading / saving of models within a step.
342
422
  """
343
423
  ...
344
424
 
345
425
  @typing.overload
346
- def card(*, type: str = 'default', id: typing.Optional[str] = None, options: typing.Dict[str, typing.Any] = {}, timeout: int = 45) -> typing.Callable[[typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]], typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]]:
426
+ def environment(*, vars: typing.Dict[str, str] = {}) -> typing.Callable[[typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]], typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]]:
347
427
  """
348
- Creates a human-readable report, a Metaflow Card, after this step completes.
349
-
350
- Note that you may add multiple `@card` decorators in a step with different parameters.
428
+ Specifies environment variables to be set prior to the execution of a step.
351
429
  """
352
430
  ...
353
431
 
354
432
  @typing.overload
355
- def card(f: typing.Callable[[FlowSpecDerived, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, StepFlag], None]:
433
+ def environment(f: typing.Callable[[FlowSpecDerived, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, StepFlag], None]:
356
434
  ...
357
435
 
358
436
  @typing.overload
359
- def card(f: typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]:
437
+ def environment(f: typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]:
360
438
  ...
361
439
 
362
- def card(f: typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None], None] = None, *, type: str = 'default', id: typing.Optional[str] = None, options: typing.Dict[str, typing.Any] = {}, timeout: int = 45):
440
+ def environment(f: typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None], None] = None, *, vars: typing.Dict[str, str] = {}):
363
441
  """
364
- Creates a human-readable report, a Metaflow Card, after this step completes.
365
-
366
- Note that you may add multiple `@card` decorators in a step with different parameters.
442
+ Specifies environment variables to be set prior to the execution of a step.
367
443
  """
368
444
  ...
369
445
 
370
446
  @typing.overload
371
- def parallel(f: typing.Callable[[FlowSpecDerived, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, StepFlag], None]:
447
+ def fast_bakery_internal(f: typing.Callable[[FlowSpecDerived, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, StepFlag], None]:
372
448
  """
373
- Decorator prototype for all step decorators. This function gets specialized
374
- and imported for all decorators types by _import_plugin_decorators().
449
+ Internal decorator to support Fast bakery
375
450
  """
376
451
  ...
377
452
 
378
453
  @typing.overload
379
- def parallel(f: typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]:
454
+ def fast_bakery_internal(f: typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]:
380
455
  ...
381
456
 
382
- def parallel(f: typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None], None] = None):
457
+ def fast_bakery_internal(f: typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None], None] = None):
383
458
  """
384
- Decorator prototype for all step decorators. This function gets specialized
385
- and imported for all decorators types by _import_plugin_decorators().
459
+ Internal decorator to support Fast bakery
386
460
  """
387
461
  ...
388
462
 
389
463
  @typing.overload
390
- def timeout(*, seconds: int = 0, minutes: int = 0, hours: int = 0) -> typing.Callable[[typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]], typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]]:
464
+ def retry(*, times: int = 3, minutes_between_retries: int = 2) -> typing.Callable[[typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]], typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]]:
391
465
  """
392
- Specifies a timeout for your step.
393
-
394
- This decorator is useful if this step may hang indefinitely.
466
+ Specifies the number of times the task corresponding
467
+ to a step needs to be retried.
395
468
 
396
- This can be used in conjunction with the `@retry` decorator as well as the `@catch` decorator.
397
- A timeout is considered to be an exception thrown by the step. It will cause the step to be
398
- retried if needed and the exception will be caught by the `@catch` decorator, if present.
469
+ This decorator is useful for handling transient errors, such as networking issues.
470
+ If your task contains operations that can't be retried safely, e.g. database updates,
471
+ it is advisable to annotate it with `@retry(times=0)`.
399
472
 
400
- Note that all the values specified in parameters are added together so if you specify
401
- 60 seconds and 1 hour, the decorator will have an effective timeout of 1 hour and 1 minute.
473
+ This can be used in conjunction with the `@catch` decorator. The `@catch`
474
+ decorator will execute a no-op task after all retries have been exhausted,
475
+ ensuring that the flow execution can continue.
402
476
  """
403
477
  ...
404
478
 
405
479
  @typing.overload
406
- def timeout(f: typing.Callable[[FlowSpecDerived, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, StepFlag], None]:
480
+ def retry(f: typing.Callable[[FlowSpecDerived, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, StepFlag], None]:
407
481
  ...
408
482
 
409
483
  @typing.overload
410
- def timeout(f: typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]:
484
+ def retry(f: typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]:
411
485
  ...
412
486
 
413
- def timeout(f: typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None], None] = None, *, seconds: int = 0, minutes: int = 0, hours: int = 0):
487
+ def retry(f: typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None], None] = None, *, times: int = 3, minutes_between_retries: int = 2):
414
488
  """
415
- Specifies a timeout for your step.
416
-
417
- This decorator is useful if this step may hang indefinitely.
489
+ Specifies the number of times the task corresponding
490
+ to a step needs to be retried.
418
491
 
419
- This can be used in conjunction with the `@retry` decorator as well as the `@catch` decorator.
420
- A timeout is considered to be an exception thrown by the step. It will cause the step to be
421
- retried if needed and the exception will be caught by the `@catch` decorator, if present.
492
+ This decorator is useful for handling transient errors, such as networking issues.
493
+ If your task contains operations that can't be retried safely, e.g. database updates,
494
+ it is advisable to annotate it with `@retry(times=0)`.
422
495
 
423
- Note that all the values specified in parameters are added together so if you specify
424
- 60 seconds and 1 hour, the decorator will have an effective timeout of 1 hour and 1 minute.
425
- """
426
- ...
427
-
428
- def huggingface_hub(*, temp_dir_root: typing.Optional[str] = None, load: typing.Union[typing.List[str], typing.List[typing.Tuple[typing.Dict, str]], typing.List[typing.Tuple[str, str]], typing.List[typing.Dict], None]) -> typing.Callable[[typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]], typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]]:
429
- """
430
- Decorator that helps cache, version and store models/datasets from huggingface hub.
431
- """
432
- ...
433
-
434
- def kubernetes(*, cpu: int = 1, memory: int = 4096, disk: int = 10240, image: typing.Optional[str] = None, image_pull_policy: str = 'KUBERNETES_IMAGE_PULL_POLICY', service_account: str = 'METAFLOW_KUBERNETES_SERVICE_ACCOUNT', secrets: typing.Optional[typing.List[str]] = None, node_selector: typing.Union[typing.Dict[str, str], str, None] = None, namespace: str = 'METAFLOW_KUBERNETES_NAMESPACE', gpu: typing.Optional[int] = None, gpu_vendor: str = 'KUBERNETES_GPU_VENDOR', tolerations: typing.List[str] = [], use_tmpfs: bool = False, tmpfs_tempdir: bool = True, tmpfs_size: typing.Optional[int] = None, tmpfs_path: typing.Optional[str] = '/metaflow_temp', persistent_volume_claims: typing.Optional[typing.Dict[str, str]] = None, shared_memory: typing.Optional[int] = None, port: typing.Optional[int] = None, compute_pool: typing.Optional[str] = None, hostname_resolution_timeout: int = 600, qos: str = 'Burstable') -> typing.Callable[[typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]], typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]]:
435
- """
436
- Specifies that this step should execute on Kubernetes.
496
+ This can be used in conjunction with the `@catch` decorator. The `@catch`
497
+ decorator will execute a no-op task after all retries have been exhausted,
498
+ ensuring that the flow execution can continue.
437
499
  """
438
500
  ...
439
501
 
440
502
  @typing.overload
441
- def secrets(*, sources: typing.List[typing.Union[str, typing.Dict[str, typing.Any]]] = []) -> typing.Callable[[typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]], typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]]:
503
+ def card(*, type: str = 'default', id: typing.Optional[str] = None, options: typing.Dict[str, typing.Any] = {}, timeout: int = 45) -> typing.Callable[[typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]], typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]]:
442
504
  """
443
- Specifies secrets to be retrieved and injected as environment variables prior to
444
- the execution of a step.
505
+ Creates a human-readable report, a Metaflow Card, after this step completes.
506
+
507
+ Note that you may add multiple `@card` decorators in a step with different parameters.
445
508
  """
446
509
  ...
447
510
 
448
511
  @typing.overload
449
- def secrets(f: typing.Callable[[FlowSpecDerived, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, StepFlag], None]:
512
+ def card(f: typing.Callable[[FlowSpecDerived, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, StepFlag], None]:
450
513
  ...
451
514
 
452
515
  @typing.overload
453
- def secrets(f: typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]:
454
- ...
455
-
456
- def secrets(f: typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None], None] = None, *, sources: typing.List[typing.Union[str, typing.Dict[str, typing.Any]]] = []):
457
- """
458
- Specifies secrets to be retrieved and injected as environment variables prior to
459
- the execution of a step.
460
- """
516
+ def card(f: typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]:
461
517
  ...
462
518
 
463
- @typing.overload
464
- def checkpoint(*, load_policy: str = 'fresh', temp_dir_root: str = None) -> typing.Callable[[typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]], typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]]:
519
+ def card(f: typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None], None] = None, *, type: str = 'default', id: typing.Optional[str] = None, options: typing.Dict[str, typing.Any] = {}, timeout: int = 45):
465
520
  """
466
- Enables checkpointing for a step.
521
+ Creates a human-readable report, a Metaflow Card, after this step completes.
522
+
523
+ Note that you may add multiple `@card` decorators in a step with different parameters.
467
524
  """
468
525
  ...
469
526
 
470
- @typing.overload
471
- def checkpoint(f: typing.Callable[[FlowSpecDerived, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, StepFlag], None]:
472
- ...
473
-
474
- @typing.overload
475
- def checkpoint(f: typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]:
476
- ...
477
-
478
- def checkpoint(f: typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None], None] = None, *, load_policy: str = 'fresh', temp_dir_root: str = None):
527
+ def airflow_s3_key_sensor(*, timeout: int, poke_interval: int, mode: str, exponential_backoff: bool, pool: str, soft_fail: bool, name: str, description: str, bucket_key: typing.Union[str, typing.List[str]], bucket_name: str, wildcard_match: bool, aws_conn_id: str, verify: bool) -> typing.Callable[[typing.Type[FlowSpecDerived]], typing.Type[FlowSpecDerived]]:
479
528
  """
480
- Enables checkpointing for a step.
529
+ The `@airflow_s3_key_sensor` decorator attaches a Airflow [S3KeySensor](https://airflow.apache.org/docs/apache-airflow-providers-amazon/stable/_api/airflow/providers/amazon/aws/sensors/s3/index.html#airflow.providers.amazon.aws.sensors.s3.S3KeySensor)
530
+ before the start step of the flow. This decorator only works when a flow is scheduled on Airflow
531
+ and is compiled using `airflow create`. More than one `@airflow_s3_key_sensor` can be
532
+ added as a flow decorators. Adding more than one decorator will ensure that `start` step
533
+ starts only after all sensors finish.
481
534
  """
482
535
  ...
483
536
 
484
537
  @typing.overload
485
- def retry(*, times: int = 3, minutes_between_retries: int = 2) -> typing.Callable[[typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]], typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]]]:
538
+ def pypi_base(*, packages: typing.Dict[str, str] = {}, python: typing.Optional[str] = None) -> typing.Callable[[typing.Type[FlowSpecDerived]], typing.Type[FlowSpecDerived]]:
486
539
  """
487
- Specifies the number of times the task corresponding
488
- to a step needs to be retried.
489
-
490
- This decorator is useful for handling transient errors, such as networking issues.
491
- If your task contains operations that can't be retried safely, e.g. database updates,
492
- it is advisable to annotate it with `@retry(times=0)`.
540
+ Specifies the PyPI packages for all steps of the flow.
493
541
 
494
- This can be used in conjunction with the `@catch` decorator. The `@catch`
495
- decorator will execute a no-op task after all retries have been exhausted,
496
- ensuring that the flow execution can continue.
542
+ Use `@pypi_base` to set common packages required by all
543
+ steps and use `@pypi` to specify step-specific overrides.
497
544
  """
498
545
  ...
499
546
 
500
547
  @typing.overload
501
- def retry(f: typing.Callable[[FlowSpecDerived, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, StepFlag], None]:
502
- ...
503
-
504
- @typing.overload
505
- def retry(f: typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]) -> typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None]:
548
+ def pypi_base(f: typing.Type[FlowSpecDerived]) -> typing.Type[FlowSpecDerived]:
506
549
  ...
507
550
 
508
- def retry(f: typing.Union[typing.Callable[[FlowSpecDerived, StepFlag], None], typing.Callable[[FlowSpecDerived, typing.Any, StepFlag], None], None] = None, *, times: int = 3, minutes_between_retries: int = 2):
551
+ def pypi_base(f: typing.Optional[typing.Type[FlowSpecDerived]] = None, *, packages: typing.Dict[str, str] = {}, python: typing.Optional[str] = None):
509
552
  """
510
- Specifies the number of times the task corresponding
511
- to a step needs to be retried.
512
-
513
- This decorator is useful for handling transient errors, such as networking issues.
514
- If your task contains operations that can't be retried safely, e.g. database updates,
515
- it is advisable to annotate it with `@retry(times=0)`.
553
+ Specifies the PyPI packages for all steps of the flow.
516
554
 
517
- This can be used in conjunction with the `@catch` decorator. The `@catch`
518
- decorator will execute a no-op task after all retries have been exhausted,
519
- ensuring that the flow execution can continue.
555
+ Use `@pypi_base` to set common packages required by all
556
+ steps and use `@pypi` to specify step-specific overrides.
520
557
  """
521
558
  ...
522
559
 
@@ -544,96 +581,6 @@ def nim(*, models: "list[NIM]", backend: str) -> typing.Callable[[typing.Type[Fl
544
581
  """
545
582
  ...
546
583
 
547
- def airflow_external_task_sensor(*, timeout: int, poke_interval: int, mode: str, exponential_backoff: bool, pool: str, soft_fail: bool, name: str, description: str, external_dag_id: str, external_task_ids: typing.List[str], allowed_states: typing.List[str], failed_states: typing.List[str], execution_delta: "datetime.timedelta", check_existence: bool) -> typing.Callable[[typing.Type[FlowSpecDerived]], typing.Type[FlowSpecDerived]]:
548
- """
549
- The `@airflow_external_task_sensor` decorator attaches a Airflow [ExternalTaskSensor](https://airflow.apache.org/docs/apache-airflow/stable/_api/airflow/sensors/external_task/index.html#airflow.sensors.external_task.ExternalTaskSensor) before the start step of the flow.
550
- This decorator only works when a flow is scheduled on Airflow and is compiled using `airflow create`. More than one `@airflow_external_task_sensor` can be added as a flow decorators. Adding more than one decorator will ensure that `start` step starts only after all sensors finish.
551
- """
552
- ...
553
-
554
- def airflow_s3_key_sensor(*, timeout: int, poke_interval: int, mode: str, exponential_backoff: bool, pool: str, soft_fail: bool, name: str, description: str, bucket_key: typing.Union[str, typing.List[str]], bucket_name: str, wildcard_match: bool, aws_conn_id: str, verify: bool) -> typing.Callable[[typing.Type[FlowSpecDerived]], typing.Type[FlowSpecDerived]]:
555
- """
556
- The `@airflow_s3_key_sensor` decorator attaches a Airflow [S3KeySensor](https://airflow.apache.org/docs/apache-airflow-providers-amazon/stable/_api/airflow/providers/amazon/aws/sensors/s3/index.html#airflow.providers.amazon.aws.sensors.s3.S3KeySensor)
557
- before the start step of the flow. This decorator only works when a flow is scheduled on Airflow
558
- and is compiled using `airflow create`. More than one `@airflow_s3_key_sensor` can be
559
- added as a flow decorators. Adding more than one decorator will ensure that `start` step
560
- starts only after all sensors finish.
561
- """
562
- ...
563
-
564
- @typing.overload
565
- def trigger(*, event: typing.Union[str, typing.Dict[str, typing.Any], None] = None, events: typing.List[typing.Union[str, typing.Dict[str, typing.Any]]] = [], options: typing.Dict[str, typing.Any] = {}) -> typing.Callable[[typing.Type[FlowSpecDerived]], typing.Type[FlowSpecDerived]]:
566
- """
567
- Specifies the event(s) that this flow depends on.
568
-
569
- ```
570
- @trigger(event='foo')
571
- ```
572
- or
573
- ```
574
- @trigger(events=['foo', 'bar'])
575
- ```
576
-
577
- Additionally, you can specify the parameter mappings
578
- to map event payload to Metaflow parameters for the flow.
579
- ```
580
- @trigger(event={'name':'foo', 'parameters':{'flow_param': 'event_field'}})
581
- ```
582
- or
583
- ```
584
- @trigger(events=[{'name':'foo', 'parameters':{'flow_param_1': 'event_field_1'},
585
- {'name':'bar', 'parameters':{'flow_param_2': 'event_field_2'}])
586
- ```
587
-
588
- 'parameters' can also be a list of strings and tuples like so:
589
- ```
590
- @trigger(event={'name':'foo', 'parameters':['common_name', ('flow_param', 'event_field')]})
591
- ```
592
- This is equivalent to:
593
- ```
594
- @trigger(event={'name':'foo', 'parameters':{'common_name': 'common_name', 'flow_param': 'event_field'}})
595
- ```
596
- """
597
- ...
598
-
599
- @typing.overload
600
- def trigger(f: typing.Type[FlowSpecDerived]) -> typing.Type[FlowSpecDerived]:
601
- ...
602
-
603
- def trigger(f: typing.Optional[typing.Type[FlowSpecDerived]] = None, *, event: typing.Union[str, typing.Dict[str, typing.Any], None] = None, events: typing.List[typing.Union[str, typing.Dict[str, typing.Any]]] = [], options: typing.Dict[str, typing.Any] = {}):
604
- """
605
- Specifies the event(s) that this flow depends on.
606
-
607
- ```
608
- @trigger(event='foo')
609
- ```
610
- or
611
- ```
612
- @trigger(events=['foo', 'bar'])
613
- ```
614
-
615
- Additionally, you can specify the parameter mappings
616
- to map event payload to Metaflow parameters for the flow.
617
- ```
618
- @trigger(event={'name':'foo', 'parameters':{'flow_param': 'event_field'}})
619
- ```
620
- or
621
- ```
622
- @trigger(events=[{'name':'foo', 'parameters':{'flow_param_1': 'event_field_1'},
623
- {'name':'bar', 'parameters':{'flow_param_2': 'event_field_2'}])
624
- ```
625
-
626
- 'parameters' can also be a list of strings and tuples like so:
627
- ```
628
- @trigger(event={'name':'foo', 'parameters':['common_name', ('flow_param', 'event_field')]})
629
- ```
630
- This is equivalent to:
631
- ```
632
- @trigger(event={'name':'foo', 'parameters':{'common_name': 'common_name', 'flow_param': 'event_field'}})
633
- ```
634
- """
635
- ...
636
-
637
584
  @typing.overload
638
585
  def schedule(*, hourly: bool = False, daily: bool = True, weekly: bool = False, cron: typing.Optional[str] = None, timezone: typing.Optional[str] = None) -> typing.Callable[[typing.Type[FlowSpecDerived]], typing.Type[FlowSpecDerived]]:
639
586
  """
@@ -653,15 +600,6 @@ def schedule(f: typing.Optional[typing.Type[FlowSpecDerived]] = None, *, hourly:
653
600
  """
654
601
  ...
655
602
 
656
- def project(*, name: str) -> typing.Callable[[typing.Type[FlowSpecDerived]], typing.Type[FlowSpecDerived]]:
657
- """
658
- Specifies what flows belong to the same project.
659
-
660
- A project-specific namespace is created for all flows that
661
- use the same `@project(name)`.
662
- """
663
- ...
664
-
665
603
  @typing.overload
666
604
  def conda_base(*, packages: typing.Dict[str, str] = {}, libraries: typing.Dict[str, str] = {}, python: typing.Optional[str] = None, disabled: bool = False) -> typing.Callable[[typing.Type[FlowSpecDerived]], typing.Type[FlowSpecDerived]]:
667
605
  """
@@ -685,26 +623,12 @@ def conda_base(f: typing.Optional[typing.Type[FlowSpecDerived]] = None, *, packa
685
623
  """
686
624
  ...
687
625
 
688
- @typing.overload
689
- def pypi_base(*, packages: typing.Dict[str, str] = {}, python: typing.Optional[str] = None) -> typing.Callable[[typing.Type[FlowSpecDerived]], typing.Type[FlowSpecDerived]]:
690
- """
691
- Specifies the PyPI packages for all steps of the flow.
692
-
693
- Use `@pypi_base` to set common packages required by all
694
- steps and use `@pypi` to specify step-specific overrides.
695
- """
696
- ...
697
-
698
- @typing.overload
699
- def pypi_base(f: typing.Type[FlowSpecDerived]) -> typing.Type[FlowSpecDerived]:
700
- ...
701
-
702
- def pypi_base(f: typing.Optional[typing.Type[FlowSpecDerived]] = None, *, packages: typing.Dict[str, str] = {}, python: typing.Optional[str] = None):
626
+ def project(*, name: str) -> typing.Callable[[typing.Type[FlowSpecDerived]], typing.Type[FlowSpecDerived]]:
703
627
  """
704
- Specifies the PyPI packages for all steps of the flow.
628
+ Specifies what flows belong to the same project.
705
629
 
706
- Use `@pypi_base` to set common packages required by all
707
- steps and use `@pypi` to specify step-specific overrides.
630
+ A project-specific namespace is created for all flows that
631
+ use the same `@project(name)`.
708
632
  """
709
633
  ...
710
634
 
@@ -789,5 +713,85 @@ def trigger_on_finish(f: typing.Optional[typing.Type[FlowSpecDerived]] = None, *
789
713
  """
790
714
  ...
791
715
 
716
+ @typing.overload
717
+ def trigger(*, event: typing.Union[str, typing.Dict[str, typing.Any], None] = None, events: typing.List[typing.Union[str, typing.Dict[str, typing.Any]]] = [], options: typing.Dict[str, typing.Any] = {}) -> typing.Callable[[typing.Type[FlowSpecDerived]], typing.Type[FlowSpecDerived]]:
718
+ """
719
+ Specifies the event(s) that this flow depends on.
720
+
721
+ ```
722
+ @trigger(event='foo')
723
+ ```
724
+ or
725
+ ```
726
+ @trigger(events=['foo', 'bar'])
727
+ ```
728
+
729
+ Additionally, you can specify the parameter mappings
730
+ to map event payload to Metaflow parameters for the flow.
731
+ ```
732
+ @trigger(event={'name':'foo', 'parameters':{'flow_param': 'event_field'}})
733
+ ```
734
+ or
735
+ ```
736
+ @trigger(events=[{'name':'foo', 'parameters':{'flow_param_1': 'event_field_1'},
737
+ {'name':'bar', 'parameters':{'flow_param_2': 'event_field_2'}])
738
+ ```
739
+
740
+ 'parameters' can also be a list of strings and tuples like so:
741
+ ```
742
+ @trigger(event={'name':'foo', 'parameters':['common_name', ('flow_param', 'event_field')]})
743
+ ```
744
+ This is equivalent to:
745
+ ```
746
+ @trigger(event={'name':'foo', 'parameters':{'common_name': 'common_name', 'flow_param': 'event_field'}})
747
+ ```
748
+ """
749
+ ...
750
+
751
+ @typing.overload
752
+ def trigger(f: typing.Type[FlowSpecDerived]) -> typing.Type[FlowSpecDerived]:
753
+ ...
754
+
755
+ def trigger(f: typing.Optional[typing.Type[FlowSpecDerived]] = None, *, event: typing.Union[str, typing.Dict[str, typing.Any], None] = None, events: typing.List[typing.Union[str, typing.Dict[str, typing.Any]]] = [], options: typing.Dict[str, typing.Any] = {}):
756
+ """
757
+ Specifies the event(s) that this flow depends on.
758
+
759
+ ```
760
+ @trigger(event='foo')
761
+ ```
762
+ or
763
+ ```
764
+ @trigger(events=['foo', 'bar'])
765
+ ```
766
+
767
+ Additionally, you can specify the parameter mappings
768
+ to map event payload to Metaflow parameters for the flow.
769
+ ```
770
+ @trigger(event={'name':'foo', 'parameters':{'flow_param': 'event_field'}})
771
+ ```
772
+ or
773
+ ```
774
+ @trigger(events=[{'name':'foo', 'parameters':{'flow_param_1': 'event_field_1'},
775
+ {'name':'bar', 'parameters':{'flow_param_2': 'event_field_2'}])
776
+ ```
777
+
778
+ 'parameters' can also be a list of strings and tuples like so:
779
+ ```
780
+ @trigger(event={'name':'foo', 'parameters':['common_name', ('flow_param', 'event_field')]})
781
+ ```
782
+ This is equivalent to:
783
+ ```
784
+ @trigger(event={'name':'foo', 'parameters':{'common_name': 'common_name', 'flow_param': 'event_field'}})
785
+ ```
786
+ """
787
+ ...
788
+
789
+ def airflow_external_task_sensor(*, timeout: int, poke_interval: int, mode: str, exponential_backoff: bool, pool: str, soft_fail: bool, name: str, description: str, external_dag_id: str, external_task_ids: typing.List[str], allowed_states: typing.List[str], failed_states: typing.List[str], execution_delta: "datetime.timedelta", check_existence: bool) -> typing.Callable[[typing.Type[FlowSpecDerived]], typing.Type[FlowSpecDerived]]:
790
+ """
791
+ The `@airflow_external_task_sensor` decorator attaches a Airflow [ExternalTaskSensor](https://airflow.apache.org/docs/apache-airflow/stable/_api/airflow/sensors/external_task/index.html#airflow.sensors.external_task.ExternalTaskSensor) before the start step of the flow.
792
+ This decorator only works when a flow is scheduled on Airflow and is compiled using `airflow create`. More than one `@airflow_external_task_sensor` can be added as a flow decorators. Adding more than one decorator will ensure that `start` step starts only after all sensors finish.
793
+ """
794
+ ...
795
+
792
796
  pkg_name: str
793
797