modal 1.0.3.dev1__tar.gz → 1.0.3.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.0.3.dev1 → modal-1.0.3.dev4}/PKG-INFO +1 -1
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/cli/volume.py +4 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/client.pyi +2 -2
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/functions.pyi +6 -6
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/image.py +38 -22
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/volume.py +2 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/volume.pyi +2 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal.egg-info/PKG-INFO +1 -1
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal_proto/api.proto +2 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal_proto/api_pb2.py +585 -585
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal_proto/api_pb2.pyi +4 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal_version/__init__.py +1 -1
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/LICENSE +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/README.md +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/__init__.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/__main__.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_clustered_functions.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_clustered_functions.pyi +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_container_entrypoint.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_functions.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_ipython.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_location.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_object.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_output.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_partial_function.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_pty.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_resolver.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_resources.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_runtime/__init__.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_runtime/asgi.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_runtime/container_io_manager.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_runtime/container_io_manager.pyi +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_runtime/execution_context.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_runtime/execution_context.pyi +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_runtime/gpu_memory_snapshot.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_runtime/telemetry.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_runtime/user_code_imports.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_serialization.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_traceback.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_tunnel.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_tunnel.pyi +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_type_manager.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_utils/__init__.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_utils/app_utils.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_utils/async_utils.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_utils/blob_utils.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_utils/bytes_io_segment_payload.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_utils/deprecation.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_utils/docker_utils.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_utils/function_utils.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_utils/git_utils.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_utils/grpc_testing.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_utils/grpc_utils.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_utils/hash_utils.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_utils/http_utils.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_utils/jwt_utils.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_utils/logger.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_utils/mount_utils.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_utils/name_utils.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_utils/package_utils.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_utils/pattern_utils.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_utils/rand_pb_testing.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_utils/shell_utils.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_utils/time_utils.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_vendor/__init__.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_vendor/a2wsgi_wsgi.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_vendor/cloudpickle.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_vendor/tblib.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/_watcher.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/app.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/app.pyi +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/call_graph.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/cli/__init__.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/cli/_download.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/cli/_traceback.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/cli/app.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/cli/cluster.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/cli/config.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/cli/container.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/cli/dict.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/cli/entry_point.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/cli/environment.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/cli/import_refs.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/cli/launch.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/cli/network_file_system.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/cli/profile.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/cli/programs/__init__.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/cli/programs/run_jupyter.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/cli/programs/vscode.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/cli/queues.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/cli/run.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/cli/secret.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/cli/token.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/cli/utils.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/client.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/cloud_bucket_mount.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/cloud_bucket_mount.pyi +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/cls.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/cls.pyi +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/config.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/container_process.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/container_process.pyi +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/dict.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/dict.pyi +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/environments.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/environments.pyi +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/exception.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/experimental/__init__.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/experimental/ipython.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/file_io.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/file_io.pyi +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/file_pattern_matcher.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/functions.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/gpu.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/image.pyi +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/io_streams.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/io_streams.pyi +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/mount.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/mount.pyi +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/network_file_system.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/network_file_system.pyi +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/object.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/object.pyi +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/output.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/parallel_map.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/parallel_map.pyi +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/partial_function.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/partial_function.pyi +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/proxy.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/proxy.pyi +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/py.typed +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/queue.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/queue.pyi +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/requirements/2023.12.312.txt +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/requirements/2023.12.txt +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/requirements/2024.04.txt +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/requirements/2024.10.txt +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/requirements/PREVIEW.txt +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/requirements/README.md +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/requirements/base-images.json +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/retries.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/runner.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/runner.pyi +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/running_app.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/sandbox.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/sandbox.pyi +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/schedule.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/scheduler_placement.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/secret.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/secret.pyi +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/serving.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/serving.pyi +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/snapshot.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/snapshot.pyi +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/stream_type.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/token_flow.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal/token_flow.pyi +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal.egg-info/SOURCES.txt +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal.egg-info/dependency_links.txt +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal.egg-info/entry_points.txt +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal.egg-info/requires.txt +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal.egg-info/top_level.txt +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal_docs/__init__.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal_docs/gen_cli_docs.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal_docs/gen_reference_docs.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal_docs/mdmd/__init__.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal_docs/mdmd/mdmd.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal_docs/mdmd/signatures.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal_proto/__init__.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal_proto/api_grpc.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal_proto/api_pb2_grpc.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal_proto/api_pb2_grpc.pyi +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal_proto/modal_api_grpc.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal_proto/modal_options_grpc.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal_proto/options.proto +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal_proto/options_grpc.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal_proto/options_pb2.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal_proto/options_pb2.pyi +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal_proto/options_pb2_grpc.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal_proto/options_pb2_grpc.pyi +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal_proto/py.typed +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/modal_version/__main__.py +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/pyproject.toml +0 -0
- {modal-1.0.3.dev1 → modal-1.0.3.dev4}/setup.cfg +0 -0
@@ -154,6 +154,10 @@ async def ls(
|
|
154
154
|
filetype = "dir"
|
155
155
|
elif entry.type == api_pb2.FileEntry.FileType.SYMLINK:
|
156
156
|
filetype = "link"
|
157
|
+
elif entry.type == api_pb2.FileEntry.FileType.FIFO:
|
158
|
+
filetype = "fifo"
|
159
|
+
elif entry.type == api_pb2.FileEntry.FileType.SOCKET:
|
160
|
+
filetype = "socket"
|
157
161
|
else:
|
158
162
|
filetype = "file"
|
159
163
|
rows.append(
|
@@ -31,7 +31,7 @@ class _Client:
|
|
31
31
|
server_url: str,
|
32
32
|
client_type: int,
|
33
33
|
credentials: typing.Optional[tuple[str, str]],
|
34
|
-
version: str = "1.0.3.
|
34
|
+
version: str = "1.0.3.dev4",
|
35
35
|
): ...
|
36
36
|
def is_closed(self) -> bool: ...
|
37
37
|
@property
|
@@ -94,7 +94,7 @@ class Client:
|
|
94
94
|
server_url: str,
|
95
95
|
client_type: int,
|
96
96
|
credentials: typing.Optional[tuple[str, str]],
|
97
|
-
version: str = "1.0.3.
|
97
|
+
version: str = "1.0.3.dev4",
|
98
98
|
): ...
|
99
99
|
def is_closed(self) -> bool: ...
|
100
100
|
@property
|
@@ -227,11 +227,11 @@ class Function(
|
|
227
227
|
|
228
228
|
_call_generator: ___call_generator_spec[typing_extensions.Self]
|
229
229
|
|
230
|
-
class __remote_spec(typing_extensions.Protocol[
|
230
|
+
class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
|
231
231
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER: ...
|
232
232
|
async def aio(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER: ...
|
233
233
|
|
234
|
-
remote: __remote_spec[modal._functions.
|
234
|
+
remote: __remote_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
|
235
235
|
|
236
236
|
class __remote_gen_spec(typing_extensions.Protocol[SUPERSELF]):
|
237
237
|
def __call__(self, /, *args, **kwargs) -> typing.Generator[typing.Any, None, None]: ...
|
@@ -246,12 +246,12 @@ class Function(
|
|
246
246
|
self, *args: modal._functions.P.args, **kwargs: modal._functions.P.kwargs
|
247
247
|
) -> modal._functions.OriginalReturnType: ...
|
248
248
|
|
249
|
-
class ___experimental_spawn_spec(typing_extensions.Protocol[
|
249
|
+
class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
|
250
250
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
|
251
251
|
async def aio(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
|
252
252
|
|
253
253
|
_experimental_spawn: ___experimental_spawn_spec[
|
254
|
-
modal._functions.
|
254
|
+
modal._functions.ReturnType, modal._functions.P, typing_extensions.Self
|
255
255
|
]
|
256
256
|
|
257
257
|
class ___spawn_map_inner_spec(typing_extensions.Protocol[P_INNER, SUPERSELF]):
|
@@ -260,11 +260,11 @@ class Function(
|
|
260
260
|
|
261
261
|
_spawn_map_inner: ___spawn_map_inner_spec[modal._functions.P, typing_extensions.Self]
|
262
262
|
|
263
|
-
class __spawn_spec(typing_extensions.Protocol[
|
263
|
+
class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
|
264
264
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
|
265
265
|
async def aio(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
|
266
266
|
|
267
|
-
spawn: __spawn_spec[modal._functions.
|
267
|
+
spawn: __spawn_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
|
268
268
|
|
269
269
|
def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]: ...
|
270
270
|
|
@@ -647,7 +647,13 @@ class _Image(_Object, type_prefix="im"):
|
|
647
647
|
metadata = resp.metadata
|
648
648
|
|
649
649
|
if result.status == api_pb2.GenericResult.GENERIC_STATUS_FAILURE:
|
650
|
-
|
650
|
+
if result.exception:
|
651
|
+
raise RemoteError(f"Image build for {image_id} failed with the exception:\n{result.exception}")
|
652
|
+
else:
|
653
|
+
msg = f"Image build for {image_id} failed. See build logs for more details."
|
654
|
+
if not _get_output_manager():
|
655
|
+
msg += " (Hint: Use `modal.enable_output()` to see logs from the process building the Image.)"
|
656
|
+
raise RemoteError(msg)
|
651
657
|
elif result.status == api_pb2.GenericResult.GENERIC_STATUS_TERMINATED:
|
652
658
|
raise RemoteError(f"Image build for {image_id} terminated due to external shut-down. Please try again.")
|
653
659
|
elif result.status == api_pb2.GenericResult.GENERIC_STATUS_TIMEOUT:
|
@@ -1522,12 +1528,14 @@ class _Image(_Object, type_prefix="im"):
|
|
1522
1528
|
modal_requirements_commands = []
|
1523
1529
|
if builder_version <= "2024.10":
|
1524
1530
|
# past 2024.10, client dependencies are mounted at runtime
|
1525
|
-
modal_requirements_commands.extend(
|
1526
|
-
|
1527
|
-
|
1528
|
-
|
1529
|
-
|
1530
|
-
|
1531
|
+
modal_requirements_commands.extend(
|
1532
|
+
[
|
1533
|
+
f"COPY {CONTAINER_REQUIREMENTS_PATH} {CONTAINER_REQUIREMENTS_PATH}",
|
1534
|
+
f"RUN python -m pip install --upgrade {_base_image_config('package_tools', builder_version)}",
|
1535
|
+
f"RUN {requirements_prefix}{_get_modal_requirements_command(builder_version)}",
|
1536
|
+
]
|
1537
|
+
)
|
1538
|
+
if "2024.10" >= builder_version > "2023.12":
|
1531
1539
|
modal_requirements_commands.append(f"RUN rm {CONTAINER_REQUIREMENTS_PATH}")
|
1532
1540
|
|
1533
1541
|
return [
|
@@ -1830,23 +1838,31 @@ class _Image(_Object, type_prefix="im"):
|
|
1830
1838
|
f"FROM python:{full_python_version}-slim-{debian_codename}",
|
1831
1839
|
]
|
1832
1840
|
if version <= "2024.10":
|
1833
|
-
commands.extend(
|
1834
|
-
|
1835
|
-
|
1836
|
-
|
1837
|
-
|
1838
|
-
|
1839
|
-
|
1840
|
-
|
1841
|
+
commands.extend(
|
1842
|
+
[
|
1843
|
+
f"COPY {CONTAINER_REQUIREMENTS_PATH} {CONTAINER_REQUIREMENTS_PATH}",
|
1844
|
+
]
|
1845
|
+
)
|
1846
|
+
commands.extend(
|
1847
|
+
[
|
1848
|
+
"RUN apt-get update",
|
1849
|
+
"RUN apt-get install -y gcc gfortran build-essential",
|
1850
|
+
f"RUN pip install --upgrade {_base_image_config('package_tools', version)}",
|
1851
|
+
]
|
1852
|
+
)
|
1841
1853
|
if version <= "2024.10":
|
1842
1854
|
# after 2024.10, modal requirements are mounted at runtime
|
1843
|
-
commands.extend(
|
1844
|
-
|
1845
|
-
|
1846
|
-
|
1847
|
-
|
1848
|
-
|
1849
|
-
|
1855
|
+
commands.extend(
|
1856
|
+
[
|
1857
|
+
f"RUN {_get_modal_requirements_command(version)}",
|
1858
|
+
]
|
1859
|
+
)
|
1860
|
+
commands.extend(
|
1861
|
+
[
|
1862
|
+
# Set debian front-end to non-interactive to avoid users getting stuck with input prompts.
|
1863
|
+
"RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections",
|
1864
|
+
]
|
1865
|
+
)
|
1850
1866
|
if "2024.10" >= version > "2023.12":
|
1851
1867
|
commands.append(f"RUN rm {CONTAINER_REQUIREMENTS_PATH}")
|
1852
1868
|
if version > "2024.10":
|