metaflow-stubs 2.12.22__py2.py3-none-any.whl → 2.12.24__py2.py3-none-any.whl
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.
- metaflow-stubs/__init__.pyi +805 -414
- metaflow-stubs/cards.pyi +211 -5
- metaflow-stubs/cli.pyi +23 -3
- metaflow-stubs/client/__init__.pyi +128 -3
- metaflow-stubs/client/core.pyi +226 -6
- metaflow-stubs/client/filecache.pyi +3 -3
- metaflow-stubs/clone_util.pyi +5 -2
- metaflow-stubs/events.pyi +21 -3
- metaflow-stubs/exception.pyi +2 -2
- metaflow-stubs/flowspec.pyi +71 -5
- metaflow-stubs/generated_for.txt +1 -1
- metaflow-stubs/includefile.pyi +158 -5
- metaflow-stubs/info_file.pyi +2 -2
- metaflow-stubs/metadata/metadata.pyi +9 -3
- metaflow-stubs/metadata/util.pyi +2 -2
- metaflow-stubs/metaflow_config.pyi +2 -2
- metaflow-stubs/metaflow_current.pyi +26 -23
- metaflow-stubs/mflog/mflog.pyi +2 -2
- metaflow-stubs/multicore_utils.pyi +2 -2
- metaflow-stubs/parameters.pyi +70 -4
- metaflow-stubs/plugins/__init__.pyi +14 -3
- metaflow-stubs/plugins/airflow/__init__.pyi +2 -2
- metaflow-stubs/plugins/airflow/airflow.pyi +15 -3
- metaflow-stubs/plugins/airflow/airflow_cli.pyi +66 -3
- metaflow-stubs/plugins/airflow/airflow_decorator.pyi +5 -2
- metaflow-stubs/plugins/airflow/airflow_utils.pyi +2 -2
- metaflow-stubs/plugins/airflow/exception.pyi +2 -2
- metaflow-stubs/plugins/airflow/sensors/__init__.pyi +80 -2
- metaflow-stubs/plugins/airflow/sensors/base_sensor.pyi +6 -3
- metaflow-stubs/plugins/airflow/sensors/external_task_sensor.pyi +46 -4
- metaflow-stubs/plugins/airflow/sensors/s3_sensor.pyi +46 -4
- metaflow-stubs/plugins/argo/__init__.pyi +2 -2
- metaflow-stubs/plugins/argo/argo_client.pyi +2 -2
- metaflow-stubs/plugins/argo/argo_events.pyi +16 -2
- metaflow-stubs/plugins/argo/argo_workflows.pyi +9 -5
- metaflow-stubs/plugins/argo/argo_workflows_cli.pyi +98 -7
- metaflow-stubs/plugins/argo/argo_workflows_decorator.pyi +34 -6
- metaflow-stubs/plugins/argo/argo_workflows_deployer.pyi +49 -4
- metaflow-stubs/plugins/aws/__init__.pyi +2 -2
- metaflow-stubs/plugins/aws/aws_client.pyi +2 -2
- metaflow-stubs/plugins/aws/aws_utils.pyi +2 -2
- metaflow-stubs/plugins/aws/batch/__init__.pyi +2 -2
- metaflow-stubs/plugins/aws/batch/batch.pyi +2 -2
- metaflow-stubs/plugins/aws/batch/batch_cli.pyi +2 -2
- metaflow-stubs/plugins/aws/batch/batch_client.pyi +2 -2
- metaflow-stubs/plugins/aws/batch/batch_decorator.pyi +103 -3
- metaflow-stubs/plugins/aws/secrets_manager/__init__.pyi +2 -2
- metaflow-stubs/plugins/aws/secrets_manager/aws_secrets_manager_secrets_provider.pyi +16 -4
- metaflow-stubs/plugins/aws/step_functions/__init__.pyi +2 -2
- metaflow-stubs/plugins/aws/step_functions/dynamo_db_client.pyi +2 -2
- metaflow-stubs/plugins/aws/step_functions/event_bridge_client.pyi +2 -2
- metaflow-stubs/plugins/aws/step_functions/production_token.pyi +2 -2
- metaflow-stubs/plugins/aws/step_functions/schedule_decorator.pyi +21 -2
- metaflow-stubs/plugins/aws/step_functions/step_functions.pyi +2 -2
- metaflow-stubs/plugins/aws/step_functions/step_functions_cli.pyi +70 -4
- metaflow-stubs/plugins/aws/step_functions/step_functions_client.pyi +2 -2
- metaflow-stubs/plugins/aws/step_functions/step_functions_decorator.pyi +5 -2
- metaflow-stubs/plugins/aws/step_functions/step_functions_deployer.pyi +49 -4
- metaflow-stubs/plugins/azure/__init__.pyi +2 -2
- metaflow-stubs/plugins/azure/azure_credential.pyi +2 -2
- metaflow-stubs/plugins/azure/azure_exceptions.pyi +2 -2
- metaflow-stubs/plugins/azure/azure_secret_manager_secrets_provider.pyi +22 -4
- metaflow-stubs/plugins/azure/azure_utils.pyi +2 -2
- metaflow-stubs/plugins/azure/blob_service_client_factory.pyi +2 -2
- metaflow-stubs/plugins/azure/includefile_support.pyi +2 -2
- metaflow-stubs/plugins/cards/__init__.pyi +2 -2
- metaflow-stubs/plugins/cards/card_cli.pyi +61 -3
- metaflow-stubs/plugins/cards/card_client.pyi +34 -3
- metaflow-stubs/plugins/cards/card_creator.pyi +5 -2
- metaflow-stubs/plugins/cards/card_datastore.pyi +8 -2
- metaflow-stubs/plugins/cards/card_decorator.pyi +52 -2
- metaflow-stubs/plugins/cards/card_modules/__init__.pyi +28 -2
- metaflow-stubs/plugins/cards/card_modules/basic.pyi +42 -3
- metaflow-stubs/plugins/cards/card_modules/card.pyi +28 -2
- metaflow-stubs/plugins/cards/card_modules/chevron/__init__.pyi +2 -2
- metaflow-stubs/plugins/cards/card_modules/chevron/main.pyi +2 -2
- metaflow-stubs/plugins/cards/card_modules/chevron/metadata.pyi +2 -2
- metaflow-stubs/plugins/cards/card_modules/chevron/renderer.pyi +2 -2
- metaflow-stubs/plugins/cards/card_modules/chevron/tokenizer.pyi +2 -2
- metaflow-stubs/plugins/cards/card_modules/components.pyi +183 -3
- metaflow-stubs/plugins/cards/card_modules/convert_to_native_type.pyi +5 -2
- metaflow-stubs/plugins/cards/card_modules/renderer_tools.pyi +2 -2
- metaflow-stubs/plugins/cards/card_modules/test_cards.pyi +35 -2
- metaflow-stubs/plugins/cards/card_resolver.pyi +2 -2
- metaflow-stubs/plugins/cards/component_serializer.pyi +57 -4
- metaflow-stubs/plugins/cards/exception.pyi +8 -2
- metaflow-stubs/plugins/catch_decorator.pyi +20 -3
- metaflow-stubs/plugins/datatools/__init__.pyi +63 -3
- metaflow-stubs/plugins/datatools/local.pyi +16 -2
- metaflow-stubs/plugins/datatools/s3/__init__.pyi +73 -4
- metaflow-stubs/plugins/datatools/s3/s3.pyi +82 -5
- metaflow-stubs/plugins/datatools/s3/s3tail.pyi +2 -2
- metaflow-stubs/plugins/datatools/s3/s3util.pyi +2 -2
- metaflow-stubs/plugins/debug_logger.pyi +2 -2
- metaflow-stubs/plugins/debug_monitor.pyi +2 -2
- metaflow-stubs/plugins/environment_decorator.pyi +10 -2
- metaflow-stubs/plugins/events_decorator.pyi +106 -2
- metaflow-stubs/plugins/frameworks/__init__.pyi +2 -2
- metaflow-stubs/plugins/frameworks/pytorch.pyi +24 -3
- metaflow-stubs/plugins/gcp/__init__.pyi +2 -2
- metaflow-stubs/plugins/gcp/gcp_secret_manager_secrets_provider.pyi +16 -4
- metaflow-stubs/plugins/gcp/gs_exceptions.pyi +2 -2
- metaflow-stubs/plugins/gcp/gs_storage_client_factory.pyi +2 -2
- metaflow-stubs/plugins/gcp/gs_utils.pyi +2 -2
- metaflow-stubs/plugins/gcp/includefile_support.pyi +2 -2
- metaflow-stubs/plugins/kubernetes/__init__.pyi +2 -2
- metaflow-stubs/plugins/kubernetes/kube_utils.pyi +2 -2
- metaflow-stubs/plugins/kubernetes/kubernetes.pyi +3 -3
- metaflow-stubs/plugins/kubernetes/kubernetes_cli.pyi +66 -3
- metaflow-stubs/plugins/kubernetes/kubernetes_client.pyi +2 -2
- metaflow-stubs/plugins/kubernetes/kubernetes_decorator.pyi +100 -3
- metaflow-stubs/plugins/kubernetes/kubernetes_job.pyi +2 -2
- metaflow-stubs/plugins/kubernetes/kubernetes_jobsets.pyi +5 -2
- metaflow-stubs/plugins/logs_cli.pyi +3 -3
- metaflow-stubs/plugins/package_cli.pyi +2 -2
- metaflow-stubs/plugins/parallel_decorator.pyi +29 -2
- metaflow-stubs/plugins/project_decorator.pyi +59 -2
- metaflow-stubs/plugins/pypi/__init__.pyi +2 -2
- metaflow-stubs/plugins/pypi/conda_decorator.pyi +45 -2
- metaflow-stubs/plugins/pypi/conda_environment.pyi +4 -4
- metaflow-stubs/plugins/pypi/pypi_decorator.pyi +33 -2
- metaflow-stubs/plugins/pypi/pypi_environment.pyi +3 -3
- metaflow-stubs/plugins/pypi/utils.pyi +2 -2
- metaflow-stubs/plugins/resources_decorator.pyi +33 -2
- metaflow-stubs/plugins/retry_decorator.pyi +21 -2
- metaflow-stubs/plugins/secrets/__init__.pyi +2 -2
- metaflow-stubs/plugins/secrets/inline_secrets_provider.pyi +3 -3
- metaflow-stubs/plugins/secrets/secrets_decorator.pyi +11 -2
- metaflow-stubs/plugins/storage_executor.pyi +6 -2
- metaflow-stubs/plugins/tag_cli.pyi +36 -5
- metaflow-stubs/plugins/test_unbounded_foreach_decorator.pyi +10 -3
- metaflow-stubs/plugins/timeout_decorator.pyi +24 -3
- metaflow-stubs/procpoll.pyi +2 -2
- metaflow-stubs/pylint_wrapper.pyi +2 -2
- metaflow-stubs/runner/__init__.pyi +2 -2
- metaflow-stubs/runner/deployer.pyi +70 -131
- metaflow-stubs/runner/metaflow_runner.pyi +118 -10
- metaflow-stubs/runner/nbdeploy.pyi +66 -2
- metaflow-stubs/runner/nbrun.pyi +79 -2
- metaflow-stubs/runner/subprocess_manager.pyi +16 -4
- metaflow-stubs/runner/utils.pyi +32 -2
- metaflow-stubs/system/__init__.pyi +3 -3
- metaflow-stubs/system/system_logger.pyi +3 -3
- metaflow-stubs/system/system_monitor.pyi +3 -3
- metaflow-stubs/tagging_util.pyi +2 -2
- metaflow-stubs/tuple_util.pyi +2 -2
- metaflow-stubs/version.pyi +2 -2
- {metaflow_stubs-2.12.22.dist-info → metaflow_stubs-2.12.24.dist-info}/METADATA +2 -2
- metaflow_stubs-2.12.24.dist-info/RECORD +152 -0
- metaflow_stubs-2.12.22.dist-info/RECORD +0 -152
- {metaflow_stubs-2.12.22.dist-info → metaflow_stubs-2.12.24.dist-info}/WHEEL +0 -0
- {metaflow_stubs-2.12.22.dist-info → metaflow_stubs-2.12.24.dist-info}/top_level.txt +0 -0
@@ -1,7 +1,7 @@
|
|
1
1
|
##################################################################################
|
2
2
|
# Auto-generated Metaflow stub file #
|
3
|
-
# MF version: 2.12.
|
4
|
-
# Generated on 2024-
|
3
|
+
# MF version: 2.12.24 #
|
4
|
+
# Generated on 2024-10-04T11:37:47.012442 #
|
5
5
|
##################################################################################
|
6
6
|
|
7
7
|
from __future__ import annotations
|
@@ -13,6 +13,32 @@ if typing.TYPE_CHECKING:
|
|
13
13
|
TYPE_CHECKING: bool
|
14
14
|
|
15
15
|
class MetaflowCard(object, metaclass=type):
|
16
|
+
"""
|
17
|
+
Metaflow cards derive from this base class.
|
18
|
+
|
19
|
+
Subclasses of this class are called *card types*. The desired card
|
20
|
+
type `T` is defined in the `@card` decorator as `@card(type=T)`.
|
21
|
+
|
22
|
+
After a task with `@card(type=T, options=S)` finishes executing, Metaflow instantiates
|
23
|
+
a subclass `C` of `MetaflowCard` that has its `type` attribute set to `T`, i.e. `C.type=T`.
|
24
|
+
The constructor is given the options dictionary `S` that contains arbitrary
|
25
|
+
JSON-encodable data that is passed to the instance, parametrizing the card. The subclass
|
26
|
+
may override the constructor to capture and process the options.
|
27
|
+
|
28
|
+
The subclass needs to implement a `render(task)` method that produces the card
|
29
|
+
contents in HTML, given the finished task that is represented by a `Task` object.
|
30
|
+
|
31
|
+
Attributes
|
32
|
+
----------
|
33
|
+
type : str
|
34
|
+
Card type string. Note that this should be a globally unique name, similar to a
|
35
|
+
Python package name, to avoid name clashes between different custom cards.
|
36
|
+
|
37
|
+
Parameters
|
38
|
+
----------
|
39
|
+
options : Dict
|
40
|
+
JSON-encodable dictionary containing user-definable options for the class.
|
41
|
+
"""
|
16
42
|
def __init__(self, options = {}, components = [], graph = None):
|
17
43
|
...
|
18
44
|
def render(self, task: "metaflow.Task") -> str:
|
@@ -1,7 +1,7 @@
|
|
1
1
|
##################################################################################
|
2
2
|
# Auto-generated Metaflow stub file #
|
3
|
-
# MF version: 2.12.
|
4
|
-
# Generated on 2024-
|
3
|
+
# MF version: 2.12.24 #
|
4
|
+
# Generated on 2024-10-04T11:37:47.068666 #
|
5
5
|
##################################################################################
|
6
6
|
|
7
7
|
from __future__ import annotations
|
@@ -1,7 +1,7 @@
|
|
1
1
|
##################################################################################
|
2
2
|
# Auto-generated Metaflow stub file #
|
3
|
-
# MF version: 2.12.
|
4
|
-
# Generated on 2024-
|
3
|
+
# MF version: 2.12.24 #
|
4
|
+
# Generated on 2024-10-04T11:37:47.083420 #
|
5
5
|
##################################################################################
|
6
6
|
|
7
7
|
from __future__ import annotations
|
@@ -1,7 +1,7 @@
|
|
1
1
|
##################################################################################
|
2
2
|
# Auto-generated Metaflow stub file #
|
3
|
-
# MF version: 2.12.
|
4
|
-
# Generated on 2024-
|
3
|
+
# MF version: 2.12.24 #
|
4
|
+
# Generated on 2024-10-04T11:37:47.083081 #
|
5
5
|
##################################################################################
|
6
6
|
|
7
7
|
from __future__ import annotations
|
@@ -1,7 +1,7 @@
|
|
1
1
|
##################################################################################
|
2
2
|
# Auto-generated Metaflow stub file #
|
3
|
-
# MF version: 2.12.
|
4
|
-
# Generated on 2024-
|
3
|
+
# MF version: 2.12.24 #
|
4
|
+
# Generated on 2024-10-04T11:37:47.082968 #
|
5
5
|
##################################################################################
|
6
6
|
|
7
7
|
from __future__ import annotations
|
@@ -1,7 +1,7 @@
|
|
1
1
|
##################################################################################
|
2
2
|
# Auto-generated Metaflow stub file #
|
3
|
-
# MF version: 2.12.
|
4
|
-
# Generated on 2024-
|
3
|
+
# MF version: 2.12.24 #
|
4
|
+
# Generated on 2024-10-04T11:37:47.082518 #
|
5
5
|
##################################################################################
|
6
6
|
|
7
7
|
from __future__ import annotations
|
@@ -1,16 +1,16 @@
|
|
1
1
|
##################################################################################
|
2
2
|
# Auto-generated Metaflow stub file #
|
3
|
-
# MF version: 2.12.
|
4
|
-
# Generated on 2024-
|
3
|
+
# MF version: 2.12.24 #
|
4
|
+
# Generated on 2024-10-04T11:37:47.014796 #
|
5
5
|
##################################################################################
|
6
6
|
|
7
7
|
from __future__ import annotations
|
8
8
|
|
9
9
|
import typing
|
10
10
|
if typing.TYPE_CHECKING:
|
11
|
+
import metaflow.plugins.cards.card_modules.card
|
11
12
|
import typing
|
12
13
|
import metaflow.plugins.cards.card_modules.components
|
13
|
-
import metaflow.plugins.cards.card_modules.card
|
14
14
|
import metaflow.plugins.cards.card_modules.basic
|
15
15
|
|
16
16
|
class LogComponent(metaflow.plugins.cards.card_modules.basic.DefaultComponent, metaclass=type):
|
@@ -126,6 +126,26 @@ class StubComponent(UserComponent, metaclass=type):
|
|
126
126
|
...
|
127
127
|
|
128
128
|
class Artifact(UserComponent, metaclass=type):
|
129
|
+
"""
|
130
|
+
A pretty-printed version of any Python object.
|
131
|
+
|
132
|
+
Large objects are truncated using Python's built-in [`reprlib`](https://docs.python.org/3/library/reprlib.html).
|
133
|
+
|
134
|
+
Example:
|
135
|
+
```
|
136
|
+
from datetime import datetime
|
137
|
+
current.card.append(Artifact({'now': datetime.utcnow()}))
|
138
|
+
```
|
139
|
+
|
140
|
+
Parameters
|
141
|
+
----------
|
142
|
+
artifact : object
|
143
|
+
Any Python object.
|
144
|
+
name : str, optional
|
145
|
+
Optional label for the object.
|
146
|
+
compressed : bool, default: True
|
147
|
+
Use a truncated representation.
|
148
|
+
"""
|
129
149
|
def update(self, artifact):
|
130
150
|
...
|
131
151
|
def __init__(self, artifact: typing.Any, name: typing.Optional[str] = None, compressed: bool = True):
|
@@ -135,6 +155,45 @@ class Artifact(UserComponent, metaclass=type):
|
|
135
155
|
...
|
136
156
|
|
137
157
|
class Table(UserComponent, metaclass=type):
|
158
|
+
"""
|
159
|
+
A table.
|
160
|
+
|
161
|
+
The contents of the table can be text or numerical data, a Pandas dataframe,
|
162
|
+
or other card components: `Artifact`, `Image`, `Markdown` objects.
|
163
|
+
|
164
|
+
Example: Text and artifacts
|
165
|
+
```
|
166
|
+
from metaflow.cards import Table, Artifact
|
167
|
+
current.card.append(
|
168
|
+
Table([
|
169
|
+
['first row', Artifact({'a': 2})],
|
170
|
+
['second row', Artifact(3)]
|
171
|
+
])
|
172
|
+
)
|
173
|
+
```
|
174
|
+
|
175
|
+
Example: Table from a Pandas dataframe
|
176
|
+
```
|
177
|
+
from metaflow.cards import Table
|
178
|
+
import pandas as pd
|
179
|
+
import numpy as np
|
180
|
+
current.card.append(
|
181
|
+
Table.from_dataframe(
|
182
|
+
pd.DataFrame(
|
183
|
+
np.random.randint(0, 100, size=(15, 4)),
|
184
|
+
columns=list("ABCD")
|
185
|
+
)
|
186
|
+
)
|
187
|
+
)
|
188
|
+
```
|
189
|
+
|
190
|
+
Parameters
|
191
|
+
----------
|
192
|
+
data : List[List[str or MetaflowCardComponent]], optional
|
193
|
+
List (rows) of lists (columns). Each item can be a string or a `MetaflowCardComponent`.
|
194
|
+
headers : List[str], optional
|
195
|
+
Optional header row for the table.
|
196
|
+
"""
|
138
197
|
def update(self, *args, **kwargs):
|
139
198
|
...
|
140
199
|
def __init__(self, data: typing.Optional[typing.List[typing.List[typing.Union[str, metaflow.plugins.cards.card_modules.card.MetaflowCardComponent]]]] = None, headers: typing.Optional[typing.List[str]] = None, disable_updates: bool = False):
|
@@ -157,6 +216,55 @@ class Table(UserComponent, metaclass=type):
|
|
157
216
|
...
|
158
217
|
|
159
218
|
class Image(UserComponent, metaclass=type):
|
219
|
+
"""
|
220
|
+
An image.
|
221
|
+
|
222
|
+
`Images can be created directly from PNG/JPG/GIF `bytes`, `PIL.Image`s,
|
223
|
+
or Matplotlib figures. Note that the image data is embedded in the card,
|
224
|
+
so no external files are required to show the image.
|
225
|
+
|
226
|
+
Example: Create an `Image` from bytes:
|
227
|
+
```
|
228
|
+
current.card.append(
|
229
|
+
Image(
|
230
|
+
requests.get("https://www.gif-vif.com/hacker-cat.gif").content,
|
231
|
+
"Image From Bytes"
|
232
|
+
)
|
233
|
+
)
|
234
|
+
```
|
235
|
+
|
236
|
+
Example: Create an `Image` from a Matplotlib figure
|
237
|
+
```
|
238
|
+
import pandas as pd
|
239
|
+
import numpy as np
|
240
|
+
current.card.append(
|
241
|
+
Image.from_matplotlib(
|
242
|
+
pandas.DataFrame(
|
243
|
+
np.random.randint(0, 100, size=(15, 4)),
|
244
|
+
columns=list("ABCD"),
|
245
|
+
).plot()
|
246
|
+
)
|
247
|
+
)
|
248
|
+
```
|
249
|
+
|
250
|
+
Example: Create an `Image` from a [PIL](https://pillow.readthedocs.io/) Image
|
251
|
+
```
|
252
|
+
from PIL import Image as PILImage
|
253
|
+
current.card.append(
|
254
|
+
Image.from_pil_image(
|
255
|
+
PILImage.fromarray(np.random.randn(1024, 768), "RGB"),
|
256
|
+
"From PIL Image"
|
257
|
+
)
|
258
|
+
)
|
259
|
+
```
|
260
|
+
|
261
|
+
Parameters
|
262
|
+
----------
|
263
|
+
src : bytes
|
264
|
+
The image data in `bytes`.
|
265
|
+
label : str
|
266
|
+
Optional label for the image.
|
267
|
+
"""
|
160
268
|
@staticmethod
|
161
269
|
def render_fail_headline(msg):
|
162
270
|
...
|
@@ -205,6 +313,30 @@ class Image(UserComponent, metaclass=type):
|
|
205
313
|
...
|
206
314
|
|
207
315
|
class Error(UserComponent, metaclass=type):
|
316
|
+
"""
|
317
|
+
This class helps visualize Error's on the `MetaflowCard`. It can help catch and print stack traces to errors that happen in `@step` code.
|
318
|
+
|
319
|
+
### Parameters
|
320
|
+
- `exception` (Exception) : The `Exception` to visualize. This value will be `repr`'d before passed down to `MetaflowCard`
|
321
|
+
- `title` (str) : The title that will appear over the visualized `Exception`.
|
322
|
+
|
323
|
+
### Usage
|
324
|
+
```python
|
325
|
+
@card
|
326
|
+
@step
|
327
|
+
def my_step(self):
|
328
|
+
from metaflow.cards import Error
|
329
|
+
from metaflow import current
|
330
|
+
try:
|
331
|
+
...
|
332
|
+
...
|
333
|
+
except Exception as e:
|
334
|
+
current.card.append(
|
335
|
+
Error(e,"Something misbehaved")
|
336
|
+
)
|
337
|
+
...
|
338
|
+
```
|
339
|
+
"""
|
208
340
|
def __init__(self, exception, title = None):
|
209
341
|
...
|
210
342
|
def render(self, *args, **kwargs):
|
@@ -212,6 +344,21 @@ class Error(UserComponent, metaclass=type):
|
|
212
344
|
...
|
213
345
|
|
214
346
|
class Markdown(UserComponent, metaclass=type):
|
347
|
+
"""
|
348
|
+
A block of text formatted in Markdown.
|
349
|
+
|
350
|
+
Example:
|
351
|
+
```
|
352
|
+
current.card.append(
|
353
|
+
Markdown("# This is a header appended from `@step` code")
|
354
|
+
)
|
355
|
+
```
|
356
|
+
|
357
|
+
Parameters
|
358
|
+
----------
|
359
|
+
text : str
|
360
|
+
Text formatted in Markdown.
|
361
|
+
"""
|
215
362
|
def update(self, text = None):
|
216
363
|
...
|
217
364
|
def __init__(self, text = None):
|
@@ -221,6 +368,39 @@ class Markdown(UserComponent, metaclass=type):
|
|
221
368
|
...
|
222
369
|
|
223
370
|
class ProgressBar(UserComponent, metaclass=type):
|
371
|
+
"""
|
372
|
+
A Progress bar for tracking progress of any task.
|
373
|
+
|
374
|
+
Example:
|
375
|
+
```
|
376
|
+
progress_bar = ProgressBar(
|
377
|
+
max=100,
|
378
|
+
label="Progress Bar",
|
379
|
+
value=0,
|
380
|
+
unit="%",
|
381
|
+
metadata="0.1 items/s"
|
382
|
+
)
|
383
|
+
current.card.append(
|
384
|
+
progress_bar
|
385
|
+
)
|
386
|
+
for i in range(100):
|
387
|
+
progress_bar.update(i, metadata="%s items/s" % i)
|
388
|
+
|
389
|
+
```
|
390
|
+
|
391
|
+
Parameters
|
392
|
+
----------
|
393
|
+
max : int
|
394
|
+
The maximum value of the progress bar.
|
395
|
+
label : str, optional
|
396
|
+
Optional label for the progress bar.
|
397
|
+
value : int, optional
|
398
|
+
Optional initial value of the progress bar.
|
399
|
+
unit : str, optional
|
400
|
+
Optional unit for the progress bar.
|
401
|
+
metadata : str, optional
|
402
|
+
Optional additional information to show on the progress bar.
|
403
|
+
"""
|
224
404
|
def __init__(self, max: int = 100, label: str = None, value: int = 0, unit: str = None, metadata: str = None):
|
225
405
|
...
|
226
406
|
def update(self, new_value: int, metadata: str = None):
|
@@ -1,13 +1,16 @@
|
|
1
1
|
##################################################################################
|
2
2
|
# Auto-generated Metaflow stub file #
|
3
|
-
# MF version: 2.12.
|
4
|
-
# Generated on 2024-
|
3
|
+
# MF version: 2.12.24 #
|
4
|
+
# Generated on 2024-10-04T11:37:47.065983 #
|
5
5
|
##################################################################################
|
6
6
|
|
7
7
|
from __future__ import annotations
|
8
8
|
|
9
9
|
|
10
10
|
class TypeResolvedObject(tuple, metaclass=type):
|
11
|
+
"""
|
12
|
+
TypeResolvedObject(data, is_image, is_table)
|
13
|
+
"""
|
11
14
|
@staticmethod
|
12
15
|
def __new__(_cls, data, is_image, is_table):
|
13
16
|
"""
|
@@ -1,7 +1,7 @@
|
|
1
1
|
##################################################################################
|
2
2
|
# Auto-generated Metaflow stub file #
|
3
|
-
# MF version: 2.12.
|
4
|
-
# Generated on 2024-
|
3
|
+
# MF version: 2.12.24 #
|
4
|
+
# Generated on 2024-10-04T11:37:47.066214 #
|
5
5
|
##################################################################################
|
6
6
|
|
7
7
|
from __future__ import annotations
|
@@ -1,7 +1,7 @@
|
|
1
1
|
##################################################################################
|
2
2
|
# Auto-generated Metaflow stub file #
|
3
|
-
# MF version: 2.12.
|
4
|
-
# Generated on 2024-
|
3
|
+
# MF version: 2.12.24 #
|
4
|
+
# Generated on 2024-10-04T11:37:47.007411 #
|
5
5
|
##################################################################################
|
6
6
|
|
7
7
|
from __future__ import annotations
|
@@ -12,6 +12,32 @@ if typing.TYPE_CHECKING:
|
|
12
12
|
import metaflow
|
13
13
|
|
14
14
|
class MetaflowCard(object, metaclass=type):
|
15
|
+
"""
|
16
|
+
Metaflow cards derive from this base class.
|
17
|
+
|
18
|
+
Subclasses of this class are called *card types*. The desired card
|
19
|
+
type `T` is defined in the `@card` decorator as `@card(type=T)`.
|
20
|
+
|
21
|
+
After a task with `@card(type=T, options=S)` finishes executing, Metaflow instantiates
|
22
|
+
a subclass `C` of `MetaflowCard` that has its `type` attribute set to `T`, i.e. `C.type=T`.
|
23
|
+
The constructor is given the options dictionary `S` that contains arbitrary
|
24
|
+
JSON-encodable data that is passed to the instance, parametrizing the card. The subclass
|
25
|
+
may override the constructor to capture and process the options.
|
26
|
+
|
27
|
+
The subclass needs to implement a `render(task)` method that produces the card
|
28
|
+
contents in HTML, given the finished task that is represented by a `Task` object.
|
29
|
+
|
30
|
+
Attributes
|
31
|
+
----------
|
32
|
+
type : str
|
33
|
+
Card type string. Note that this should be a globally unique name, similar to a
|
34
|
+
Python package name, to avoid name clashes between different custom cards.
|
35
|
+
|
36
|
+
Parameters
|
37
|
+
----------
|
38
|
+
options : Dict
|
39
|
+
JSON-encodable dictionary containing user-definable options for the class.
|
40
|
+
"""
|
15
41
|
def __init__(self, options = {}, components = [], graph = None):
|
16
42
|
...
|
17
43
|
def render(self, task: "metaflow.Task") -> str:
|
@@ -132,6 +158,9 @@ class TestJSONComponent(metaflow.plugins.cards.card_modules.card.MetaflowCardCom
|
|
132
158
|
...
|
133
159
|
|
134
160
|
class TestRefreshCard(metaflow.plugins.cards.card_modules.card.MetaflowCard, metaclass=type):
|
161
|
+
"""
|
162
|
+
This card takes no components and helps test the `current.card.refresh(data)` interface.
|
163
|
+
"""
|
135
164
|
def render(self, task) -> str:
|
136
165
|
...
|
137
166
|
def render_runtime(self, task, data):
|
@@ -141,6 +170,10 @@ class TestRefreshCard(metaflow.plugins.cards.card_modules.card.MetaflowCard, met
|
|
141
170
|
...
|
142
171
|
|
143
172
|
class TestRefreshComponentCard(metaflow.plugins.cards.card_modules.card.MetaflowCard, metaclass=type):
|
173
|
+
"""
|
174
|
+
This card takes components and helps test the `current.card.components["A"].update()`
|
175
|
+
interface
|
176
|
+
"""
|
144
177
|
def __init__(self, options = {}, components = [], graph = None):
|
145
178
|
...
|
146
179
|
def render(self, task) -> str:
|
@@ -1,7 +1,7 @@
|
|
1
1
|
##################################################################################
|
2
2
|
# Auto-generated Metaflow stub file #
|
3
|
-
# MF version: 2.12.
|
4
|
-
# Generated on 2024-
|
3
|
+
# MF version: 2.12.24 #
|
4
|
+
# Generated on 2024-10-04T11:37:47.043022 #
|
5
5
|
##################################################################################
|
6
6
|
|
7
7
|
from __future__ import annotations
|
@@ -1,16 +1,16 @@
|
|
1
1
|
##################################################################################
|
2
2
|
# Auto-generated Metaflow stub file #
|
3
|
-
# MF version: 2.12.
|
4
|
-
# Generated on 2024-
|
3
|
+
# MF version: 2.12.24 #
|
4
|
+
# Generated on 2024-10-04T11:37:47.040282 #
|
5
5
|
##################################################################################
|
6
6
|
|
7
7
|
from __future__ import annotations
|
8
8
|
|
9
9
|
import typing
|
10
10
|
if typing.TYPE_CHECKING:
|
11
|
-
import metaflow.plugins.cards.card_modules.components
|
12
|
-
import metaflow.exception
|
13
11
|
import metaflow.plugins.cards.card_modules.card
|
12
|
+
import metaflow.exception
|
13
|
+
import metaflow.plugins.cards.card_modules.components
|
14
14
|
import metaflow.plugins.cards.card_modules.basic
|
15
15
|
|
16
16
|
class MetaflowCardComponent(object, metaclass=type):
|
@@ -83,6 +83,13 @@ class WarningComponent(metaflow.plugins.cards.card_modules.basic.ErrorComponent,
|
|
83
83
|
...
|
84
84
|
|
85
85
|
class ComponentStore(object, metaclass=type):
|
86
|
+
"""
|
87
|
+
The `ComponentStore` object helps store the components for a single card in memory.
|
88
|
+
This class has combination of a array/dictionary like interfaces to access/change the stored components.
|
89
|
+
|
90
|
+
It exposes the `append` /`extend` methods (like an array) to add components.
|
91
|
+
It also exposes the `__getitem__`/`__setitem__` methods (like a dictionary) to access the components by their Ids.
|
92
|
+
"""
|
86
93
|
def __init__(self, logger, card_type = None, components = None, user_set_id = None):
|
87
94
|
...
|
88
95
|
@property
|
@@ -118,6 +125,33 @@ class ComponentStore(object, metaclass=type):
|
|
118
125
|
...
|
119
126
|
|
120
127
|
class CardComponentManager(object, metaclass=type):
|
128
|
+
"""
|
129
|
+
This class manages the card's state for a single card.
|
130
|
+
- It uses the `ComponentStore` to manage the storage of the components
|
131
|
+
- It exposes methods to add, remove and access the components.
|
132
|
+
- It exposes a `refresh` method that will allow refreshing a card with new data
|
133
|
+
for realtime(ish) updates.
|
134
|
+
- The `CardComponentCollector` exposes convenience methods similar to this class for a default
|
135
|
+
editable card. These methods include :
|
136
|
+
- `append`
|
137
|
+
- `extend`
|
138
|
+
- `clear`
|
139
|
+
- `refresh`
|
140
|
+
- `components`
|
141
|
+
- `__iter__`
|
142
|
+
|
143
|
+
## Usage Patterns :
|
144
|
+
|
145
|
+
```python
|
146
|
+
current.card["mycardid"].append(component, id="comp123")
|
147
|
+
current.card["mycardid"].extend([component])
|
148
|
+
current.card["mycardid"].refresh(data) # refreshes the card with new data
|
149
|
+
current.card["mycardid"].components["comp123"] # returns the component with id "comp123"
|
150
|
+
current.card["mycardid"].components["comp123"].update()
|
151
|
+
current.card["mycardid"].components.clear() # Wipe all the components
|
152
|
+
del current.card["mycardid"].components["mycomponentid"] # Delete a component
|
153
|
+
```
|
154
|
+
"""
|
121
155
|
def __init__(self, card_uuid, decorator_attributes, card_creator, components = None, logger = None, no_warnings = False, user_set_card_id = None, runtime_card = False, card_options = None, refresh_interval = 5):
|
122
156
|
...
|
123
157
|
def append(self, component, id = None):
|
@@ -136,6 +170,25 @@ class CardComponentManager(object, metaclass=type):
|
|
136
170
|
...
|
137
171
|
|
138
172
|
class CardComponentCollector(object, metaclass=type):
|
173
|
+
"""
|
174
|
+
This class helps collect `MetaflowCardComponent`s during runtime execution
|
175
|
+
|
176
|
+
### Usage with `current`
|
177
|
+
`current.card` is of type `CardComponentCollector`
|
178
|
+
|
179
|
+
### Main Usage TLDR
|
180
|
+
- [x] `current.card.append` customizes the default editable card.
|
181
|
+
- [x] Only one card can be default editable in a step.
|
182
|
+
- [x] The card class must have `ALLOW_USER_COMPONENTS=True` to be considered default editable.
|
183
|
+
- [x] Classes with `ALLOW_USER_COMPONENTS=False` are never default editable.
|
184
|
+
- [x] The user can specify an `id` argument to a card, in which case the card is editable through `current.card[id].append`.
|
185
|
+
- [x] A card with an id can be also default editable, if there are no other cards that are eligible to be default editable.
|
186
|
+
- [x] If multiple default-editable cards exist but only one card doesn't have an id, the card without an id is considered to be default editable.
|
187
|
+
- [x] If we can't resolve a single default editable card through the above rules, `current.card`.append calls show a warning but the call doesn't fail.
|
188
|
+
- [x] A card that is not default editable can be still edited through:
|
189
|
+
- [x] its `current.card['myid']`
|
190
|
+
- [x] by looking it up by its type, e.g. `current.card.get(type='pytorch')`.
|
191
|
+
"""
|
139
192
|
def __init__(self, logger = None, card_creator = None):
|
140
193
|
...
|
141
194
|
@staticmethod
|
@@ -1,7 +1,7 @@
|
|
1
1
|
##################################################################################
|
2
2
|
# Auto-generated Metaflow stub file #
|
3
|
-
# MF version: 2.12.
|
4
|
-
# Generated on 2024-
|
3
|
+
# MF version: 2.12.24 #
|
4
|
+
# Generated on 2024-10-04T11:37:47.038307 #
|
5
5
|
##################################################################################
|
6
6
|
|
7
7
|
from __future__ import annotations
|
@@ -20,6 +20,9 @@ class MetaflowException(Exception, metaclass=type):
|
|
20
20
|
TYPE_CHECK_REGEX: str
|
21
21
|
|
22
22
|
class CardClassFoundException(metaflow.exception.MetaflowException, metaclass=type):
|
23
|
+
"""
|
24
|
+
This exception is raised with MetaflowCard class is not present for a particular card type.
|
25
|
+
"""
|
23
26
|
def __init__(self, card_name):
|
24
27
|
...
|
25
28
|
...
|
@@ -30,6 +33,9 @@ class TypeRequiredException(metaflow.exception.MetaflowException, metaclass=type
|
|
30
33
|
...
|
31
34
|
|
32
35
|
class CardNotPresentException(metaflow.exception.MetaflowException, metaclass=type):
|
36
|
+
"""
|
37
|
+
This exception is raised with a card is not present in the datastore.
|
38
|
+
"""
|
33
39
|
def __init__(self, pathspec, card_type = None, card_hash = None, card_id = None):
|
34
40
|
...
|
35
41
|
...
|
@@ -1,16 +1,16 @@
|
|
1
1
|
##################################################################################
|
2
2
|
# Auto-generated Metaflow stub file #
|
3
|
-
# MF version: 2.12.
|
4
|
-
# Generated on 2024-
|
3
|
+
# MF version: 2.12.24 #
|
4
|
+
# Generated on 2024-10-04T11:37:46.998318 #
|
5
5
|
##################################################################################
|
6
6
|
|
7
7
|
from __future__ import annotations
|
8
8
|
|
9
9
|
import typing
|
10
10
|
if typing.TYPE_CHECKING:
|
11
|
-
import metaflow.exception
|
12
11
|
import metaflow.metaflow_current
|
13
12
|
import metaflow.decorators
|
13
|
+
import metaflow.exception
|
14
14
|
|
15
15
|
class MetaflowException(Exception, metaclass=type):
|
16
16
|
def __init__(self, msg = "", lineno = None):
|
@@ -44,6 +44,23 @@ class FailureHandledByCatch(metaflow.exception.MetaflowException, metaclass=type
|
|
44
44
|
...
|
45
45
|
|
46
46
|
class CatchDecorator(metaflow.decorators.StepDecorator, metaclass=type):
|
47
|
+
"""
|
48
|
+
Specifies that the step will success under all circumstances.
|
49
|
+
|
50
|
+
The decorator will create an optional artifact, specified by `var`, which
|
51
|
+
contains the exception raised. You can use it to detect the presence
|
52
|
+
of errors, indicating that all happy-path artifacts produced by the step
|
53
|
+
are missing.
|
54
|
+
|
55
|
+
Parameters
|
56
|
+
----------
|
57
|
+
var : str, optional, default None
|
58
|
+
Name of the artifact in which to store the caught exception.
|
59
|
+
If not specified, the exception is not stored.
|
60
|
+
print_exception : bool, default True
|
61
|
+
Determines whether or not the exception is printed to
|
62
|
+
stdout when caught.
|
63
|
+
"""
|
47
64
|
def step_init(self, flow, graph, step, decos, environment, flow_datastore, logger):
|
48
65
|
...
|
49
66
|
def task_exception(self, exception, step, flow, graph, retry_count, max_user_code_retries):
|