modal 1.2.1.dev4__tar.gz → 1.2.1.dev5__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.
Potentially problematic release.
This version of modal might be problematic. Click here for more details.
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/PKG-INFO +1 -1
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_partial_function.py +6 -1
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/cli/run.py +6 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/client.pyi +2 -2
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/config.py +12 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal.egg-info/PKG-INFO +1 -1
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal_proto/api.proto +0 -1
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal_version/__init__.py +1 -1
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/LICENSE +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/README.md +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/__init__.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/__main__.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_billing.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_clustered_functions.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_clustered_functions.pyi +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_container_entrypoint.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_functions.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_ipython.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_location.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_object.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_output.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_pty.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_resolver.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_resources.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_runtime/__init__.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_runtime/asgi.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_runtime/container_io_manager.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_runtime/container_io_manager.pyi +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_runtime/execution_context.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_runtime/execution_context.pyi +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_runtime/gpu_memory_snapshot.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_runtime/telemetry.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_runtime/user_code_imports.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_serialization.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_traceback.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_tunnel.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_tunnel.pyi +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_type_manager.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_utils/__init__.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_utils/app_utils.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_utils/async_utils.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_utils/auth_token_manager.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_utils/blob_utils.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_utils/bytes_io_segment_payload.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_utils/deprecation.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_utils/docker_utils.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_utils/function_utils.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_utils/git_utils.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_utils/grpc_testing.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_utils/grpc_utils.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_utils/hash_utils.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_utils/http_utils.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_utils/jwt_utils.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_utils/logger.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_utils/mount_utils.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_utils/name_utils.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_utils/package_utils.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_utils/pattern_utils.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_utils/rand_pb_testing.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_utils/shell_utils.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_utils/time_utils.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_vendor/__init__.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_vendor/a2wsgi_wsgi.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_vendor/cloudpickle.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_vendor/tblib.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/_watcher.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/app.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/app.pyi +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/billing.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/builder/2023.12.312.txt +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/builder/2023.12.txt +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/builder/2024.04.txt +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/builder/2024.10.txt +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/builder/2025.06.txt +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/builder/PREVIEW.txt +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/builder/README.md +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/builder/base-images.json +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/call_graph.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/cli/__init__.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/cli/_download.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/cli/_traceback.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/cli/app.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/cli/cluster.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/cli/config.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/cli/container.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/cli/dict.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/cli/entry_point.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/cli/environment.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/cli/import_refs.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/cli/launch.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/cli/network_file_system.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/cli/profile.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/cli/programs/__init__.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/cli/programs/launch_instance_ssh.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/cli/programs/run_jupyter.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/cli/programs/run_marimo.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/cli/programs/vscode.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/cli/queues.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/cli/secret.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/cli/token.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/cli/utils.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/cli/volume.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/client.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/cloud_bucket_mount.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/cloud_bucket_mount.pyi +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/cls.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/cls.pyi +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/container_process.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/container_process.pyi +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/dict.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/dict.pyi +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/environments.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/environments.pyi +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/exception.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/experimental/__init__.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/experimental/flash.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/experimental/flash.pyi +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/experimental/ipython.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/file_io.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/file_io.pyi +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/file_pattern_matcher.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/functions.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/functions.pyi +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/gpu.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/image.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/image.pyi +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/io_streams.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/io_streams.pyi +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/mount.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/mount.pyi +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/network_file_system.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/network_file_system.pyi +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/object.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/object.pyi +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/output.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/parallel_map.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/parallel_map.pyi +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/partial_function.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/partial_function.pyi +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/proxy.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/proxy.pyi +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/py.typed +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/queue.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/queue.pyi +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/retries.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/runner.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/runner.pyi +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/running_app.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/sandbox.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/sandbox.pyi +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/schedule.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/scheduler_placement.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/secret.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/secret.pyi +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/serving.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/serving.pyi +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/snapshot.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/snapshot.pyi +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/stream_type.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/token_flow.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/token_flow.pyi +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/volume.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal/volume.pyi +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal.egg-info/SOURCES.txt +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal.egg-info/dependency_links.txt +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal.egg-info/entry_points.txt +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal.egg-info/requires.txt +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal.egg-info/top_level.txt +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal_docs/__init__.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal_docs/gen_cli_docs.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal_docs/gen_reference_docs.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal_docs/mdmd/__init__.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal_docs/mdmd/mdmd.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal_docs/mdmd/signatures.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal_proto/__init__.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal_proto/api_grpc.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal_proto/api_pb2.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal_proto/api_pb2.pyi +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal_proto/api_pb2_grpc.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal_proto/api_pb2_grpc.pyi +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal_proto/modal_api_grpc.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal_proto/py.typed +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal_proto/sandbox_router.proto +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal_proto/sandbox_router_grpc.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal_proto/sandbox_router_pb2.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal_proto/sandbox_router_pb2.pyi +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal_proto/sandbox_router_pb2_grpc.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal_proto/sandbox_router_pb2_grpc.pyi +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal_proto/task_command_router.proto +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal_proto/task_command_router_grpc.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal_proto/task_command_router_pb2.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal_proto/task_command_router_pb2.pyi +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal_proto/task_command_router_pb2_grpc.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/modal_version/__main__.py +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/pyproject.toml +0 -0
- {modal-1.2.1.dev4 → modal-1.2.1.dev5}/setup.cfg +0 -0
|
@@ -19,7 +19,7 @@ from ._functions import _Function
|
|
|
19
19
|
from ._utils.async_utils import synchronizer
|
|
20
20
|
from ._utils.deprecation import deprecation_warning
|
|
21
21
|
from ._utils.function_utils import callable_has_non_self_params
|
|
22
|
-
from .config import logger
|
|
22
|
+
from .config import config, logger
|
|
23
23
|
from .exception import InvalidError
|
|
24
24
|
|
|
25
25
|
MAX_MAX_BATCH_SIZE = 1000
|
|
@@ -378,6 +378,7 @@ def _fastapi_endpoint(
|
|
|
378
378
|
method=method,
|
|
379
379
|
web_endpoint_docs=docs,
|
|
380
380
|
requested_suffix=label or "",
|
|
381
|
+
ephemeral_suffix=config.get("dev_suffix"),
|
|
381
382
|
async_mode=api_pb2.WEBHOOK_ASYNC_MODE_AUTO,
|
|
382
383
|
custom_domains=_parse_custom_domains(custom_domains),
|
|
383
384
|
requires_proxy_auth=requires_proxy_auth,
|
|
@@ -446,6 +447,7 @@ def _web_endpoint(
|
|
|
446
447
|
method=method,
|
|
447
448
|
web_endpoint_docs=docs,
|
|
448
449
|
requested_suffix=label or "",
|
|
450
|
+
ephemeral_suffix=config.get("dev_suffix"),
|
|
449
451
|
async_mode=api_pb2.WEBHOOK_ASYNC_MODE_AUTO,
|
|
450
452
|
custom_domains=_parse_custom_domains(custom_domains),
|
|
451
453
|
requires_proxy_auth=requires_proxy_auth,
|
|
@@ -505,6 +507,7 @@ def _asgi_app(
|
|
|
505
507
|
webhook_config = api_pb2.WebhookConfig(
|
|
506
508
|
type=api_pb2.WEBHOOK_TYPE_ASGI_APP,
|
|
507
509
|
requested_suffix=label or "",
|
|
510
|
+
ephemeral_suffix=config.get("dev_suffix"),
|
|
508
511
|
async_mode=api_pb2.WEBHOOK_ASYNC_MODE_AUTO,
|
|
509
512
|
custom_domains=_parse_custom_domains(custom_domains),
|
|
510
513
|
requires_proxy_auth=requires_proxy_auth,
|
|
@@ -562,6 +565,7 @@ def _wsgi_app(
|
|
|
562
565
|
webhook_config = api_pb2.WebhookConfig(
|
|
563
566
|
type=api_pb2.WEBHOOK_TYPE_WSGI_APP,
|
|
564
567
|
requested_suffix=label or "",
|
|
568
|
+
ephemeral_suffix=config.get("dev_suffix"),
|
|
565
569
|
async_mode=api_pb2.WEBHOOK_ASYNC_MODE_AUTO,
|
|
566
570
|
custom_domains=_parse_custom_domains(custom_domains),
|
|
567
571
|
requires_proxy_auth=requires_proxy_auth,
|
|
@@ -623,6 +627,7 @@ def _web_server(
|
|
|
623
627
|
webhook_config = api_pb2.WebhookConfig(
|
|
624
628
|
type=api_pb2.WEBHOOK_TYPE_WEB_SERVER,
|
|
625
629
|
requested_suffix=label or "",
|
|
630
|
+
ephemeral_suffix=config.get("dev_suffix"),
|
|
626
631
|
async_mode=api_pb2.WEBHOOK_ASYNC_MODE_AUTO,
|
|
627
632
|
custom_domains=_parse_custom_domains(custom_domains),
|
|
628
633
|
web_server_port=port,
|
|
@@ -496,6 +496,12 @@ def serve(
|
|
|
496
496
|
```
|
|
497
497
|
modal serve hello_world.py
|
|
498
498
|
```
|
|
499
|
+
|
|
500
|
+
Modal-generated URLs will have a `-dev` suffix appended to them when running with `modal serve`.
|
|
501
|
+
To customize this suffix (i.e., to avoid collisions with other users in your workspace who are
|
|
502
|
+
concurrently serving the App), you can set the `dev_suffix` in your `.modal.toml` file or the
|
|
503
|
+
`MODAL_DEV_SUFFIX` environment variable.
|
|
504
|
+
|
|
499
505
|
"""
|
|
500
506
|
env = ensure_env(env)
|
|
501
507
|
import_ref = parse_import_ref(app_ref, use_module_mode=use_module_mode)
|
|
@@ -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.2.1.
|
|
36
|
+
version: str = "1.2.1.dev5",
|
|
37
37
|
):
|
|
38
38
|
"""mdmd:hidden
|
|
39
39
|
The Modal client object is not intended to be instantiated directly by users.
|
|
@@ -164,7 +164,7 @@ class Client:
|
|
|
164
164
|
server_url: str,
|
|
165
165
|
client_type: int,
|
|
166
166
|
credentials: typing.Optional[tuple[str, str]],
|
|
167
|
-
version: str = "1.2.1.
|
|
167
|
+
version: str = "1.2.1.dev5",
|
|
168
168
|
):
|
|
169
169
|
"""mdmd:hidden
|
|
170
170
|
The Modal client object is not intended to be instantiated directly by users.
|
|
@@ -71,6 +71,10 @@ Other possible configuration options are:
|
|
|
71
71
|
The log formatting pattern that will be used by the modal client itself.
|
|
72
72
|
See https://docs.python.org/3/library/logging.html#logrecord-attributes for available
|
|
73
73
|
log attributes.
|
|
74
|
+
* `dev_suffix` (in the .toml file) / `MODAL_DEV_SUFFIX` (as an env var).
|
|
75
|
+
Overrides the default `-dev` suffix added to URLs generated for web endpoints
|
|
76
|
+
when the App is ephemeral (i.e., created via `modal serve`). Must be a short
|
|
77
|
+
alphanumeric string.
|
|
74
78
|
|
|
75
79
|
Meta-configuration
|
|
76
80
|
------------------
|
|
@@ -85,6 +89,7 @@ Some "meta-options" are set using environment variables only:
|
|
|
85
89
|
|
|
86
90
|
import logging
|
|
87
91
|
import os
|
|
92
|
+
import re
|
|
88
93
|
import typing
|
|
89
94
|
import warnings
|
|
90
95
|
from typing import Any, Callable, Optional
|
|
@@ -206,6 +211,12 @@ def _check_value(options: list[str]) -> Callable[[str], str]:
|
|
|
206
211
|
return checker
|
|
207
212
|
|
|
208
213
|
|
|
214
|
+
def _enforce_suffix_rules(x: str) -> str:
|
|
215
|
+
if x and not re.match(r"^[a-zA-Z0-9]{1,8}$", x):
|
|
216
|
+
raise ValueError("Suffix must be an alphanumeric string of no more than 8 characters.")
|
|
217
|
+
return x
|
|
218
|
+
|
|
219
|
+
|
|
209
220
|
class _Setting(typing.NamedTuple):
|
|
210
221
|
default: typing.Any = None
|
|
211
222
|
transform: typing.Callable[[str], typing.Any] = lambda x: x # noqa: E731
|
|
@@ -244,6 +255,7 @@ _SETTINGS = {
|
|
|
244
255
|
"pickle",
|
|
245
256
|
transform=lambda s: _check_value(["pickle", "cbor"])(s.lower()),
|
|
246
257
|
),
|
|
258
|
+
"dev_suffix": _Setting("", transform=_enforce_suffix_rules),
|
|
247
259
|
}
|
|
248
260
|
|
|
249
261
|
|
|
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
|