ob-metaflow 2.11.13.1__py2.py3-none-any.whl → 2.19.7.1rc0__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/R.py +10 -7
- metaflow/__init__.py +40 -25
- metaflow/_vendor/imghdr/__init__.py +186 -0
- metaflow/_vendor/importlib_metadata/__init__.py +1063 -0
- metaflow/_vendor/importlib_metadata/_adapters.py +68 -0
- metaflow/_vendor/importlib_metadata/_collections.py +30 -0
- metaflow/_vendor/importlib_metadata/_compat.py +71 -0
- metaflow/_vendor/importlib_metadata/_functools.py +104 -0
- metaflow/_vendor/importlib_metadata/_itertools.py +73 -0
- metaflow/_vendor/importlib_metadata/_meta.py +48 -0
- metaflow/_vendor/importlib_metadata/_text.py +99 -0
- metaflow/_vendor/importlib_metadata/py.typed +0 -0
- metaflow/_vendor/typeguard/__init__.py +48 -0
- metaflow/_vendor/typeguard/_checkers.py +1070 -0
- metaflow/_vendor/typeguard/_config.py +108 -0
- metaflow/_vendor/typeguard/_decorators.py +233 -0
- metaflow/_vendor/typeguard/_exceptions.py +42 -0
- metaflow/_vendor/typeguard/_functions.py +308 -0
- metaflow/_vendor/typeguard/_importhook.py +213 -0
- metaflow/_vendor/typeguard/_memo.py +48 -0
- metaflow/_vendor/typeguard/_pytest_plugin.py +127 -0
- metaflow/_vendor/typeguard/_suppression.py +86 -0
- metaflow/_vendor/typeguard/_transformer.py +1229 -0
- metaflow/_vendor/typeguard/_union_transformer.py +55 -0
- metaflow/_vendor/typeguard/_utils.py +173 -0
- metaflow/_vendor/typeguard/py.typed +0 -0
- metaflow/_vendor/typing_extensions.py +3641 -0
- metaflow/_vendor/v3_7/importlib_metadata/__init__.py +1063 -0
- metaflow/_vendor/v3_7/importlib_metadata/_adapters.py +68 -0
- metaflow/_vendor/v3_7/importlib_metadata/_collections.py +30 -0
- metaflow/_vendor/v3_7/importlib_metadata/_compat.py +71 -0
- metaflow/_vendor/v3_7/importlib_metadata/_functools.py +104 -0
- metaflow/_vendor/v3_7/importlib_metadata/_itertools.py +73 -0
- metaflow/_vendor/v3_7/importlib_metadata/_meta.py +48 -0
- metaflow/_vendor/v3_7/importlib_metadata/_text.py +99 -0
- metaflow/_vendor/v3_7/importlib_metadata/py.typed +0 -0
- metaflow/_vendor/v3_7/typeguard/__init__.py +48 -0
- metaflow/_vendor/v3_7/typeguard/_checkers.py +906 -0
- metaflow/_vendor/v3_7/typeguard/_config.py +108 -0
- metaflow/_vendor/v3_7/typeguard/_decorators.py +237 -0
- metaflow/_vendor/v3_7/typeguard/_exceptions.py +42 -0
- metaflow/_vendor/v3_7/typeguard/_functions.py +310 -0
- metaflow/_vendor/v3_7/typeguard/_importhook.py +213 -0
- metaflow/_vendor/v3_7/typeguard/_memo.py +48 -0
- metaflow/_vendor/v3_7/typeguard/_pytest_plugin.py +100 -0
- metaflow/_vendor/v3_7/typeguard/_suppression.py +88 -0
- metaflow/_vendor/v3_7/typeguard/_transformer.py +1207 -0
- metaflow/_vendor/v3_7/typeguard/_union_transformer.py +54 -0
- metaflow/_vendor/v3_7/typeguard/_utils.py +169 -0
- metaflow/_vendor/v3_7/typeguard/py.typed +0 -0
- metaflow/_vendor/v3_7/typing_extensions.py +3072 -0
- metaflow/_vendor/yaml/__init__.py +427 -0
- metaflow/_vendor/yaml/composer.py +139 -0
- metaflow/_vendor/yaml/constructor.py +748 -0
- metaflow/_vendor/yaml/cyaml.py +101 -0
- metaflow/_vendor/yaml/dumper.py +62 -0
- metaflow/_vendor/yaml/emitter.py +1137 -0
- metaflow/_vendor/yaml/error.py +75 -0
- metaflow/_vendor/yaml/events.py +86 -0
- metaflow/_vendor/yaml/loader.py +63 -0
- metaflow/_vendor/yaml/nodes.py +49 -0
- metaflow/_vendor/yaml/parser.py +589 -0
- metaflow/_vendor/yaml/reader.py +185 -0
- metaflow/_vendor/yaml/representer.py +389 -0
- metaflow/_vendor/yaml/resolver.py +227 -0
- metaflow/_vendor/yaml/scanner.py +1435 -0
- metaflow/_vendor/yaml/serializer.py +111 -0
- metaflow/_vendor/yaml/tokens.py +104 -0
- metaflow/cards.py +5 -0
- metaflow/cli.py +331 -785
- metaflow/cli_args.py +17 -0
- metaflow/cli_components/__init__.py +0 -0
- metaflow/cli_components/dump_cmd.py +96 -0
- metaflow/cli_components/init_cmd.py +52 -0
- metaflow/cli_components/run_cmds.py +546 -0
- metaflow/cli_components/step_cmd.py +334 -0
- metaflow/cli_components/utils.py +140 -0
- metaflow/client/__init__.py +1 -0
- metaflow/client/core.py +467 -73
- metaflow/client/filecache.py +75 -35
- metaflow/clone_util.py +7 -1
- metaflow/cmd/code/__init__.py +231 -0
- metaflow/cmd/develop/stub_generator.py +756 -288
- metaflow/cmd/develop/stubs.py +12 -28
- metaflow/cmd/main_cli.py +6 -4
- metaflow/cmd/make_wrapper.py +78 -0
- metaflow/datastore/__init__.py +1 -0
- metaflow/datastore/content_addressed_store.py +41 -10
- metaflow/datastore/datastore_set.py +11 -2
- metaflow/datastore/flow_datastore.py +156 -10
- metaflow/datastore/spin_datastore.py +91 -0
- metaflow/datastore/task_datastore.py +154 -39
- metaflow/debug.py +5 -0
- metaflow/decorators.py +404 -78
- metaflow/exception.py +8 -2
- metaflow/extension_support/__init__.py +527 -376
- metaflow/extension_support/_empty_file.py +2 -2
- metaflow/extension_support/plugins.py +49 -31
- metaflow/flowspec.py +482 -33
- metaflow/graph.py +210 -42
- metaflow/includefile.py +84 -40
- metaflow/lint.py +141 -22
- metaflow/meta_files.py +13 -0
- metaflow/{metadata → metadata_provider}/heartbeat.py +24 -8
- metaflow/{metadata → metadata_provider}/metadata.py +86 -1
- metaflow/metaflow_config.py +175 -28
- metaflow/metaflow_config_funcs.py +51 -3
- metaflow/metaflow_current.py +4 -10
- metaflow/metaflow_environment.py +139 -53
- metaflow/metaflow_git.py +115 -0
- metaflow/metaflow_profile.py +18 -0
- metaflow/metaflow_version.py +150 -66
- metaflow/mflog/__init__.py +4 -3
- metaflow/mflog/save_logs.py +2 -2
- metaflow/multicore_utils.py +31 -14
- metaflow/package/__init__.py +673 -0
- metaflow/packaging_sys/__init__.py +880 -0
- metaflow/packaging_sys/backend.py +128 -0
- metaflow/packaging_sys/distribution_support.py +153 -0
- metaflow/packaging_sys/tar_backend.py +99 -0
- metaflow/packaging_sys/utils.py +54 -0
- metaflow/packaging_sys/v1.py +527 -0
- metaflow/parameters.py +149 -28
- metaflow/plugins/__init__.py +74 -5
- metaflow/plugins/airflow/airflow.py +40 -25
- metaflow/plugins/airflow/airflow_cli.py +22 -5
- metaflow/plugins/airflow/airflow_decorator.py +1 -1
- metaflow/plugins/airflow/airflow_utils.py +5 -3
- metaflow/plugins/airflow/sensors/base_sensor.py +4 -4
- metaflow/plugins/airflow/sensors/external_task_sensor.py +2 -2
- metaflow/plugins/airflow/sensors/s3_sensor.py +2 -2
- metaflow/plugins/argo/argo_client.py +78 -33
- metaflow/plugins/argo/argo_events.py +6 -6
- metaflow/plugins/argo/argo_workflows.py +2410 -527
- metaflow/plugins/argo/argo_workflows_cli.py +571 -121
- metaflow/plugins/argo/argo_workflows_decorator.py +43 -12
- metaflow/plugins/argo/argo_workflows_deployer.py +106 -0
- metaflow/plugins/argo/argo_workflows_deployer_objects.py +453 -0
- metaflow/plugins/argo/capture_error.py +73 -0
- metaflow/plugins/argo/conditional_input_paths.py +35 -0
- metaflow/plugins/argo/exit_hooks.py +209 -0
- metaflow/plugins/argo/jobset_input_paths.py +15 -0
- metaflow/plugins/argo/param_val.py +19 -0
- metaflow/plugins/aws/aws_client.py +10 -3
- metaflow/plugins/aws/aws_utils.py +55 -2
- metaflow/plugins/aws/batch/batch.py +72 -5
- metaflow/plugins/aws/batch/batch_cli.py +33 -10
- metaflow/plugins/aws/batch/batch_client.py +4 -3
- metaflow/plugins/aws/batch/batch_decorator.py +102 -35
- metaflow/plugins/aws/secrets_manager/aws_secrets_manager_secrets_provider.py +13 -10
- metaflow/plugins/aws/step_functions/dynamo_db_client.py +0 -3
- metaflow/plugins/aws/step_functions/production_token.py +1 -1
- metaflow/plugins/aws/step_functions/step_functions.py +65 -8
- metaflow/plugins/aws/step_functions/step_functions_cli.py +101 -7
- metaflow/plugins/aws/step_functions/step_functions_decorator.py +1 -2
- metaflow/plugins/aws/step_functions/step_functions_deployer.py +97 -0
- metaflow/plugins/aws/step_functions/step_functions_deployer_objects.py +264 -0
- metaflow/plugins/azure/azure_exceptions.py +1 -1
- metaflow/plugins/azure/azure_secret_manager_secrets_provider.py +240 -0
- metaflow/plugins/azure/azure_tail.py +1 -1
- metaflow/plugins/azure/includefile_support.py +2 -0
- metaflow/plugins/cards/card_cli.py +66 -30
- metaflow/plugins/cards/card_creator.py +25 -1
- metaflow/plugins/cards/card_datastore.py +21 -49
- metaflow/plugins/cards/card_decorator.py +132 -8
- metaflow/plugins/cards/card_modules/basic.py +112 -17
- metaflow/plugins/cards/card_modules/bundle.css +1 -1
- metaflow/plugins/cards/card_modules/card.py +16 -1
- metaflow/plugins/cards/card_modules/chevron/renderer.py +1 -1
- metaflow/plugins/cards/card_modules/components.py +665 -28
- metaflow/plugins/cards/card_modules/convert_to_native_type.py +36 -7
- metaflow/plugins/cards/card_modules/json_viewer.py +232 -0
- metaflow/plugins/cards/card_modules/main.css +1 -0
- metaflow/plugins/cards/card_modules/main.js +68 -49
- metaflow/plugins/cards/card_modules/renderer_tools.py +1 -0
- metaflow/plugins/cards/card_modules/test_cards.py +26 -12
- metaflow/plugins/cards/card_server.py +39 -14
- metaflow/plugins/cards/component_serializer.py +2 -9
- metaflow/plugins/cards/metadata.py +22 -0
- metaflow/plugins/catch_decorator.py +9 -0
- metaflow/plugins/datastores/azure_storage.py +10 -1
- metaflow/plugins/datastores/gs_storage.py +6 -2
- metaflow/plugins/datastores/local_storage.py +12 -6
- metaflow/plugins/datastores/spin_storage.py +12 -0
- metaflow/plugins/datatools/local.py +2 -0
- metaflow/plugins/datatools/s3/s3.py +126 -75
- metaflow/plugins/datatools/s3/s3op.py +254 -121
- metaflow/plugins/env_escape/__init__.py +3 -3
- metaflow/plugins/env_escape/client_modules.py +102 -72
- metaflow/plugins/env_escape/server.py +7 -0
- metaflow/plugins/env_escape/stub.py +24 -5
- metaflow/plugins/events_decorator.py +343 -185
- metaflow/plugins/exit_hook/__init__.py +0 -0
- metaflow/plugins/exit_hook/exit_hook_decorator.py +46 -0
- metaflow/plugins/exit_hook/exit_hook_script.py +52 -0
- metaflow/plugins/gcp/__init__.py +1 -1
- metaflow/plugins/gcp/gcp_secret_manager_secrets_provider.py +11 -6
- metaflow/plugins/gcp/gs_tail.py +10 -6
- metaflow/plugins/gcp/includefile_support.py +3 -0
- metaflow/plugins/kubernetes/kube_utils.py +108 -0
- metaflow/plugins/kubernetes/kubernetes.py +411 -130
- metaflow/plugins/kubernetes/kubernetes_cli.py +168 -36
- metaflow/plugins/kubernetes/kubernetes_client.py +104 -2
- metaflow/plugins/kubernetes/kubernetes_decorator.py +246 -88
- metaflow/plugins/kubernetes/kubernetes_job.py +253 -581
- metaflow/plugins/kubernetes/kubernetes_jobsets.py +1071 -0
- metaflow/plugins/kubernetes/spot_metadata_cli.py +69 -0
- metaflow/plugins/kubernetes/spot_monitor_sidecar.py +109 -0
- metaflow/plugins/logs_cli.py +359 -0
- metaflow/plugins/{metadata → metadata_providers}/local.py +144 -84
- metaflow/plugins/{metadata → metadata_providers}/service.py +103 -26
- metaflow/plugins/metadata_providers/spin.py +16 -0
- metaflow/plugins/package_cli.py +36 -24
- metaflow/plugins/parallel_decorator.py +128 -11
- metaflow/plugins/parsers.py +16 -0
- metaflow/plugins/project_decorator.py +51 -5
- metaflow/plugins/pypi/bootstrap.py +357 -105
- metaflow/plugins/pypi/conda_decorator.py +82 -81
- metaflow/plugins/pypi/conda_environment.py +187 -52
- metaflow/plugins/pypi/micromamba.py +157 -47
- metaflow/plugins/pypi/parsers.py +268 -0
- metaflow/plugins/pypi/pip.py +88 -13
- metaflow/plugins/pypi/pypi_decorator.py +37 -1
- metaflow/plugins/pypi/utils.py +48 -2
- metaflow/plugins/resources_decorator.py +2 -2
- metaflow/plugins/secrets/__init__.py +3 -0
- metaflow/plugins/secrets/secrets_decorator.py +26 -181
- metaflow/plugins/secrets/secrets_func.py +49 -0
- metaflow/plugins/secrets/secrets_spec.py +101 -0
- metaflow/plugins/secrets/utils.py +74 -0
- metaflow/plugins/tag_cli.py +4 -7
- metaflow/plugins/test_unbounded_foreach_decorator.py +41 -6
- metaflow/plugins/timeout_decorator.py +3 -3
- metaflow/plugins/uv/__init__.py +0 -0
- metaflow/plugins/uv/bootstrap.py +128 -0
- metaflow/plugins/uv/uv_environment.py +72 -0
- metaflow/procpoll.py +1 -1
- metaflow/pylint_wrapper.py +5 -1
- metaflow/runner/__init__.py +0 -0
- metaflow/runner/click_api.py +717 -0
- metaflow/runner/deployer.py +470 -0
- metaflow/runner/deployer_impl.py +201 -0
- metaflow/runner/metaflow_runner.py +714 -0
- metaflow/runner/nbdeploy.py +132 -0
- metaflow/runner/nbrun.py +225 -0
- metaflow/runner/subprocess_manager.py +650 -0
- metaflow/runner/utils.py +335 -0
- metaflow/runtime.py +1078 -260
- metaflow/sidecar/sidecar_worker.py +1 -1
- metaflow/system/__init__.py +5 -0
- metaflow/system/system_logger.py +85 -0
- metaflow/system/system_monitor.py +108 -0
- metaflow/system/system_utils.py +19 -0
- metaflow/task.py +521 -225
- metaflow/tracing/__init__.py +7 -7
- metaflow/tracing/span_exporter.py +31 -38
- metaflow/tracing/tracing_modules.py +38 -43
- metaflow/tuple_util.py +27 -0
- metaflow/user_configs/__init__.py +0 -0
- metaflow/user_configs/config_options.py +563 -0
- metaflow/user_configs/config_parameters.py +598 -0
- metaflow/user_decorators/__init__.py +0 -0
- metaflow/user_decorators/common.py +144 -0
- metaflow/user_decorators/mutable_flow.py +512 -0
- metaflow/user_decorators/mutable_step.py +424 -0
- metaflow/user_decorators/user_flow_decorator.py +264 -0
- metaflow/user_decorators/user_step_decorator.py +749 -0
- metaflow/util.py +243 -27
- metaflow/vendor.py +23 -7
- metaflow/version.py +1 -1
- ob_metaflow-2.19.7.1rc0.data/data/share/metaflow/devtools/Makefile +355 -0
- ob_metaflow-2.19.7.1rc0.data/data/share/metaflow/devtools/Tiltfile +726 -0
- ob_metaflow-2.19.7.1rc0.data/data/share/metaflow/devtools/pick_services.sh +105 -0
- ob_metaflow-2.19.7.1rc0.dist-info/METADATA +87 -0
- ob_metaflow-2.19.7.1rc0.dist-info/RECORD +445 -0
- {ob_metaflow-2.11.13.1.dist-info → ob_metaflow-2.19.7.1rc0.dist-info}/WHEEL +1 -1
- {ob_metaflow-2.11.13.1.dist-info → ob_metaflow-2.19.7.1rc0.dist-info}/entry_points.txt +1 -0
- metaflow/_vendor/v3_5/__init__.py +0 -1
- metaflow/_vendor/v3_5/importlib_metadata/__init__.py +0 -644
- metaflow/_vendor/v3_5/importlib_metadata/_compat.py +0 -152
- metaflow/package.py +0 -188
- ob_metaflow-2.11.13.1.dist-info/METADATA +0 -85
- ob_metaflow-2.11.13.1.dist-info/RECORD +0 -308
- /metaflow/_vendor/{v3_5/zipp.py → zipp.py} +0 -0
- /metaflow/{metadata → metadata_provider}/__init__.py +0 -0
- /metaflow/{metadata → metadata_provider}/util.py +0 -0
- /metaflow/plugins/{metadata → metadata_providers}/__init__.py +0 -0
- {ob_metaflow-2.11.13.1.dist-info → ob_metaflow-2.19.7.1rc0.dist-info/licenses}/LICENSE +0 -0
- {ob_metaflow-2.11.13.1.dist-info → ob_metaflow-2.19.7.1rc0.dist-info}/top_level.txt +0 -0
|
@@ -48,8 +48,8 @@ def process_messages(worker_type, worker):
|
|
|
48
48
|
pass
|
|
49
49
|
|
|
50
50
|
|
|
51
|
-
@tracing.cli_entrypoint("sidecar")
|
|
52
51
|
@click.command(help="Initialize workers")
|
|
52
|
+
@tracing.cli("sidecar")
|
|
53
53
|
@click.argument("worker-type")
|
|
54
54
|
def main(worker_type):
|
|
55
55
|
sidecar_type = SIDECARS.get(worker_type)
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import sys
|
|
3
|
+
from typing import Dict, Any, Optional, Union
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class SystemLogger(object):
|
|
7
|
+
def __init__(self):
|
|
8
|
+
self._logger = None
|
|
9
|
+
self._flow_name = None
|
|
10
|
+
|
|
11
|
+
def __del__(self):
|
|
12
|
+
if self._flow_name == "not_a_real_flow":
|
|
13
|
+
self.logger.terminate()
|
|
14
|
+
|
|
15
|
+
def init_system_logger(
|
|
16
|
+
self, flow_name: str, logger: "metaflow.event_logger.NullEventLogger"
|
|
17
|
+
):
|
|
18
|
+
self._flow_name = flow_name
|
|
19
|
+
self._logger = logger
|
|
20
|
+
|
|
21
|
+
def _init_logger_outside_flow(self):
|
|
22
|
+
from .system_utils import DummyFlow
|
|
23
|
+
from .system_utils import init_environment_outside_flow
|
|
24
|
+
from metaflow.plugins import LOGGING_SIDECARS
|
|
25
|
+
from metaflow.metaflow_config import DEFAULT_EVENT_LOGGER
|
|
26
|
+
|
|
27
|
+
self._flow_name = "not_a_real_flow"
|
|
28
|
+
_flow = DummyFlow(self._flow_name)
|
|
29
|
+
_environment = init_environment_outside_flow(_flow)
|
|
30
|
+
_logger = LOGGING_SIDECARS[DEFAULT_EVENT_LOGGER](_flow, _environment)
|
|
31
|
+
return _logger
|
|
32
|
+
|
|
33
|
+
@property
|
|
34
|
+
def logger(self) -> Optional["metaflow.event_logger.NullEventLogger"]:
|
|
35
|
+
if self._logger is None:
|
|
36
|
+
# This happens if the logger is being accessed outside of a flow
|
|
37
|
+
# We start a logger with a dummy flow and a default environment
|
|
38
|
+
self._debug("Started logger outside of a flow")
|
|
39
|
+
self._logger = self._init_logger_outside_flow()
|
|
40
|
+
self._logger.start()
|
|
41
|
+
return self._logger
|
|
42
|
+
|
|
43
|
+
@staticmethod
|
|
44
|
+
def _debug(msg: str):
|
|
45
|
+
"""
|
|
46
|
+
Log a debug message to stderr.
|
|
47
|
+
|
|
48
|
+
Parameters
|
|
49
|
+
----------
|
|
50
|
+
msg : str
|
|
51
|
+
Message to log.
|
|
52
|
+
|
|
53
|
+
"""
|
|
54
|
+
if os.environ.get("METAFLOW_DEBUG_SIDECAR", "0").lower() not in (
|
|
55
|
+
"0",
|
|
56
|
+
"false",
|
|
57
|
+
"",
|
|
58
|
+
):
|
|
59
|
+
print("system logger: %s" % msg, file=sys.stderr)
|
|
60
|
+
|
|
61
|
+
def log_event(
|
|
62
|
+
self, level: str, module: str, name: str, payload: Optional[Any] = None
|
|
63
|
+
):
|
|
64
|
+
"""
|
|
65
|
+
Log an event to the event logger.
|
|
66
|
+
|
|
67
|
+
Parameters
|
|
68
|
+
----------
|
|
69
|
+
level : str
|
|
70
|
+
Log level of the event. Can be one of "info", "warning", "error", "critical", "debug".
|
|
71
|
+
module : str
|
|
72
|
+
Module of the event. Usually the name of the class, function, or module that the event is being logged from.
|
|
73
|
+
name : str
|
|
74
|
+
Name of the event. Used to qualify the event type.
|
|
75
|
+
payload : Optional[Any], default None
|
|
76
|
+
Payload of the event. Contains the event data.
|
|
77
|
+
"""
|
|
78
|
+
self.logger.log(
|
|
79
|
+
{
|
|
80
|
+
"level": level,
|
|
81
|
+
"module": module,
|
|
82
|
+
"name": name,
|
|
83
|
+
"payload": payload if payload is not None else {},
|
|
84
|
+
}
|
|
85
|
+
)
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import sys
|
|
3
|
+
from ..debug import debug
|
|
4
|
+
from contextlib import contextmanager
|
|
5
|
+
from typing import Optional, Union, Dict, Any
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class SystemMonitor(object):
|
|
9
|
+
def __init__(self):
|
|
10
|
+
self._monitor = None
|
|
11
|
+
self._flow_name = None
|
|
12
|
+
|
|
13
|
+
def __del__(self):
|
|
14
|
+
if self._flow_name == "not_a_real_flow":
|
|
15
|
+
self.monitor.terminate()
|
|
16
|
+
|
|
17
|
+
def init_system_monitor(
|
|
18
|
+
self, flow_name: str, monitor: "metaflow.monitor.NullMonitor"
|
|
19
|
+
):
|
|
20
|
+
self._flow_name = flow_name
|
|
21
|
+
self._monitor = monitor
|
|
22
|
+
|
|
23
|
+
def _init_system_monitor_outside_flow(self):
|
|
24
|
+
from .system_utils import DummyFlow
|
|
25
|
+
from .system_utils import init_environment_outside_flow
|
|
26
|
+
from metaflow.plugins import MONITOR_SIDECARS
|
|
27
|
+
from metaflow.metaflow_config import DEFAULT_MONITOR
|
|
28
|
+
|
|
29
|
+
self._flow_name = "not_a_real_flow"
|
|
30
|
+
_flow = DummyFlow(self._flow_name)
|
|
31
|
+
_environment = init_environment_outside_flow(_flow)
|
|
32
|
+
_monitor = MONITOR_SIDECARS[DEFAULT_MONITOR](_flow, _environment)
|
|
33
|
+
return _monitor
|
|
34
|
+
|
|
35
|
+
@property
|
|
36
|
+
def monitor(self) -> Optional["metaflow.monitor.NullMonitor"]:
|
|
37
|
+
if self._monitor is None:
|
|
38
|
+
# This happens if the monitor is being accessed outside of a flow
|
|
39
|
+
self._debug("Started monitor outside of a flow")
|
|
40
|
+
self._monitor = self._init_system_monitor_outside_flow()
|
|
41
|
+
self._monitor.start()
|
|
42
|
+
return self._monitor
|
|
43
|
+
|
|
44
|
+
@staticmethod
|
|
45
|
+
def _debug(msg: str):
|
|
46
|
+
"""
|
|
47
|
+
Log a debug message to stderr.
|
|
48
|
+
|
|
49
|
+
Parameters
|
|
50
|
+
----------
|
|
51
|
+
msg : str
|
|
52
|
+
Message to log.
|
|
53
|
+
|
|
54
|
+
"""
|
|
55
|
+
if os.environ.get("METAFLOW_DEBUG_SIDECAR", "0").lower() not in (
|
|
56
|
+
"0",
|
|
57
|
+
"false",
|
|
58
|
+
"",
|
|
59
|
+
):
|
|
60
|
+
print("system monitor: %s" % msg, file=sys.stderr)
|
|
61
|
+
|
|
62
|
+
@contextmanager
|
|
63
|
+
def measure(self, name: str):
|
|
64
|
+
"""
|
|
65
|
+
Context manager to measure the execution duration and counter of a block of code.
|
|
66
|
+
|
|
67
|
+
Parameters
|
|
68
|
+
----------
|
|
69
|
+
name : str
|
|
70
|
+
The name to associate with the timer and counter.
|
|
71
|
+
|
|
72
|
+
Yields
|
|
73
|
+
------
|
|
74
|
+
None
|
|
75
|
+
"""
|
|
76
|
+
# Delegating the context management to the monitor's measure method
|
|
77
|
+
with self.monitor.measure(name):
|
|
78
|
+
yield
|
|
79
|
+
|
|
80
|
+
@contextmanager
|
|
81
|
+
def count(self, name: str):
|
|
82
|
+
"""
|
|
83
|
+
Context manager to increment a counter.
|
|
84
|
+
|
|
85
|
+
Parameters
|
|
86
|
+
----------
|
|
87
|
+
name : str
|
|
88
|
+
The name of the counter.
|
|
89
|
+
|
|
90
|
+
Yields
|
|
91
|
+
------
|
|
92
|
+
None
|
|
93
|
+
"""
|
|
94
|
+
# Delegating the context management to the monitor's count method
|
|
95
|
+
with self.monitor.count(name):
|
|
96
|
+
yield
|
|
97
|
+
|
|
98
|
+
def gauge(self, gauge: "metaflow.monitor.Gauge"):
|
|
99
|
+
"""
|
|
100
|
+
Log a gauge.
|
|
101
|
+
|
|
102
|
+
Parameters
|
|
103
|
+
----------
|
|
104
|
+
gauge : metaflow.monitor.Gauge
|
|
105
|
+
The gauge to log.
|
|
106
|
+
|
|
107
|
+
"""
|
|
108
|
+
self.monitor.gauge(gauge)
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from typing import Union
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class DummyFlow(object):
|
|
5
|
+
def __init__(self, name="not_a_real_flow"):
|
|
6
|
+
self.name = name
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
# This function is used to initialize the environment outside a flow.
|
|
10
|
+
def init_environment_outside_flow(
|
|
11
|
+
flow: Union["metaflow.flowspec.FlowSpec", "metaflow.sidecar.DummyFlow"]
|
|
12
|
+
) -> "metaflow.metaflow_environment.MetaflowEnvironment":
|
|
13
|
+
from metaflow.plugins import ENVIRONMENTS
|
|
14
|
+
from metaflow.metaflow_config import DEFAULT_ENVIRONMENT
|
|
15
|
+
from metaflow.metaflow_environment import MetaflowEnvironment
|
|
16
|
+
|
|
17
|
+
return [
|
|
18
|
+
e for e in ENVIRONMENTS + [MetaflowEnvironment] if e.TYPE == DEFAULT_ENVIRONMENT
|
|
19
|
+
][0](flow)
|