modal 0.68.11__py3-none-any.whl → 0.68.24__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/__init__.py +2 -0
- modal/_ipython.py +3 -13
- modal/_runtime/asgi.py +4 -0
- modal/_runtime/user_code_imports.py +13 -18
- modal/_utils/blob_utils.py +27 -92
- modal/_utils/bytes_io_segment_payload.py +97 -0
- modal/_utils/hash_utils.py +38 -9
- modal/_utils/http_utils.py +19 -10
- modal/_utils/{pattern_matcher.py → pattern_utils.py} +1 -70
- modal/_utils/shell_utils.py +11 -5
- modal/cli/run.py +25 -5
- modal/client.py +1 -1
- modal/client.pyi +2 -2
- modal/file_pattern_matcher.py +121 -0
- modal/functions.pyi +6 -6
- modal/image.py +88 -8
- modal/image.pyi +20 -4
- modal/mount.py +49 -9
- modal/mount.pyi +19 -4
- modal/network_file_system.py +4 -1
- modal/partial_function.py +8 -0
- modal/partial_function.pyi +8 -0
- modal/volume.py +5 -1
- {modal-0.68.11.dist-info → modal-0.68.24.dist-info}/METADATA +1 -1
- {modal-0.68.11.dist-info → modal-0.68.24.dist-info}/RECORD +33 -31
- modal_proto/api.proto +8 -0
- modal_proto/api_pb2.py +781 -745
- modal_proto/api_pb2.pyi +65 -3
- modal_version/_version_generated.py +1 -1
- {modal-0.68.11.dist-info → modal-0.68.24.dist-info}/LICENSE +0 -0
- {modal-0.68.11.dist-info → modal-0.68.24.dist-info}/WHEEL +0 -0
- {modal-0.68.11.dist-info → modal-0.68.24.dist-info}/entry_points.txt +0 -0
- {modal-0.68.11.dist-info → modal-0.68.24.dist-info}/top_level.txt +0 -0
modal/mount.pyi
CHANGED
@@ -35,7 +35,7 @@ class _MountFile(_MountEntry):
|
|
35
35
|
class _MountDir(_MountEntry):
|
36
36
|
local_dir: pathlib.Path
|
37
37
|
remote_path: pathlib.PurePosixPath
|
38
|
-
|
38
|
+
ignore: typing.Callable[[pathlib.Path], bool]
|
39
39
|
recursive: bool
|
40
40
|
|
41
41
|
def description(self): ...
|
@@ -46,18 +46,19 @@ class _MountDir(_MountEntry):
|
|
46
46
|
self,
|
47
47
|
local_dir: pathlib.Path,
|
48
48
|
remote_path: pathlib.PurePosixPath,
|
49
|
-
|
49
|
+
ignore: typing.Callable[[pathlib.Path], bool],
|
50
50
|
recursive: bool,
|
51
51
|
) -> None: ...
|
52
52
|
def __repr__(self): ...
|
53
53
|
def __eq__(self, other): ...
|
54
54
|
|
55
55
|
def module_mount_condition(module_base: pathlib.Path): ...
|
56
|
+
def module_mount_ignore_condition(module_base: pathlib.Path): ...
|
56
57
|
|
57
58
|
class _MountedPythonModule(_MountEntry):
|
58
59
|
module_name: str
|
59
60
|
remote_dir: typing.Union[pathlib.PurePosixPath, str]
|
60
|
-
|
61
|
+
ignore: typing.Optional[typing.Callable[[pathlib.Path], bool]]
|
61
62
|
|
62
63
|
def description(self) -> str: ...
|
63
64
|
def _proxy_entries(self) -> list[_MountEntry]: ...
|
@@ -68,7 +69,7 @@ class _MountedPythonModule(_MountEntry):
|
|
68
69
|
self,
|
69
70
|
module_name: str,
|
70
71
|
remote_dir: typing.Union[pathlib.PurePosixPath, str] = "/root",
|
71
|
-
|
72
|
+
ignore: typing.Optional[typing.Callable[[pathlib.Path], bool]] = None,
|
72
73
|
) -> None: ...
|
73
74
|
def __repr__(self): ...
|
74
75
|
def __eq__(self, other): ...
|
@@ -90,6 +91,12 @@ class _Mount(modal.object._Object):
|
|
90
91
|
def _hydrate_metadata(self, handle_metadata: typing.Optional[google.protobuf.message.Message]): ...
|
91
92
|
def _top_level_paths(self) -> list[tuple[pathlib.Path, pathlib.PurePosixPath]]: ...
|
92
93
|
def is_local(self) -> bool: ...
|
94
|
+
@staticmethod
|
95
|
+
def _add_local_dir(
|
96
|
+
local_path: pathlib.Path,
|
97
|
+
remote_path: pathlib.Path,
|
98
|
+
ignore: typing.Union[typing.Sequence[str], typing.Callable[[pathlib.Path], bool]] = [],
|
99
|
+
): ...
|
93
100
|
def add_local_dir(
|
94
101
|
self,
|
95
102
|
local_path: typing.Union[str, pathlib.Path],
|
@@ -129,6 +136,7 @@ class _Mount(modal.object._Object):
|
|
129
136
|
*module_names: str,
|
130
137
|
remote_dir: typing.Union[str, pathlib.PurePosixPath] = "/root",
|
131
138
|
condition: typing.Optional[typing.Callable[[str], bool]] = None,
|
139
|
+
ignore: typing.Union[typing.Sequence[str], typing.Callable[[pathlib.Path], bool], None] = None,
|
132
140
|
) -> _Mount: ...
|
133
141
|
@staticmethod
|
134
142
|
def from_name(label: str, namespace=1, environment_name: typing.Optional[str] = None) -> _Mount: ...
|
@@ -165,6 +173,12 @@ class Mount(modal.object.Object):
|
|
165
173
|
def _hydrate_metadata(self, handle_metadata: typing.Optional[google.protobuf.message.Message]): ...
|
166
174
|
def _top_level_paths(self) -> list[tuple[pathlib.Path, pathlib.PurePosixPath]]: ...
|
167
175
|
def is_local(self) -> bool: ...
|
176
|
+
@staticmethod
|
177
|
+
def _add_local_dir(
|
178
|
+
local_path: pathlib.Path,
|
179
|
+
remote_path: pathlib.Path,
|
180
|
+
ignore: typing.Union[typing.Sequence[str], typing.Callable[[pathlib.Path], bool]] = [],
|
181
|
+
): ...
|
168
182
|
def add_local_dir(
|
169
183
|
self,
|
170
184
|
local_path: typing.Union[str, pathlib.Path],
|
@@ -214,6 +228,7 @@ class Mount(modal.object.Object):
|
|
214
228
|
*module_names: str,
|
215
229
|
remote_dir: typing.Union[str, pathlib.PurePosixPath] = "/root",
|
216
230
|
condition: typing.Optional[typing.Callable[[str], bool]] = None,
|
231
|
+
ignore: typing.Union[typing.Sequence[str], typing.Callable[[pathlib.Path], bool], None] = None,
|
217
232
|
) -> Mount: ...
|
218
233
|
@staticmethod
|
219
234
|
def from_name(label: str, namespace=1, environment_name: typing.Optional[str] = None) -> Mount: ...
|
modal/network_file_system.py
CHANGED
@@ -245,7 +245,10 @@ class _NetworkFileSystem(_Object, type_prefix="sv"):
|
|
245
245
|
if data_size > LARGE_FILE_LIMIT:
|
246
246
|
progress_task_id = progress_cb(name=remote_path, size=data_size)
|
247
247
|
blob_id = await blob_upload_file(
|
248
|
-
fp,
|
248
|
+
fp,
|
249
|
+
self._client.stub,
|
250
|
+
progress_report_cb=functools.partial(progress_cb, progress_task_id),
|
251
|
+
sha256_hex=sha_hash,
|
249
252
|
)
|
250
253
|
req = api_pb2.SharedVolumePutFileRequest(
|
251
254
|
shared_volume_id=self.object_id,
|
modal/partial_function.py
CHANGED
@@ -275,6 +275,7 @@ def _web_endpoint(
|
|
275
275
|
custom_domains: Optional[
|
276
276
|
Iterable[str]
|
277
277
|
] = None, # Create an endpoint using a custom domain fully-qualified domain name (FQDN).
|
278
|
+
requires_proxy_auth: bool = False, # Require Proxy-Authorization HTTP Headers on requests to the endpoint
|
278
279
|
wait_for_response: bool = True, # DEPRECATED: this must always be True now
|
279
280
|
) -> Callable[[Callable[P, ReturnType]], _PartialFunction[P, ReturnType, ReturnType]]:
|
280
281
|
"""Register a basic web endpoint with this application.
|
@@ -325,6 +326,7 @@ def _web_endpoint(
|
|
325
326
|
requested_suffix=label,
|
326
327
|
async_mode=api_pb2.WEBHOOK_ASYNC_MODE_AUTO,
|
327
328
|
custom_domains=_parse_custom_domains(custom_domains),
|
329
|
+
requires_proxy_auth=requires_proxy_auth,
|
328
330
|
),
|
329
331
|
)
|
330
332
|
|
@@ -336,6 +338,7 @@ def _asgi_app(
|
|
336
338
|
*,
|
337
339
|
label: Optional[str] = None, # Label for created endpoint. Final subdomain will be <workspace>--<label>.modal.run.
|
338
340
|
custom_domains: Optional[Iterable[str]] = None, # Deploy this endpoint on a custom domain.
|
341
|
+
requires_proxy_auth: bool = False, # Require Proxy-Authorization HTTP Headers on requests to the endpoint
|
339
342
|
wait_for_response: bool = True, # DEPRECATED: this must always be True now
|
340
343
|
) -> Callable[[Callable[..., Any]], _PartialFunction]:
|
341
344
|
"""Decorator for registering an ASGI app with a Modal function.
|
@@ -399,6 +402,7 @@ def _asgi_app(
|
|
399
402
|
requested_suffix=label,
|
400
403
|
async_mode=api_pb2.WEBHOOK_ASYNC_MODE_AUTO,
|
401
404
|
custom_domains=_parse_custom_domains(custom_domains),
|
405
|
+
requires_proxy_auth=requires_proxy_auth,
|
402
406
|
),
|
403
407
|
)
|
404
408
|
|
@@ -410,6 +414,7 @@ def _wsgi_app(
|
|
410
414
|
*,
|
411
415
|
label: Optional[str] = None, # Label for created endpoint. Final subdomain will be <workspace>--<label>.modal.run.
|
412
416
|
custom_domains: Optional[Iterable[str]] = None, # Deploy this endpoint on a custom domain.
|
417
|
+
requires_proxy_auth: bool = False, # Require Proxy-Authorization HTTP Headers on requests to the endpoint
|
413
418
|
wait_for_response: bool = True, # DEPRECATED: this must always be True now
|
414
419
|
) -> Callable[[Callable[..., Any]], _PartialFunction]:
|
415
420
|
"""Decorator for registering a WSGI app with a Modal function.
|
@@ -473,6 +478,7 @@ def _wsgi_app(
|
|
473
478
|
requested_suffix=label,
|
474
479
|
async_mode=api_pb2.WEBHOOK_ASYNC_MODE_AUTO,
|
475
480
|
custom_domains=_parse_custom_domains(custom_domains),
|
481
|
+
requires_proxy_auth=requires_proxy_auth,
|
476
482
|
),
|
477
483
|
)
|
478
484
|
|
@@ -485,6 +491,7 @@ def _web_server(
|
|
485
491
|
startup_timeout: float = 5.0, # Maximum number of seconds to wait for the web server to start.
|
486
492
|
label: Optional[str] = None, # Label for created endpoint. Final subdomain will be <workspace>--<label>.modal.run.
|
487
493
|
custom_domains: Optional[Iterable[str]] = None, # Deploy this endpoint on a custom domain.
|
494
|
+
requires_proxy_auth: bool = False, # Require Proxy-Authorization HTTP Headers on requests to the endpoint
|
488
495
|
) -> Callable[[Callable[..., Any]], _PartialFunction]:
|
489
496
|
"""Decorator that registers an HTTP web server inside the container.
|
490
497
|
|
@@ -528,6 +535,7 @@ def _web_server(
|
|
528
535
|
custom_domains=_parse_custom_domains(custom_domains),
|
529
536
|
web_server_port=port,
|
530
537
|
web_server_startup_timeout=startup_timeout,
|
538
|
+
requires_proxy_auth=requires_proxy_auth,
|
531
539
|
),
|
532
540
|
)
|
533
541
|
|
modal/partial_function.pyi
CHANGED
@@ -118,6 +118,7 @@ def _web_endpoint(
|
|
118
118
|
label: typing.Optional[str] = None,
|
119
119
|
docs: bool = False,
|
120
120
|
custom_domains: typing.Optional[collections.abc.Iterable[str]] = None,
|
121
|
+
requires_proxy_auth: bool = False,
|
121
122
|
wait_for_response: bool = True,
|
122
123
|
) -> typing.Callable[[typing.Callable[P, ReturnType]], _PartialFunction[P, ReturnType, ReturnType]]: ...
|
123
124
|
def _asgi_app(
|
@@ -125,6 +126,7 @@ def _asgi_app(
|
|
125
126
|
*,
|
126
127
|
label: typing.Optional[str] = None,
|
127
128
|
custom_domains: typing.Optional[collections.abc.Iterable[str]] = None,
|
129
|
+
requires_proxy_auth: bool = False,
|
128
130
|
wait_for_response: bool = True,
|
129
131
|
) -> typing.Callable[[typing.Callable[..., typing.Any]], _PartialFunction]: ...
|
130
132
|
def _wsgi_app(
|
@@ -132,6 +134,7 @@ def _wsgi_app(
|
|
132
134
|
*,
|
133
135
|
label: typing.Optional[str] = None,
|
134
136
|
custom_domains: typing.Optional[collections.abc.Iterable[str]] = None,
|
137
|
+
requires_proxy_auth: bool = False,
|
135
138
|
wait_for_response: bool = True,
|
136
139
|
) -> typing.Callable[[typing.Callable[..., typing.Any]], _PartialFunction]: ...
|
137
140
|
def _web_server(
|
@@ -140,6 +143,7 @@ def _web_server(
|
|
140
143
|
startup_timeout: float = 5.0,
|
141
144
|
label: typing.Optional[str] = None,
|
142
145
|
custom_domains: typing.Optional[collections.abc.Iterable[str]] = None,
|
146
|
+
requires_proxy_auth: bool = False,
|
143
147
|
) -> typing.Callable[[typing.Callable[..., typing.Any]], _PartialFunction]: ...
|
144
148
|
def _disallow_wrapping_method(f: _PartialFunction, wrapper: str) -> None: ...
|
145
149
|
def _build(
|
@@ -178,6 +182,7 @@ def web_endpoint(
|
|
178
182
|
label: typing.Optional[str] = None,
|
179
183
|
docs: bool = False,
|
180
184
|
custom_domains: typing.Optional[collections.abc.Iterable[str]] = None,
|
185
|
+
requires_proxy_auth: bool = False,
|
181
186
|
wait_for_response: bool = True,
|
182
187
|
) -> typing.Callable[[typing.Callable[P, ReturnType]], PartialFunction[P, ReturnType, ReturnType]]: ...
|
183
188
|
def asgi_app(
|
@@ -185,6 +190,7 @@ def asgi_app(
|
|
185
190
|
*,
|
186
191
|
label: typing.Optional[str] = None,
|
187
192
|
custom_domains: typing.Optional[collections.abc.Iterable[str]] = None,
|
193
|
+
requires_proxy_auth: bool = False,
|
188
194
|
wait_for_response: bool = True,
|
189
195
|
) -> typing.Callable[[typing.Callable[..., typing.Any]], PartialFunction]: ...
|
190
196
|
def wsgi_app(
|
@@ -192,6 +198,7 @@ def wsgi_app(
|
|
192
198
|
*,
|
193
199
|
label: typing.Optional[str] = None,
|
194
200
|
custom_domains: typing.Optional[collections.abc.Iterable[str]] = None,
|
201
|
+
requires_proxy_auth: bool = False,
|
195
202
|
wait_for_response: bool = True,
|
196
203
|
) -> typing.Callable[[typing.Callable[..., typing.Any]], PartialFunction]: ...
|
197
204
|
def web_server(
|
@@ -200,6 +207,7 @@ def web_server(
|
|
200
207
|
startup_timeout: float = 5.0,
|
201
208
|
label: typing.Optional[str] = None,
|
202
209
|
custom_domains: typing.Optional[collections.abc.Iterable[str]] = None,
|
210
|
+
requires_proxy_auth: bool = False,
|
203
211
|
) -> typing.Callable[[typing.Callable[..., typing.Any]], PartialFunction]: ...
|
204
212
|
def build(
|
205
213
|
_warn_parentheses_missing=None, *, force: bool = False, timeout: int = 86400
|
modal/volume.py
CHANGED
@@ -632,7 +632,11 @@ class _VolumeUploadContextManager:
|
|
632
632
|
logger.debug(f"Creating blob file for {file_spec.source_description} ({file_spec.size} bytes)")
|
633
633
|
with file_spec.source() as fp:
|
634
634
|
blob_id = await blob_upload_file(
|
635
|
-
fp,
|
635
|
+
fp,
|
636
|
+
self._client.stub,
|
637
|
+
functools.partial(self._progress_cb, progress_task_id),
|
638
|
+
sha256_hex=file_spec.sha256_hex,
|
639
|
+
md5_hex=file_spec.md5_hex,
|
636
640
|
)
|
637
641
|
logger.debug(f"Uploading blob file {file_spec.source_description} as {remote_filename}")
|
638
642
|
request2 = api_pb2.MountPutFileRequest(data_blob_id=blob_id, sha256_hex=file_spec.sha256_hex)
|
@@ -1,9 +1,9 @@
|
|
1
|
-
modal/__init__.py,sha256=
|
1
|
+
modal/__init__.py,sha256=3NJLLHb0TRc2tc68kf8NHzORx38GbtbZvPEWDWrQ6N4,2234
|
2
2
|
modal/__main__.py,sha256=scYhGFqh8OJcVDo-VOxIT6CCwxOgzgflYWMnIZiMRqE,2871
|
3
3
|
modal/_clustered_functions.py,sha256=kTf-9YBXY88NutC1akI-gCbvf01RhMPCw-zoOI_YIUE,2700
|
4
4
|
modal/_clustered_functions.pyi,sha256=vllkegc99A0jrUOWa8mdlSbdp6uz36TsHhGxysAOpaQ,771
|
5
5
|
modal/_container_entrypoint.py,sha256=wk10vA5vRZZsVwQ0yINOLd0i-NwH7x6XbhTslumvGjo,28910
|
6
|
-
modal/_ipython.py,sha256=
|
6
|
+
modal/_ipython.py,sha256=TW1fkVOmZL3YYqdS2YlM1hqpf654Yf8ZyybHdBnlhSw,301
|
7
7
|
modal/_location.py,sha256=S3lSxIU3h9HkWpkJ3Pwo0pqjIOSB1fjeSgUsY3x7eec,1202
|
8
8
|
modal/_output.py,sha256=0fWX_KQwhER--U81ys16CL-pA5A-LN20C0EZjElKGJQ,25410
|
9
9
|
modal/_proxy_tunnel.py,sha256=gnKyCfmVB7x2d1A6c-JDysNIP3kEFxmXzhcXhPrzPn0,1906
|
@@ -18,8 +18,8 @@ modal/_watcher.py,sha256=K6LYnlmSGQB4tWWI9JADv-tvSvQ1j522FwT71B51CX8,3584
|
|
18
18
|
modal/app.py,sha256=EJ7FUN6rWnSwLJoYJh8nmKg_t-8hdN8_rt0OrkP7JvQ,46084
|
19
19
|
modal/app.pyi,sha256=BE5SlR5tRECuc6-e2lUuOknDdov3zxgZ4N0AsLb5ZVQ,25270
|
20
20
|
modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
|
21
|
-
modal/client.py,sha256=
|
22
|
-
modal/client.pyi,sha256=
|
21
|
+
modal/client.py,sha256=JAnd4-GCN093BwkvOFAK5a6iy5ycxofjpUncMxlrIMw,15253
|
22
|
+
modal/client.pyi,sha256=cGr_WLDO9rrvE2HfYkrzrN6U-XZ_tBEwDBBS1akt94M,7280
|
23
23
|
modal/cloud_bucket_mount.py,sha256=G7T7jWLD0QkmrfKR75mSTwdUZ2xNfj7pkVqb4ipmxmI,5735
|
24
24
|
modal/cloud_bucket_mount.pyi,sha256=CEi7vrH3kDUF4LAy4qP6tfImy2UJuFRcRbsgRNM1wo8,1403
|
25
25
|
modal/cls.py,sha256=ONnrfZ2vPcaY2JuKypPiBA9eTiyg8Qfg-Ull40nn9zs,30956
|
@@ -35,24 +35,25 @@ modal/exception.py,sha256=dRK789TD1HaB63kHhu1yZuvS2vP_Vua3iLMBtA6dgqk,7128
|
|
35
35
|
modal/experimental.py,sha256=jFuNbwrNHos47viMB9q-cHJSvf2RDxDdoEcss9plaZE,2302
|
36
36
|
modal/file_io.py,sha256=q8s872qf6Ntdw7dPogDlpYbixxGkwCA0BlQn2UUoVhY,14637
|
37
37
|
modal/file_io.pyi,sha256=pfkmJiaBpMCZReE6-KCjYOzB1dVtyYDYokJoYX8ARK4,6932
|
38
|
+
modal/file_pattern_matcher.py,sha256=vX6MjWRGdonE4I8QPdjFUnz6moBjSzvgD6417BNQrW4,4021
|
38
39
|
modal/functions.py,sha256=IIdHw0FNOdoMksG1b2zvkn8f-xskhJu07ZvHMey9iq4,67667
|
39
|
-
modal/functions.pyi,sha256=
|
40
|
+
modal/functions.pyi,sha256=bHbJiWW5TbFKKjDn7bSCFvOcUcAjPFqTStS-NAHPSeM,25068
|
40
41
|
modal/gpu.py,sha256=r4rL6uH3UJIQthzYvfWauXNyh01WqCPtKZCmmSX1fd4,6881
|
41
|
-
modal/image.py,sha256=
|
42
|
-
modal/image.pyi,sha256=
|
42
|
+
modal/image.py,sha256=xQAC1gWOG0L77QfVfAbHfLwfVkvMYi2sy0V_Ah7GWPg,82253
|
43
|
+
modal/image.pyi,sha256=8R8Ac9eZ83ocM_1qrFUvH3rCbI5zRnq-Eq0xaAQq4nI,25105
|
43
44
|
modal/io_streams.py,sha256=QkQiizKRzd5bnbKQsap31LJgBYlAnj4-XkV_50xPYX0,15079
|
44
45
|
modal/io_streams.pyi,sha256=bCCVSxkMcosYd8O3PQDDwJw7TQ8JEcnYonLJ5t27TQs,4804
|
45
|
-
modal/mount.py,sha256=
|
46
|
-
modal/mount.pyi,sha256=
|
47
|
-
modal/network_file_system.py,sha256=
|
46
|
+
modal/mount.py,sha256=QKvrgpS_FMqrGdoyVZWeWnkNpQeDSLpuiwZFSGgRp_Y,29017
|
47
|
+
modal/mount.pyi,sha256=a0WAFmT7kZvoq_ZAu6R6fwxiEUR6QSmeC_avUpJKGWM,10495
|
48
|
+
modal/network_file_system.py,sha256=kwwQLCJVO086FTiAWSF_jz9BkqijZLpSbEYXpFvS0Ik,14600
|
48
49
|
modal/network_file_system.pyi,sha256=8mHKXuRkxHPazF6ljIW7g4M5aVqLSl6eKUPLgDCug5c,7901
|
49
50
|
modal/object.py,sha256=HZs3N59C6JxlMuPQWJYvrWV1FEEkH9txUovVDorVUbs,9763
|
50
51
|
modal/object.pyi,sha256=MO78H9yFSE5i1gExPEwyyQzLdlshkcGHN1aQ0ylyvq0,8802
|
51
52
|
modal/output.py,sha256=N0xf4qeudEaYrslzdAl35VKV8rapstgIM2e9wO8_iy0,1967
|
52
53
|
modal/parallel_map.py,sha256=4aoMXIrlG3wl5Ifk2YDNOQkXsGRsm6Xbfm6WtJ2t3WY,16002
|
53
54
|
modal/parallel_map.pyi,sha256=pOhT0P3DDYlwLx0fR3PTsecA7DI8uOdXC1N8i-ZkyOY,2328
|
54
|
-
modal/partial_function.py,sha256=
|
55
|
-
modal/partial_function.pyi,sha256=
|
55
|
+
modal/partial_function.py,sha256=zr_tFmTdoFxpTDw8cSwo_IjiWwZAyROCmQyl2z-Z6MY,29201
|
56
|
+
modal/partial_function.pyi,sha256=pO6kf8i5HVsZ7CF0z_KkzLk4Aeq7NJhFJ_VNIycRXaU,9260
|
56
57
|
modal/proxy.py,sha256=ZrOsuQP7dSZFq1OrIxalNnt0Zvsnp1h86Th679sSL40,1417
|
57
58
|
modal/proxy.pyi,sha256=UvygdOYneLTuoDY6hVaMNCyZ947Tmx93IdLjErUqkvM,368
|
58
59
|
modal/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -73,30 +74,31 @@ modal/serving.pyi,sha256=ncV-9jY_vZYFnGs5ZnMb3ffrX8LmcLdIMHBC56xRbtE,1711
|
|
73
74
|
modal/stream_type.py,sha256=A6320qoAAWhEfwOCZfGtymQTu5AfLfJXXgARqooTPvY,417
|
74
75
|
modal/token_flow.py,sha256=LcgSce_MSQ2p7j55DPwpVRpiAtCDe8GRSEwzO7muNR8,6774
|
75
76
|
modal/token_flow.pyi,sha256=gOYtYujrWt_JFZeiI8EmfahXPx5GCR5Na-VaPQcWgEY,1937
|
76
|
-
modal/volume.py,sha256=
|
77
|
+
modal/volume.py,sha256=PGzbninvRU-IhSwJgM2jZKzD8llRhZhadsOxZ-YNwaM,29316
|
77
78
|
modal/volume.pyi,sha256=St0mDiaojfep6Bs4sBbkRJmeacYHF6lh6FKOWGmheHA,11182
|
78
79
|
modal/_runtime/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
|
79
|
-
modal/_runtime/asgi.py,sha256=
|
80
|
+
modal/_runtime/asgi.py,sha256=H68KAN8bz8Zp7EcRl2c_ite1Y3kP1MHvjQAf-uUpCx8,21691
|
80
81
|
modal/_runtime/container_io_manager.py,sha256=ctgyNFiHjq1brCrabXmlurkAXjnrCeWPRvTVa735vRw,44215
|
81
82
|
modal/_runtime/execution_context.py,sha256=E6ofm6j1POXGPxS841X3V7JU6NheVb8OkQc7JpLq4Kg,2712
|
82
83
|
modal/_runtime/telemetry.py,sha256=T1RoAGyjBDr1swiM6pPsGRSITm7LI5FDK18oNXxY08U,5163
|
83
|
-
modal/_runtime/user_code_imports.py,sha256=
|
84
|
+
modal/_runtime/user_code_imports.py,sha256=n4CQOojzSdf0jwSKSy6MEnVX3IWl3t3Dq54-x9VS2Ds,14663
|
84
85
|
modal/_utils/__init__.py,sha256=waLjl5c6IPDhSsdWAm9Bji4e2PVxamYABKAze6CHVXY,28
|
85
86
|
modal/_utils/app_utils.py,sha256=88BT4TPLWfYAQwKTHcyzNQRHg8n9B-QE2UyJs96iV-0,108
|
86
87
|
modal/_utils/async_utils.py,sha256=9ubwMkwiDB4gzOYG2jL9j7Fs-5dxHjcifZe3r7JRg-k,25091
|
87
|
-
modal/_utils/blob_utils.py,sha256=
|
88
|
+
modal/_utils/blob_utils.py,sha256=N66LtZI8PpCkZ7maA7GLW5CAmYUoNJdG-GjaAUR4_NQ,14509
|
89
|
+
modal/_utils/bytes_io_segment_payload.py,sha256=uunxVJS4PE1LojF_UpURMzVK9GuvmYWRqQo_bxEj5TU,3385
|
88
90
|
modal/_utils/function_utils.py,sha256=LgcveUUb4XU_dWxtqgK_3ujZBvS3cGVzcDOkljyFZ2w,25066
|
89
91
|
modal/_utils/grpc_testing.py,sha256=H1zHqthv19eGPJz2HKXDyWXWGSqO4BRsxah3L5Xaa8A,8619
|
90
92
|
modal/_utils/grpc_utils.py,sha256=PPB5ay-vXencXNIWPVw5modr3EH7gfq2QPcO5YJ1lMU,7737
|
91
|
-
modal/_utils/hash_utils.py,sha256=
|
92
|
-
modal/_utils/http_utils.py,sha256=
|
93
|
+
modal/_utils/hash_utils.py,sha256=zg3J6OGxTFGSFri1qQ12giDz90lWk8bzaxCTUCRtiX4,3034
|
94
|
+
modal/_utils/http_utils.py,sha256=yeTFsXYr0rYMEhB7vBP7audG9Uc7OLhzKBANFDZWVt0,2451
|
93
95
|
modal/_utils/logger.py,sha256=ePzdudrtx9jJCjuO6-bcL_kwUJfi4AwloUmIiNtqkY0,1330
|
94
96
|
modal/_utils/mount_utils.py,sha256=J-FRZbPQv1i__Tob-FIpbB1oXWpFLAwZiB4OCiJpFG0,3206
|
95
97
|
modal/_utils/name_utils.py,sha256=TW1iyJedvDNPEJ5UVp93u8xuD5J2gQL_CUt1mgov_aI,1939
|
96
98
|
modal/_utils/package_utils.py,sha256=LcL2olGN4xaUzu2Tbv-C-Ft9Qp6bsLxEfETOAVd-mjU,2073
|
97
|
-
modal/_utils/
|
99
|
+
modal/_utils/pattern_utils.py,sha256=ZUffaECfe2iYBhH6cvCB-0-UWhmEBTZEl_TwG_So3ag,6714
|
98
100
|
modal/_utils/rand_pb_testing.py,sha256=NYM8W6HF-6_bzxJCAj4ITvItZYrclacEZlBhTptOT_Q,3845
|
99
|
-
modal/_utils/shell_utils.py,sha256=
|
101
|
+
modal/_utils/shell_utils.py,sha256=hWHzv730Br2Xyj6cGPiMZ-198Z3RZuOu3pDXhFSZ22c,2157
|
100
102
|
modal/_vendor/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
|
101
103
|
modal/_vendor/a2wsgi_wsgi.py,sha256=Q1AsjpV_Q_vzQsz_cSqmP9jWzsGsB-ARFU6vpQYml8k,21878
|
102
104
|
modal/_vendor/cloudpickle.py,sha256=Loq12qo7PBNbE4LFVEW6BdMMwY10MG94EOW1SCpcnQ0,55217
|
@@ -115,7 +117,7 @@ modal/cli/launch.py,sha256=uyI-ouGvYRjHLGxGQ2lYBZq32BiRT1i0L8ksz5iy7K8,2935
|
|
115
117
|
modal/cli/network_file_system.py,sha256=3QbAxKEoRc6RCMsYE3OS-GcuiI4GMkz_wAKsIBbN1qg,8186
|
116
118
|
modal/cli/profile.py,sha256=rLXfjJObfPNjaZvNfHGIKqs7y9bGYyGe-K7V0w-Ni0M,3110
|
117
119
|
modal/cli/queues.py,sha256=MIh2OsliNE2QeL1erubfsRsNuG4fxqcqWA2vgIfQ4Mg,4494
|
118
|
-
modal/cli/run.py,sha256=
|
120
|
+
modal/cli/run.py,sha256=W9isFpIQTNCxKafVfI_PUjxNrDMl5V8N9y15F3wtPXk,17831
|
119
121
|
modal/cli/secret.py,sha256=uQpwYrMY98iMCWeZOQTcktOYhPTZ8IHnyealDc2CZqo,4206
|
120
122
|
modal/cli/token.py,sha256=mxSgOWakXG6N71hQb1ko61XAR9ZGkTMZD-Txn7gmTac,1924
|
121
123
|
modal/cli/utils.py,sha256=hZmjyzcPjDnQSkLvycZD2LhGdcsfdZshs_rOU78EpvI,3717
|
@@ -144,10 +146,10 @@ modal_global_objects/mounts/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0
|
|
144
146
|
modal_global_objects/mounts/modal_client_package.py,sha256=W0E_yShsRojPzWm6LtIQqNVolapdnrZkm2hVEQuZK_4,767
|
145
147
|
modal_global_objects/mounts/python_standalone.py,sha256=SL_riIxpd8mP4i4CLDCWiFFNj0Ltknm9c_UIGfX5d60,1836
|
146
148
|
modal_proto/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
|
147
|
-
modal_proto/api.proto,sha256=
|
149
|
+
modal_proto/api.proto,sha256=K1QnKJ3UuBkOJ4bCsrKqn-kDeitAiaoBK8Lq2Wzs28Y,79552
|
148
150
|
modal_proto/api_grpc.py,sha256=DveC4ejFYEhCLiWbQShnmY31_FWGYU675Bmr7nHhsgs,101342
|
149
|
-
modal_proto/api_pb2.py,sha256=
|
150
|
-
modal_proto/api_pb2.pyi,sha256=
|
151
|
+
modal_proto/api_pb2.py,sha256=HoQkd_G9iIPPcXyBQ_50NJFNXxcckZ6VyzGWdaurkgE,292334
|
152
|
+
modal_proto/api_pb2.pyi,sha256=EqUBkMJr0CKILSvS9AwAAOxlyo26ftZBnMOECfOAzTA,390736
|
151
153
|
modal_proto/api_pb2_grpc.py,sha256=2PEP6JPOoTw2rDC5qYjLNuumP68ZwAouRhCoayisAhY,219162
|
152
154
|
modal_proto/api_pb2_grpc.pyi,sha256=uWtCxVEd0cFpOZ1oOGfZNO7Dv45OP4kp09jMnNyx9D4,51098
|
153
155
|
modal_proto/modal_api_grpc.py,sha256=-8mLby_om5MYo6yu1zA_hqhz0yLsQW7k2YWBVZW1iVs,13546
|
@@ -161,10 +163,10 @@ modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0y
|
|
161
163
|
modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
162
164
|
modal_version/__init__.py,sha256=RT6zPoOdFO99u5Wcxxaoir4ZCuPTbQ22cvzFAXl3vUY,470
|
163
165
|
modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
|
164
|
-
modal_version/_version_generated.py,sha256=
|
165
|
-
modal-0.68.
|
166
|
-
modal-0.68.
|
167
|
-
modal-0.68.
|
168
|
-
modal-0.68.
|
169
|
-
modal-0.68.
|
170
|
-
modal-0.68.
|
166
|
+
modal_version/_version_generated.py,sha256=SUn_R6s_ZfRkN0JPzGPm4Xkd0kC9ITNqjncXWymKoQY,149
|
167
|
+
modal-0.68.24.dist-info/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
|
168
|
+
modal-0.68.24.dist-info/METADATA,sha256=guiG7ul7yJSYcVcKVXvJErv3Y8DuKpDh5tjdZEzGplU,2329
|
169
|
+
modal-0.68.24.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
|
170
|
+
modal-0.68.24.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
|
171
|
+
modal-0.68.24.dist-info/top_level.txt,sha256=1nvYbOSIKcmU50fNrpnQnrrOpj269ei3LzgB6j9xGqg,64
|
172
|
+
modal-0.68.24.dist-info/RECORD,,
|
modal_proto/api.proto
CHANGED
@@ -360,6 +360,12 @@ message AppHeartbeatRequest {
|
|
360
360
|
string app_id = 1;
|
361
361
|
}
|
362
362
|
|
363
|
+
message AppLayout {
|
364
|
+
repeated Object object = 1;
|
365
|
+
map<string, string> function_ids = 2; // tag -> function id
|
366
|
+
map<string, string> class_ids = 3; // tag -> class id
|
367
|
+
}
|
368
|
+
|
363
369
|
message AppListRequest {
|
364
370
|
string environment_name = 1;
|
365
371
|
}
|
@@ -710,6 +716,7 @@ message ContainerArguments { // This is used to pass data from the worker to th
|
|
710
716
|
string runtime = 11;
|
711
717
|
string environment_name = 13;
|
712
718
|
optional string checkpoint_id = 14;
|
719
|
+
AppLayout app_layout = 15;
|
713
720
|
}
|
714
721
|
|
715
722
|
message ContainerCheckpointRequest {
|
@@ -2677,6 +2684,7 @@ message WebhookConfig {
|
|
2677
2684
|
uint32 web_server_port = 7;
|
2678
2685
|
float web_server_startup_timeout = 8;
|
2679
2686
|
bool web_endpoint_docs = 9;
|
2687
|
+
bool requires_proxy_auth = 10;
|
2680
2688
|
}
|
2681
2689
|
|
2682
2690
|
message WorkspaceNameLookupResponse {
|