modal 0.66.44__py3-none-any.whl → 0.67.0__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/runner.py CHANGED
@@ -57,7 +57,7 @@ async def _heartbeat(client: _Client, app_id: str) -> None:
57
57
 
58
58
  async def _init_local_app_existing(client: _Client, existing_app_id: str, environment_name: str) -> RunningApp:
59
59
  # Get all the objects first
60
- obj_req = api_pb2.AppGetObjectsRequest(app_id=existing_app_id)
60
+ obj_req = api_pb2.AppGetObjectsRequest(app_id=existing_app_id, only_class_function=True)
61
61
  obj_resp, _ = await gather_cancel_on_exc(
62
62
  retry_transient_errors(client.stub.AppGetObjects, obj_req),
63
63
  # Cache the environment associated with the app now as we will use it later
@@ -327,11 +327,13 @@ async def _run_app(
327
327
  )
328
328
 
329
329
  try:
330
+ indexed_objects = dict(**app._functions, **app._classes) # TODO(erikbern): remove
331
+
330
332
  # Create all members
331
- await _create_all_objects(client, running_app, app._indexed_objects, environment_name)
333
+ await _create_all_objects(client, running_app, indexed_objects, environment_name)
332
334
 
333
335
  # Publish the app
334
- await _publish_app(client, running_app, app_state, app._indexed_objects)
336
+ await _publish_app(client, running_app, app_state, indexed_objects)
335
337
  except asyncio.CancelledError as e:
336
338
  # this typically happens on sigint/ctrl-C during setup (the KeyboardInterrupt happens in the main thread)
337
339
  if output_mgr := _get_output_manager():
@@ -424,16 +426,18 @@ async def _serve_update(
424
426
  try:
425
427
  running_app: RunningApp = await _init_local_app_existing(client, existing_app_id, environment_name)
426
428
 
429
+ indexed_objects = dict(**app._functions, **app._classes) # TODO(erikbern): remove
430
+
427
431
  # Create objects
428
432
  await _create_all_objects(
429
433
  client,
430
434
  running_app,
431
- app._indexed_objects,
435
+ indexed_objects,
432
436
  environment_name,
433
437
  )
434
438
 
435
439
  # Publish the updated app
436
- await _publish_app(client, running_app, api_pb2.APP_STATE_UNSPECIFIED, app._indexed_objects)
440
+ await _publish_app(client, running_app, api_pb2.APP_STATE_UNSPECIFIED, indexed_objects)
437
441
 
438
442
  # Communicate to the parent process
439
443
  is_ready.set()
@@ -521,17 +525,19 @@ async def _deploy_app(
521
525
 
522
526
  tc.infinite_loop(heartbeat, sleep=HEARTBEAT_INTERVAL)
523
527
 
528
+ indexed_objects = dict(**app._functions, **app._classes) # TODO(erikbern): remove
529
+
524
530
  try:
525
531
  # Create all members
526
532
  await _create_all_objects(
527
533
  client,
528
534
  running_app,
529
- app._indexed_objects,
535
+ indexed_objects,
530
536
  environment_name=environment_name,
531
537
  )
532
538
 
533
539
  app_url, warnings = await _publish_app(
534
- client, running_app, api_pb2.APP_STATE_DEPLOYED, app._indexed_objects, name, tag
540
+ client, running_app, api_pb2.APP_STATE_DEPLOYED, indexed_objects, name, tag
535
541
  )
536
542
  except Exception as e:
537
543
  # Note that AppClientDisconnect only stops the app if it's still initializing, and is a no-op otherwise.
modal/volume.py CHANGED
@@ -122,14 +122,21 @@ class _Volume(_Object, type_prefix="vo"):
122
122
  ```
123
123
  """
124
124
 
125
- _lock: asyncio.Lock
125
+ _lock: Optional[asyncio.Lock] = None
126
126
 
127
- def _initialize_from_empty(self):
127
+ async def _get_lock(self):
128
128
  # To (mostly*) prevent multiple concurrent operations on the same volume, which can cause problems under
129
129
  # some unlikely circumstances.
130
130
  # *: You can bypass this by creating multiple handles to the same volume, e.g. via lookup. But this
131
131
  # covers the typical case = good enough.
132
- self._lock = asyncio.Lock()
132
+
133
+ # Note: this function runs no async code but is marked as async to ensure it's
134
+ # being run inside the synchronicity event loop and binds the lock to the
135
+ # correct event loop on Python 3.9 which eagerly assigns event loops on
136
+ # constructions of locks
137
+ if self._lock is None:
138
+ self._lock = asyncio.Lock()
139
+ return self._lock
133
140
 
134
141
  @staticmethod
135
142
  def new():
@@ -188,7 +195,7 @@ class _Volume(_Object, type_prefix="vo"):
188
195
  environment_name: Optional[str] = None,
189
196
  version: "typing.Optional[modal_proto.api_pb2.VolumeFsVersion.ValueType]" = None,
190
197
  _heartbeat_sleep: float = EPHEMERAL_OBJECT_HEARTBEAT_SLEEP,
191
- ) -> AsyncIterator["_Volume"]:
198
+ ) -> AsyncGenerator["_Volume", None]:
192
199
  """Creates a new ephemeral volume within a context manager:
193
200
 
194
201
  Usage:
@@ -269,7 +276,7 @@ class _Volume(_Object, type_prefix="vo"):
269
276
 
270
277
  @live_method
271
278
  async def _do_reload(self, lock=True):
272
- async with self._lock if lock else asyncnullcontext():
279
+ async with (await self._get_lock()) if lock else asyncnullcontext():
273
280
  req = api_pb2.VolumeReloadRequest(volume_id=self.object_id)
274
281
  _ = await retry_transient_errors(self._client.stub.VolumeReload, req)
275
282
 
@@ -280,7 +287,7 @@ class _Volume(_Object, type_prefix="vo"):
280
287
  If successful, the changes made are now persisted in durable storage and available to other containers accessing
281
288
  the volume.
282
289
  """
283
- async with self._lock:
290
+ async with await self._get_lock():
284
291
  req = api_pb2.VolumeCommitRequest(volume_id=self.object_id)
285
292
  try:
286
293
  # TODO(gongy): only apply indefinite retries on 504 status.
modal/volume.pyi CHANGED
@@ -33,9 +33,9 @@ class FileEntry:
33
33
  def __hash__(self): ...
34
34
 
35
35
  class _Volume(modal.object._Object):
36
- _lock: asyncio.locks.Lock
36
+ _lock: typing.Optional[asyncio.locks.Lock]
37
37
 
38
- def _initialize_from_empty(self): ...
38
+ async def _get_lock(self): ...
39
39
  @staticmethod
40
40
  def new(): ...
41
41
  @staticmethod
@@ -122,10 +122,16 @@ class _VolumeUploadContextManager:
122
122
  ) -> modal_proto.api_pb2.MountFile: ...
123
123
 
124
124
  class Volume(modal.object.Object):
125
- _lock: asyncio.locks.Lock
125
+ _lock: typing.Optional[asyncio.locks.Lock]
126
126
 
127
127
  def __init__(self, *args, **kwargs): ...
128
- def _initialize_from_empty(self): ...
128
+
129
+ class ___get_lock_spec(typing_extensions.Protocol):
130
+ def __call__(self): ...
131
+ async def aio(self): ...
132
+
133
+ _get_lock: ___get_lock_spec
134
+
129
135
  @staticmethod
130
136
  def new(): ...
131
137
  @staticmethod
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: modal
3
- Version: 0.66.44
3
+ Version: 0.67.0
4
4
  Summary: Python client library for Modal
5
5
  Author: Modal Labs
6
6
  Author-email: support@modal.com
@@ -8,23 +8,23 @@ modal/_location.py,sha256=S3lSxIU3h9HkWpkJ3Pwo0pqjIOSB1fjeSgUsY3x7eec,1202
8
8
  modal/_output.py,sha256=SMaLrf1btBzHTV_tH5NzA8ZTWNJh5J0b31iG3sQU8_4,25494
9
9
  modal/_proxy_tunnel.py,sha256=gnKyCfmVB7x2d1A6c-JDysNIP3kEFxmXzhcXhPrzPn0,1906
10
10
  modal/_pty.py,sha256=GhzrHKZpoI-YHMDN7LoySlSYLpoJ4yGPSF-fqiNsFrM,1336
11
- modal/_resolver.py,sha256=b8dHlCzQP7Xpagw5JfWdc1SqAQ5VbTaJmXnv3t-kX9k,6631
11
+ modal/_resolver.py,sha256=s2YSLnpZbwUQHLs2ahltvEVDMLRYyIagdTcWr2-qkeA,6760
12
12
  modal/_resources.py,sha256=zTCcXvmG1erERnTvUcN0r4IjjwVEs4N8fs7OnkpvbJQ,1740
13
13
  modal/_serialization.py,sha256=b1X44hDP7WDTX3iz3HrPyFJJz51a69luq5Tyhnm1fK0,18762
14
14
  modal/_traceback.py,sha256=1yNp1Dqq4qRIQp8idDp5PEqjwH4eA8MNI0FhFkCOFgo,4408
15
15
  modal/_tunnel.py,sha256=SVmQxGbV7dcLwyY9eB2PIWmXw8QQmcKg2ppTcRQgZrU,6283
16
16
  modal/_tunnel.pyi,sha256=SA_Q0UGB-D9skFjv6CqlTnCEWU67a2xJxfwVdXtar3Y,1259
17
17
  modal/_watcher.py,sha256=STlDe73R7IS33a_GMW2HnDc3hCDKLdsBfMxRpVh-flA,3581
18
- modal/app.py,sha256=QEBK8qYSrux36oi3iS3msBQmcUOS1r4s2nengzzynjQ,44658
19
- modal/app.pyi,sha256=wHwBIDqkUb2CQzYVhxZafJ8xZ17TZ-8y-cRyOeZsEm0,25182
18
+ modal/app.py,sha256=ZQux8ZGLblIWbKHn7s15mucx97EwbjJso9WKRTYYOf0,45208
19
+ modal/app.pyi,sha256=sX2BXX_178lp8O_GvwZqsxDdxQi1j3DjNfthMvlMlJU,25273
20
20
  modal/call_graph.py,sha256=l-Wi6vM8aosCdHTWegcCyGeVJGFdZ_fzlCmbRVPBXFI,2593
21
21
  modal/client.py,sha256=4SpWb4n0nolITR36kADZl1tYLOg6avukmzZU56UQjCo,16385
22
- modal/client.pyi,sha256=G8PEZZNj243tqHX-HnfOm5hyUADo34xQEiOLCpPVVxU,7372
22
+ modal/client.pyi,sha256=jlf2MUYWkAYNXCWT8djnfXiTMAPYdp62kqR3Z63wvhg,7370
23
23
  modal/cloud_bucket_mount.py,sha256=eWQhCtMIczpokjfTZEgNBCGO_s5ft46PqTSLfKBykq4,5748
24
24
  modal/cloud_bucket_mount.pyi,sha256=tTF7M4FR9bTA30cFkz8qq3ZTlFL19NHU_36e_5GgAGA,1424
25
- modal/cls.py,sha256=apKnBOHKYEpBiMC8mRvHtCDJl1g0vP0tG1r8mUZ1yH0,24684
26
- modal/cls.pyi,sha256=om3xQuHTMu7q_32BDKJjAz4oP_7Z5JWV27kyDKTPFI8,8332
27
- modal/config.py,sha256=oVmvclQ2Qlt-VmL3wEp8DgDrnTPh_K5UBEYrSXv4C4s,10928
25
+ modal/cls.py,sha256=W3fGE7wdShFwCeWS1oT0LX2_SHBCXy04DgfVt4ggXZA,24692
26
+ modal/cls.pyi,sha256=eVQ3QQC2XwGe2rvYFvjQ57d8ToBXbpI6M-9_YyVQkbo,8214
27
+ modal/config.py,sha256=bij_YRIynxQtwDmS73BNMR9YZf6CHcqbFYdfRqDrWV0,10929
28
28
  modal/container_process.py,sha256=c_jBPtyPeSxbIcbLfs_FzTrt-1eErtRSnsfxkDozFoY,5589
29
29
  modal/container_process.pyi,sha256=k2kClwaSzz11eci1pzFZgCm-ptXapHAyHTOENorlazA,2594
30
30
  modal/dict.py,sha256=axbUKiXhgOVvE1IrNMK3uHg3rp3N0Uji5elQNijnhH4,12571
@@ -33,21 +33,21 @@ modal/environments.py,sha256=KwKdrWfSnz2XF5eYXZyd0kdac1x1PVw2uxPYsGy8cys,6517
33
33
  modal/environments.pyi,sha256=oScvFAclF55-tL9UioLIL_SPBwgy_9O-BBvJ-PLbRgY,3542
34
34
  modal/exception.py,sha256=K-czk1oK8wFvK8snWrytXSByo2WNb9SJAlgBVPGWZBs,6417
35
35
  modal/experimental.py,sha256=jFuNbwrNHos47viMB9q-cHJSvf2RDxDdoEcss9plaZE,2302
36
- modal/functions.py,sha256=BxccB-3a1migZQ6JA6iiHZJQ7WQ-jYpmg9DEZoTxzcc,71639
37
- modal/functions.pyi,sha256=5JGM4Mhpm674Ia7h3OTsPBmZA32goyOs2oBCCUG8A3I,24800
36
+ modal/functions.py,sha256=Z7nTQ51gMyjtSNQNEj55nEhoGWm2scHAFaShfOdPVMM,66939
37
+ modal/functions.pyi,sha256=5i5CTK6Eic-80o8NAPXHPujg_qpLj9d95eN71lpYSxE,24375
38
38
  modal/gpu.py,sha256=r4rL6uH3UJIQthzYvfWauXNyh01WqCPtKZCmmSX1fd4,6881
39
- modal/image.py,sha256=j-NH8pLWk4jd5UOGD4y6W7DHWoeb3rG_VR7zPLSqj-Q,78927
40
- modal/image.pyi,sha256=QEjjnl4ZSmqt7toHww5ZbhL2Re5qaFGgH7qADcJS_vA,24493
39
+ modal/image.py,sha256=f4OB4gfyaSz3mQjumzEMeZT4Uq0SzsGBMN5NkPQQSec,79550
40
+ modal/image.pyi,sha256=3rfae_E0KuNHqdi5j33nHXp_7P3tTkt7QKH5cXYczUc,24672
41
41
  modal/io_streams.py,sha256=XUsNsxRzDrhkjyb2Hx0hugCoOEz266SHQF8wP-VgsfY,14582
42
42
  modal/io_streams.pyi,sha256=WJmSI1WvZITUNBO7mnIuJgYdSKdbLaHk10V4GbttAVw,4452
43
43
  modal/mount.py,sha256=QZ4nabpbNU9tjLIPCq86rlHor9CXzADMkhJWBYfKKgg,27750
44
44
  modal/mount.pyi,sha256=nywUmeUELLY2OEnAc1NNBHmSxuEylTWBzkh6nuXkkuc,9965
45
45
  modal/network_file_system.py,sha256=P_LsILecyda1SRHU76Hk4Lq3M1HSx9shFJbaLThzw0U,14071
46
46
  modal/network_file_system.pyi,sha256=XLyUnDx55ExbJcF_xlKxRax_r06XTvSsQh-a-_EyCOU,7239
47
- modal/object.py,sha256=zbRFZIt-Z3NQtgZPzlcEdy7u36ug4tKAuntYQBR3sDM,9625
48
- modal/object.pyi,sha256=cwWg93H4rBk9evt1itLZAZXH5wUMyTJBZ_ADazgfjGg,8465
47
+ modal/object.py,sha256=Qgee_lQJY_583YsGIVrSNuDF_gJA_qmTAeVTVI1tf-g,9637
48
+ modal/object.pyi,sha256=uGGD5A2B_mj8jxLfFiHama5wzCcBS_GNvPSKsIfsCO0,8518
49
49
  modal/output.py,sha256=FtPR7yvjZMgdSKD_KYkIcwYgCOiV9EKYjaj7K55Hjvg,1940
50
- modal/parallel_map.py,sha256=lf8Wer6FAf8-dYqPqoL45cz7FYDU66-TF-h5CO2Kf5Q,16052
50
+ modal/parallel_map.py,sha256=11scW-3n4JWKT2o5xESkc8GncXeyEnOSIgur058Kf8g,16020
51
51
  modal/parallel_map.pyi,sha256=pOhT0P3DDYlwLx0fR3PTsecA7DI8uOdXC1N8i-ZkyOY,2328
52
52
  modal/partial_function.py,sha256=xkEqMPG0rnP_BUDqGikerv6uiWxDkwZdIFSdoHMDm2A,28216
53
53
  modal/partial_function.pyi,sha256=BqKN7It5QLxS2yhhhDX0RgI8EyNMPBD6Duk21kN_fvA,8908
@@ -57,7 +57,7 @@ modal/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
57
  modal/queue.py,sha256=qCBE-V2QRl_taSDUR5bDJL91J0A8xwbTxfEU3taA4Es,18338
58
58
  modal/queue.pyi,sha256=t5yhDqXRtexy7AVraCexPyT6Xo3QA_H5OxVe_JLzTps,9999
59
59
  modal/retries.py,sha256=z4dYXdksUcjkefM3vGLkhCQ_m_TUPLJgC4uSYDzWSOU,3750
60
- modal/runner.py,sha256=ZHHuPQ130pZzHdm8vOVQx6db4FiEg3SheDNyShVn9Jg,23805
60
+ modal/runner.py,sha256=Yx8SdnxGzHIlqMxhIQiBukF12yj7wh-c6jWwy8w76u8,24081
61
61
  modal/runner.pyi,sha256=b2qoID4HO-ww6Q0jdboR9iCTxVWTzGiC2taIx7kA-U0,5135
62
62
  modal/running_app.py,sha256=AhWWCB16_k5R80oQxEVSNrmRq3fVInUCxtXKrAvcEPQ,566
63
63
  modal/sandbox.py,sha256=_7_sqTrEiC2zFo1XN7UCHA1L9NFXj6Kb6xu6Ecfancg,24878
@@ -71,11 +71,11 @@ modal/serving.pyi,sha256=0KWUH5rdYnihSv1XB8bK9GokzpfzrCq8Sf6nYlUvQI8,1689
71
71
  modal/stream_type.py,sha256=A6320qoAAWhEfwOCZfGtymQTu5AfLfJXXgARqooTPvY,417
72
72
  modal/token_flow.py,sha256=lsVpJACut76AeJLw44vJKMSlpcqp8wcvxdUOoX6CIOc,6754
73
73
  modal/token_flow.pyi,sha256=qEYP7grgqSA440w7kBREU9Ezeo_NxCT67OciIPgDzcc,1958
74
- modal/volume.py,sha256=PfwXajTBuZdxwQv2lHRqzfchn39I77pRiC60Ga1EJo4,28914
75
- modal/volume.pyi,sha256=JbeGYBda2mctzyK2psAen4nnfFB2v3jEB7S7Oyv_Vm0,10986
74
+ modal/volume.py,sha256=5IdcerxXjP9MpAZm9QXPTWRDYZD5UJSFebWGglCha8k,29301
75
+ modal/volume.pyi,sha256=3lB6wiC75u3o44cwJVqDsmvR4wsP2JXSxJrVXi9KrK4,11127
76
76
  modal/_runtime/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
77
77
  modal/_runtime/asgi.py,sha256=WoAwIiGKpk089MOca3_iA73h36v0uBuoPx0-87ajIDY,19843
78
- modal/_runtime/container_io_manager.py,sha256=_MEhwyCSYeCaPQnztPxkm0anRXa3CPcwIKi403N53uo,44120
78
+ modal/_runtime/container_io_manager.py,sha256=qFxBdmOh6Vz_Jc9HW27yM-Wt6rOvhMi1yHUW1CzCneg,44146
79
79
  modal/_runtime/execution_context.py,sha256=cXEVY4wEK-oZJVJptyj1ZplZvVQ1HDzFsyHxhaY4o8M,2718
80
80
  modal/_runtime/telemetry.py,sha256=3NbrfwYH6mvDckzdTppymmda2lQKX2oHGc2JwdFZdUc,5191
81
81
  modal/_runtime/user_code_imports.py,sha256=2COhqA77zwbP__-DWiDHEScHM-Go3CmI-AlKvT_oBOU,14545
@@ -103,17 +103,17 @@ modal/cli/__init__.py,sha256=waLjl5c6IPDhSsdWAm9Bji4e2PVxamYABKAze6CHVXY,28
103
103
  modal/cli/_download.py,sha256=9onXaExi55VJowurB5eDSSCZHyt9NwtS8iLn6Il0WwY,3964
104
104
  modal/cli/_traceback.py,sha256=SWa-emP5A63gvfspJsZgxWQbl_xif8nkIqkvukyG61Y,6954
105
105
  modal/cli/app.py,sha256=KqH4eS_w9rbdactdqSJEx8kVUalFPJ_jpsbdHuvwSTI,7722
106
- modal/cli/config.py,sha256=zfuvXLrQBlxjdmEeXKl6WX6bGXDsFovje114cmkMwak,1524
106
+ modal/cli/config.py,sha256=pXPLmX0bIoV57rQNqIPK7V-yllj-GPRY4jiBO_EklGg,1667
107
107
  modal/cli/container.py,sha256=LGrF9iz8D3PGst6IUl0VB1Y1LJ0BWLrNRNFxWa4z-tg,3199
108
108
  modal/cli/dict.py,sha256=lIEl6uxygFt3omC-oF6tHUxnFjVhy4d0InC_kZrlkvM,4454
109
109
  modal/cli/entry_point.py,sha256=aaNxFAqZcmtSjwzkYIA_Ba9CkL4cL4_i2gy5VjoXxkM,4228
110
110
  modal/cli/environment.py,sha256=eq8Rixbo8u-nJPvtGwW4-I1lXZPnevsFEv65WlSxFXY,4362
111
- modal/cli/import_refs.py,sha256=0sYZLcgcnor_CECq-7yX3WBs1W55nz5y65sbysxxKzY,9267
112
- modal/cli/launch.py,sha256=aY1fXxZyGn1Ih0lAzuAvzpXP6_OxvVCoZCgCIyV9Vos,2692
111
+ modal/cli/import_refs.py,sha256=A866-P6OfZ5kyb1rHUIeaVokR9RVMHyiKvkxg4Ul1_s,9177
112
+ modal/cli/launch.py,sha256=FgZ0L-e3dLl9vRJ_IVHfSRUzCbmdyS8-u_abC42tTDo,2941
113
113
  modal/cli/network_file_system.py,sha256=p_o3wu8rh2tjHXJYrjaad__pD8hv93ypeDtfSY2fSEU,7527
114
114
  modal/cli/profile.py,sha256=s4jCYHwriOorEFCKxeGZoSWX8rXTR_hDTNFZhOA565s,3109
115
115
  modal/cli/queues.py,sha256=mJ44A319sPIrysH3A0HCIz4Or0jFey6miiuQKZoEQxo,4493
116
- modal/cli/run.py,sha256=xwO3NvXRDvoQ9v_9NfRYvMdXW2Ag7W-mkOfnwNWVCoI,16288
116
+ modal/cli/run.py,sha256=RjcN3uLe_y9wLjGGBPjlnq-A7Shsbk7EEkGvy8e15L0,17079
117
117
  modal/cli/secret.py,sha256=GWz425Fhdftb2hDljQzO2NS1NY5ogg298Uu-e0JAQWs,4211
118
118
  modal/cli/token.py,sha256=mxSgOWakXG6N71hQb1ko61XAR9ZGkTMZD-Txn7gmTac,1924
119
119
  modal/cli/utils.py,sha256=59-cqBHSg00oFMRHtRbFZZnoIJfW6w9Gfno63XfNpt4,3633
@@ -142,10 +142,10 @@ modal_global_objects/mounts/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0
142
142
  modal_global_objects/mounts/modal_client_package.py,sha256=W0E_yShsRojPzWm6LtIQqNVolapdnrZkm2hVEQuZK_4,767
143
143
  modal_global_objects/mounts/python_standalone.py,sha256=_vTEX3PECUsatzhDs8lyJmDK0LbFetT1sJB6MIDfFAo,1870
144
144
  modal_proto/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
145
- modal_proto/api.proto,sha256=hc-xY5jmYeimEP0X-nKoiz8pZpMMKidUoNR2IOeebeI,77386
145
+ modal_proto/api.proto,sha256=1zr0aMwKHYgPfkvAjQ5hCRiWbJcuVXxwiuOlLpDU46Y,77644
146
146
  modal_proto/api_grpc.py,sha256=S7h8xe-msb3-Q8oSd7DUoB46z-dcRhsXGb6LjFCLNFI,99013
147
147
  modal_proto/api_pb2.py,sha256=PLRmPloiKDiiziRzbZrzF3Cr-Cn5uCv9USwc7nC_eeg,282809
148
- modal_proto/api_pb2.pyi,sha256=XHVPoCf60XtqCJrj7hIpu3d5ncdk3792ugyNq9XS-f4,378110
148
+ modal_proto/api_pb2.pyi,sha256=LAs_gmu_GYKzfa_8dxXiXsNejnWyWjX5hQ-6MuJmww0,378389
149
149
  modal_proto/api_pb2_grpc.py,sha256=g7EfCSir3xStPPjJOU2U668zz6cGdN6u7SxvTTwU9aU,214126
150
150
  modal_proto/api_pb2_grpc.pyi,sha256=9GhLZVRm69Qhyj_jmGqEGv1rD37Tzj6E6hGzKV08u48,49961
151
151
  modal_proto/modal_api_grpc.py,sha256=en48QTR5fwA7x0twtlsqLKRjjDEAKVoh6EeSznQfQ3U,13236
@@ -157,12 +157,12 @@ modal_proto/options_pb2.pyi,sha256=l7DBrbLO7q3Ir-XDkWsajm0d0TQqqrfuX54i4BMpdQg,1
157
157
  modal_proto/options_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
158
158
  modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0yJSI,247
159
159
  modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
160
- modal_version/__init__.py,sha256=UnAuHBPuPSstqgdCOx0SBVdfhpeJnMlY_oxEbu44Izg,470
160
+ modal_version/__init__.py,sha256=3IY-AWLH55r35_mQXIaut0jrJvoPuf1NZJBQQfSbPuo,470
161
161
  modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
162
- modal_version/_version_generated.py,sha256=K3KTopYH17C5MMGzy3fUGtpOXRNNR7V0OY19WIBopyw,149
163
- modal-0.66.44.dist-info/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
164
- modal-0.66.44.dist-info/METADATA,sha256=YzAinNyCi4yGXbE_WKgrgchbMkTiWxI0ttvOlgIDkYE,2329
165
- modal-0.66.44.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
166
- modal-0.66.44.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
167
- modal-0.66.44.dist-info/top_level.txt,sha256=1nvYbOSIKcmU50fNrpnQnrrOpj269ei3LzgB6j9xGqg,64
168
- modal-0.66.44.dist-info/RECORD,,
162
+ modal_version/_version_generated.py,sha256=v_S9jRzfg8SYOLr5xkcxf8a_PenQzvMuDRleYNn-7Xw,148
163
+ modal-0.67.0.dist-info/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
164
+ modal-0.67.0.dist-info/METADATA,sha256=WiZvxXOnASb0bk5GT9p8Ut5bQR7Q21SyTEtsFvl10SA,2328
165
+ modal-0.67.0.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
166
+ modal-0.67.0.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
167
+ modal-0.67.0.dist-info/top_level.txt,sha256=1nvYbOSIKcmU50fNrpnQnrrOpj269ei3LzgB6j9xGqg,64
168
+ modal-0.67.0.dist-info/RECORD,,
modal_proto/api.proto CHANGED
@@ -339,7 +339,7 @@ message AppGetObjectsItem {
339
339
  message AppGetObjectsRequest {
340
340
  string app_id = 1;
341
341
  bool include_unindexed = 2;
342
- bool only_class_function = 3;
342
+ bool only_class_function = 3; // True starting with 0.67.x clients, which don't create method placeholder functions
343
343
  }
344
344
 
345
345
  message AppGetObjectsResponse {
@@ -596,7 +596,7 @@ message ClassCreateRequest {
596
596
  string existing_class_id = 2;
597
597
  repeated ClassMethod methods = 3;
598
598
  reserved 4; // removed class_function_id
599
- bool only_class_function = 5;
599
+ bool only_class_function = 5; // True starting with 0.67.x clients, which don't create method placeholder functions
600
600
  }
601
601
 
602
602
  message ClassCreateResponse {
@@ -612,7 +612,7 @@ message ClassGetRequest {
612
612
 
613
613
  bool lookup_published = 8; // Lookup class on app published by another workspace
614
614
  string workspace_name = 9;
615
- bool only_class_function = 10;
615
+ bool only_class_function = 10; // True starting with 0.67.x clients, which don't create method placeholder functions
616
616
  }
617
617
 
618
618
  message ClassGetResponse {
modal_proto/api_pb2.pyi CHANGED
@@ -961,6 +961,7 @@ class AppGetObjectsRequest(google.protobuf.message.Message):
961
961
  app_id: builtins.str
962
962
  include_unindexed: builtins.bool
963
963
  only_class_function: builtins.bool
964
+ """True starting with 0.67.x clients, which don't create method placeholder functions"""
964
965
  def __init__(
965
966
  self,
966
967
  *,
@@ -1837,6 +1838,7 @@ class ClassCreateRequest(google.protobuf.message.Message):
1837
1838
  @property
1838
1839
  def methods(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ClassMethod]: ...
1839
1840
  only_class_function: builtins.bool
1841
+ """True starting with 0.67.x clients, which don't create method placeholder functions"""
1840
1842
  def __init__(
1841
1843
  self,
1842
1844
  *,
@@ -1886,6 +1888,7 @@ class ClassGetRequest(google.protobuf.message.Message):
1886
1888
  """Lookup class on app published by another workspace"""
1887
1889
  workspace_name: builtins.str
1888
1890
  only_class_function: builtins.bool
1891
+ """True starting with 0.67.x clients, which don't create method placeholder functions"""
1889
1892
  def __init__(
1890
1893
  self,
1891
1894
  *,
modal_version/__init__.py CHANGED
@@ -7,7 +7,7 @@ from ._version_generated import build_number
7
7
  major_number = 0
8
8
 
9
9
  # Bump this manually on breaking changes, then reset the number in _version_generated.py
10
- minor_number = 66
10
+ minor_number = 67
11
11
 
12
12
  # Right now, automatically increment the patch number in CI
13
13
  __version__ = f"{major_number}.{minor_number}.{max(build_number, 0)}"
@@ -1,4 +1,4 @@
1
1
  # Copyright Modal Labs 2024
2
2
 
3
3
  # Note: Reset this value to -1 whenever you make a minor `0.X` release of the client.
4
- build_number = 44 # git: 10a2cbc
4
+ build_number = 0 # git: 5d793ef