modAL 1.3.1.dev2__tar.gz → 1.3.1.dev4__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.1.dev2 → modal-1.3.1.dev4}/PKG-INFO +1 -1
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_utils/blob_utils.py +3 -9
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/client.pyi +2 -2
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal.egg-info/PKG-INFO +1 -1
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal_version/__init__.py +1 -1
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/LICENSE +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/README.md +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/__init__.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/__main__.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_billing.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_clustered_functions.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_clustered_functions.pyi +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_container_entrypoint.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_functions.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_grpc_client.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_ipython.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_load_context.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_location.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_object.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_output.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_partial_function.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_pty.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_resolver.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_resources.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_runtime/__init__.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_runtime/asgi.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_runtime/container_io_manager.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_runtime/container_io_manager.pyi +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_runtime/execution_context.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_runtime/execution_context.pyi +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_runtime/gpu_memory_snapshot.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_runtime/telemetry.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_runtime/user_code_event_loop.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_runtime/user_code_imports.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_serialization.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_traceback.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_tunnel.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_tunnel.pyi +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_type_manager.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_utils/__init__.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_utils/app_utils.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_utils/async_utils.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_utils/auth_token_manager.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_utils/bytes_io_segment_payload.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_utils/deprecation.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_utils/docker_utils.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_utils/function_utils.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_utils/git_utils.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_utils/grpc_testing.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_utils/grpc_utils.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_utils/hash_utils.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_utils/http_utils.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_utils/jwt_utils.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_utils/logger.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_utils/mount_utils.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_utils/name_utils.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_utils/package_utils.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_utils/pattern_utils.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_utils/rand_pb_testing.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_utils/shell_utils.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_utils/task_command_router_client.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_utils/time_utils.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_vendor/__init__.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_vendor/a2wsgi_wsgi.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_vendor/cloudpickle.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_vendor/tblib.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/_watcher.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/app.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/app.pyi +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/billing.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/builder/2023.12.312.txt +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/builder/2023.12.txt +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/builder/2024.04.txt +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/builder/2024.10.txt +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/builder/2025.06.txt +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/builder/PREVIEW.txt +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/builder/README.md +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/builder/base-images.json +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/call_graph.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/cli/__init__.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/cli/_download.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/cli/_traceback.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/cli/app.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/cli/cluster.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/cli/config.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/cli/container.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/cli/dict.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/cli/entry_point.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/cli/environment.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/cli/import_refs.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/cli/launch.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/cli/network_file_system.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/cli/profile.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/cli/programs/__init__.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/cli/programs/run_jupyter.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/cli/programs/vscode.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/cli/queues.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/cli/run.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/cli/secret.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/cli/shell.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/cli/token.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/cli/utils.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/cli/volume.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/client.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/cloud_bucket_mount.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/cloud_bucket_mount.pyi +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/cls.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/cls.pyi +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/config.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/container_process.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/container_process.pyi +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/dict.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/dict.pyi +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/environments.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/environments.pyi +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/exception.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/experimental/__init__.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/experimental/flash.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/experimental/flash.pyi +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/experimental/ipython.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/file_io.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/file_io.pyi +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/file_pattern_matcher.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/functions.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/functions.pyi +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/gpu.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/image.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/image.pyi +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/io_streams.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/io_streams.pyi +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/mount.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/mount.pyi +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/network_file_system.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/network_file_system.pyi +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/object.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/object.pyi +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/output.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/parallel_map.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/parallel_map.pyi +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/partial_function.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/partial_function.pyi +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/proxy.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/proxy.pyi +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/py.typed +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/queue.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/queue.pyi +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/retries.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/runner.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/runner.pyi +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/running_app.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/sandbox.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/sandbox.pyi +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/schedule.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/scheduler_placement.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/secret.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/secret.pyi +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/serving.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/serving.pyi +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/snapshot.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/snapshot.pyi +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/stream_type.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/token_flow.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/token_flow.pyi +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/volume.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal/volume.pyi +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal.egg-info/SOURCES.txt +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal.egg-info/dependency_links.txt +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal.egg-info/entry_points.txt +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal.egg-info/requires.txt +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal.egg-info/top_level.txt +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal_docs/__init__.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal_docs/gen_cli_docs.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal_docs/gen_reference_docs.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal_docs/mdmd/__init__.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal_docs/mdmd/mdmd.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal_docs/mdmd/signatures.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal_proto/__init__.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal_proto/api.proto +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal_proto/api_grpc.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal_proto/api_pb2.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal_proto/api_pb2.pyi +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal_proto/api_pb2_grpc.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal_proto/api_pb2_grpc.pyi +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal_proto/modal_api_grpc.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal_proto/py.typed +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal_proto/task_command_router.proto +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal_proto/task_command_router_grpc.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal_proto/task_command_router_pb2.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal_proto/task_command_router_pb2.pyi +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal_proto/task_command_router_pb2_grpc.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/modal_version/__main__.py +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/pyproject.toml +0 -0
- {modal-1.3.1.dev2 → modal-1.3.1.dev4}/setup.cfg +0 -0
|
@@ -4,7 +4,6 @@ import dataclasses
|
|
|
4
4
|
import hashlib
|
|
5
5
|
import os
|
|
6
6
|
import platform
|
|
7
|
-
import random
|
|
8
7
|
import time
|
|
9
8
|
from collections.abc import AsyncIterator
|
|
10
9
|
from contextlib import AbstractContextManager, contextmanager
|
|
@@ -58,10 +57,8 @@ MULTIPART_UPLOAD_THRESHOLD = 1024**3
|
|
|
58
57
|
# For block based storage like volumefs2: the size of a block
|
|
59
58
|
BLOCK_SIZE: int = 8 * 1024 * 1024
|
|
60
59
|
|
|
61
|
-
HEALTHY_R2_UPLOAD_PERCENTAGE = 0.95
|
|
62
60
|
|
|
63
|
-
|
|
64
|
-
@retry(n_attempts=5, base_delay=0.5, timeout=None)
|
|
61
|
+
@retry(n_attempts=3, base_delay=0.3, timeout=None)
|
|
65
62
|
async def _upload_to_s3_url(
|
|
66
63
|
upload_url,
|
|
67
64
|
payload: "BytesIOSegmentPayload",
|
|
@@ -191,13 +188,10 @@ def get_content_length(data: BinaryIO) -> int:
|
|
|
191
188
|
async def _blob_upload_with_fallback(
|
|
192
189
|
items, blob_ids: list[str], callback, content_length: int
|
|
193
190
|
) -> tuple[str, bool, int]:
|
|
191
|
+
"""Try uploading to each provider in order, with fallback on failure."""
|
|
194
192
|
r2_throughput_bytes_s = 0
|
|
195
193
|
r2_failed = False
|
|
196
194
|
for idx, (item, blob_id) in enumerate(zip(items, blob_ids)):
|
|
197
|
-
# We want to default to R2 95% of the time and S3 5% of the time.
|
|
198
|
-
# To ensure the failure path is continuously exercised.
|
|
199
|
-
if idx == 0 and len(items) > 1 and random.random() > HEALTHY_R2_UPLOAD_PERCENTAGE:
|
|
200
|
-
continue
|
|
201
195
|
try:
|
|
202
196
|
if blob_id.endswith(":r2"):
|
|
203
197
|
t0 = time.monotonic_ns()
|
|
@@ -207,7 +201,7 @@ async def _blob_upload_with_fallback(
|
|
|
207
201
|
else:
|
|
208
202
|
await callback(item)
|
|
209
203
|
return blob_id, r2_failed, r2_throughput_bytes_s
|
|
210
|
-
except Exception
|
|
204
|
+
except Exception:
|
|
211
205
|
if blob_id.endswith(":r2"):
|
|
212
206
|
r2_failed = True
|
|
213
207
|
# Ignore all errors except the last one, since we're out of fallback options.
|
|
@@ -33,7 +33,7 @@ class _Client:
|
|
|
33
33
|
server_url: str,
|
|
34
34
|
client_type: int,
|
|
35
35
|
credentials: typing.Optional[tuple[str, str]],
|
|
36
|
-
version: str = "1.3.1.
|
|
36
|
+
version: str = "1.3.1.dev4",
|
|
37
37
|
):
|
|
38
38
|
"""mdmd:hidden
|
|
39
39
|
The Modal client object is not intended to be instantiated directly by users.
|
|
@@ -163,7 +163,7 @@ class Client:
|
|
|
163
163
|
server_url: str,
|
|
164
164
|
client_type: int,
|
|
165
165
|
credentials: typing.Optional[tuple[str, str]],
|
|
166
|
-
version: str = "1.3.1.
|
|
166
|
+
version: str = "1.3.1.dev4",
|
|
167
167
|
):
|
|
168
168
|
"""mdmd:hidden
|
|
169
169
|
The Modal client object is not intended to be instantiated directly by users.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|