modal 0.74.60__py3-none-any.whl → 0.74.62__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.74.60"
30
+ self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.74.62"
31
31
  ): ...
32
32
  def is_closed(self) -> bool: ...
33
33
  @property
@@ -86,7 +86,7 @@ class Client:
86
86
  _snapshotted: bool
87
87
 
88
88
  def __init__(
89
- self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.74.60"
89
+ self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.74.62"
90
90
  ): ...
91
91
  def is_closed(self) -> bool: ...
92
92
  @property
modal/dict.py CHANGED
@@ -73,7 +73,7 @@ class _Dict(_Object, type_prefix="di"):
73
73
  @asynccontextmanager
74
74
  async def ephemeral(
75
75
  cls: type["_Dict"],
76
- data: Optional[dict] = None,
76
+ data: Optional[dict] = None, # DEPRECATED
77
77
  client: Optional[_Client] = None,
78
78
  environment_name: Optional[str] = None,
79
79
  _heartbeat_sleep: float = EPHEMERAL_OBJECT_HEARTBEAT_SLEEP,
@@ -95,6 +95,11 @@ class _Dict(_Object, type_prefix="di"):
95
95
  """
96
96
  if client is None:
97
97
  client = await _Client.from_env()
98
+ if data:
99
+ deprecation_warning(
100
+ (2025, 5, 6),
101
+ "Passing data to `modal.Dict.ephemeral` is deprecated and will stop working in a future release.",
102
+ )
98
103
  serialized = _serialize_dict(data if data is not None else {})
99
104
  request = api_pb2.DictGetOrCreateRequest(
100
105
  object_creation_type=api_pb2.OBJECT_CREATION_TYPE_EPHEMERAL,
@@ -111,7 +116,7 @@ class _Dict(_Object, type_prefix="di"):
111
116
  @renamed_parameter((2024, 12, 18), "label", "name")
112
117
  def from_name(
113
118
  name: str,
114
- data: Optional[dict] = None,
119
+ data: Optional[dict] = None, # DEPRECATED
115
120
  *,
116
121
  namespace=api_pb2.DEPLOYMENT_NAMESPACE_WORKSPACE,
117
122
  environment_name: Optional[str] = None,
@@ -130,6 +135,12 @@ class _Dict(_Object, type_prefix="di"):
130
135
  """
131
136
  check_object_name(name, "Dict")
132
137
 
138
+ if data:
139
+ deprecation_warning(
140
+ (2025, 5, 6),
141
+ "Passing data to `modal.Dict.from_name` is deprecated and will stop working in a future release.",
142
+ )
143
+
133
144
  async def _load(self: _Dict, resolver: Resolver, existing_object_id: Optional[str]):
134
145
  serialized = _serialize_dict(data if data is not None else {})
135
146
  req = api_pb2.DictGetOrCreateRequest(
modal/functions.pyi CHANGED
@@ -227,11 +227,11 @@ class Function(
227
227
 
228
228
  _call_generator_nowait: ___call_generator_nowait_spec[typing_extensions.Self]
229
229
 
230
- class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
230
+ class __remote_spec(typing_extensions.Protocol[P_INNER, ReturnType_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.ReturnType, modal._functions.P, typing_extensions.Self]
234
+ remote: __remote_spec[modal._functions.P, modal._functions.ReturnType, 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[ReturnType_INNER, P_INNER, SUPERSELF]):
249
+ class ___experimental_spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_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.ReturnType, modal._functions.P, typing_extensions.Self
254
+ modal._functions.P, modal._functions.ReturnType, 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[ReturnType_INNER, P_INNER, SUPERSELF]):
263
+ class __spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_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.ReturnType, modal._functions.P, typing_extensions.Self]
267
+ spawn: __spawn_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
268
268
 
269
269
  def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]: ...
270
270
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 0.74.60
3
+ Version: 0.74.62
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License: Apache-2.0
@@ -22,7 +22,7 @@ modal/app.py,sha256=xojuGZv4LaQwZU5ntj7WbmMjeNuB9Gll8Mzqe2LyiEs,51323
22
22
  modal/app.pyi,sha256=zNwR1_2LpmQc9AhemuAeVdk90XNYDw9keOkXAwAATeA,28732
23
23
  modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
24
24
  modal/client.py,sha256=o-aQThHpvDHUzg_kUafyhWzACViUBhY2WLZ2EitnSHA,16787
25
- modal/client.pyi,sha256=fpRp6NnR_PtaJ9_h2ZcqK1bApZtvdA2zarVQ-yCKxg0,8385
25
+ modal/client.pyi,sha256=cbDMHReNe9h_63WwrsH0Fy6JQKulelNCftigIgwDJEs,8385
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=aHoMEWMZUN7bOezs3tRPxzS1FP3gTxZBORVjbPmtxyg,35338
@@ -30,7 +30,7 @@ modal/cls.pyi,sha256=klQkXHXhl5gTjRo_XDV6PGecnJeFOudSMXid_kanumI,12090
30
30
  modal/config.py,sha256=OOMEJ5LHNFbHRW5wUpuhl0TH6EPW8D1XV9I3OJXrZrk,12668
31
31
  modal/container_process.py,sha256=vvyK3DVPUMsuqvkKdUiQ49cDLF9JawGrxpglLk5vfgI,6208
32
32
  modal/container_process.pyi,sha256=cR4aRHTbcVvmxGCc1_k2Ey8JllJIAQYq9PBKx0_1TuI,2916
33
- modal/dict.py,sha256=aQp4sDBUPlfAK85487Tjf8YUyy9C06SV9uynnPpcSf8,13687
33
+ modal/dict.py,sha256=rYOTNtUIOoIVibC1KGC6-fnsXD88ij8o0xNKFpR9BVs,14134
34
34
  modal/dict.pyi,sha256=ou2rospKvSNl0PffrsSABruTjspUlqwbkjJ22fzg-yE,8021
35
35
  modal/environments.py,sha256=t_TdUyORfIjlEAOS7I4My1qHi0cVsjPxwKloLmAAZMc,6935
36
36
  modal/environments.pyi,sha256=4HbI0kywveaUVI7HqDtZ4HphCTGXYi_wie2hz87up5A,3425
@@ -39,7 +39,7 @@ 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=trosX-Bp7dOubudN1bLLhRAoidWy1TcoaR4Pv8CedWw,6497
41
41
  modal/functions.py,sha256=kcNHvqeGBxPI7Cgd57NIBBghkfbeFJzXO44WW0jSmao,325
42
- modal/functions.pyi,sha256=aicTlhQAcQEiDHblXWR177nl21Qsau051hMUkrG-nOo,16742
42
+ modal/functions.pyi,sha256=1GV493uk0Q7baSSPK4HtadK-1qSGMwM_OxlmgVvWP00,16742
43
43
  modal/gpu.py,sha256=Kbhs_u49FaC2Zi0TjCdrpstpRtT5eZgecynmQi5IZVE,6752
44
44
  modal/image.py,sha256=ZCghS6l1O7pezXcdMHk6RoJpW3qWszfWGJTW38lNXaU,92797
45
45
  modal/image.pyi,sha256=MDq7tNJevElK78VxFYrZRe_00kz9gPdg98MN5c6fFoE,25644
@@ -146,7 +146,7 @@ modal/requirements/2024.10.txt,sha256=qD-5cVIVM9wXesJ6JC89Ew-3m2KjEElUz3jaw_MddR
146
146
  modal/requirements/PREVIEW.txt,sha256=qD-5cVIVM9wXesJ6JC89Ew-3m2KjEElUz3jaw_MddRo,296
147
147
  modal/requirements/README.md,sha256=9tK76KP0Uph7O0M5oUgsSwEZDj5y-dcUPsnpR0Sc-Ik,854
148
148
  modal/requirements/base-images.json,sha256=57vMSqzMbLBxw5tFWSaMiIkkVEps4JfX5PAtXGnkS4U,740
149
- modal-0.74.60.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
149
+ modal-0.74.62.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
150
150
  modal_docs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
151
151
  modal_docs/gen_cli_docs.py,sha256=c1yfBS_x--gL5bs0N4ihMwqwX8l3IBWSkBAKNNIi6bQ,3801
152
152
  modal_docs/gen_reference_docs.py,sha256=d_CQUGQ0rfw28u75I2mov9AlS773z9rG40-yq5o7g2U,6359
@@ -154,10 +154,10 @@ modal_docs/mdmd/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,2
154
154
  modal_docs/mdmd/mdmd.py,sha256=Irx49MCCTlBOP4FBdLR--JrpA3-WhsVeriq0LGgsRic,6232
155
155
  modal_docs/mdmd/signatures.py,sha256=XJaZrK7Mdepk5fdX51A8uENiLFNil85Ud0d4MH8H5f0,3218
156
156
  modal_proto/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
157
- modal_proto/api.proto,sha256=NN11fGCPzQqZ3R6XHe8kkEgl86eOWh09c6wWplkIcT0,94293
157
+ modal_proto/api.proto,sha256=XTValFbhXFDcKDWm-iWntPTNQThT-VqfHgLLIl1O0Jk,94339
158
158
  modal_proto/api_grpc.py,sha256=kTSfs9yI_YtxkPuATpSQ1_Nvd7TtjK03H61RupX1bpM,114421
159
- modal_proto/api_pb2.py,sha256=EWWs8G_DH4ezUzsNSCRiYCW7TV3J9pM3NDtdcR1N9YA,332519
160
- modal_proto/api_pb2.pyi,sha256=K05tcHYkl_ZFGK_mfFOxjJ2V1SryTpCng6CkeqOAA0Q,452511
159
+ modal_proto/api_pb2.py,sha256=kXAEYBeGKLz92BK_S7LReL_Wx4thvuNDMnitU_j6qds,332601
160
+ modal_proto/api_pb2.pyi,sha256=dLzO-XDQwOaaX8yXl8dnxgJkznkEV7-AwQ-gQpD3xf8,452883
161
161
  modal_proto/api_pb2_grpc.py,sha256=-KPQMzXmTYwgF23_tGpODCVK79iOdV1sRsw5mN-byMw,247448
162
162
  modal_proto/api_pb2_grpc.pyi,sha256=ls1qcby7goTrlE6BluSWpo73cW_ajvh3rOe41azMBWM,57929
163
163
  modal_proto/modal_api_grpc.py,sha256=eoJvCFelooz_mlLa1sJ5CEsNuUSIui-4aUgSmiCwKOI,17312
@@ -171,9 +171,9 @@ modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0y
171
171
  modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
172
172
  modal_version/__init__.py,sha256=m94xZNWIjH8oUtJk4l9xfovzDJede2o7X-q0MHVECtM,470
173
173
  modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
174
- modal_version/_version_generated.py,sha256=TSSCaOkZv-q4iC_Fm5y5PLPnUcJbRWTS8f6W8MrU2VE,149
175
- modal-0.74.60.dist-info/METADATA,sha256=qXT5Yds-8kmsxuFsaCcZkhCiJFEzt-nMGl7l-iu6Xqk,2451
176
- modal-0.74.60.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
177
- modal-0.74.60.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
178
- modal-0.74.60.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
179
- modal-0.74.60.dist-info/RECORD,,
174
+ modal_version/_version_generated.py,sha256=XHXqJAOLosyRQo7ott3IiY3kCUw5siP3sK181LABQw8,149
175
+ modal-0.74.62.dist-info/METADATA,sha256=ND8dOtq_rxRLwOjHpKLN5sWFa-q6gCbHIU2BEJWy3tk,2451
176
+ modal-0.74.62.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
177
+ modal-0.74.62.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
178
+ modal-0.74.62.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
179
+ modal-0.74.62.dist-info/RECORD,,
modal_proto/api.proto CHANGED
@@ -1112,9 +1112,11 @@ message DictPopResponse {
1112
1112
  message DictUpdateRequest {
1113
1113
  string dict_id = 1 [ (modal.options.audit_target_attr) = true ];
1114
1114
  repeated DictEntry updates = 2;
1115
+ bool if_not_exists = 3;
1115
1116
  }
1116
1117
 
1117
1118
  message DictUpdateResponse {
1119
+ bool created = 1;
1118
1120
  }
1119
1121
 
1120
1122
  message Domain {