modAL 1.3.1.dev9__tar.gz → 1.3.1.dev11__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.dev9 → modal-1.3.1.dev11}/PKG-INFO +1 -1
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_partial_function.py +1 -22
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/app.py +0 -6
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/client.pyi +2 -2
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/cls.py +0 -3
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/partial_function.pyi +0 -1
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal.egg-info/PKG-INFO +1 -1
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal_proto/api.proto +30 -1
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal_proto/api_grpc.py +16 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal_proto/api_pb2.py +263 -223
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal_proto/api_pb2.pyi +87 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal_proto/api_pb2_grpc.py +33 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal_proto/api_pb2_grpc.pyi +10 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal_proto/modal_api_grpc.py +1 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal_version/__init__.py +1 -1
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/LICENSE +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/README.md +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/__init__.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/__main__.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_billing.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_clustered_functions.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_clustered_functions.pyi +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_container_entrypoint.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_functions.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_grpc_client.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_ipython.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_load_context.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_location.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_object.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_output.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_pty.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_resolver.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_resources.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_runtime/__init__.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_runtime/asgi.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_runtime/container_io_manager.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_runtime/container_io_manager.pyi +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_runtime/execution_context.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_runtime/execution_context.pyi +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_runtime/gpu_memory_snapshot.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_runtime/telemetry.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_runtime/user_code_event_loop.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_runtime/user_code_imports.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_serialization.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_traceback.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_tunnel.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_tunnel.pyi +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_type_manager.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_utils/__init__.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_utils/app_utils.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_utils/async_utils.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_utils/auth_token_manager.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_utils/blob_utils.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_utils/bytes_io_segment_payload.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_utils/deprecation.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_utils/docker_utils.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_utils/function_utils.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_utils/git_utils.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_utils/grpc_testing.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_utils/grpc_utils.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_utils/hash_utils.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_utils/http_utils.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_utils/jwt_utils.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_utils/logger.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_utils/mount_utils.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_utils/name_utils.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_utils/package_utils.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_utils/pattern_utils.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_utils/rand_pb_testing.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_utils/shell_utils.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_utils/task_command_router_client.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_utils/time_utils.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_vendor/__init__.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_vendor/a2wsgi_wsgi.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_vendor/cloudpickle.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_vendor/tblib.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/_watcher.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/app.pyi +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/billing.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/builder/2023.12.312.txt +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/builder/2023.12.txt +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/builder/2024.04.txt +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/builder/2024.10.txt +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/builder/2025.06.txt +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/builder/PREVIEW.txt +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/builder/README.md +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/builder/base-images.json +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/call_graph.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/cli/__init__.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/cli/_download.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/cli/_traceback.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/cli/app.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/cli/cluster.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/cli/config.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/cli/container.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/cli/dict.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/cli/entry_point.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/cli/environment.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/cli/import_refs.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/cli/launch.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/cli/network_file_system.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/cli/profile.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/cli/programs/__init__.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/cli/programs/run_jupyter.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/cli/programs/vscode.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/cli/queues.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/cli/run.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/cli/secret.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/cli/shell.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/cli/token.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/cli/utils.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/cli/volume.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/client.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/cloud_bucket_mount.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/cloud_bucket_mount.pyi +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/cls.pyi +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/config.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/container_process.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/container_process.pyi +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/dict.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/dict.pyi +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/environments.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/environments.pyi +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/exception.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/experimental/__init__.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/experimental/flash.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/experimental/flash.pyi +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/experimental/ipython.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/file_io.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/file_io.pyi +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/file_pattern_matcher.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/functions.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/functions.pyi +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/gpu.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/image.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/image.pyi +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/io_streams.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/io_streams.pyi +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/mount.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/mount.pyi +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/network_file_system.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/network_file_system.pyi +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/object.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/object.pyi +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/output.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/parallel_map.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/parallel_map.pyi +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/partial_function.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/proxy.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/proxy.pyi +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/py.typed +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/queue.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/queue.pyi +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/retries.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/runner.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/runner.pyi +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/running_app.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/sandbox.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/sandbox.pyi +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/schedule.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/scheduler_placement.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/secret.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/secret.pyi +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/serving.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/serving.pyi +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/snapshot.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/snapshot.pyi +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/stream_type.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/token_flow.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/token_flow.pyi +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/volume.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal/volume.pyi +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal.egg-info/SOURCES.txt +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal.egg-info/dependency_links.txt +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal.egg-info/entry_points.txt +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal.egg-info/requires.txt +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal.egg-info/top_level.txt +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal_docs/__init__.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal_docs/gen_cli_docs.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal_docs/gen_reference_docs.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal_docs/mdmd/__init__.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal_docs/mdmd/mdmd.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal_docs/mdmd/signatures.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal_proto/__init__.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal_proto/py.typed +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal_proto/task_command_router.proto +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal_proto/task_command_router_grpc.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal_proto/task_command_router_pb2.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal_proto/task_command_router_pb2.pyi +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal_proto/task_command_router_pb2_grpc.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/modal_version/__main__.py +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/pyproject.toml +0 -0
- {modal-1.3.1.dev9 → modal-1.3.1.dev11}/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 config
|
|
22
|
+
from .config import config
|
|
23
23
|
from .exception import InvalidError
|
|
24
24
|
|
|
25
25
|
MAX_MAX_BATCH_SIZE = 1000
|
|
@@ -125,7 +125,6 @@ class _PartialFunction(typing.Generic[P, ReturnType, OriginalReturnType]):
|
|
|
125
125
|
user_cls: Optional[type] = None # class
|
|
126
126
|
flags: _PartialFunctionFlags
|
|
127
127
|
params: _PartialFunctionParams
|
|
128
|
-
registered: bool
|
|
129
128
|
|
|
130
129
|
def __init__(
|
|
131
130
|
self,
|
|
@@ -141,7 +140,6 @@ class _PartialFunction(typing.Generic[P, ReturnType, OriginalReturnType]):
|
|
|
141
140
|
self.user_cls = None
|
|
142
141
|
self.flags = flags
|
|
143
142
|
self.params = params
|
|
144
|
-
self.registered = False
|
|
145
143
|
self.validate_flag_composition()
|
|
146
144
|
|
|
147
145
|
def stack(self, flags: _PartialFunctionFlags, params: _PartialFunctionParams) -> typing_extensions.Self:
|
|
@@ -156,13 +154,11 @@ class _PartialFunction(typing.Generic[P, ReturnType, OriginalReturnType]):
|
|
|
156
154
|
uses_interface_flags = self.flags & _PartialFunctionFlags.interface_flags()
|
|
157
155
|
uses_lifecycle_flags = self.flags & _PartialFunctionFlags.lifecycle_flags()
|
|
158
156
|
if uses_interface_flags and uses_lifecycle_flags:
|
|
159
|
-
self.registered = True # Hacky, avoid false-positive warning
|
|
160
157
|
raise InvalidError("Interface decorators cannot be combined with lifecycle decorators.")
|
|
161
158
|
|
|
162
159
|
has_web_interface = self.flags & _PartialFunctionFlags.WEB_INTERFACE
|
|
163
160
|
has_callable_interface = self.flags & _PartialFunctionFlags.CALLABLE_INTERFACE
|
|
164
161
|
if has_web_interface and has_callable_interface:
|
|
165
|
-
self.registered = True # Hacky, avoid false-positive warning
|
|
166
162
|
raise InvalidError("Callable decorators cannot be combined with web interface decorators.")
|
|
167
163
|
|
|
168
164
|
def validate_obj_compatibility(
|
|
@@ -174,20 +170,17 @@ class _PartialFunction(typing.Generic[P, ReturnType, OriginalReturnType]):
|
|
|
174
170
|
uses_lifecycle_flags = self.flags & _PartialFunctionFlags.lifecycle_flags()
|
|
175
171
|
uses_interface_flags = self.flags & _PartialFunctionFlags.interface_flags()
|
|
176
172
|
if self.user_cls is not None and (uses_lifecycle_flags or uses_interface_flags):
|
|
177
|
-
self.registered = True # Hacky, avoid false-positive warning
|
|
178
173
|
raise InvalidError(
|
|
179
174
|
f"Cannot apply `@modal.{decorator_name}` to a class. Hint: consider applying to a method instead."
|
|
180
175
|
)
|
|
181
176
|
|
|
182
177
|
wrapped_object = self.raw_f or self.user_cls
|
|
183
178
|
if isinstance(wrapped_object, _Function):
|
|
184
|
-
self.registered = True # Hacky, avoid false-positive warning
|
|
185
179
|
raise InvalidError(
|
|
186
180
|
f"Cannot stack `@modal.{decorator_name}` on top of `@app.function`."
|
|
187
181
|
" Hint: swap the order of the decorators."
|
|
188
182
|
)
|
|
189
183
|
elif isinstance(wrapped_object, _Cls):
|
|
190
|
-
self.registered = True # Hacky, avoid false-positive warning
|
|
191
184
|
raise InvalidError(
|
|
192
185
|
f"Cannot stack `@modal.{decorator_name}` on top of `@app.cls()`."
|
|
193
186
|
" Hint: swap the order of the decorators."
|
|
@@ -196,15 +189,12 @@ class _PartialFunction(typing.Generic[P, ReturnType, OriginalReturnType]):
|
|
|
196
189
|
# Run some assertions about a callable wrappee defined by the specific decorator used
|
|
197
190
|
if self.raw_f is not None:
|
|
198
191
|
if not callable(self.raw_f):
|
|
199
|
-
self.registered = True # Hacky, avoid false-positive warning
|
|
200
192
|
raise InvalidError(f"The object wrapped by `@modal.{decorator_name}` must be callable.")
|
|
201
193
|
|
|
202
194
|
if require_sync and inspect.iscoroutinefunction(self.raw_f):
|
|
203
|
-
self.registered = True # Hacky, avoid false-positive warning
|
|
204
195
|
raise InvalidError(f"The `@modal.{decorator_name}` decorator can't be applied to an async function.")
|
|
205
196
|
|
|
206
197
|
if require_nullary and callable_has_non_self_params(self.raw_f):
|
|
207
|
-
self.registered = True # Hacky, avoid false-positive warning
|
|
208
198
|
raise InvalidError(f"Functions decorated by `@modal.{decorator_name}` can't have parameters.")
|
|
209
199
|
|
|
210
200
|
def _get_raw_f(self) -> Callable[P, ReturnType]:
|
|
@@ -244,17 +234,6 @@ class _PartialFunction(typing.Generic[P, ReturnType, OriginalReturnType]):
|
|
|
244
234
|
# to let it be bound to a variable and become a Function later on
|
|
245
235
|
return self # type: ignore # this returns a PartialFunction in a special internal case
|
|
246
236
|
|
|
247
|
-
def __del__(self):
|
|
248
|
-
if self.registered is False:
|
|
249
|
-
if self.raw_f is not None:
|
|
250
|
-
name, object_type, suggestion = self.raw_f.__name__, "function", "@app.function or @app.cls"
|
|
251
|
-
elif self.user_cls is not None:
|
|
252
|
-
name, object_type, suggestion = self.user_cls.__name__, "class", "@app.cls"
|
|
253
|
-
logger.warning(
|
|
254
|
-
f"The `{name}` {object_type} was never registered with the App."
|
|
255
|
-
f" Did you forget an {suggestion} decorator?"
|
|
256
|
-
)
|
|
257
|
-
|
|
258
237
|
|
|
259
238
|
def _find_partial_methods_for_user_cls(user_cls: type[Any], flags: int) -> dict[str, _PartialFunction]:
|
|
260
239
|
"""Grabs all method on a user class, and returns partials. Includes legacy methods."""
|
|
@@ -813,7 +813,6 @@ class _App:
|
|
|
813
813
|
|
|
814
814
|
if isinstance(f, _PartialFunction):
|
|
815
815
|
# typically for @function-wrapped @web_endpoint, @asgi_app, or @batched
|
|
816
|
-
f.registered = True
|
|
817
816
|
|
|
818
817
|
# but we don't support @app.function wrapping a method.
|
|
819
818
|
if is_method_fn(f.raw_f.__qualname__):
|
|
@@ -1052,7 +1051,6 @@ class _App:
|
|
|
1052
1051
|
# Check if the decorated object is a class
|
|
1053
1052
|
http_config = None
|
|
1054
1053
|
if isinstance(wrapped_cls, _PartialFunction):
|
|
1055
|
-
wrapped_cls.registered = True
|
|
1056
1054
|
user_cls = wrapped_cls.user_cls
|
|
1057
1055
|
if wrapped_cls.flags & _PartialFunctionFlags.HTTP_WEB_INTERFACE:
|
|
1058
1056
|
http_config = wrapped_cls.params.http_config
|
|
@@ -1110,7 +1108,6 @@ class _App:
|
|
|
1110
1108
|
raise InvalidError("A class must have `enable_memory_snapshot=True` to use `snap=True` on its methods.")
|
|
1111
1109
|
|
|
1112
1110
|
for method in _find_partial_methods_for_user_cls(user_cls, _PartialFunctionFlags.CONCURRENT).values():
|
|
1113
|
-
method.registered = True # Avoid warning about not registering the method (hacky!)
|
|
1114
1111
|
raise InvalidError(
|
|
1115
1112
|
"The `@modal.concurrent` decorator cannot be used on methods; decorate the class instead."
|
|
1116
1113
|
)
|
|
@@ -1118,7 +1115,6 @@ class _App:
|
|
|
1118
1115
|
for method in _find_partial_methods_for_user_cls(
|
|
1119
1116
|
user_cls, _PartialFunctionFlags.HTTP_WEB_INTERFACE
|
|
1120
1117
|
).values():
|
|
1121
|
-
method.registered = True # Avoid warning about not registering the method (hacky!)
|
|
1122
1118
|
raise InvalidError(
|
|
1123
1119
|
"The `@modal.http_server` decorator cannot be used on methods; decorate the class instead."
|
|
1124
1120
|
)
|
|
@@ -1127,7 +1123,6 @@ class _App:
|
|
|
1127
1123
|
for method in _find_partial_methods_for_user_cls(
|
|
1128
1124
|
user_cls, _PartialFunctionFlags.CALLABLE_INTERFACE
|
|
1129
1125
|
).values():
|
|
1130
|
-
method.registered = True # Avoid warning about not registering the method (hacky!)
|
|
1131
1126
|
raise InvalidError("Callable decorators cannot be combined with web interface decorators.")
|
|
1132
1127
|
|
|
1133
1128
|
info = FunctionInfo(None, serialized=serialized, user_cls=user_cls)
|
|
@@ -1182,7 +1177,6 @@ class _App:
|
|
|
1182
1177
|
if partial_function.params.webhook_config is not None:
|
|
1183
1178
|
full_name = f"{user_cls.__name__}.{method_name}"
|
|
1184
1179
|
local_state.web_endpoints.append(full_name)
|
|
1185
|
-
partial_function.registered = True
|
|
1186
1180
|
|
|
1187
1181
|
tag: str = user_cls.__name__
|
|
1188
1182
|
self._add_class(tag, cls)
|
|
@@ -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.dev11",
|
|
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.dev11",
|
|
167
167
|
):
|
|
168
168
|
"""mdmd:hidden
|
|
169
169
|
The Modal client object is not intended to be instantiated directly by users.
|
|
@@ -579,12 +579,9 @@ More information on class parameterization can be found here: https://modal.com/
|
|
|
579
579
|
# validate signature
|
|
580
580
|
_Cls.validate_construction_mechanism(user_cls)
|
|
581
581
|
|
|
582
|
-
# Disable the warning that lifecycle methods are not wrapped
|
|
583
582
|
lifecycle_method_partials = _find_partial_methods_for_user_cls(
|
|
584
583
|
user_cls, ~_PartialFunctionFlags.interface_flags()
|
|
585
584
|
)
|
|
586
|
-
for partial_function in lifecycle_method_partials.values():
|
|
587
|
-
partial_function.registered = True
|
|
588
585
|
|
|
589
586
|
method_partials = _find_partial_methods_for_user_cls(user_cls, _PartialFunctionFlags.interface_flags())
|
|
590
587
|
|
|
@@ -2894,6 +2894,7 @@ message SandboxHandleMetadata {
|
|
|
2894
2894
|
|
|
2895
2895
|
message SandboxInfo {
|
|
2896
2896
|
string id = 1;
|
|
2897
|
+
reserved 2; // modal.client.Sandbox definition
|
|
2897
2898
|
double created_at = 3;
|
|
2898
2899
|
TaskInfo task_info = 4;
|
|
2899
2900
|
string app_id = 5;
|
|
@@ -2902,7 +2903,6 @@ message SandboxInfo {
|
|
|
2902
2903
|
string image_id = 8;
|
|
2903
2904
|
ResourceInfo resource_info = 9;
|
|
2904
2905
|
repeated string regions = 10;
|
|
2905
|
-
reserved 2; // modal.client.Sandbox definition
|
|
2906
2906
|
}
|
|
2907
2907
|
|
|
2908
2908
|
|
|
@@ -3115,6 +3115,12 @@ message SecretMetadata {
|
|
|
3115
3115
|
CreationInfo creation_info = 2;
|
|
3116
3116
|
}
|
|
3117
3117
|
|
|
3118
|
+
message ServiceUserIdentity {
|
|
3119
|
+
string service_user_id = 1;
|
|
3120
|
+
string service_user_name = 2;
|
|
3121
|
+
UserIdentity created_by = 3;
|
|
3122
|
+
}
|
|
3123
|
+
|
|
3118
3124
|
// SharedVolume in the backend corresponds to NetworkFileSystem in the current API
|
|
3119
3125
|
|
|
3120
3126
|
message SharedVolumeDeleteRequest {
|
|
@@ -3336,6 +3342,23 @@ message TokenFlowWaitResponse {
|
|
|
3336
3342
|
string workspace_username = 4;
|
|
3337
3343
|
}
|
|
3338
3344
|
|
|
3345
|
+
message TokenInfoGetRequest {}
|
|
3346
|
+
|
|
3347
|
+
message TokenInfoGetResponse {
|
|
3348
|
+
string token_id = 1;
|
|
3349
|
+
string workspace_id = 2;
|
|
3350
|
+
string workspace_name = 3;
|
|
3351
|
+
|
|
3352
|
+
oneof identity {
|
|
3353
|
+
UserIdentity user_identity = 4;
|
|
3354
|
+
ServiceUserIdentity service_user_identity = 5;
|
|
3355
|
+
}
|
|
3356
|
+
|
|
3357
|
+
// Token metadata
|
|
3358
|
+
google.protobuf.Timestamp created_at = 6;
|
|
3359
|
+
google.protobuf.Timestamp expires_at = 7;
|
|
3360
|
+
}
|
|
3361
|
+
|
|
3339
3362
|
message TunnelData {
|
|
3340
3363
|
string host = 1;
|
|
3341
3364
|
uint32 port = 2;
|
|
@@ -3375,6 +3398,11 @@ message UserActionInfo {
|
|
|
3375
3398
|
double timestamp = 2;
|
|
3376
3399
|
}
|
|
3377
3400
|
|
|
3401
|
+
message UserIdentity {
|
|
3402
|
+
string user_id = 1;
|
|
3403
|
+
string username = 2;
|
|
3404
|
+
}
|
|
3405
|
+
|
|
3378
3406
|
message VolumeCommitRequest {
|
|
3379
3407
|
// NOTE(staffan): Mounting a volume in multiple locations is not supported, so volume_id alone uniquely identifies
|
|
3380
3408
|
// a volume mount.
|
|
@@ -3858,6 +3886,7 @@ service ModalClient {
|
|
|
3858
3886
|
// Tokens (web auth flow)
|
|
3859
3887
|
rpc TokenFlowCreate(TokenFlowCreateRequest) returns (TokenFlowCreateResponse);
|
|
3860
3888
|
rpc TokenFlowWait(TokenFlowWaitRequest) returns (TokenFlowWaitResponse);
|
|
3889
|
+
rpc TokenInfoGet(TokenInfoGetRequest) returns (TokenInfoGetResponse);
|
|
3861
3890
|
|
|
3862
3891
|
// Tunnels
|
|
3863
3892
|
rpc TunnelStart(TunnelStartRequest) returns (TunnelStartResponse);
|
|
@@ -631,6 +631,10 @@ class ModalClientBase(abc.ABC):
|
|
|
631
631
|
async def TokenFlowWait(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.TokenFlowWaitRequest, modal_proto.api_pb2.TokenFlowWaitResponse]') -> None:
|
|
632
632
|
pass
|
|
633
633
|
|
|
634
|
+
@abc.abstractmethod
|
|
635
|
+
async def TokenInfoGet(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.TokenInfoGetRequest, modal_proto.api_pb2.TokenInfoGetResponse]') -> None:
|
|
636
|
+
pass
|
|
637
|
+
|
|
634
638
|
@abc.abstractmethod
|
|
635
639
|
async def TunnelStart(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.TunnelStartRequest, modal_proto.api_pb2.TunnelStartResponse]') -> None:
|
|
636
640
|
pass
|
|
@@ -1635,6 +1639,12 @@ class ModalClientBase(abc.ABC):
|
|
|
1635
1639
|
modal_proto.api_pb2.TokenFlowWaitRequest,
|
|
1636
1640
|
modal_proto.api_pb2.TokenFlowWaitResponse,
|
|
1637
1641
|
),
|
|
1642
|
+
'/modal.client.ModalClient/TokenInfoGet': grpclib.const.Handler(
|
|
1643
|
+
self.TokenInfoGet,
|
|
1644
|
+
grpclib.const.Cardinality.UNARY_UNARY,
|
|
1645
|
+
modal_proto.api_pb2.TokenInfoGetRequest,
|
|
1646
|
+
modal_proto.api_pb2.TokenInfoGetResponse,
|
|
1647
|
+
),
|
|
1638
1648
|
'/modal.client.ModalClient/TunnelStart': grpclib.const.Handler(
|
|
1639
1649
|
self.TunnelStart,
|
|
1640
1650
|
grpclib.const.Cardinality.UNARY_UNARY,
|
|
@@ -2685,6 +2695,12 @@ class ModalClientStub:
|
|
|
2685
2695
|
modal_proto.api_pb2.TokenFlowWaitRequest,
|
|
2686
2696
|
modal_proto.api_pb2.TokenFlowWaitResponse,
|
|
2687
2697
|
)
|
|
2698
|
+
self.TokenInfoGet = grpclib.client.UnaryUnaryMethod(
|
|
2699
|
+
channel,
|
|
2700
|
+
'/modal.client.ModalClient/TokenInfoGet',
|
|
2701
|
+
modal_proto.api_pb2.TokenInfoGetRequest,
|
|
2702
|
+
modal_proto.api_pb2.TokenInfoGetResponse,
|
|
2703
|
+
)
|
|
2688
2704
|
self.TunnelStart = grpclib.client.UnaryUnaryMethod(
|
|
2689
2705
|
channel,
|
|
2690
2706
|
'/modal.client.ModalClient/TunnelStart',
|