modal 1.1.5.dev23__py3-none-any.whl → 1.1.5.dev24__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.

Potentially problematic release.


This version of modal might be problematic. Click here for more details.

@@ -437,9 +437,9 @@ def main(container_args: api_pb2.ContainerArguments, client: Client):
437
437
  param_kwargs,
438
438
  )
439
439
  else:
440
+ assert ser_usr_cls is None
440
441
  service = import_single_function_service(
441
442
  function_def,
442
- ser_usr_cls,
443
443
  ser_fun,
444
444
  )
445
445
 
@@ -93,9 +93,9 @@ def construct_webhook_callable(
93
93
 
94
94
  @dataclass
95
95
  class ImportedFunction(Service):
96
- user_cls_instance: Any
97
96
  app: modal.app._App
98
97
  service_deps: Optional[Sequence["modal._object._Object"]]
98
+ user_cls_instance = None
99
99
 
100
100
  _user_defined_callable: Callable[..., Any]
101
101
 
@@ -199,7 +199,6 @@ def get_user_class_instance(_cls: modal.cls._Cls, args: tuple[Any, ...], kwargs:
199
199
 
200
200
  def import_single_function_service(
201
201
  function_def: api_pb2.Function,
202
- ser_cls: Optional[type], # used only for @build functions
203
202
  ser_fun: Optional[Callable[..., Any]],
204
203
  ) -> Service:
205
204
  """Imports a function dynamically, and locates the app.
@@ -228,12 +227,9 @@ def import_single_function_service(
228
227
  service_deps: Optional[Sequence["modal._object._Object"]] = None
229
228
  active_app: modal.app._App
230
229
 
231
- user_cls_or_cls: typing.Union[None, type, modal.cls.Cls]
232
- user_cls_instance = None
233
-
234
230
  if ser_fun is not None:
235
231
  # This is a serialized function we already fetched from the server
236
- user_cls_or_cls, user_defined_callable = ser_cls, ser_fun
232
+ user_defined_callable = ser_fun
237
233
  active_app = get_active_app_fallback(function_def)
238
234
  else:
239
235
  # Load the module dynamically
@@ -244,58 +240,22 @@ def import_single_function_service(
244
240
  raise LocalFunctionError("Attempted to load a function defined in a function scope")
245
241
 
246
242
  parts = qual_name.split(".")
247
- if len(parts) == 1:
248
- # This is a function
249
- user_cls_or_cls = None
250
- f = getattr(module, qual_name)
251
- if isinstance(f, Function):
252
- _function: modal._functions._Function[Any, Any, Any] = synchronizer._translate_in(f) # type: ignore
253
- service_deps = _function.deps(only_explicit_mounts=True)
254
- user_defined_callable = _function.get_raw_f()
255
- assert _function._app # app should always be set on a decorated function
256
- active_app = _function._app
257
- else:
258
- user_defined_callable = f
259
- active_app = get_active_app_fallback(function_def)
260
-
261
- elif len(parts) == 2:
262
- # This path should only be triggered by @build class builder methods and can be removed
263
- # once @build is deprecated.
264
- assert not function_def.use_method_name # new "placeholder methods" should not be invoked directly!
265
- assert function_def.is_builder_function
266
- cls_name, fun_name = parts
267
- user_cls_or_cls = getattr(module, cls_name)
268
- if isinstance(user_cls_or_cls, modal.cls.Cls):
269
- # The cls decorator is in global scope
270
- _cls = typing.cast(modal.cls._Cls, synchronizer._translate_in(user_cls_or_cls))
271
- user_defined_callable = _cls._callables[fun_name]
272
- # Intentionally not including these, since @build functions don't actually
273
- # forward the information from their parent class.
274
- # service_deps = _cls._get_class_service_function().deps(only_explicit_mounts=True)
275
- assert _cls._app
276
- active_app = _cls._app
277
- else:
278
- # This is non-decorated class
279
- user_defined_callable = getattr(user_cls_or_cls, fun_name) # unbound method
280
- active_app = get_active_app_fallback(function_def)
281
- else:
243
+ if len(parts) != 1:
282
244
  raise InvalidError(f"Invalid function qualname {qual_name}")
283
245
 
284
- # Instantiate the class if it's defined
285
- if user_cls_or_cls:
286
- if isinstance(user_cls_or_cls, modal.cls.Cls):
287
- # This code is only used for @build methods on classes
288
- _cls = typing.cast(modal.cls._Cls, user_cls_or_cls)
289
- user_cls_instance = get_user_class_instance(_cls, (), {})
290
- # Bind the unbound method to the instance as self (using the descriptor protocol!)
246
+ f = getattr(module, qual_name)
247
+ if isinstance(f, Function):
248
+ _function: modal._functions._Function[Any, Any, Any] = synchronizer._translate_in(f) # type: ignore
249
+ service_deps = _function.deps(only_explicit_mounts=True)
250
+ user_defined_callable = _function.get_raw_f()
251
+ assert _function._app # app should always be set on a decorated function
252
+ active_app = _function._app
291
253
  else:
292
- # serialized=True or "undecorated"
293
- user_cls_instance = user_cls_or_cls()
294
-
295
- user_defined_callable = user_defined_callable.__get__(user_cls_instance)
254
+ # function isn't decorated in global scope
255
+ user_defined_callable = f
256
+ active_app = get_active_app_fallback(function_def)
296
257
 
297
258
  return ImportedFunction(
298
- user_cls_instance,
299
259
  active_app,
300
260
  service_deps,
301
261
  user_defined_callable,
modal/client.pyi CHANGED
@@ -33,7 +33,7 @@ class _Client:
33
33
  server_url: str,
34
34
  client_type: int,
35
35
  credentials: typing.Optional[tuple[str, str]],
36
- version: str = "1.1.5.dev23",
36
+ version: str = "1.1.5.dev24",
37
37
  ):
38
38
  """mdmd:hidden
39
39
  The Modal client object is not intended to be instantiated directly by users.
@@ -164,7 +164,7 @@ class Client:
164
164
  server_url: str,
165
165
  client_type: int,
166
166
  credentials: typing.Optional[tuple[str, str]],
167
- version: str = "1.1.5.dev23",
167
+ version: str = "1.1.5.dev24",
168
168
  ):
169
169
  """mdmd:hidden
170
170
  The Modal client object is not intended to be instantiated directly by users.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.1.5.dev23
3
+ Version: 1.1.5.dev24
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License: Apache-2.0
@@ -2,7 +2,7 @@ modal/__init__.py,sha256=WMaRW-2IJRGA9ioNAaBhJYuyLvu-GS01L8wQD90fKBs,2682
2
2
  modal/__main__.py,sha256=45H-GtwzaDfN-1nP4_HYvzN3s7AG_HXR4-ynrsjO_OI,2803
3
3
  modal/_clustered_functions.py,sha256=Sy4Sf_17EO8OL-FUe8LYcm4hrqLyQFCssNhr3p0SroU,3013
4
4
  modal/_clustered_functions.pyi,sha256=JmYwAGOLEnD5AF-gYF9O5tu-SgGjeoJz-X1j48b1Ijg,1157
5
- modal/_container_entrypoint.py,sha256=a1HAQYh1gGpqHuhSw6AW7XDYHztbeYr5a8iNnfCnoks,29023
5
+ modal/_container_entrypoint.py,sha256=fLluT_sU34vGPCTG1Q58VI1RvxF5n7vQzCVCsL-MMk8,29033
6
6
  modal/_functions.py,sha256=1ZG8TvI3TTByfzArrjSww6pQB1iH4be0I3yQfkMfgAY,89780
7
7
  modal/_ipython.py,sha256=TW1fkVOmZL3YYqdS2YlM1hqpf654Yf8ZyybHdBnlhSw,301
8
8
  modal/_location.py,sha256=joiX-0ZeutEUDTrrqLF1GHXCdVLF-rHzstocbMcd_-k,366
@@ -22,7 +22,7 @@ modal/app.py,sha256=OBFaL-8KVMtBMEmspHA76LvblPdnSgdoGioLkQBjhdQ,48851
22
22
  modal/app.pyi,sha256=Cqk3pOeEEroCLejj3yJ3XHDqt0rMzeSA295gMKEx6Ww,43955
23
23
  modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
24
24
  modal/client.py,sha256=kyAIVB3Ay-XKJizQ_1ufUFB__EagV0MLmHJpyYyJ7J0,18636
25
- modal/client.pyi,sha256=_Yv5lK16VNQIaqcseoFnAdUtyGIELqRB3Bc4G1xd3r8,15831
25
+ modal/client.pyi,sha256=us36PiyarU0FrCAtcpfcLAMUCNlMDWGJOEm-Mbg5LiM,15831
26
26
  modal/cloud_bucket_mount.py,sha256=YOe9nnvSr4ZbeCn587d7_VhE9IioZYRvF9VYQTQux08,5914
27
27
  modal/cloud_bucket_mount.pyi,sha256=-qSfYAQvIoO_l2wsCCGTG5ZUwQieNKXdAO00yP1-LYU,7394
28
28
  modal/cls.py,sha256=qb9h_ZKiz2q7fwKQ-5bdkz1x3tdu6sIm-UI09aQjPPc,41101
@@ -88,7 +88,7 @@ modal/_runtime/execution_context.py,sha256=AYrNQRHHXEqX2MwMf8zxelKZnYf25RE_B-NRL
88
88
  modal/_runtime/execution_context.pyi,sha256=FVzakehz72ndL-ufe8-EC7TM4IHO_MEBcAdgWuU4W9k,2426
89
89
  modal/_runtime/gpu_memory_snapshot.py,sha256=BWIMKkH-UXTQOJJuXbM15UWCHHSYlJ0XxGlZunKb0Ug,11877
90
90
  modal/_runtime/telemetry.py,sha256=T1RoAGyjBDr1swiM6pPsGRSITm7LI5FDK18oNXxY08U,5163
91
- modal/_runtime/user_code_imports.py,sha256=78wJyleqY2RVibqcpbDQyfWVBVT9BjyHPeoV9WdwV5Y,17720
91
+ modal/_runtime/user_code_imports.py,sha256=SSkrluFuOtcM0NIOwqVlcFhAKhkAGjnPKjJj_Ht_nzk,15574
92
92
  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=7uA4KJV7XRgak5nXZSGRE-RN1h91UOyNwK6v_ilUQMQ,29737
@@ -153,7 +153,7 @@ modal/experimental/__init__.py,sha256=fCqzo_f3vcY750vHtd7CtLs5dvdM_C0ZLLGb3zXuK9
153
153
  modal/experimental/flash.py,sha256=7qRAL2Nrwbb60YKobcnpM0zJ8vw4xGJqabLPFgEzMZE,28295
154
154
  modal/experimental/flash.pyi,sha256=R9VV0UDotiY9BRUjacB-xI4qhR3yBymAvEZFRFHztLs,15143
155
155
  modal/experimental/ipython.py,sha256=TrCfmol9LGsRZMeDoeMPx3Hv3BFqQhYnmD_iH0pqdhk,2904
156
- modal-1.1.5.dev23.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
156
+ modal-1.1.5.dev24.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
157
157
  modal_docs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
158
158
  modal_docs/gen_cli_docs.py,sha256=c1yfBS_x--gL5bs0N4ihMwqwX8l3IBWSkBAKNNIi6bQ,3801
159
159
  modal_docs/gen_reference_docs.py,sha256=d_CQUGQ0rfw28u75I2mov9AlS773z9rG40-yq5o7g2U,6359
@@ -176,10 +176,10 @@ modal_proto/options_pb2.pyi,sha256=l7DBrbLO7q3Ir-XDkWsajm0d0TQqqrfuX54i4BMpdQg,1
176
176
  modal_proto/options_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
177
177
  modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0yJSI,247
178
178
  modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
179
- modal_version/__init__.py,sha256=kt7QD61hcPcACt1XmkX5Y4vi8Gech2tdeTdin5H_nWA,121
179
+ modal_version/__init__.py,sha256=BRQ3z_a6RSG8-f9fEnDvMa3yRNG-JxSWmyy5uTbRnvQ,121
180
180
  modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
181
- modal-1.1.5.dev23.dist-info/METADATA,sha256=X-7dZFYSh5fkUelRKk1GuvLyCjsMQX2vfFKVagZEHDI,2460
182
- modal-1.1.5.dev23.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
183
- modal-1.1.5.dev23.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
184
- modal-1.1.5.dev23.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
185
- modal-1.1.5.dev23.dist-info/RECORD,,
181
+ modal-1.1.5.dev24.dist-info/METADATA,sha256=abLubH9UXnekHrhffWoQzTIpKyOvq-h_Ix5EIfeYi7Y,2460
182
+ modal-1.1.5.dev24.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
183
+ modal-1.1.5.dev24.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
184
+ modal-1.1.5.dev24.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
185
+ modal-1.1.5.dev24.dist-info/RECORD,,
modal_version/__init__.py CHANGED
@@ -1,4 +1,4 @@
1
1
  # Copyright Modal Labs 2025
2
2
  """Supplies the current version of the modal client library."""
3
3
 
4
- __version__ = "1.1.5.dev23"
4
+ __version__ = "1.1.5.dev24"