modAL 1.3.3__tar.gz → 1.3.3.dev0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {modal-1.3.3 → modal-1.3.3.dev0}/PKG-INFO +1 -1
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/__init__.py +2 -2
- modal-1.3.3.dev0/modal/__main__.py +53 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_billing.py +2 -8
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_functions.py +8 -5
- modal-1.3.3/modal/_output/rich.py → modal-1.3.3.dev0/modal/_output.py +266 -326
- modal-1.3.3.dev0/modal/_pty.py +57 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_resolver.py +62 -1
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_runtime/asgi.py +2 -2
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_server.py +0 -3
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/browser_utils.py +7 -8
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/function_utils.py +87 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/shell_utils.py +2 -48
- modal-1.3.3.dev0/modal/_utils/time_utils.py +43 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_watcher.py +3 -2
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/app.pyi +3 -3
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/_traceback.py +36 -3
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/app.py +4 -1
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/cluster.py +5 -4
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/config.py +3 -2
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/container.py +2 -8
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/dashboard.py +4 -1
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/dict.py +3 -2
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/entry_point.py +10 -15
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/import_refs.py +10 -15
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/launch.py +15 -12
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/network_file_system.py +29 -21
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/profile.py +6 -6
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/queues.py +5 -4
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/run.py +45 -46
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/secret.py +6 -7
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/token.py +12 -11
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/utils.py +9 -28
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/volume.py +24 -19
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/client.pyi +10 -2
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/container_process.py +8 -6
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/dict.py +0 -42
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/dict.pyi +0 -52
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/experimental/flash.py +1 -10
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/experimental/flash.pyi +0 -3
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/image.py +8 -6
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/image.pyi +1 -1
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/mount.py +1 -4
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/object.pyi +13 -57
- modal-1.3.3.dev0/modal/output.py +64 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/partial_function.pyi +1 -2
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/queue.py +0 -42
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/queue.pyi +0 -52
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/retries.py +3 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/runner.py +56 -49
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/sandbox.py +1 -1
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/serving.py +13 -10
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/token_flow.py +19 -18
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/volume.py +1 -27
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/volume.pyi +0 -4
- {modal-1.3.3 → modal-1.3.3.dev0}/modal.egg-info/PKG-INFO +1 -1
- {modal-1.3.3 → modal-1.3.3.dev0}/modal.egg-info/SOURCES.txt +2 -6
- {modal-1.3.3 → modal-1.3.3.dev0}/modal_proto/api.proto +0 -20
- {modal-1.3.3 → modal-1.3.3.dev0}/modal_proto/api_grpc.py +0 -32
- modal-1.3.3.dev0/modal_proto/api_pb2.py +1139 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal_proto/api_pb2.pyi +0 -66
- {modal-1.3.3 → modal-1.3.3.dev0}/modal_proto/api_pb2_grpc.py +0 -66
- {modal-1.3.3 → modal-1.3.3.dev0}/modal_proto/api_pb2_grpc.pyi +0 -20
- {modal-1.3.3 → modal-1.3.3.dev0}/modal_proto/modal_api_grpc.py +0 -2
- modal-1.3.3.dev0/modal_proto/task_command_router_pb2.py +60 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal_version/__init__.py +1 -1
- modal-1.3.3/modal/__main__.py +0 -49
- modal-1.3.3/modal/_output/__init__.py +0 -1
- modal-1.3.3/modal/_output/manager.py +0 -542
- modal-1.3.3/modal/_output/pty.py +0 -200
- modal-1.3.3/modal/_output/status.py +0 -101
- modal-1.3.3/modal/_utils/time_utils.py +0 -204
- modal-1.3.3/modal/cli/billing.py +0 -153
- modal-1.3.3/modal/output.py +0 -47
- modal-1.3.3/modal_proto/api_pb2.py +0 -5290
- modal-1.3.3/modal_proto/task_command_router_pb2.py +0 -180
- {modal-1.3.3 → modal-1.3.3.dev0}/LICENSE +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/README.md +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_clustered_functions.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_clustered_functions.pyi +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_container_entrypoint.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_grpc_client.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_ipython.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_load_context.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_location.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_object.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_partial_function.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_resources.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_runtime/__init__.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_runtime/container_io_manager.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_runtime/container_io_manager.pyi +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_runtime/execution_context.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_runtime/execution_context.pyi +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_runtime/gpu_memory_snapshot.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_runtime/telemetry.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_runtime/user_code_event_loop.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_runtime/user_code_imports.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_serialization.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_traceback.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_tunnel.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_tunnel.pyi +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_type_manager.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/__init__.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/app_utils.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/async_utils.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/auth_token_manager.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/blob_utils.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/bytes_io_segment_payload.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/deprecation.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/docker_utils.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/git_utils.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/grpc_testing.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/grpc_utils.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/hash_utils.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/http_utils.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/jwt_utils.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/logger.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/mount_utils.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/name_utils.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/package_utils.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/pattern_utils.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/rand_pb_testing.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_utils/task_command_router_client.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_vendor/__init__.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_vendor/a2wsgi_wsgi.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_vendor/cloudpickle.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/_vendor/tblib.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/app.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/billing.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/builder/2023.12.312.txt +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/builder/2023.12.txt +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/builder/2024.04.txt +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/builder/2024.10.txt +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/builder/2025.06.txt +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/builder/PREVIEW.txt +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/builder/README.md +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/builder/base-images.json +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/call_graph.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/__init__.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/_download.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/environment.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/programs/__init__.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/programs/run_jupyter.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/programs/vscode.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/cli/shell.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/client.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/cloud_bucket_mount.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/cloud_bucket_mount.pyi +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/cls.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/cls.pyi +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/config.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/container_process.pyi +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/environments.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/environments.pyi +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/exception.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/experimental/__init__.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/experimental/ipython.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/file_io.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/file_io.pyi +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/file_pattern_matcher.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/functions.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/functions.pyi +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/gpu.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/io_streams.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/io_streams.pyi +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/mount.pyi +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/network_file_system.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/network_file_system.pyi +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/object.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/parallel_map.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/parallel_map.pyi +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/partial_function.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/proxy.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/proxy.pyi +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/py.typed +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/runner.pyi +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/running_app.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/sandbox.pyi +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/schedule.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/scheduler_placement.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/secret.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/secret.pyi +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/server.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/server.pyi +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/serving.pyi +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/snapshot.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/snapshot.pyi +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/stream_type.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal/token_flow.pyi +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal.egg-info/dependency_links.txt +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal.egg-info/entry_points.txt +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal.egg-info/requires.txt +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal.egg-info/top_level.txt +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal_docs/__init__.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal_docs/gen_cli_docs.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal_docs/gen_reference_docs.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal_docs/mdmd/__init__.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal_docs/mdmd/mdmd.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal_docs/mdmd/signatures.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal_proto/__init__.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal_proto/py.typed +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal_proto/task_command_router.proto +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal_proto/task_command_router_grpc.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal_proto/task_command_router_pb2.pyi +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal_proto/task_command_router_pb2_grpc.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/modal_version/__main__.py +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/pyproject.toml +0 -0
- {modal-1.3.3 → modal-1.3.3.dev0}/setup.cfg +0 -0
|
@@ -9,7 +9,6 @@ if sys.version_info[:2] >= (3, 15):
|
|
|
9
9
|
from modal_version import __version__
|
|
10
10
|
|
|
11
11
|
try:
|
|
12
|
-
from . import billing
|
|
13
12
|
from ._runtime.execution_context import current_function_call_id, current_input_id, interact, is_local
|
|
14
13
|
from ._tunnel import Tunnel, forward
|
|
15
14
|
from .app import App
|
|
@@ -42,6 +41,7 @@ try:
|
|
|
42
41
|
from .schedule import Cron, Period
|
|
43
42
|
from .scheduler_placement import SchedulerPlacement
|
|
44
43
|
from .secret import Secret
|
|
44
|
+
from .server import Server
|
|
45
45
|
from .snapshot import SandboxSnapshot
|
|
46
46
|
from .volume import Volume
|
|
47
47
|
except Exception:
|
|
@@ -76,11 +76,11 @@ __all__ = [
|
|
|
76
76
|
"SandboxSnapshot",
|
|
77
77
|
"SchedulerPlacement",
|
|
78
78
|
"Secret",
|
|
79
|
+
"Server",
|
|
79
80
|
"Tunnel",
|
|
80
81
|
"Volume",
|
|
81
82
|
"asgi_app",
|
|
82
83
|
"batched",
|
|
83
|
-
"billing",
|
|
84
84
|
"concurrent",
|
|
85
85
|
"current_function_call_id",
|
|
86
86
|
"current_input_id",
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Copyright Modal Labs 2022
|
|
2
|
+
import sys
|
|
3
|
+
|
|
4
|
+
from ._output import make_console
|
|
5
|
+
from ._traceback import reduce_traceback_to_user_code
|
|
6
|
+
from .cli._traceback import highlight_modal_warnings, setup_rich_traceback
|
|
7
|
+
from .cli.entry_point import entrypoint_cli
|
|
8
|
+
from .cli.import_refs import _CliUserExecutionError
|
|
9
|
+
from .config import config
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def main():
|
|
13
|
+
# Setup rich tracebacks, but only on user's end, when using the Modal CLI.
|
|
14
|
+
setup_rich_traceback()
|
|
15
|
+
highlight_modal_warnings()
|
|
16
|
+
|
|
17
|
+
try:
|
|
18
|
+
entrypoint_cli()
|
|
19
|
+
|
|
20
|
+
except _CliUserExecutionError as exc:
|
|
21
|
+
if config.get("traceback"):
|
|
22
|
+
raise
|
|
23
|
+
|
|
24
|
+
assert exc.__cause__ # We should always raise this class from another error
|
|
25
|
+
tb = reduce_traceback_to_user_code(exc.__cause__.__traceback__, exc.user_source)
|
|
26
|
+
sys.excepthook(type(exc.__cause__), exc.__cause__, tb)
|
|
27
|
+
sys.exit(1)
|
|
28
|
+
|
|
29
|
+
except Exception as exc:
|
|
30
|
+
if (
|
|
31
|
+
# User has asked to alway see full tracebacks
|
|
32
|
+
config.get("traceback")
|
|
33
|
+
# The exception message is empty, so we need to provide _some_ actionable information
|
|
34
|
+
or not str(exc)
|
|
35
|
+
):
|
|
36
|
+
raise
|
|
37
|
+
|
|
38
|
+
from rich.markup import escape
|
|
39
|
+
from rich.panel import Panel
|
|
40
|
+
|
|
41
|
+
title = "Error"
|
|
42
|
+
content = str(exc)
|
|
43
|
+
if notes := getattr(exc, "__notes__", []):
|
|
44
|
+
content = f"{content}\n\nNote: {' '.join(notes)}"
|
|
45
|
+
|
|
46
|
+
console = make_console(stderr=True)
|
|
47
|
+
panel = Panel(escape(content), title=title, title_align="left", border_style="red")
|
|
48
|
+
console.print(panel, highlight=False)
|
|
49
|
+
sys.exit(1)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
if __name__ == "__main__":
|
|
53
|
+
main()
|
|
@@ -40,14 +40,8 @@ async def _workspace_billing_report(
|
|
|
40
40
|
partial `end` intervals will be excluded.
|
|
41
41
|
|
|
42
42
|
Additional user-provided metadata can be included in the report if the objects have tags
|
|
43
|
-
and `tag_names` (i.e., keys) are specified in the request.
|
|
44
|
-
to
|
|
45
|
-
if they were added or removed at some point within it. If the tag name was not in use during an
|
|
46
|
-
interval, it will be absent from the tags dictionary in that output row.
|
|
47
|
-
|
|
48
|
-
In most cases, billing data will be available in the database that this API queries within
|
|
49
|
-
minutes, although there may be collection delays. If completeness is important for your use
|
|
50
|
-
case, we recommend leaving a buffer after the end of the query interval.
|
|
43
|
+
and `tag_names` (i.e., keys) are specified in the request. Note that tags will be attributed
|
|
44
|
+
to the entire interval even if they were added or removed at some point within it.
|
|
51
45
|
|
|
52
46
|
"""
|
|
53
47
|
if client is None:
|
|
@@ -21,8 +21,7 @@ from modal_proto.modal_api_grpc import ModalClientModal
|
|
|
21
21
|
|
|
22
22
|
from ._load_context import LoadContext
|
|
23
23
|
from ._object import _Object, live_method, live_method_gen
|
|
24
|
-
from .
|
|
25
|
-
from ._output.status import FunctionCreationStatus
|
|
24
|
+
from ._pty import get_pty_info
|
|
26
25
|
from ._resolver import Resolver
|
|
27
26
|
from ._resources import convert_fn_config_to_resources_config
|
|
28
27
|
from ._runtime.execution_context import current_input_id, is_local
|
|
@@ -48,6 +47,7 @@ from ._utils.deprecation import deprecation_warning, warn_if_passing_namespace
|
|
|
48
47
|
from ._utils.function_utils import (
|
|
49
48
|
ATTEMPT_TIMEOUT_GRACE_PERIOD,
|
|
50
49
|
OUTPUTS_TIMEOUT,
|
|
50
|
+
FunctionCreationStatus,
|
|
51
51
|
FunctionInfo,
|
|
52
52
|
_create_input,
|
|
53
53
|
_process_result,
|
|
@@ -71,7 +71,7 @@ from .gpu import GPU_T, parse_gpu_config
|
|
|
71
71
|
from .image import _Image
|
|
72
72
|
from .mount import _get_client_mount, _Mount
|
|
73
73
|
from .network_file_system import _NetworkFileSystem, network_file_system_mount_protos
|
|
74
|
-
from .output import
|
|
74
|
+
from .output import _get_output_manager
|
|
75
75
|
from .parallel_map import (
|
|
76
76
|
_experimental_spawn_map_async,
|
|
77
77
|
_experimental_spawn_map_sync,
|
|
@@ -922,7 +922,7 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
|
|
|
922
922
|
async def _load(
|
|
923
923
|
self: _Function, resolver: Resolver, load_context: LoadContext, existing_object_id: Optional[str]
|
|
924
924
|
):
|
|
925
|
-
with FunctionCreationStatus(tag) as function_creation_status:
|
|
925
|
+
with FunctionCreationStatus(resolver, tag) as function_creation_status:
|
|
926
926
|
timeout_secs = timeout
|
|
927
927
|
|
|
928
928
|
if app and app.is_interactive and not is_builder_function:
|
|
@@ -1639,7 +1639,10 @@ Use the `Function.get_web_url()` method instead.
|
|
|
1639
1639
|
raise InvalidError("A generator function cannot be called with `.map(...)`.")
|
|
1640
1640
|
|
|
1641
1641
|
assert self._function_name
|
|
1642
|
-
|
|
1642
|
+
if output_mgr := _get_output_manager():
|
|
1643
|
+
count_update_callback = output_mgr.function_progress_callback(self._function_name, total=None)
|
|
1644
|
+
else:
|
|
1645
|
+
count_update_callback = None
|
|
1643
1646
|
|
|
1644
1647
|
if self._input_plane_url:
|
|
1645
1648
|
async with aclosing(
|