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/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
- condition: typing.Callable[[str], bool]
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
- condition: typing.Callable[[str], bool],
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
- condition: typing.Optional[typing.Callable[[str], bool]]
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
- condition: typing.Optional[typing.Callable[[str], bool]] = None,
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: ...
@@ -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, self._client.stub, progress_report_cb=functools.partial(progress_cb, progress_task_id)
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
 
@@ -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, self._client.stub, functools.partial(self._progress_cb, progress_task_id)
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,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: modal
3
- Version: 0.68.11
3
+ Version: 0.68.24
4
4
  Summary: Python client library for Modal
5
5
  Author: Modal Labs
6
6
  Author-email: support@modal.com
@@ -1,9 +1,9 @@
1
- modal/__init__.py,sha256=Yn8zS7Jxl5uZjPM331Pc4FdSmp9Rt6VdE7TiE4ZKRc8,2151
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=HF_DYy0e0qM9WnGDmTY30s1RxzGya9GeORCauCEpRaE,450
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=nyPjfromWBeOyurexpFP2QLQNk822RPggMCLyX9j1jA,15247
22
- modal/client.pyi,sha256=wnmsE-wrmK3qkFH1a5PoT45B11cFC5T3gLLO9KceJNU,7280
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=EYH4w4VgQtdbEWLGarnU5QtYVfuM2_tnovKFEbYyg2c,25068
40
+ modal/functions.pyi,sha256=bHbJiWW5TbFKKjDn7bSCFvOcUcAjPFqTStS-NAHPSeM,25068
40
41
  modal/gpu.py,sha256=r4rL6uH3UJIQthzYvfWauXNyh01WqCPtKZCmmSX1fd4,6881
41
- modal/image.py,sha256=cQ6WP1xHXZT_nY8z3aEFiGwKzrTV0yxi3Ab8JzF91eo,79653
42
- modal/image.pyi,sha256=PIKH6JBA4L5TfdJrQu3pm2ykyIITmiP920TpP8cdyQA,24585
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=liaid5p42o0OKnzoocJJ_oCovDVderk3-JuCTa5pqtA,27656
46
- modal/mount.pyi,sha256=3e4nkXUeeVmUmOyK8Tiyk_EQlHeWruN3yGJVnmDUVrI,9761
47
- modal/network_file_system.py,sha256=NKZgh_p8MyJyyJgP92lhRgTmwA3kOPw7m8AbYlchhCE,14530
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=rirVfihV6kp1SMTacrsfE5rNXV5JnTLpU_Zd4xukNg0,28529
55
- modal/partial_function.pyi,sha256=mt9kUeeMSVTo5qJ6JF6qeQzr41zykYBi2Yt6R8dxtWk,8948
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=IISuMeXq9MoSkhXg8Q6JG0F-2n9NTkWk0xGuJB8l3d8,29159
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=GvuxZqWnIHMIR-Bx5f7toCQlkERaJO8CHjTPNM9IFIw,21537
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=4fI0F9OIaNOcO_S4Tx2JcnYwZwZq6JdhMAkUzYN6je4,14629
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=0k_qUpO5GHnz538wjRhyRw4NdJ5O322N7QSilIu32jw,16601
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=LOWJ9U5Eaye2ZIGQOdEk8RN8ExPFovGQisyuGv1PXU0,2236
92
- modal/_utils/http_utils.py,sha256=VKXYNPJtrSwZ1ttcXVGQUWmn8cLAXiOTv05g2ac3GbU,2179
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/pattern_matcher.py,sha256=sssw9Cmck2f-TvOE1i96fbdsJr9DKLpbebyCwNr3wHY,9246
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=6P0ykuE5qU2MkCu2HHc8yqJzp8CgTm79ws3snsV9OkU,1946
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=rv2t7WURME6fCUYo4aA48azVIXLZqo4NjYjTg2I8vzk,17040
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=41iACETQzxnecGOJgoeyKPQOJVZcw8iHJNtiB6SMuWg,79317
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=316-2KJCwcoJm-oFQ7tG42LZjlA3lNhEUYsbbzoikUs,290107
150
- modal_proto/api_pb2.pyi,sha256=kuvlkVay68o4OQTW8UGwH10Xvxejr-uQjcb2tT_Neso,388133
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=iMmZstd6JhPFScB-dfN5XinMS8GWtT-kQD4yTA3FQr4,149
165
- modal-0.68.11.dist-info/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
166
- modal-0.68.11.dist-info/METADATA,sha256=xrxk7D7aRQurLJimfndYZrKyYvfhEFqBVT_o7q7Mxgk,2329
167
- modal-0.68.11.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
168
- modal-0.68.11.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
169
- modal-0.68.11.dist-info/top_level.txt,sha256=1nvYbOSIKcmU50fNrpnQnrrOpj269ei3LzgB6j9xGqg,64
170
- modal-0.68.11.dist-info/RECORD,,
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 {