modal 1.0.1.dev4__py3-none-any.whl → 1.0.2__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/_functions.py +40 -10
- modal/_output.py +15 -6
- modal/_utils/bytes_io_segment_payload.py +23 -5
- modal/_utils/time_utils.py +15 -0
- modal/cli/app.py +4 -2
- modal/cli/cluster.py +2 -1
- modal/cli/container.py +2 -1
- modal/cli/dict.py +2 -1
- modal/cli/network_file_system.py +2 -1
- modal/cli/queues.py +2 -1
- modal/cli/secret.py +2 -1
- modal/cli/utils.py +5 -15
- modal/cli/volume.py +4 -3
- modal/client.pyi +2 -10
- modal/exception.py +2 -0
- modal/functions.pyi +6 -6
- modal/image.py +38 -16
- modal/sandbox.py +2 -1
- modal/volume.py +30 -15
- modal/volume.pyi +2 -2
- {modal-1.0.1.dev4.dist-info → modal-1.0.2.dist-info}/METADATA +1 -1
- {modal-1.0.1.dev4.dist-info → modal-1.0.2.dist-info}/RECORD +30 -29
- modal_proto/api.proto +3 -0
- modal_proto/api_pb2.py +374 -374
- modal_proto/api_pb2.pyi +16 -3
- modal_version/__init__.py +1 -1
- {modal-1.0.1.dev4.dist-info → modal-1.0.2.dist-info}/WHEEL +0 -0
- {modal-1.0.1.dev4.dist-info → modal-1.0.2.dist-info}/entry_points.txt +0 -0
- {modal-1.0.1.dev4.dist-info → modal-1.0.2.dist-info}/licenses/LICENSE +0 -0
- {modal-1.0.1.dev4.dist-info → modal-1.0.2.dist-info}/top_level.txt +0 -0
modal/volume.py
CHANGED
@@ -38,6 +38,7 @@ from ._utils.async_utils import (
|
|
38
38
|
async_map,
|
39
39
|
async_map_ordered,
|
40
40
|
asyncnullcontext,
|
41
|
+
retry,
|
41
42
|
synchronize_api,
|
42
43
|
)
|
43
44
|
from ._utils.blob_utils import (
|
@@ -375,10 +376,16 @@ class _Volume(_Object, type_prefix="vo"):
|
|
375
376
|
"Please remove the glob `*` suffix."
|
376
377
|
)
|
377
378
|
|
378
|
-
|
379
|
-
|
380
|
-
for
|
381
|
-
|
379
|
+
if self._is_v1:
|
380
|
+
req = api_pb2.VolumeListFilesRequest(volume_id=self.object_id, path=path, recursive=recursive)
|
381
|
+
async for batch in self._client.stub.VolumeListFiles.unary_stream(req):
|
382
|
+
for entry in batch.entries:
|
383
|
+
yield FileEntry._from_proto(entry)
|
384
|
+
else:
|
385
|
+
req = api_pb2.VolumeListFiles2Request(volume_id=self.object_id, path=path, recursive=recursive)
|
386
|
+
async for batch in self._client.stub.VolumeListFiles2.unary_stream(req):
|
387
|
+
for entry in batch.entries:
|
388
|
+
yield FileEntry._from_proto(entry)
|
382
389
|
|
383
390
|
@live_method
|
384
391
|
async def listdir(self, path: str, *, recursive: bool = False) -> list[FileEntry]:
|
@@ -499,7 +506,7 @@ class _Volume(_Object, type_prefix="vo"):
|
|
499
506
|
num_bytes_written = 0
|
500
507
|
|
501
508
|
async with download_semaphore, ClientSessionRegistry.get_session().get(url) as get_response:
|
502
|
-
async for chunk in get_response.content:
|
509
|
+
async for chunk in get_response.content.iter_any():
|
503
510
|
num_chunk_bytes_written = 0
|
504
511
|
|
505
512
|
while num_chunk_bytes_written < len(chunk):
|
@@ -526,8 +533,12 @@ class _Volume(_Object, type_prefix="vo"):
|
|
526
533
|
@live_method
|
527
534
|
async def remove_file(self, path: str, recursive: bool = False) -> None:
|
528
535
|
"""Remove a file or directory from a volume."""
|
529
|
-
|
530
|
-
|
536
|
+
if self._is_v1:
|
537
|
+
req = api_pb2.VolumeRemoveFileRequest(volume_id=self.object_id, path=path, recursive=recursive)
|
538
|
+
await retry_transient_errors(self._client.stub.VolumeRemoveFile, req)
|
539
|
+
else:
|
540
|
+
req = api_pb2.VolumeRemoveFile2Request(volume_id=self.object_id, path=path, recursive=recursive)
|
541
|
+
await retry_transient_errors(self._client.stub.VolumeRemoveFile2, req)
|
531
542
|
|
532
543
|
@live_method
|
533
544
|
async def copy_files(self, src_paths: Sequence[str], dst_path: str) -> None:
|
@@ -825,7 +836,7 @@ class _VolumeUploadContextManager2(_AbstractVolumeUploadContextManager):
|
|
825
836
|
progress_cb: Optional[Callable[..., Any]] = None,
|
826
837
|
force: bool = False,
|
827
838
|
hash_concurrency: int = multiprocessing.cpu_count(),
|
828
|
-
put_concurrency: int =
|
839
|
+
put_concurrency: int = 128,
|
829
840
|
):
|
830
841
|
"""mdmd:hidden"""
|
831
842
|
self._volume_id = volume_id
|
@@ -1010,6 +1021,16 @@ async def _put_missing_blocks(
|
|
1010
1021
|
file_progress.pending_blocks.add(missing_block.block_index)
|
1011
1022
|
task_progress_cb = functools.partial(progress_cb, task_id=file_progress.task_id)
|
1012
1023
|
|
1024
|
+
@retry(n_attempts=5, base_delay=0.5, timeout=None)
|
1025
|
+
async def put_missing_block_attempt(payload: BytesIOSegmentPayload) -> bytes:
|
1026
|
+
with payload.reset_on_error(subtract_progress=True):
|
1027
|
+
async with ClientSessionRegistry.get_session().put(
|
1028
|
+
missing_block.put_url,
|
1029
|
+
data=payload,
|
1030
|
+
) as response:
|
1031
|
+
response.raise_for_status()
|
1032
|
+
return await response.content.read()
|
1033
|
+
|
1013
1034
|
async with put_semaphore:
|
1014
1035
|
with file_spec.source() as source_fp:
|
1015
1036
|
payload = BytesIOSegmentPayload(
|
@@ -1020,13 +1041,7 @@ async def _put_missing_blocks(
|
|
1020
1041
|
chunk_size=256 * 1024,
|
1021
1042
|
progress_report_cb=task_progress_cb,
|
1022
1043
|
)
|
1023
|
-
|
1024
|
-
async with ClientSessionRegistry.get_session().put(
|
1025
|
-
missing_block.put_url,
|
1026
|
-
data=payload,
|
1027
|
-
) as response:
|
1028
|
-
response.raise_for_status()
|
1029
|
-
resp_data = await response.content.read()
|
1044
|
+
resp_data = await put_missing_block_attempt(payload)
|
1030
1045
|
|
1031
1046
|
file_progress.pending_blocks.remove(missing_block.block_index)
|
1032
1047
|
|
modal/volume.pyi
CHANGED
@@ -494,7 +494,7 @@ class _VolumeUploadContextManager2(_AbstractVolumeUploadContextManager):
|
|
494
494
|
progress_cb: typing.Optional[collections.abc.Callable[..., typing.Any]] = None,
|
495
495
|
force: bool = False,
|
496
496
|
hash_concurrency: int = 4,
|
497
|
-
put_concurrency: int =
|
497
|
+
put_concurrency: int = 128,
|
498
498
|
): ...
|
499
499
|
async def __aenter__(self): ...
|
500
500
|
async def __aexit__(self, exc_type, exc_val, exc_tb): ...
|
@@ -534,7 +534,7 @@ class VolumeUploadContextManager2(AbstractVolumeUploadContextManager):
|
|
534
534
|
progress_cb: typing.Optional[collections.abc.Callable[..., typing.Any]] = None,
|
535
535
|
force: bool = False,
|
536
536
|
hash_concurrency: int = 4,
|
537
|
-
put_concurrency: int =
|
537
|
+
put_concurrency: int = 128,
|
538
538
|
): ...
|
539
539
|
def __enter__(self): ...
|
540
540
|
async def __aenter__(self): ...
|
@@ -3,11 +3,11 @@ modal/__main__.py,sha256=sTJcc9EbDuCKSwg3tL6ZckFw9WWdlkXW8mId1IvJCNc,2846
|
|
3
3
|
modal/_clustered_functions.py,sha256=kTf-9YBXY88NutC1akI-gCbvf01RhMPCw-zoOI_YIUE,2700
|
4
4
|
modal/_clustered_functions.pyi,sha256=2aWxN2v5WUnj-R-sk6BzJ-3AvggkQGQjwhtvbDH3pds,777
|
5
5
|
modal/_container_entrypoint.py,sha256=2Zx9O_EMJg0H77EdnC2vGKs6uFMWwbP1NLFf-qYmWmU,28962
|
6
|
-
modal/_functions.py,sha256=
|
6
|
+
modal/_functions.py,sha256=f8MhqxCzqBSUfrR_5uo60p1UHwNmPi_oEdZKDkFv2yw,78874
|
7
7
|
modal/_ipython.py,sha256=TW1fkVOmZL3YYqdS2YlM1hqpf654Yf8ZyybHdBnlhSw,301
|
8
8
|
modal/_location.py,sha256=joiX-0ZeutEUDTrrqLF1GHXCdVLF-rHzstocbMcd_-k,366
|
9
9
|
modal/_object.py,sha256=KzzzZoM41UQUiY9TKOrft9BtZKgjWG_ukdlyLGjB4UY,10758
|
10
|
-
modal/_output.py,sha256=
|
10
|
+
modal/_output.py,sha256=LRM9KroHuR7t5pq8iLYjpFz1sQrHYan2kvRDjT6KAw4,26082
|
11
11
|
modal/_partial_function.py,sha256=wzUo_p8arngumPkM5sNIrZ2DluqJl-Z6w5Ds1jHGlyw,39151
|
12
12
|
modal/_pty.py,sha256=JZfPDDpzqICZqtyPI_oMJf_9w-p_lLNuzHhwhodUXio,1329
|
13
13
|
modal/_resolver.py,sha256=-nolqj_p_mx5czVYj1Mazh2IQWpSMrTOGughVJqYfo8,7579
|
@@ -22,7 +22,7 @@ modal/app.py,sha256=NZ_rJ9TuMfiNiLg8-gOFgufD5flGtXWPHOZI0gdD3hE,46585
|
|
22
22
|
modal/app.pyi,sha256=4-b_vbe3lNAqQPcMRpQCEDsE1zsVkQRJGUql9B7HvbM,22659
|
23
23
|
modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
|
24
24
|
modal/client.py,sha256=OwISJvkgMb-rHm9Gc4i-7YcDgGiZgwJ7F_PzwZH7a6Q,16847
|
25
|
-
modal/client.pyi,sha256=
|
25
|
+
modal/client.pyi,sha256=ewvDRpvkk-WVUWc7vPUKhANVIxoacP58o7JNh3ohaE8,8381
|
26
26
|
modal/cloud_bucket_mount.py,sha256=YOe9nnvSr4ZbeCn587d7_VhE9IioZYRvF9VYQTQux08,5914
|
27
27
|
modal/cloud_bucket_mount.pyi,sha256=30T3K1a89l6wzmEJ_J9iWv9SknoGqaZDx59Xs-ZQcmk,1607
|
28
28
|
modal/cls.py,sha256=dBbeARwOWftlKd1cwtM0cHFtQWSWkwVXwVmOV4w0SyI,37907
|
@@ -34,14 +34,14 @@ modal/dict.py,sha256=w-Zuk3FXuwkyxKuF1ry86S8j2cvoC8-u4Ga0h-GfV1s,14324
|
|
34
34
|
modal/dict.pyi,sha256=RBaQyOd1ABRNN7vIf5L_rv94y7Kq5Qn9IlKHSr4j8N0,8120
|
35
35
|
modal/environments.py,sha256=gHFNLG78bqgizpQ4w_elz27QOqmcgAonFsmLs7NjUJ4,6804
|
36
36
|
modal/environments.pyi,sha256=4HbI0kywveaUVI7HqDtZ4HphCTGXYi_wie2hz87up5A,3425
|
37
|
-
modal/exception.py,sha256=
|
37
|
+
modal/exception.py,sha256=2pgq-j8JP-tB3yU2VmYOzn9CsynU9_h8IU_MgqgKegM,5352
|
38
38
|
modal/file_io.py,sha256=lcMs_E9Xfm0YX1t9U2wNIBPnqHRxmImqjLW1GHqVmyg,20945
|
39
39
|
modal/file_io.pyi,sha256=oB7x-rKq7bmm8cA7Z7W9C9yeko7KK9m9i5GidFnkGK4,9569
|
40
40
|
modal/file_pattern_matcher.py,sha256=wov-otB5M1oTdrYDtR2_VgacYin2srdtAP4McA1Cqzw,6516
|
41
41
|
modal/functions.py,sha256=kcNHvqeGBxPI7Cgd57NIBBghkfbeFJzXO44WW0jSmao,325
|
42
|
-
modal/functions.pyi,sha256=
|
42
|
+
modal/functions.pyi,sha256=iqdp5ixtOOlm8bF-QYbD_G8VKqSRt_AVLT7AWjpn6pQ,16236
|
43
43
|
modal/gpu.py,sha256=Kbhs_u49FaC2Zi0TjCdrpstpRtT5eZgecynmQi5IZVE,6752
|
44
|
-
modal/image.py,sha256
|
44
|
+
modal/image.py,sha256=-ia4ELkIh4sxOSqdYETAPV8EEb58Nue6DLdAxhM2C_Y,92687
|
45
45
|
modal/image.pyi,sha256=2xjB6XOZDtm_chDdd90UoIj8pnDt5hCg6bOmu5fNaA4,25625
|
46
46
|
modal/io_streams.py,sha256=YDZVQSDv05DeXg5TwcucC9Rj5hQBx2GXdluan9rIUpw,15467
|
47
47
|
modal/io_streams.pyi,sha256=1UK6kWLREASQfq-wL9wSp5iqjLU0egRZPDn4LXs1PZY,5136
|
@@ -65,7 +65,7 @@ modal/retries.py,sha256=IvNLDM0f_GLUDD5VgEDoN09C88yoxSrCquinAuxT1Sc,5205
|
|
65
65
|
modal/runner.py,sha256=nvpnU7U2O5d2WqME1QUTTwu-NkSLLwblytlGk7HXPAw,24152
|
66
66
|
modal/runner.pyi,sha256=1AnEu48SUPnLWp3raQ2zJCV5lc85EGLkX2nL0bHWaB0,5162
|
67
67
|
modal/running_app.py,sha256=v61mapYNV1-O-Uaho5EfJlryMLvIT9We0amUOSvSGx8,1188
|
68
|
-
modal/sandbox.py,sha256=
|
68
|
+
modal/sandbox.py,sha256=zUldeCA98GLObLT1N9v1IILomcPYeLrQJRCRUMTtbLE,35734
|
69
69
|
modal/sandbox.pyi,sha256=stxwoLcyQNToPISj6umlU8sDUgqzeooLdMs3BwIr740,28195
|
70
70
|
modal/schedule.py,sha256=ewa7hb9NKYnoeSCW2PujZAbGGJL8btX6X3KalCFpc_M,2626
|
71
71
|
modal/scheduler_placement.py,sha256=BAREdOY5HzHpzSBqt6jDVR6YC_jYfHMVqOzkyqQfngU,1235
|
@@ -78,8 +78,8 @@ modal/snapshot.pyi,sha256=dIEBdTPb7O3VwkQ8TMPjfyU17RLuS9i0DnACxxHy8X4,676
|
|
78
78
|
modal/stream_type.py,sha256=A6320qoAAWhEfwOCZfGtymQTu5AfLfJXXgARqooTPvY,417
|
79
79
|
modal/token_flow.py,sha256=0_4KabXKsuE4OXTJ1OuLOtA-b1sesShztMZkkRFK7tA,7605
|
80
80
|
modal/token_flow.pyi,sha256=ILbRv6JsZq-jK8jcJM7eB74e0PsbzwBm7hyPcV9lBlQ,2121
|
81
|
-
modal/volume.py,sha256=
|
82
|
-
modal/volume.pyi,sha256=
|
81
|
+
modal/volume.py,sha256=LO8hYt2y0BOXsWzjMUUfOhSxBs7eILgTP5Lvi0IRjxM,44092
|
82
|
+
modal/volume.pyi,sha256=fM1RRKz521eIzM3Cd7osAhQ3UQEboQEjXWLQKerjSzY,21117
|
83
83
|
modal/_runtime/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
|
84
84
|
modal/_runtime/asgi.py,sha256=_2xSTsDD27Cit7xnMs4lzkJA2wzer2_N4Oa3BkXFzVA,22521
|
85
85
|
modal/_runtime/container_io_manager.py,sha256=6j0jO2-s9ShckM4SK45OapoQxWW9HQwQjFaBkXPJPwU,44763
|
@@ -93,7 +93,7 @@ modal/_utils/__init__.py,sha256=waLjl5c6IPDhSsdWAm9Bji4e2PVxamYABKAze6CHVXY,28
|
|
93
93
|
modal/_utils/app_utils.py,sha256=88BT4TPLWfYAQwKTHcyzNQRHg8n9B-QE2UyJs96iV-0,108
|
94
94
|
modal/_utils/async_utils.py,sha256=zjdtdA54zvNL_RuREmN5NWFhhiRcNh8z0jT2rBc5RgY,28001
|
95
95
|
modal/_utils/blob_utils.py,sha256=IexC2Jbtqp_Tkmy62ayfgzTYte0UPCNufB_v-DO21g8,18585
|
96
|
-
modal/_utils/bytes_io_segment_payload.py,sha256=
|
96
|
+
modal/_utils/bytes_io_segment_payload.py,sha256=vaXPq8b52-x6G2hwE7SrjS58pg_aRm7gV3bn3yjmTzQ,4261
|
97
97
|
modal/_utils/deprecation.py,sha256=EXP1beU4pmEqEzWMLw6E3kUfNfpmNA_VOp6i0EHi93g,4856
|
98
98
|
modal/_utils/docker_utils.py,sha256=h1uETghR40mp_y3fSWuZAfbIASH1HMzuphJHghAL6DU,3722
|
99
99
|
modal/_utils/function_utils.py,sha256=bhrjyOHPPXm6fAyJx3bzI1Yh56j6xh8eeMSFKdAWrHQ,26978
|
@@ -110,6 +110,7 @@ modal/_utils/package_utils.py,sha256=LcL2olGN4xaUzu2Tbv-C-Ft9Qp6bsLxEfETOAVd-mjU
|
|
110
110
|
modal/_utils/pattern_utils.py,sha256=ZUffaECfe2iYBhH6cvCB-0-UWhmEBTZEl_TwG_So3ag,6714
|
111
111
|
modal/_utils/rand_pb_testing.py,sha256=mmVPk1rZldHwHZx0DnHTuHQlRLAiiAYdxjwEJpxvT9c,3900
|
112
112
|
modal/_utils/shell_utils.py,sha256=hWHzv730Br2Xyj6cGPiMZ-198Z3RZuOu3pDXhFSZ22c,2157
|
113
|
+
modal/_utils/time_utils.py,sha256=THhRz59gez8jNV1B_eNS2gJJVPPGQSFVlr1esBGQoqg,494
|
113
114
|
modal/_vendor/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
|
114
115
|
modal/_vendor/a2wsgi_wsgi.py,sha256=Q1AsjpV_Q_vzQsz_cSqmP9jWzsGsB-ARFU6vpQYml8k,21878
|
115
116
|
modal/_vendor/cloudpickle.py,sha256=avxOIgNKqL9KyPNuIOVQzBm0D1l9ipeB4RrcUMUGmeQ,55216
|
@@ -117,23 +118,23 @@ modal/_vendor/tblib.py,sha256=g1O7QUDd3sDoLd8YPFltkXkih7r_fyZOjgmGuligv3s,9722
|
|
117
118
|
modal/cli/__init__.py,sha256=6FRleWQxBDT19y7OayO4lBOzuL6Bs9r0rLINYYYbHwQ,769
|
118
119
|
modal/cli/_download.py,sha256=tV8JFkncTtQKh85bSguQg6AW5aRRlynf-rvyN7ruigc,4337
|
119
120
|
modal/cli/_traceback.py,sha256=4ywtmFcmPnY3tqb4-3fA061N2tRiM01xs8fSagtkwhE,7293
|
120
|
-
modal/cli/app.py,sha256=
|
121
|
-
modal/cli/cluster.py,sha256=
|
121
|
+
modal/cli/app.py,sha256=Q4yoPGuNqdWMwIIbjJQflp9RvmgNQQRWBNhCg_Cvi9g,7800
|
122
|
+
modal/cli/cluster.py,sha256=nmG3flRs_1VKgJ1Q6nHnt_WpuWDWkGp2He8wA9HeGsQ,3141
|
122
123
|
modal/cli/config.py,sha256=QvFsqO4eUOtI7d_pQAOAyfq_ZitjhPtav3C6GIDQcZM,1680
|
123
|
-
modal/cli/container.py,sha256=
|
124
|
-
modal/cli/dict.py,sha256=
|
124
|
+
modal/cli/container.py,sha256=mRYRCGsP6DiWzm3Az4W5Fcc5Tbl58zOIc62HDzS9TvQ,3703
|
125
|
+
modal/cli/dict.py,sha256=012PvKz9YbooE122tWQTcsb9a4lpw5O38DoFNhykcPM,4628
|
125
126
|
modal/cli/entry_point.py,sha256=Ytpsy0MTLQC1RSClI0wNhCbiy6ecPO8555PMmsrxoSc,4377
|
126
127
|
modal/cli/environment.py,sha256=Ayddkiq9jdj3XYDJ8ZmUqFpPPH8xajYlbexRkzGtUcg,4334
|
127
128
|
modal/cli/import_refs.py,sha256=pmzY0hpexx6DtvobNmCOvRqEdS9IriEP4BpMw1TIy2w,13911
|
128
129
|
modal/cli/launch.py,sha256=0_sBu6bv2xJEPWi-rbGS6Ri9ggnkWQvrGlgpYSUBMyY,3097
|
129
|
-
modal/cli/network_file_system.py,sha256=
|
130
|
+
modal/cli/network_file_system.py,sha256=DoIdY8I42DjFdTtaYuRKNm7GC6vY0QtA4mk6694fbuU,7983
|
130
131
|
modal/cli/profile.py,sha256=0TYhgRSGUvQZ5LH9nkl6iZllEvAjDniES264dE57wOM,3201
|
131
|
-
modal/cli/queues.py,sha256=
|
132
|
+
modal/cli/queues.py,sha256=1OzC9HdCkbNz6twF3US4FZmIhuVRQ01GOfBY42ux61A,4533
|
132
133
|
modal/cli/run.py,sha256=DPa-yQ9o7vjqwvs_TAOvVJxS51yVn__ZGCnbkORL37g,23972
|
133
|
-
modal/cli/secret.py,sha256=
|
134
|
+
modal/cli/secret.py,sha256=oLFEPZoyyeMUKPaJZ9JKKl5mfkQU80DGF9p0atotqig,5002
|
134
135
|
modal/cli/token.py,sha256=mxSgOWakXG6N71hQb1ko61XAR9ZGkTMZD-Txn7gmTac,1924
|
135
|
-
modal/cli/utils.py,sha256=
|
136
|
-
modal/cli/volume.py,sha256=
|
136
|
+
modal/cli/utils.py,sha256=9Q7DIUX78-c19zBQNA7EtkgqIFatvHWUVGHwUIeBX_0,3366
|
137
|
+
modal/cli/volume.py,sha256=_QYbB52LLD3Q8eKHFn7bW3Xu0il5A4UkwjjU63hKjEQ,10534
|
137
138
|
modal/cli/programs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
|
138
139
|
modal/cli/programs/run_jupyter.py,sha256=44Lpvqk2l3hH-uOkmAOzw60NEsfB5uaRDWDKVshvQhs,2682
|
139
140
|
modal/cli/programs/vscode.py,sha256=KbTAaIXyQBVCDXxXjmBHmKpgXkUw0q4R4KkJvUjCYgk,3380
|
@@ -146,7 +147,7 @@ modal/requirements/2024.10.txt,sha256=qD-5cVIVM9wXesJ6JC89Ew-3m2KjEElUz3jaw_MddR
|
|
146
147
|
modal/requirements/PREVIEW.txt,sha256=qD-5cVIVM9wXesJ6JC89Ew-3m2KjEElUz3jaw_MddRo,296
|
147
148
|
modal/requirements/README.md,sha256=9tK76KP0Uph7O0M5oUgsSwEZDj5y-dcUPsnpR0Sc-Ik,854
|
148
149
|
modal/requirements/base-images.json,sha256=57vMSqzMbLBxw5tFWSaMiIkkVEps4JfX5PAtXGnkS4U,740
|
149
|
-
modal-1.0.
|
150
|
+
modal-1.0.2.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
|
150
151
|
modal_docs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
|
151
152
|
modal_docs/gen_cli_docs.py,sha256=c1yfBS_x--gL5bs0N4ihMwqwX8l3IBWSkBAKNNIi6bQ,3801
|
152
153
|
modal_docs/gen_reference_docs.py,sha256=d_CQUGQ0rfw28u75I2mov9AlS773z9rG40-yq5o7g2U,6359
|
@@ -154,10 +155,10 @@ modal_docs/mdmd/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,2
|
|
154
155
|
modal_docs/mdmd/mdmd.py,sha256=Irx49MCCTlBOP4FBdLR--JrpA3-WhsVeriq0LGgsRic,6232
|
155
156
|
modal_docs/mdmd/signatures.py,sha256=XJaZrK7Mdepk5fdX51A8uENiLFNil85Ud0d4MH8H5f0,3218
|
156
157
|
modal_proto/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
|
157
|
-
modal_proto/api.proto,sha256=
|
158
|
+
modal_proto/api.proto,sha256=TZU4O7rl6_3p0kPhwtCFpUzF2ev7nogfT_dJia1q0YA,95957
|
158
159
|
modal_proto/api_grpc.py,sha256=iY5o_Tm4VDP-Wa1JgA_NpQa_Y-4FYB_RN9wdSUExjwI,117469
|
159
|
-
modal_proto/api_pb2.py,sha256=
|
160
|
-
modal_proto/api_pb2.pyi,sha256=
|
160
|
+
modal_proto/api_pb2.py,sha256=05O5ZucslpXNOq5JMbC8HkqYl4YNJt_h6fqHQuK9yXw,338105
|
161
|
+
modal_proto/api_pb2.pyi,sha256=u-YdDR8e6cjSSID-wRuCUeOiEZuhVP9XNY_pTlrC820,462457
|
161
162
|
modal_proto/api_pb2_grpc.py,sha256=NL5prOS_hh_pA1hVvQP_ZRE1w49N-PR8iNPRZ65i6nA,254089
|
162
163
|
modal_proto/api_pb2_grpc.pyi,sha256=Xxgdcnv1mBnu5_AQxJ6fo0yz7GnqVU0HVObNfZWHVfM,59440
|
163
164
|
modal_proto/modal_api_grpc.py,sha256=0ir2lnwT3-IgPcAWw98yWMAiqZPkjvNro9UBk4u8hnk,17763
|
@@ -169,10 +170,10 @@ modal_proto/options_pb2.pyi,sha256=l7DBrbLO7q3Ir-XDkWsajm0d0TQqqrfuX54i4BMpdQg,1
|
|
169
170
|
modal_proto/options_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
170
171
|
modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0yJSI,247
|
171
172
|
modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
172
|
-
modal_version/__init__.py,sha256=
|
173
|
+
modal_version/__init__.py,sha256=87JrO7uCroV09Gi_eqSkDSdOw3G7Zr7cvobWWqbfDWw,115
|
173
174
|
modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
|
174
|
-
modal-1.0.
|
175
|
-
modal-1.0.
|
176
|
-
modal-1.0.
|
177
|
-
modal-1.0.
|
178
|
-
modal-1.0.
|
175
|
+
modal-1.0.2.dist-info/METADATA,sha256=wzmoFswDleRkVcnIxz3TT-z-QAN-hhjmbWbNd_oOrwo,2449
|
176
|
+
modal-1.0.2.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
|
177
|
+
modal-1.0.2.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
|
178
|
+
modal-1.0.2.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
|
179
|
+
modal-1.0.2.dist-info/RECORD,,
|
modal_proto/api.proto
CHANGED
@@ -2153,6 +2153,7 @@ message PTYInfo {
|
|
2153
2153
|
message PortSpec {
|
2154
2154
|
uint32 port = 1;
|
2155
2155
|
bool unencrypted = 2;
|
2156
|
+
optional string tunnel_type = 3;
|
2156
2157
|
}
|
2157
2158
|
|
2158
2159
|
message PortSpecs {
|
@@ -2586,6 +2587,7 @@ message SandboxWaitResponse {
|
|
2586
2587
|
message Schedule {
|
2587
2588
|
message Cron {
|
2588
2589
|
string cron_string = 1;
|
2590
|
+
string timezone = 2;
|
2589
2591
|
}
|
2590
2592
|
message Period {
|
2591
2593
|
int32 years = 1;
|
@@ -2876,6 +2878,7 @@ message TunnelData {
|
|
2876
2878
|
message TunnelStartRequest {
|
2877
2879
|
uint32 port = 1;
|
2878
2880
|
bool unencrypted = 2;
|
2881
|
+
optional string tunnel_type = 3;
|
2879
2882
|
}
|
2880
2883
|
|
2881
2884
|
message TunnelStartResponse {
|