modal 0.72.25__py3-none-any.whl → 0.72.26__py3-none-any.whl

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/client.pyi CHANGED
@@ -27,7 +27,7 @@ class _Client:
27
27
  _snapshotted: bool
28
28
 
29
29
  def __init__(
30
- self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.72.25"
30
+ self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.72.26"
31
31
  ): ...
32
32
  def is_closed(self) -> bool: ...
33
33
  @property
@@ -83,7 +83,7 @@ class Client:
83
83
  _snapshotted: bool
84
84
 
85
85
  def __init__(
86
- self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.72.25"
86
+ self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.72.26"
87
87
  ): ...
88
88
  def is_closed(self) -> bool: ...
89
89
  @property
modal/functions.pyi CHANGED
@@ -463,11 +463,11 @@ class Function(typing.Generic[P, ReturnType, OriginalReturnType], modal.object.O
463
463
 
464
464
  _call_generator_nowait: ___call_generator_nowait_spec
465
465
 
466
- class __remote_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER]):
466
+ class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
467
467
  def __call__(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER: ...
468
468
  async def aio(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER: ...
469
469
 
470
- remote: __remote_spec[P, ReturnType]
470
+ remote: __remote_spec[ReturnType, P]
471
471
 
472
472
  class __remote_gen_spec(typing_extensions.Protocol):
473
473
  def __call__(self, *args, **kwargs) -> typing.Generator[typing.Any, None, None]: ...
@@ -480,17 +480,17 @@ class Function(typing.Generic[P, ReturnType, OriginalReturnType], modal.object.O
480
480
  def _get_obj(self) -> typing.Optional[modal.cls.Obj]: ...
481
481
  def local(self, *args: P.args, **kwargs: P.kwargs) -> OriginalReturnType: ...
482
482
 
483
- class ___experimental_spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER]):
483
+ class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
484
484
  def __call__(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
485
485
  async def aio(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
486
486
 
487
- _experimental_spawn: ___experimental_spawn_spec[P, ReturnType]
487
+ _experimental_spawn: ___experimental_spawn_spec[ReturnType, P]
488
488
 
489
- class __spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER]):
489
+ class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
490
490
  def __call__(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
491
491
  async def aio(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
492
492
 
493
- spawn: __spawn_spec[P, ReturnType]
493
+ spawn: __spawn_spec[ReturnType, P]
494
494
 
495
495
  def get_raw_f(self) -> typing.Callable[..., typing.Any]: ...
496
496
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: modal
3
- Version: 0.72.25
3
+ Version: 0.72.26
4
4
  Summary: Python client library for Modal
5
5
  Author: Modal Labs
6
6
  Author-email: support@modal.com
@@ -20,7 +20,7 @@ modal/app.py,sha256=UOuqlCKlFAjOXCacXmoEMM90FnqFwPRXUhLh0Gi6xzg,45344
20
20
  modal/app.pyi,sha256=5D3LkPP6qvTIl2_YgiyhNQ9X4VsOVuxd69a23UmohDg,25477
21
21
  modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
22
22
  modal/client.py,sha256=8SQawr7P1PNUCq1UmJMUQXG2jIo4Nmdcs311XqrNLRE,15276
23
- modal/client.pyi,sha256=v7As-8Qo6u5RGHxKNF07cGCMEy79SL3YINRR5hqNVMk,7326
23
+ modal/client.pyi,sha256=cH97f_MucbTigSHUSsepAvJiooLdHJzucjayNmk9cVI,7326
24
24
  modal/cloud_bucket_mount.py,sha256=G7T7jWLD0QkmrfKR75mSTwdUZ2xNfj7pkVqb4ipmxmI,5735
25
25
  modal/cloud_bucket_mount.pyi,sha256=CEi7vrH3kDUF4LAy4qP6tfImy2UJuFRcRbsgRNM1wo8,1403
26
26
  modal/cls.py,sha256=xHgZZAmymplw0I2YZGAA8raBboixdNKKTrnsxQZI7G8,32159
@@ -38,7 +38,7 @@ modal/file_io.py,sha256=lcMs_E9Xfm0YX1t9U2wNIBPnqHRxmImqjLW1GHqVmyg,20945
38
38
  modal/file_io.pyi,sha256=NrIoB0YjIqZ8MDMe826xAnybT0ww_kxQM3iPLo82REU,8898
39
39
  modal/file_pattern_matcher.py,sha256=dSo7BMQGZBAuoBFOX-e_72HxmF3FLzjQlEtnGtJiaD4,6506
40
40
  modal/functions.py,sha256=IP-6oHMmt-wUJPBWJ7Y7Vw2vqk2bYFRSQmV38T2STTI,68371
41
- modal/functions.pyi,sha256=eoXG53WPMnHY7N8dblghdLEBQ47k8uiSSaCDP9LfNxA,25473
41
+ modal/functions.pyi,sha256=EcGd1uGnJVbnMmdsnANYeDjLzjaL8BREG3XgxaDPcvM,25473
42
42
  modal/gpu.py,sha256=MTxj6ql8EpgfBg8YmZ5a1cLznyuZFssX1qXbEX4LKVM,7503
43
43
  modal/image.py,sha256=leeY7fLfFjS0IqTi3D4cRxIDOb80BPtb3jsQfqvVJ8c,90912
44
44
  modal/image.pyi,sha256=X9vj6cwBdYh8q_2cOd-2RSYNMF49ujcy0lrOXh_v1xc,26049
@@ -149,13 +149,13 @@ modal_global_objects/mounts/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0
149
149
  modal_global_objects/mounts/modal_client_package.py,sha256=W0E_yShsRojPzWm6LtIQqNVolapdnrZkm2hVEQuZK_4,767
150
150
  modal_global_objects/mounts/python_standalone.py,sha256=pEML5GaV2_0ahci_1vpfc_FnySpsfi2fhYmFF5I7IiQ,1837
151
151
  modal_proto/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
152
- modal_proto/api.proto,sha256=hoUhkUf5KwZB4QLzZsr6sBbzSRYyeViF14znxg4RyJM,82964
153
- modal_proto/api_grpc.py,sha256=U2-xzAtfSS017rCpNHmscNHLl6FSQ1mjJY8BhPXovpk,104423
154
- modal_proto/api_pb2.py,sha256=L9DeWJ0Za3gyVd6ebqtcQayV6i272mXDFzyfMEXYU1Q,302513
155
- modal_proto/api_pb2.pyi,sha256=cu22QMoVIJerEmktrIBxNFMgy7J424-ZKi1WOW82PA8,405136
156
- modal_proto/api_pb2_grpc.py,sha256=upL_jT9kJXcvOq-fl6VU8OBPqvDj6bqh0UE2ipgrY4I,225767
157
- modal_proto/api_pb2_grpc.pyi,sha256=zEO6zm_ImjG7a8PtkdohHRsPSnrZQKzg5y1ZVi6dFF8,52620
158
- modal_proto/modal_api_grpc.py,sha256=f6SJgIPmHx4RJmi5vPIanOCtIFXFdxHoUqcU8wPdn8g,13952
152
+ modal_proto/api.proto,sha256=bGCdpDHRSHUikDkBSXxSmA58OgYkMBFzhPUjiqCpSaU,83946
153
+ modal_proto/api_grpc.py,sha256=Bcgo5hmJ0FCAVvWAm7X7Qki2GZ2gvAu3kOtqzRtvoMc,106793
154
+ modal_proto/api_pb2.py,sha256=iAbkhsKguKv5DPKv4egq54dHqqqHjKsRnT3MyhhOgUY,306918
155
+ modal_proto/api_pb2.pyi,sha256=Zja16z78_d_ZpKuaSIFlqo7DQTTe-6oZ3OD3US3SNq8,409338
156
+ modal_proto/api_pb2_grpc.py,sha256=OTPQgFBajKwy7fhAFEewDjY6lK49C60Z9vTqUpQy_oY,230822
157
+ modal_proto/api_pb2_grpc.pyi,sha256=mwP2mw6UE46CHlraqicXHsgyGPtV0mCy96LwnFMz74s,53787
158
+ modal_proto/modal_api_grpc.py,sha256=C5QcdsBWEvF9ufbEjdyPQ5IDDexMdAI2_CQ_U2nEYuc,14258
159
159
  modal_proto/modal_options_grpc.py,sha256=qJ1cuwA54oRqrdTyPTbvfhFZYd9HhJKK5UCwt523r3Y,120
160
160
  modal_proto/options.proto,sha256=a-siq4swVbZPfaFRXAipRZzGP2bq8OsdUvjlyzAeodQ,488
161
161
  modal_proto/options_grpc.py,sha256=M18X3d-8F_cNYSVM3I25dUTO5rZ0rd-vCCfynfh13Nc,125
@@ -166,10 +166,10 @@ modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0y
166
166
  modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
167
167
  modal_version/__init__.py,sha256=kGya2ZlItX2zB7oHORs-wvP4PG8lg_mtbi1QIK3G6SQ,470
168
168
  modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
169
- modal_version/_version_generated.py,sha256=Y-higuGbX2qsU0SqgF5nVUI9Ocjz7yUSrC08BFb2OSk,149
170
- modal-0.72.25.dist-info/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
171
- modal-0.72.25.dist-info/METADATA,sha256=_V6VJPqymeT81J-Fj13tqT8WC-p6peNXZAZWl4U_ZFY,2329
172
- modal-0.72.25.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
173
- modal-0.72.25.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
174
- modal-0.72.25.dist-info/top_level.txt,sha256=1nvYbOSIKcmU50fNrpnQnrrOpj269ei3LzgB6j9xGqg,64
175
- modal-0.72.25.dist-info/RECORD,,
169
+ modal_version/_version_generated.py,sha256=7az25tIC4XVoFx2ZmjvyyB9cNegVVaQwA0GmeibpAwY,149
170
+ modal-0.72.26.dist-info/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
171
+ modal-0.72.26.dist-info/METADATA,sha256=SeUSgzEO5mT0B4alBAUQBw3DelGIOt6MWgM_24SFPcE,2329
172
+ modal-0.72.26.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
173
+ modal-0.72.26.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
174
+ modal-0.72.26.dist-info/top_level.txt,sha256=1nvYbOSIKcmU50fNrpnQnrrOpj269ei3LzgB6j9xGqg,64
175
+ modal-0.72.26.dist-info/RECORD,,
modal_proto/api.proto CHANGED
@@ -2223,6 +2223,13 @@ message Sandbox {
2223
2223
  NetworkAccess network_access = 22;
2224
2224
 
2225
2225
  optional string proxy_id = 23;
2226
+
2227
+ // Enable memory snapshots.
2228
+ bool enable_memory_snapshot = 24;
2229
+
2230
+ // Used to pin gVisor version for memory-snapshottable sandboxes.
2231
+ // This field is set by the server, not the client.
2232
+ optional uint32 snapshot_version = 25;
2226
2233
  }
2227
2234
 
2228
2235
  message SandboxCreateRequest {
@@ -2287,6 +2294,16 @@ message SandboxListResponse {
2287
2294
  repeated SandboxInfo sandboxes = 1;
2288
2295
  }
2289
2296
 
2297
+ message SandboxRestoreRequest {
2298
+ string app_id = 1 [ (modal.options.audit_target_attr) = true ];
2299
+ string snapshot_id = 2;
2300
+ string environment_name = 3;
2301
+ }
2302
+
2303
+ message SandboxRestoreResponse {
2304
+ string sandbox_id = 1;
2305
+ }
2306
+
2290
2307
  message SandboxSnapshotFsRequest {
2291
2308
  string sandbox_id = 1;
2292
2309
  float timeout = 2;
@@ -2299,6 +2316,23 @@ message SandboxSnapshotFsResponse {
2299
2316
  ImageMetadata image_metadata = 3;
2300
2317
  }
2301
2318
 
2319
+ message SandboxSnapshotRequest {
2320
+ string sandbox_id = 1;
2321
+ }
2322
+
2323
+ message SandboxSnapshotResponse {
2324
+ string snapshot_id = 1;
2325
+ }
2326
+
2327
+ message SandboxSnapshotWaitRequest {
2328
+ string snapshot_id = 1;
2329
+ float timeout = 2;
2330
+ }
2331
+
2332
+ message SandboxSnapshotWaitResponse {
2333
+ GenericResult result = 1;
2334
+ }
2335
+
2302
2336
  message SandboxStdinWriteRequest {
2303
2337
  string sandbox_id = 1;
2304
2338
  bytes input = 2;
@@ -2921,7 +2955,10 @@ service ModalClient {
2921
2955
  rpc SandboxGetTaskId(SandboxGetTaskIdRequest) returns (SandboxGetTaskIdResponse); // needed for modal container exec
2922
2956
  rpc SandboxGetTunnels(SandboxGetTunnelsRequest) returns (SandboxGetTunnelsResponse);
2923
2957
  rpc SandboxList(SandboxListRequest) returns (SandboxListResponse);
2958
+ rpc SandboxRestore(SandboxRestoreRequest) returns (SandboxRestoreResponse);
2959
+ rpc SandboxSnapshot(SandboxSnapshotRequest) returns (SandboxSnapshotResponse);
2924
2960
  rpc SandboxSnapshotFs(SandboxSnapshotFsRequest) returns (SandboxSnapshotFsResponse);
2961
+ rpc SandboxSnapshotWait(SandboxSnapshotWaitRequest) returns (SandboxSnapshotWaitResponse);
2925
2962
  rpc SandboxStdinWrite(SandboxStdinWriteRequest) returns (SandboxStdinWriteResponse);
2926
2963
  rpc SandboxTagsSet(SandboxTagsSetRequest) returns (google.protobuf.Empty);
2927
2964
  rpc SandboxTerminate(SandboxTerminateRequest) returns (SandboxTerminateResponse);
modal_proto/api_grpc.py CHANGED
@@ -410,10 +410,22 @@ class ModalClientBase(abc.ABC):
410
410
  async def SandboxList(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxListRequest, modal_proto.api_pb2.SandboxListResponse]') -> None:
411
411
  pass
412
412
 
413
+ @abc.abstractmethod
414
+ async def SandboxRestore(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxRestoreRequest, modal_proto.api_pb2.SandboxRestoreResponse]') -> None:
415
+ pass
416
+
417
+ @abc.abstractmethod
418
+ async def SandboxSnapshot(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxSnapshotRequest, modal_proto.api_pb2.SandboxSnapshotResponse]') -> None:
419
+ pass
420
+
413
421
  @abc.abstractmethod
414
422
  async def SandboxSnapshotFs(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxSnapshotFsRequest, modal_proto.api_pb2.SandboxSnapshotFsResponse]') -> None:
415
423
  pass
416
424
 
425
+ @abc.abstractmethod
426
+ async def SandboxSnapshotWait(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxSnapshotWaitRequest, modal_proto.api_pb2.SandboxSnapshotWaitResponse]') -> None:
427
+ pass
428
+
417
429
  @abc.abstractmethod
418
430
  async def SandboxStdinWrite(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxStdinWriteRequest, modal_proto.api_pb2.SandboxStdinWriteResponse]') -> None:
419
431
  pass
@@ -1152,12 +1164,30 @@ class ModalClientBase(abc.ABC):
1152
1164
  modal_proto.api_pb2.SandboxListRequest,
1153
1165
  modal_proto.api_pb2.SandboxListResponse,
1154
1166
  ),
1167
+ '/modal.client.ModalClient/SandboxRestore': grpclib.const.Handler(
1168
+ self.SandboxRestore,
1169
+ grpclib.const.Cardinality.UNARY_UNARY,
1170
+ modal_proto.api_pb2.SandboxRestoreRequest,
1171
+ modal_proto.api_pb2.SandboxRestoreResponse,
1172
+ ),
1173
+ '/modal.client.ModalClient/SandboxSnapshot': grpclib.const.Handler(
1174
+ self.SandboxSnapshot,
1175
+ grpclib.const.Cardinality.UNARY_UNARY,
1176
+ modal_proto.api_pb2.SandboxSnapshotRequest,
1177
+ modal_proto.api_pb2.SandboxSnapshotResponse,
1178
+ ),
1155
1179
  '/modal.client.ModalClient/SandboxSnapshotFs': grpclib.const.Handler(
1156
1180
  self.SandboxSnapshotFs,
1157
1181
  grpclib.const.Cardinality.UNARY_UNARY,
1158
1182
  modal_proto.api_pb2.SandboxSnapshotFsRequest,
1159
1183
  modal_proto.api_pb2.SandboxSnapshotFsResponse,
1160
1184
  ),
1185
+ '/modal.client.ModalClient/SandboxSnapshotWait': grpclib.const.Handler(
1186
+ self.SandboxSnapshotWait,
1187
+ grpclib.const.Cardinality.UNARY_UNARY,
1188
+ modal_proto.api_pb2.SandboxSnapshotWaitRequest,
1189
+ modal_proto.api_pb2.SandboxSnapshotWaitResponse,
1190
+ ),
1161
1191
  '/modal.client.ModalClient/SandboxStdinWrite': grpclib.const.Handler(
1162
1192
  self.SandboxStdinWrite,
1163
1193
  grpclib.const.Cardinality.UNARY_UNARY,
@@ -1974,12 +2004,30 @@ class ModalClientStub:
1974
2004
  modal_proto.api_pb2.SandboxListRequest,
1975
2005
  modal_proto.api_pb2.SandboxListResponse,
1976
2006
  )
2007
+ self.SandboxRestore = grpclib.client.UnaryUnaryMethod(
2008
+ channel,
2009
+ '/modal.client.ModalClient/SandboxRestore',
2010
+ modal_proto.api_pb2.SandboxRestoreRequest,
2011
+ modal_proto.api_pb2.SandboxRestoreResponse,
2012
+ )
2013
+ self.SandboxSnapshot = grpclib.client.UnaryUnaryMethod(
2014
+ channel,
2015
+ '/modal.client.ModalClient/SandboxSnapshot',
2016
+ modal_proto.api_pb2.SandboxSnapshotRequest,
2017
+ modal_proto.api_pb2.SandboxSnapshotResponse,
2018
+ )
1977
2019
  self.SandboxSnapshotFs = grpclib.client.UnaryUnaryMethod(
1978
2020
  channel,
1979
2021
  '/modal.client.ModalClient/SandboxSnapshotFs',
1980
2022
  modal_proto.api_pb2.SandboxSnapshotFsRequest,
1981
2023
  modal_proto.api_pb2.SandboxSnapshotFsResponse,
1982
2024
  )
2025
+ self.SandboxSnapshotWait = grpclib.client.UnaryUnaryMethod(
2026
+ channel,
2027
+ '/modal.client.ModalClient/SandboxSnapshotWait',
2028
+ modal_proto.api_pb2.SandboxSnapshotWaitRequest,
2029
+ modal_proto.api_pb2.SandboxSnapshotWaitResponse,
2030
+ )
1983
2031
  self.SandboxStdinWrite = grpclib.client.UnaryUnaryMethod(
1984
2032
  channel,
1985
2033
  '/modal.client.ModalClient/SandboxStdinWrite',