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/_resolver.py +7 -2
- modal/_runtime/container_io_manager.py +1 -1
- modal/app.py +39 -24
- modal/app.pyi +4 -2
- modal/cli/config.py +3 -0
- modal/cli/import_refs.py +2 -2
- modal/cli/launch.py +6 -4
- modal/cli/run.py +18 -5
- modal/client.pyi +2 -2
- modal/cls.py +49 -44
- modal/cls.pyi +2 -4
- modal/config.py +1 -1
- modal/functions.py +4 -98
- modal/functions.pyi +0 -10
- modal/image.py +81 -67
- modal/image.pyi +12 -7
- modal/object.py +2 -2
- modal/object.pyi +4 -2
- modal/parallel_map.py +2 -2
- modal/runner.py +13 -7
- modal/volume.py +13 -6
- modal/volume.pyi +10 -4
- {modal-0.66.44.dist-info → modal-0.67.0.dist-info}/METADATA +1 -1
- {modal-0.66.44.dist-info → modal-0.67.0.dist-info}/RECORD +32 -32
- modal_proto/api.proto +3 -3
- modal_proto/api_pb2.pyi +3 -0
- modal_version/__init__.py +1 -1
- modal_version/_version_generated.py +1 -1
- {modal-0.66.44.dist-info → modal-0.67.0.dist-info}/LICENSE +0 -0
- {modal-0.66.44.dist-info → modal-0.67.0.dist-info}/WHEEL +0 -0
- {modal-0.66.44.dist-info → modal-0.67.0.dist-info}/entry_points.txt +0 -0
- {modal-0.66.44.dist-info → modal-0.67.0.dist-info}/top_level.txt +0 -0
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,
|
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,
|
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
|
-
|
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,
|
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
|
-
|
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,
|
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
|
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
|
-
|
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
|
-
) ->
|
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.
|
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.
|
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
|
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
|
-
|
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
|
@@ -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=
|
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=
|
19
|
-
modal/app.pyi,sha256=
|
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=
|
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=
|
26
|
-
modal/cls.pyi,sha256=
|
27
|
-
modal/config.py,sha256=
|
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=
|
37
|
-
modal/functions.pyi,sha256=
|
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=
|
40
|
-
modal/image.pyi,sha256=
|
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=
|
48
|
-
modal/object.pyi,sha256=
|
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=
|
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=
|
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=
|
75
|
-
modal/volume.pyi,sha256=
|
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=
|
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=
|
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=
|
112
|
-
modal/cli/launch.py,sha256=
|
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=
|
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=
|
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=
|
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=
|
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=
|
163
|
-
modal-0.
|
164
|
-
modal-0.
|
165
|
-
modal-0.
|
166
|
-
modal-0.
|
167
|
-
modal-0.
|
168
|
-
modal-0.
|
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 =
|
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)}"
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|