ob-metaflow-stubs 6.0.3.103rc3__py2.py3-none-any.whl → 6.0.3.105__py2.py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- metaflow-stubs/__init__.pyi +836 -498
- metaflow-stubs/cards.pyi +211 -5
- metaflow-stubs/cli.pyi +23 -3
- metaflow-stubs/client/__init__.pyi +129 -4
- metaflow-stubs/client/core.pyi +227 -7
- metaflow-stubs/client/filecache.pyi +2 -2
- 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 +157 -4
- metaflow-stubs/info_file.pyi +2 -2
- metaflow-stubs/metadata/metadata.pyi +8 -2
- metaflow-stubs/metadata/util.pyi +2 -2
- metaflow-stubs/metaflow_config.pyi +2 -2
- metaflow-stubs/metaflow_current.pyi +39 -36
- 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 +13 -2
- metaflow-stubs/plugins/airflow/__init__.pyi +2 -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 +5 -2
- metaflow-stubs/plugins/airflow/sensors/external_task_sensor.pyi +45 -3
- metaflow-stubs/plugins/airflow/sensors/s3_sensor.pyi +45 -3
- 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 +18 -5
- metaflow-stubs/plugins/argo/argo_workflows_cli.pyi +98 -7
- metaflow-stubs/plugins/argo/argo_workflows_decorator.pyi +33 -5
- metaflow-stubs/plugins/argo/argo_workflows_deployer.pyi +50 -5
- 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_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 +15 -3
- metaflow-stubs/plugins/aws/step_functions/__init__.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_client.pyi +2 -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 +21 -3
- 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 +62 -4
- metaflow-stubs/plugins/cards/card_client.pyi +33 -2
- 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/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 +36 -3
- metaflow-stubs/plugins/cards/card_resolver.pyi +2 -2
- metaflow-stubs/plugins/cards/component_serializer.pyi +55 -2
- 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 +72 -3
- 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 +23 -2
- metaflow-stubs/plugins/gcp/__init__.pyi +2 -2
- metaflow-stubs/plugins/gcp/gcp_secret_manager_secrets_provider.pyi +15 -3
- 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 +12 -3
- metaflow-stubs/plugins/kubernetes/kubernetes_cli.pyi +65 -2
- metaflow-stubs/plugins/kubernetes/kubernetes_client.pyi +2 -2
- metaflow-stubs/plugins/kubernetes/kubernetes_decorator.pyi +100 -3
- metaflow-stubs/plugins/kubernetes/kubernetes_jobsets.pyi +5 -2
- metaflow-stubs/plugins/logs_cli.pyi +4 -4
- metaflow-stubs/plugins/package_cli.pyi +2 -2
- metaflow-stubs/plugins/parallel_decorator.pyi +29 -2
- metaflow-stubs/plugins/perimeters.pyi +2 -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 +2 -2
- 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 +9 -2
- metaflow-stubs/plugins/timeout_decorator.pyi +23 -2
- metaflow-stubs/procpoll.pyi +2 -2
- metaflow-stubs/profilers/__init__.pyi +2 -2
- metaflow-stubs/pylint_wrapper.pyi +2 -2
- metaflow-stubs/runner/__init__.pyi +2 -2
- metaflow-stubs/runner/deployer.pyi +71 -132
- metaflow-stubs/runner/metaflow_runner.pyi +117 -9
- 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 +2 -2
- metaflow-stubs/system/system_monitor.pyi +3 -3
- metaflow-stubs/tagging_util.pyi +2 -2
- metaflow-stubs/tuple_util.pyi +2 -2
- {ob_metaflow_stubs-6.0.3.103rc3.dist-info → ob_metaflow_stubs-6.0.3.105.dist-info}/METADATA +1 -1
- ob_metaflow_stubs-6.0.3.105.dist-info/RECORD +140 -0
- ob_metaflow_stubs-6.0.3.103rc3.dist-info/RECORD +0 -140
- {ob_metaflow_stubs-6.0.3.103rc3.dist-info → ob_metaflow_stubs-6.0.3.105.dist-info}/WHEEL +0 -0
- {ob_metaflow_stubs-6.0.3.103rc3.dist-info → ob_metaflow_stubs-6.0.3.105.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.1+obcheckpoint(0.0.11);ob(v1) #
|
4
|
+
# Generated on 2024-10-04T10:13:10.658445 #
|
5
5
|
##################################################################################
|
6
6
|
|
7
7
|
from __future__ import annotations
|
@@ -9,8 +9,8 @@ from __future__ import annotations
|
|
9
9
|
import typing
|
10
10
|
if typing.TYPE_CHECKING:
|
11
11
|
import metaflow.plugins.cards.card_modules.basic
|
12
|
-
import typing
|
13
12
|
import metaflow.plugins.cards.card_modules.components
|
13
|
+
import typing
|
14
14
|
import metaflow.plugins.cards.card_modules.card
|
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.1+obcheckpoint(0.0.11);ob(v1) #
|
4
|
+
# Generated on 2024-10-04T10:13:10.681152 #
|
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.1+obcheckpoint(0.0.11);ob(v1) #
|
4
|
+
# Generated on 2024-10-04T10:13:10.681327 #
|
5
5
|
##################################################################################
|
6
6
|
|
7
7
|
from __future__ import annotations
|
@@ -1,17 +1,43 @@
|
|
1
1
|
##################################################################################
|
2
2
|
# Auto-generated Metaflow stub file #
|
3
|
-
# MF version: 2.12.
|
4
|
-
# Generated on 2024-
|
3
|
+
# MF version: 2.12.24.1+obcheckpoint(0.0.11);ob(v1) #
|
4
|
+
# Generated on 2024-10-04T10:13:10.674794 #
|
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
|
12
11
|
import metaflow
|
12
|
+
import metaflow.plugins.cards.card_modules.card
|
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.1+obcheckpoint(0.0.11);ob(v1) #
|
4
|
+
# Generated on 2024-10-04T10:13:10.679452 #
|
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.1+obcheckpoint(0.0.11);ob(v1) #
|
4
|
+
# Generated on 2024-10-04T10:13:10.685946 #
|
5
5
|
##################################################################################
|
6
6
|
|
7
7
|
from __future__ import annotations
|
@@ -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.1+obcheckpoint(0.0.11);ob(v1) #
|
4
|
+
# Generated on 2024-10-04T10:13:10.680776 #
|
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,15 +1,15 @@
|
|
1
1
|
##################################################################################
|
2
2
|
# Auto-generated Metaflow stub file #
|
3
|
-
# MF version: 2.12.
|
4
|
-
# Generated on 2024-
|
3
|
+
# MF version: 2.12.24.1+obcheckpoint(0.0.11);ob(v1) #
|
4
|
+
# Generated on 2024-10-04T10:13:10.669411 #
|
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.metaflow_current
|
12
11
|
import metaflow.exception
|
12
|
+
import metaflow.metaflow_current
|
13
13
|
import metaflow.decorators
|
14
14
|
|
15
15
|
class MetaflowException(Exception, metaclass=type):
|
@@ -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):
|
@@ -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.1+obcheckpoint(0.0.11);ob(v1) #
|
4
|
+
# Generated on 2024-10-04T10:13:10.670609 #
|
5
5
|
##################################################################################
|
6
6
|
|
7
7
|
from __future__ import annotations
|
@@ -9,8 +9,8 @@ from __future__ import annotations
|
|
9
9
|
import typing
|
10
10
|
if typing.TYPE_CHECKING:
|
11
11
|
import io
|
12
|
-
import metaflow.exception
|
13
12
|
import metaflow.plugins.datatools.s3.s3
|
13
|
+
import metaflow.exception
|
14
14
|
|
15
15
|
def read_in_chunks(dst, src, src_sz, max_chunk_size):
|
16
16
|
...
|
@@ -22,6 +22,13 @@ class MetaflowLocalURLException(metaflow.exception.MetaflowException, metaclass=
|
|
22
22
|
...
|
23
23
|
|
24
24
|
class Local(object, metaclass=type):
|
25
|
+
"""
|
26
|
+
This class allows you to access the local filesystem in a way similar to the S3 datatools
|
27
|
+
client. It is a stripped down version for now and only implements the functionality needed
|
28
|
+
for this use case.
|
29
|
+
|
30
|
+
In the future, we may want to allow it to be used in a way similar to the S3() client.
|
31
|
+
"""
|
25
32
|
@classmethod
|
26
33
|
def get_root_from_config(cls, echo, create_on_absent = True):
|
27
34
|
...
|
@@ -47,6 +54,59 @@ class MetaflowS3Exception(metaflow.exception.MetaflowException, metaclass=type):
|
|
47
54
|
...
|
48
55
|
|
49
56
|
class S3(object, metaclass=type):
|
57
|
+
"""
|
58
|
+
The Metaflow S3 client.
|
59
|
+
|
60
|
+
This object manages the connection to S3 and a temporary diretory that is used
|
61
|
+
to download objects. Note that in most cases when the data fits in memory, no local
|
62
|
+
disk IO is needed as operations are cached by the operating system, which makes
|
63
|
+
operations fast as long as there is enough memory available.
|
64
|
+
|
65
|
+
The easiest way is to use this object as a context manager:
|
66
|
+
```
|
67
|
+
with S3() as s3:
|
68
|
+
data = [obj.blob for obj in s3.get_many(urls)]
|
69
|
+
print(data)
|
70
|
+
```
|
71
|
+
The context manager takes care of creating and deleting a temporary directory
|
72
|
+
automatically. Without a context manager, you must call `.close()` to delete
|
73
|
+
the directory explicitly:
|
74
|
+
```
|
75
|
+
s3 = S3()
|
76
|
+
data = [obj.blob for obj in s3.get_many(urls)]
|
77
|
+
s3.close()
|
78
|
+
```
|
79
|
+
You can customize the location of the temporary directory with `tmproot`. It
|
80
|
+
defaults to the current working directory.
|
81
|
+
|
82
|
+
To make it easier to deal with object locations, the client can be initialized
|
83
|
+
with an S3 path prefix. There are three ways to handle locations:
|
84
|
+
|
85
|
+
1. Use a `metaflow.Run` object or `self`, e.g. `S3(run=self)` which
|
86
|
+
initializes the prefix with the global `DATATOOLS_S3ROOT` path, combined
|
87
|
+
with the current run ID. This mode makes it easy to version data based
|
88
|
+
on the run ID consistently. You can use the `bucket` and `prefix` to
|
89
|
+
override parts of `DATATOOLS_S3ROOT`.
|
90
|
+
|
91
|
+
2. Specify an S3 prefix explicitly with `s3root`,
|
92
|
+
e.g. `S3(s3root='s3://mybucket/some/path')`.
|
93
|
+
|
94
|
+
3. Specify nothing, i.e. `S3()`, in which case all operations require
|
95
|
+
a full S3 url prefixed with `s3://`.
|
96
|
+
|
97
|
+
Parameters
|
98
|
+
----------
|
99
|
+
tmproot : str, default: '.'
|
100
|
+
Where to store the temporary directory.
|
101
|
+
bucket : str, optional
|
102
|
+
Override the bucket from `DATATOOLS_S3ROOT` when `run` is specified.
|
103
|
+
prefix : str, optional
|
104
|
+
Override the path from `DATATOOLS_S3ROOT` when `run` is specified.
|
105
|
+
run : FlowSpec or Run, optional
|
106
|
+
Derive path prefix from the current or a past run ID, e.g. S3(run=self).
|
107
|
+
s3root : str, optional
|
108
|
+
If `run` is not specified, use this as the S3 prefix.
|
109
|
+
"""
|
50
110
|
@classmethod
|
51
111
|
def get_root_from_config(cls, echo, create_on_absent = True):
|
52
112
|
...
|
@@ -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.1+obcheckpoint(0.0.11);ob(v1) #
|
4
|
+
# Generated on 2024-10-04T10:13:10.662566 #
|
5
5
|
##################################################################################
|
6
6
|
|
7
7
|
from __future__ import annotations
|
@@ -28,6 +28,13 @@ class MetaflowLocalNotFound(metaflow.exception.MetaflowException, metaclass=type
|
|
28
28
|
...
|
29
29
|
|
30
30
|
class LocalObject(object, metaclass=type):
|
31
|
+
"""
|
32
|
+
This object represents a local object. It is a very thin wrapper
|
33
|
+
to allow it to be used in the same way as the S3Object (only as needed
|
34
|
+
in the IncludeFile use case)
|
35
|
+
|
36
|
+
Get or list calls return one or more of LocalObjects.
|
37
|
+
"""
|
31
38
|
def __init__(self, url, path):
|
32
39
|
...
|
33
40
|
@property
|
@@ -59,6 +66,13 @@ class LocalObject(object, metaclass=type):
|
|
59
66
|
...
|
60
67
|
|
61
68
|
class Local(object, metaclass=type):
|
69
|
+
"""
|
70
|
+
This class allows you to access the local filesystem in a way similar to the S3 datatools
|
71
|
+
client. It is a stripped down version for now and only implements the functionality needed
|
72
|
+
for this use case.
|
73
|
+
|
74
|
+
In the future, we may want to allow it to be used in a way similar to the S3() client.
|
75
|
+
"""
|
62
76
|
@classmethod
|
63
77
|
def get_root_from_config(cls, echo, create_on_absent = True):
|
64
78
|
...
|