modal 0.68.31__py3-none-any.whl → 0.68.50__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/_runtime/asgi.py +11 -4
- modal/_traceback.py +6 -2
- modal/_utils/deprecation.py +45 -0
- modal/_utils/function_utils.py +24 -13
- modal/app.py +5 -4
- modal/app.pyi +3 -3
- modal/cli/dict.py +6 -2
- modal/cli/network_file_system.py +1 -1
- modal/cli/run.py +1 -0
- modal/cli/volume.py +1 -1
- modal/client.pyi +2 -2
- modal/cls.py +15 -9
- modal/cls.pyi +5 -5
- modal/dict.py +11 -17
- modal/dict.pyi +8 -12
- modal/environments.py +10 -7
- modal/environments.pyi +6 -6
- modal/functions.py +11 -7
- modal/functions.pyi +7 -5
- modal/gpu.py +22 -0
- modal/image.py +0 -15
- modal/image.pyi +0 -26
- modal/mount.py +14 -8
- modal/mount.pyi +4 -4
- modal/network_file_system.py +12 -19
- modal/network_file_system.pyi +8 -12
- modal/partial_function.py +0 -29
- modal/queue.py +11 -17
- modal/queue.pyi +8 -12
- modal/sandbox.py +2 -0
- modal/secret.py +7 -4
- modal/secret.pyi +5 -5
- modal/volume.py +11 -17
- modal/volume.pyi +8 -12
- {modal-0.68.31.dist-info → modal-0.68.50.dist-info}/METADATA +2 -2
- {modal-0.68.31.dist-info → modal-0.68.50.dist-info}/RECORD +48 -48
- modal_proto/api.proto +9 -0
- modal_proto/api_grpc.py +16 -0
- modal_proto/api_pb2.py +785 -765
- modal_proto/api_pb2.pyi +30 -0
- modal_proto/api_pb2_grpc.py +33 -0
- modal_proto/api_pb2_grpc.pyi +10 -0
- modal_proto/modal_api_grpc.py +1 -0
- modal_version/_version_generated.py +1 -1
- {modal-0.68.31.dist-info → modal-0.68.50.dist-info}/LICENSE +0 -0
- {modal-0.68.31.dist-info → modal-0.68.50.dist-info}/WHEEL +0 -0
- {modal-0.68.31.dist-info → modal-0.68.50.dist-info}/entry_points.txt +0 -0
- {modal-0.68.31.dist-info → modal-0.68.50.dist-info}/top_level.txt +0 -0
modal/queue.py
CHANGED
@@ -13,7 +13,7 @@ from modal_proto import api_pb2
|
|
13
13
|
from ._resolver import Resolver
|
14
14
|
from ._serialization import deserialize, serialize
|
15
15
|
from ._utils.async_utils import TaskContext, synchronize_api, warn_if_generator_is_not_consumed
|
16
|
-
from ._utils.deprecation import
|
16
|
+
from ._utils.deprecation import renamed_parameter
|
17
17
|
from ._utils.grpc_utils import retry_transient_errors
|
18
18
|
from ._utils.name_utils import check_object_name
|
19
19
|
from .client import _Client
|
@@ -94,15 +94,6 @@ class _Queue(_Object, type_prefix="qu"):
|
|
94
94
|
Partition keys must be non-empty and must not exceed 64 bytes.
|
95
95
|
"""
|
96
96
|
|
97
|
-
@staticmethod
|
98
|
-
def new():
|
99
|
-
"""mdmd:hidden"""
|
100
|
-
message = (
|
101
|
-
"`Queue.new` is deprecated."
|
102
|
-
" Please use `Queue.from_name` (for persisted) or `Queue.ephemeral` (for ephemeral) queues instead."
|
103
|
-
)
|
104
|
-
deprecation_error((2024, 3, 19), message)
|
105
|
-
|
106
97
|
def __init__(self):
|
107
98
|
"""mdmd:hidden"""
|
108
99
|
raise RuntimeError("Queue() is not allowed. Please use `Queue.from_name(...)` or `Queue.ephemeral()` instead.")
|
@@ -154,8 +145,9 @@ class _Queue(_Object, type_prefix="qu"):
|
|
154
145
|
yield cls._new_hydrated(response.queue_id, client, None, is_another_app=True)
|
155
146
|
|
156
147
|
@staticmethod
|
148
|
+
@renamed_parameter((2024, 12, 18), "label", "name")
|
157
149
|
def from_name(
|
158
|
-
|
150
|
+
name: str,
|
159
151
|
namespace=api_pb2.DEPLOYMENT_NAMESPACE_WORKSPACE,
|
160
152
|
environment_name: Optional[str] = None,
|
161
153
|
create_if_missing: bool = False,
|
@@ -171,11 +163,11 @@ class _Queue(_Object, type_prefix="qu"):
|
|
171
163
|
q.put(123)
|
172
164
|
```
|
173
165
|
"""
|
174
|
-
check_object_name(
|
166
|
+
check_object_name(name, "Queue")
|
175
167
|
|
176
168
|
async def _load(self: _Queue, resolver: Resolver, existing_object_id: Optional[str]):
|
177
169
|
req = api_pb2.QueueGetOrCreateRequest(
|
178
|
-
deployment_name=
|
170
|
+
deployment_name=name,
|
179
171
|
namespace=namespace,
|
180
172
|
environment_name=_get_environment_name(environment_name, resolver),
|
181
173
|
object_creation_type=(api_pb2.OBJECT_CREATION_TYPE_CREATE_IF_MISSING if create_if_missing else None),
|
@@ -186,8 +178,9 @@ class _Queue(_Object, type_prefix="qu"):
|
|
186
178
|
return _Queue._from_loader(_load, "Queue()", is_another_app=True, hydrate_lazily=True)
|
187
179
|
|
188
180
|
@staticmethod
|
181
|
+
@renamed_parameter((2024, 12, 18), "label", "name")
|
189
182
|
async def lookup(
|
190
|
-
|
183
|
+
name: str,
|
191
184
|
namespace=api_pb2.DEPLOYMENT_NAMESPACE_WORKSPACE,
|
192
185
|
client: Optional[_Client] = None,
|
193
186
|
environment_name: Optional[str] = None,
|
@@ -204,7 +197,7 @@ class _Queue(_Object, type_prefix="qu"):
|
|
204
197
|
```
|
205
198
|
"""
|
206
199
|
obj = _Queue.from_name(
|
207
|
-
|
200
|
+
name, namespace=namespace, environment_name=environment_name, create_if_missing=create_if_missing
|
208
201
|
)
|
209
202
|
if client is None:
|
210
203
|
client = await _Client.from_env()
|
@@ -213,8 +206,9 @@ class _Queue(_Object, type_prefix="qu"):
|
|
213
206
|
return obj
|
214
207
|
|
215
208
|
@staticmethod
|
216
|
-
|
217
|
-
|
209
|
+
@renamed_parameter((2024, 12, 18), "label", "name")
|
210
|
+
async def delete(name: str, *, client: Optional[_Client] = None, environment_name: Optional[str] = None):
|
211
|
+
obj = await _Queue.lookup(name, client=client, environment_name=environment_name)
|
218
212
|
req = api_pb2.QueueDeleteRequest(queue_id=obj.object_id)
|
219
213
|
await retry_transient_errors(obj._client.stub.QueueDelete, req)
|
220
214
|
|
modal/queue.pyi
CHANGED
@@ -6,8 +6,6 @@ import typing
|
|
6
6
|
import typing_extensions
|
7
7
|
|
8
8
|
class _Queue(modal.object._Object):
|
9
|
-
@staticmethod
|
10
|
-
def new(): ...
|
11
9
|
def __init__(self): ...
|
12
10
|
@staticmethod
|
13
11
|
def validate_partition_key(partition: typing.Optional[str]) -> bytes: ...
|
@@ -20,11 +18,11 @@ class _Queue(modal.object._Object):
|
|
20
18
|
) -> typing.AsyncContextManager[_Queue]: ...
|
21
19
|
@staticmethod
|
22
20
|
def from_name(
|
23
|
-
|
21
|
+
name: str, namespace=1, environment_name: typing.Optional[str] = None, create_if_missing: bool = False
|
24
22
|
) -> _Queue: ...
|
25
23
|
@staticmethod
|
26
24
|
async def lookup(
|
27
|
-
|
25
|
+
name: str,
|
28
26
|
namespace=1,
|
29
27
|
client: typing.Optional[modal.client._Client] = None,
|
30
28
|
environment_name: typing.Optional[str] = None,
|
@@ -32,7 +30,7 @@ class _Queue(modal.object._Object):
|
|
32
30
|
) -> _Queue: ...
|
33
31
|
@staticmethod
|
34
32
|
async def delete(
|
35
|
-
|
33
|
+
name: str,
|
36
34
|
*,
|
37
35
|
client: typing.Optional[modal.client._Client] = None,
|
38
36
|
environment_name: typing.Optional[str] = None,
|
@@ -89,8 +87,6 @@ class _Queue(modal.object._Object):
|
|
89
87
|
class Queue(modal.object.Object):
|
90
88
|
def __init__(self): ...
|
91
89
|
@staticmethod
|
92
|
-
def new(): ...
|
93
|
-
@staticmethod
|
94
90
|
def validate_partition_key(partition: typing.Optional[str]) -> bytes: ...
|
95
91
|
@classmethod
|
96
92
|
def ephemeral(
|
@@ -101,13 +97,13 @@ class Queue(modal.object.Object):
|
|
101
97
|
) -> synchronicity.combined_types.AsyncAndBlockingContextManager[Queue]: ...
|
102
98
|
@staticmethod
|
103
99
|
def from_name(
|
104
|
-
|
100
|
+
name: str, namespace=1, environment_name: typing.Optional[str] = None, create_if_missing: bool = False
|
105
101
|
) -> Queue: ...
|
106
102
|
|
107
103
|
class __lookup_spec(typing_extensions.Protocol):
|
108
104
|
def __call__(
|
109
105
|
self,
|
110
|
-
|
106
|
+
name: str,
|
111
107
|
namespace=1,
|
112
108
|
client: typing.Optional[modal.client.Client] = None,
|
113
109
|
environment_name: typing.Optional[str] = None,
|
@@ -115,7 +111,7 @@ class Queue(modal.object.Object):
|
|
115
111
|
) -> Queue: ...
|
116
112
|
async def aio(
|
117
113
|
self,
|
118
|
-
|
114
|
+
name: str,
|
119
115
|
namespace=1,
|
120
116
|
client: typing.Optional[modal.client.Client] = None,
|
121
117
|
environment_name: typing.Optional[str] = None,
|
@@ -127,14 +123,14 @@ class Queue(modal.object.Object):
|
|
127
123
|
class __delete_spec(typing_extensions.Protocol):
|
128
124
|
def __call__(
|
129
125
|
self,
|
130
|
-
|
126
|
+
name: str,
|
131
127
|
*,
|
132
128
|
client: typing.Optional[modal.client.Client] = None,
|
133
129
|
environment_name: typing.Optional[str] = None,
|
134
130
|
): ...
|
135
131
|
async def aio(
|
136
132
|
self,
|
137
|
-
|
133
|
+
name: str,
|
138
134
|
*,
|
139
135
|
client: typing.Optional[modal.client.Client] = None,
|
140
136
|
environment_name: typing.Optional[str] = None,
|
modal/sandbox.py
CHANGED
@@ -118,6 +118,8 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
118
118
|
for _, cloud_bucket_mount in cloud_bucket_mounts:
|
119
119
|
if cloud_bucket_mount.secret:
|
120
120
|
deps.append(cloud_bucket_mount.secret)
|
121
|
+
if proxy:
|
122
|
+
deps.append(proxy)
|
121
123
|
return deps
|
122
124
|
|
123
125
|
async def _load(self: _Sandbox, resolver: Resolver, _existing_object_id: Optional[str]):
|
modal/secret.py
CHANGED
@@ -9,6 +9,7 @@ from modal_proto import api_pb2
|
|
9
9
|
from ._resolver import Resolver
|
10
10
|
from ._runtime.execution_context import is_local
|
11
11
|
from ._utils.async_utils import synchronize_api
|
12
|
+
from ._utils.deprecation import renamed_parameter
|
12
13
|
from ._utils.grpc_utils import retry_transient_errors
|
13
14
|
from ._utils.name_utils import check_object_name
|
14
15
|
from .client import _Client
|
@@ -161,8 +162,9 @@ class _Secret(_Object, type_prefix="st"):
|
|
161
162
|
return _Secret._from_loader(_load, "Secret.from_dotenv()", hydrate_lazily=True)
|
162
163
|
|
163
164
|
@staticmethod
|
165
|
+
@renamed_parameter((2024, 12, 18), "label", "name")
|
164
166
|
def from_name(
|
165
|
-
|
167
|
+
name: str,
|
166
168
|
namespace=api_pb2.DEPLOYMENT_NAMESPACE_WORKSPACE,
|
167
169
|
environment_name: Optional[str] = None,
|
168
170
|
required_keys: list[
|
@@ -186,7 +188,7 @@ class _Secret(_Object, type_prefix="st"):
|
|
186
188
|
|
187
189
|
async def _load(self: _Secret, resolver: Resolver, existing_object_id: Optional[str]):
|
188
190
|
req = api_pb2.SecretGetOrCreateRequest(
|
189
|
-
deployment_name=
|
191
|
+
deployment_name=name,
|
190
192
|
namespace=namespace,
|
191
193
|
environment_name=_get_environment_name(environment_name, resolver),
|
192
194
|
required_keys=required_keys,
|
@@ -203,8 +205,9 @@ class _Secret(_Object, type_prefix="st"):
|
|
203
205
|
return _Secret._from_loader(_load, "Secret()", hydrate_lazily=True)
|
204
206
|
|
205
207
|
@staticmethod
|
208
|
+
@renamed_parameter((2024, 12, 18), "label", "name")
|
206
209
|
async def lookup(
|
207
|
-
|
210
|
+
name: str,
|
208
211
|
namespace=api_pb2.DEPLOYMENT_NAMESPACE_WORKSPACE,
|
209
212
|
client: Optional[_Client] = None,
|
210
213
|
environment_name: Optional[str] = None,
|
@@ -212,7 +215,7 @@ class _Secret(_Object, type_prefix="st"):
|
|
212
215
|
) -> "_Secret":
|
213
216
|
"""mdmd:hidden"""
|
214
217
|
obj = _Secret.from_name(
|
215
|
-
|
218
|
+
name, namespace=namespace, environment_name=environment_name, required_keys=required_keys
|
216
219
|
)
|
217
220
|
if client is None:
|
218
221
|
client = await _Client.from_env()
|
modal/secret.pyi
CHANGED
@@ -12,11 +12,11 @@ class _Secret(modal.object._Object):
|
|
12
12
|
def from_dotenv(path=None, *, filename=".env"): ...
|
13
13
|
@staticmethod
|
14
14
|
def from_name(
|
15
|
-
|
15
|
+
name: str, namespace=1, environment_name: typing.Optional[str] = None, required_keys: list[str] = []
|
16
16
|
) -> _Secret: ...
|
17
17
|
@staticmethod
|
18
18
|
async def lookup(
|
19
|
-
|
19
|
+
name: str,
|
20
20
|
namespace=1,
|
21
21
|
client: typing.Optional[modal.client._Client] = None,
|
22
22
|
environment_name: typing.Optional[str] = None,
|
@@ -42,13 +42,13 @@ class Secret(modal.object.Object):
|
|
42
42
|
def from_dotenv(path=None, *, filename=".env"): ...
|
43
43
|
@staticmethod
|
44
44
|
def from_name(
|
45
|
-
|
45
|
+
name: str, namespace=1, environment_name: typing.Optional[str] = None, required_keys: list[str] = []
|
46
46
|
) -> Secret: ...
|
47
47
|
|
48
48
|
class __lookup_spec(typing_extensions.Protocol):
|
49
49
|
def __call__(
|
50
50
|
self,
|
51
|
-
|
51
|
+
name: str,
|
52
52
|
namespace=1,
|
53
53
|
client: typing.Optional[modal.client.Client] = None,
|
54
54
|
environment_name: typing.Optional[str] = None,
|
@@ -56,7 +56,7 @@ class Secret(modal.object.Object):
|
|
56
56
|
) -> Secret: ...
|
57
57
|
async def aio(
|
58
58
|
self,
|
59
|
-
|
59
|
+
name: str,
|
60
60
|
namespace=1,
|
61
61
|
client: typing.Optional[modal.client.Client] = None,
|
62
62
|
environment_name: typing.Optional[str] = None,
|
modal/volume.py
CHANGED
@@ -36,7 +36,7 @@ from ._utils.blob_utils import (
|
|
36
36
|
get_file_upload_spec_from_fileobj,
|
37
37
|
get_file_upload_spec_from_path,
|
38
38
|
)
|
39
|
-
from ._utils.deprecation import deprecation_error, deprecation_warning
|
39
|
+
from ._utils.deprecation import deprecation_error, deprecation_warning, renamed_parameter
|
40
40
|
from ._utils.grpc_utils import retry_transient_errors
|
41
41
|
from ._utils.name_utils import check_object_name
|
42
42
|
from .client import _Client
|
@@ -135,17 +135,9 @@ class _Volume(_Object, type_prefix="vo"):
|
|
135
135
|
return self._lock
|
136
136
|
|
137
137
|
@staticmethod
|
138
|
-
|
139
|
-
"""mdmd:hidden"""
|
140
|
-
message = (
|
141
|
-
"`Volume.new` is deprecated."
|
142
|
-
" Please use `Volume.from_name` (for persisted) or `Volume.ephemeral` (for ephemeral) volumes instead."
|
143
|
-
)
|
144
|
-
deprecation_error((2024, 3, 20), message)
|
145
|
-
|
146
|
-
@staticmethod
|
138
|
+
@renamed_parameter((2024, 12, 18), "label", "name")
|
147
139
|
def from_name(
|
148
|
-
|
140
|
+
name: str,
|
149
141
|
namespace=api_pb2.DEPLOYMENT_NAMESPACE_WORKSPACE,
|
150
142
|
environment_name: Optional[str] = None,
|
151
143
|
create_if_missing: bool = False,
|
@@ -168,11 +160,11 @@ class _Volume(_Object, type_prefix="vo"):
|
|
168
160
|
pass
|
169
161
|
```
|
170
162
|
"""
|
171
|
-
check_object_name(
|
163
|
+
check_object_name(name, "Volume")
|
172
164
|
|
173
165
|
async def _load(self: _Volume, resolver: Resolver, existing_object_id: Optional[str]):
|
174
166
|
req = api_pb2.VolumeGetOrCreateRequest(
|
175
|
-
deployment_name=
|
167
|
+
deployment_name=name,
|
176
168
|
namespace=namespace,
|
177
169
|
environment_name=_get_environment_name(environment_name, resolver),
|
178
170
|
object_creation_type=(api_pb2.OBJECT_CREATION_TYPE_CREATE_IF_MISSING if create_if_missing else None),
|
@@ -220,8 +212,9 @@ class _Volume(_Object, type_prefix="vo"):
|
|
220
212
|
yield cls._new_hydrated(response.volume_id, client, None, is_another_app=True)
|
221
213
|
|
222
214
|
@staticmethod
|
215
|
+
@renamed_parameter((2024, 12, 18), "label", "name")
|
223
216
|
async def lookup(
|
224
|
-
|
217
|
+
name: str,
|
225
218
|
namespace=api_pb2.DEPLOYMENT_NAMESPACE_WORKSPACE,
|
226
219
|
client: Optional[_Client] = None,
|
227
220
|
environment_name: Optional[str] = None,
|
@@ -239,7 +232,7 @@ class _Volume(_Object, type_prefix="vo"):
|
|
239
232
|
```
|
240
233
|
"""
|
241
234
|
obj = _Volume.from_name(
|
242
|
-
|
235
|
+
name,
|
243
236
|
namespace=namespace,
|
244
237
|
environment_name=environment_name,
|
245
238
|
create_if_missing=create_if_missing,
|
@@ -507,8 +500,9 @@ class _Volume(_Object, type_prefix="vo"):
|
|
507
500
|
)
|
508
501
|
|
509
502
|
@staticmethod
|
510
|
-
|
511
|
-
|
503
|
+
@renamed_parameter((2024, 12, 18), "label", "name")
|
504
|
+
async def delete(name: str, client: Optional[_Client] = None, environment_name: Optional[str] = None):
|
505
|
+
obj = await _Volume.lookup(name, client=client, environment_name=environment_name)
|
512
506
|
req = api_pb2.VolumeDeleteRequest(volume_id=obj.object_id)
|
513
507
|
await retry_transient_errors(obj._client.stub.VolumeDelete, req)
|
514
508
|
|
modal/volume.pyi
CHANGED
@@ -38,10 +38,8 @@ class _Volume(modal.object._Object):
|
|
38
38
|
|
39
39
|
async def _get_lock(self): ...
|
40
40
|
@staticmethod
|
41
|
-
def new(): ...
|
42
|
-
@staticmethod
|
43
41
|
def from_name(
|
44
|
-
|
42
|
+
name: str,
|
45
43
|
namespace=1,
|
46
44
|
environment_name: typing.Optional[str] = None,
|
47
45
|
create_if_missing: bool = False,
|
@@ -57,7 +55,7 @@ class _Volume(modal.object._Object):
|
|
57
55
|
) -> typing.AsyncContextManager[_Volume]: ...
|
58
56
|
@staticmethod
|
59
57
|
async def lookup(
|
60
|
-
|
58
|
+
name: str,
|
61
59
|
namespace=1,
|
62
60
|
client: typing.Optional[modal.client._Client] = None,
|
63
61
|
environment_name: typing.Optional[str] = None,
|
@@ -85,7 +83,7 @@ class _Volume(modal.object._Object):
|
|
85
83
|
async def _instance_delete(self): ...
|
86
84
|
@staticmethod
|
87
85
|
async def delete(
|
88
|
-
|
86
|
+
name: str, client: typing.Optional[modal.client._Client] = None, environment_name: typing.Optional[str] = None
|
89
87
|
): ...
|
90
88
|
|
91
89
|
class _VolumeUploadContextManager:
|
@@ -133,11 +131,9 @@ class Volume(modal.object.Object):
|
|
133
131
|
|
134
132
|
_get_lock: ___get_lock_spec
|
135
133
|
|
136
|
-
@staticmethod
|
137
|
-
def new(): ...
|
138
134
|
@staticmethod
|
139
135
|
def from_name(
|
140
|
-
|
136
|
+
name: str,
|
141
137
|
namespace=1,
|
142
138
|
environment_name: typing.Optional[str] = None,
|
143
139
|
create_if_missing: bool = False,
|
@@ -155,7 +151,7 @@ class Volume(modal.object.Object):
|
|
155
151
|
class __lookup_spec(typing_extensions.Protocol):
|
156
152
|
def __call__(
|
157
153
|
self,
|
158
|
-
|
154
|
+
name: str,
|
159
155
|
namespace=1,
|
160
156
|
client: typing.Optional[modal.client.Client] = None,
|
161
157
|
environment_name: typing.Optional[str] = None,
|
@@ -164,7 +160,7 @@ class Volume(modal.object.Object):
|
|
164
160
|
) -> Volume: ...
|
165
161
|
async def aio(
|
166
162
|
self,
|
167
|
-
|
163
|
+
name: str,
|
168
164
|
namespace=1,
|
169
165
|
client: typing.Optional[modal.client.Client] = None,
|
170
166
|
environment_name: typing.Optional[str] = None,
|
@@ -263,13 +259,13 @@ class Volume(modal.object.Object):
|
|
263
259
|
class __delete_spec(typing_extensions.Protocol):
|
264
260
|
def __call__(
|
265
261
|
self,
|
266
|
-
|
262
|
+
name: str,
|
267
263
|
client: typing.Optional[modal.client.Client] = None,
|
268
264
|
environment_name: typing.Optional[str] = None,
|
269
265
|
): ...
|
270
266
|
async def aio(
|
271
267
|
self,
|
272
|
-
|
268
|
+
name: str,
|
273
269
|
client: typing.Optional[modal.client.Client] = None,
|
274
270
|
environment_name: typing.Optional[str] = None,
|
275
271
|
): ...
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: modal
|
3
|
-
Version: 0.68.
|
3
|
+
Version: 0.68.50
|
4
4
|
Summary: Python client library for Modal
|
5
5
|
Author: Modal Labs
|
6
6
|
Author-email: support@modal.com
|
@@ -21,7 +21,7 @@ Requires-Dist: fastapi
|
|
21
21
|
Requires-Dist: grpclib (==0.4.7)
|
22
22
|
Requires-Dist: protobuf (!=4.24.0,<6.0,>=3.19)
|
23
23
|
Requires-Dist: rich (>=12.0.0)
|
24
|
-
Requires-Dist: synchronicity (~=0.9.
|
24
|
+
Requires-Dist: synchronicity (~=0.9.8)
|
25
25
|
Requires-Dist: toml
|
26
26
|
Requires-Dist: typer (>=0.9)
|
27
27
|
Requires-Dist: types-certifi
|
@@ -11,73 +11,73 @@ modal/_pty.py,sha256=JZfPDDpzqICZqtyPI_oMJf_9w-p_lLNuzHhwhodUXio,1329
|
|
11
11
|
modal/_resolver.py,sha256=TtowKu2LdZ7NpiYkSXs058BZ4ivY8KVYdchqLfREkiA,6775
|
12
12
|
modal/_resources.py,sha256=5qmcirXUI8dSH926nwkUaeX9H25mqYu9mXD_KuT79-o,1733
|
13
13
|
modal/_serialization.py,sha256=qPLH6OUEBas1CT-a6i5pOP1hPGt5AfKr9q7RMUTFOMc,18722
|
14
|
-
modal/_traceback.py,sha256=
|
14
|
+
modal/_traceback.py,sha256=IZQzB3fVlUfMHOSyKUgw0H6qv4yHnpyq-XVCNZKfUdA,5023
|
15
15
|
modal/_tunnel.py,sha256=o-jJhS4vQ6-XswDhHcJWGMZZmD03SC0e9i8fEu1JTjo,6310
|
16
16
|
modal/_tunnel.pyi,sha256=JmmDYAy9F1FpgJ_hWx0xkom2nTOFQjn4mTPYlU3PFo4,1245
|
17
17
|
modal/_watcher.py,sha256=K6LYnlmSGQB4tWWI9JADv-tvSvQ1j522FwT71B51CX8,3584
|
18
|
-
modal/app.py,sha256=
|
19
|
-
modal/app.pyi,sha256=
|
18
|
+
modal/app.py,sha256=JWefPs4yB70BKQwSZejB_4_muhxn63cC9UmnNvpQ9XY,45526
|
19
|
+
modal/app.pyi,sha256=FYPCEJNhof4YF6HIuNP_2yG6s2PgZnKW9tO1hFE6sfA,25194
|
20
20
|
modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
|
21
21
|
modal/client.py,sha256=JAnd4-GCN093BwkvOFAK5a6iy5ycxofjpUncMxlrIMw,15253
|
22
|
-
modal/client.pyi,sha256=
|
22
|
+
modal/client.pyi,sha256=F97Ao08XxQn1RMnJx2ZYX_R2bP9k-d_rekRUjHvVzEE,7280
|
23
23
|
modal/cloud_bucket_mount.py,sha256=G7T7jWLD0QkmrfKR75mSTwdUZ2xNfj7pkVqb4ipmxmI,5735
|
24
24
|
modal/cloud_bucket_mount.pyi,sha256=CEi7vrH3kDUF4LAy4qP6tfImy2UJuFRcRbsgRNM1wo8,1403
|
25
|
-
modal/cls.py,sha256=
|
26
|
-
modal/cls.pyi,sha256=
|
25
|
+
modal/cls.py,sha256=3hjb0JcoPjxKZNeK22f5rR43bZRBjoRI7_EMZXY7YrE,31172
|
26
|
+
modal/cls.pyi,sha256=ooDU2IaGgD5VQ3jDX2KCrqb3a91-AdKv8yKYSkjnW8Y,8230
|
27
27
|
modal/config.py,sha256=BzhZYUUwOmvVwf6x5kf0ywMC257s648dmuhsnB6g3gk,11041
|
28
28
|
modal/container_process.py,sha256=WTqLn01dJPVkPpwR_0w_JH96ceN5mV4TGtiu1ZR2RRA,6108
|
29
29
|
modal/container_process.pyi,sha256=dqtqBmyRpXXpRrDooESL6WBVU_1Rh6OG-66P2Hk9E5U,2666
|
30
|
-
modal/dict.py,sha256=
|
31
|
-
modal/dict.pyi,sha256=
|
32
|
-
modal/environments.py,sha256=
|
33
|
-
modal/environments.pyi,sha256=
|
30
|
+
modal/dict.py,sha256=ei9jsA5iTj4UFGPJxTAed6vjd49W47ezDtj0koUmVts,12497
|
31
|
+
modal/dict.pyi,sha256=VmbzxltA2vFlIHZCxpNGtd-ieXwcUwdw3iyy3WCweqU,7115
|
32
|
+
modal/environments.py,sha256=wbv9ttFCbzATGfwcmvYiG608PfHovx0AQmawsg-jmic,6660
|
33
|
+
modal/environments.pyi,sha256=rF7oaaELoSNuoD6qImGnIbuGPtgWwR5SlcExyYJ61hQ,3515
|
34
34
|
modal/exception.py,sha256=GEV6xMnVnkle0gsFZVLB4B7cUMyw8HzVDvAvPr34ZV4,5185
|
35
35
|
modal/experimental.py,sha256=jFuNbwrNHos47viMB9q-cHJSvf2RDxDdoEcss9plaZE,2302
|
36
36
|
modal/file_io.py,sha256=pDOFNQU5m-x-k3oJauck4fOp3bZ55Vc-_LvSaN5_Bow,16465
|
37
37
|
modal/file_io.pyi,sha256=GMhCCRyMftXYI3HqI9EdGPOx70CbCNi-VC5Sfy5TYnc,7631
|
38
38
|
modal/file_pattern_matcher.py,sha256=V6P74Vc7LAuBFe_uepIaZmoDJiuAvqjFibe0GcMJwxo,5119
|
39
|
-
modal/functions.py,sha256=
|
40
|
-
modal/functions.pyi,sha256=
|
41
|
-
modal/gpu.py,sha256=
|
42
|
-
modal/image.py,sha256
|
43
|
-
modal/image.pyi,sha256=
|
39
|
+
modal/functions.py,sha256=aXXXr3rk7BCeh5OWMvxGksGm8FQoYCyrBDGV74FPoPE,67827
|
40
|
+
modal/functions.pyi,sha256=snttn47K81lKhmrCLWNVZelZTDhNsbxtw4l1DlLDR74,25317
|
41
|
+
modal/gpu.py,sha256=MTxj6ql8EpgfBg8YmZ5a1cLznyuZFssX1qXbEX4LKVM,7503
|
42
|
+
modal/image.py,sha256=sv45bYaF5Jlmk8mQE3EDADYyXLi14hOe2CUM0Zb8Xao,82243
|
43
|
+
modal/image.pyi,sha256=VY_4HnDBhW8u_Zd3n-YBZ1H9idbTorWGwzsAzY7-B70,24213
|
44
44
|
modal/io_streams.py,sha256=QkQiizKRzd5bnbKQsap31LJgBYlAnj4-XkV_50xPYX0,15079
|
45
45
|
modal/io_streams.pyi,sha256=bCCVSxkMcosYd8O3PQDDwJw7TQ8JEcnYonLJ5t27TQs,4804
|
46
|
-
modal/mount.py,sha256=
|
47
|
-
modal/mount.pyi,sha256=
|
48
|
-
modal/network_file_system.py,sha256=
|
49
|
-
modal/network_file_system.pyi,sha256=
|
46
|
+
modal/mount.py,sha256=Miu9V5LB80uoMasSXxxf0aYTC7H1G08PjnjmmjQdyRc,29346
|
47
|
+
modal/mount.pyi,sha256=7dKl_JeVka3g4oKw7D-FFRU-Zpadt9LJEcfNUnhj540,10491
|
48
|
+
modal/network_file_system.py,sha256=INj1TfN_Fsmabmlte7anvey1epodjbMmjBW_TIJSST4,14406
|
49
|
+
modal/network_file_system.pyi,sha256=61M-sdWrtaRjmuNVsvusI6kf1Qw-jUOVXvEAeOkM8Aw,7751
|
50
50
|
modal/object.py,sha256=HZs3N59C6JxlMuPQWJYvrWV1FEEkH9txUovVDorVUbs,9763
|
51
51
|
modal/object.pyi,sha256=MO78H9yFSE5i1gExPEwyyQzLdlshkcGHN1aQ0ylyvq0,8802
|
52
52
|
modal/output.py,sha256=N0xf4qeudEaYrslzdAl35VKV8rapstgIM2e9wO8_iy0,1967
|
53
53
|
modal/parallel_map.py,sha256=4aoMXIrlG3wl5Ifk2YDNOQkXsGRsm6Xbfm6WtJ2t3WY,16002
|
54
54
|
modal/parallel_map.pyi,sha256=pOhT0P3DDYlwLx0fR3PTsecA7DI8uOdXC1N8i-ZkyOY,2328
|
55
|
-
modal/partial_function.py,sha256=
|
55
|
+
modal/partial_function.py,sha256=pDDNR6KTaIIPpuKQaoO1vgP83_LTwxMhtOn6sVRrmC8,27862
|
56
56
|
modal/partial_function.pyi,sha256=pO6kf8i5HVsZ7CF0z_KkzLk4Aeq7NJhFJ_VNIycRXaU,9260
|
57
57
|
modal/proxy.py,sha256=ZrOsuQP7dSZFq1OrIxalNnt0Zvsnp1h86Th679sSL40,1417
|
58
58
|
modal/proxy.pyi,sha256=UvygdOYneLTuoDY6hVaMNCyZ947Tmx93IdLjErUqkvM,368
|
59
59
|
modal/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
60
|
-
modal/queue.py,sha256=
|
61
|
-
modal/queue.pyi,sha256=
|
60
|
+
modal/queue.py,sha256=zMUQtdAyqZzBg-2iAo3c3G54HLP7TEWfVhiQXLjewb4,18556
|
61
|
+
modal/queue.pyi,sha256=gGV97pWelSSYqMV9Bl4ys3mSP7q82fS71oqSWeAwyDE,9818
|
62
62
|
modal/retries.py,sha256=HKR2Q9aNPWkMjQ5nwobqYTuZaSuw0a8lI2zrtY5IW98,5230
|
63
63
|
modal/runner.py,sha256=qfkB0OM97kb_-oP-D5KPj_jUwfd8ePUA3R_zLkjSTBQ,24586
|
64
64
|
modal/runner.pyi,sha256=BvMS1ZVzWSn8B8q0KnIZOJKPkN5L-i5b-USbV6SWWHQ,5177
|
65
65
|
modal/running_app.py,sha256=CshNvGDJtagOdKW54uYjY8HY73j2TpnsL9jkPFZAsfA,560
|
66
|
-
modal/sandbox.py,sha256=
|
66
|
+
modal/sandbox.py,sha256=c-Qli3QJPN7bBQzsTk4iS51zurNlq--InZ2eRR-B6No,28106
|
67
67
|
modal/sandbox.pyi,sha256=k8_vHjN3oigxSCF13Cm2HfcSHuliGuSb8ryd3CGqwoA,19815
|
68
68
|
modal/schedule.py,sha256=0ZFpKs1bOxeo5n3HZjoL7OE2ktsb-_oGtq-WJEPO4tY,2615
|
69
69
|
modal/scheduler_placement.py,sha256=BAREdOY5HzHpzSBqt6jDVR6YC_jYfHMVqOzkyqQfngU,1235
|
70
|
-
modal/secret.py,sha256=
|
71
|
-
modal/secret.pyi,sha256=
|
70
|
+
modal/secret.py,sha256=lebVTZi4fC9PXQpLVmsvgQLzy-2Kzxv1WBD0Jr2wsxQ,10117
|
71
|
+
modal/secret.pyi,sha256=0SyCyiYamr97htTmMjPZKvp5AQZKFF9GO_Ia2VcgrtA,2952
|
72
72
|
modal/serving.py,sha256=MnVuTsimN05LfNPxuJZ4sr5s1_BPUkIsOP_VC-bkp78,4464
|
73
73
|
modal/serving.pyi,sha256=ncV-9jY_vZYFnGs5ZnMb3ffrX8LmcLdIMHBC56xRbtE,1711
|
74
74
|
modal/stream_type.py,sha256=A6320qoAAWhEfwOCZfGtymQTu5AfLfJXXgARqooTPvY,417
|
75
75
|
modal/token_flow.py,sha256=LcgSce_MSQ2p7j55DPwpVRpiAtCDe8GRSEwzO7muNR8,6774
|
76
76
|
modal/token_flow.pyi,sha256=gOYtYujrWt_JFZeiI8EmfahXPx5GCR5Na-VaPQcWgEY,1937
|
77
|
-
modal/volume.py,sha256=
|
78
|
-
modal/volume.pyi,sha256=
|
77
|
+
modal/volume.py,sha256=T-pLxCYqmqRO6OolpAXlPxomMu0RWjti2e4kUpaj2cQ,29229
|
78
|
+
modal/volume.pyi,sha256=eekb2dnAAwFK_NO9ciAOOTthl8NP1iAmMFrCGgjDA2k,11100
|
79
79
|
modal/_runtime/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
|
80
|
-
modal/_runtime/asgi.py,sha256=
|
80
|
+
modal/_runtime/asgi.py,sha256=Mjs859pSgOmtZL-YmEsSKN557v1A2Ax_5-ERgPfj55E,21920
|
81
81
|
modal/_runtime/container_io_manager.py,sha256=ctgyNFiHjq1brCrabXmlurkAXjnrCeWPRvTVa735vRw,44215
|
82
82
|
modal/_runtime/execution_context.py,sha256=E6ofm6j1POXGPxS841X3V7JU6NheVb8OkQc7JpLq4Kg,2712
|
83
83
|
modal/_runtime/telemetry.py,sha256=T1RoAGyjBDr1swiM6pPsGRSITm7LI5FDK18oNXxY08U,5163
|
@@ -87,8 +87,8 @@ modal/_utils/app_utils.py,sha256=88BT4TPLWfYAQwKTHcyzNQRHg8n9B-QE2UyJs96iV-0,108
|
|
87
87
|
modal/_utils/async_utils.py,sha256=9ubwMkwiDB4gzOYG2jL9j7Fs-5dxHjcifZe3r7JRg-k,25091
|
88
88
|
modal/_utils/blob_utils.py,sha256=N66LtZI8PpCkZ7maA7GLW5CAmYUoNJdG-GjaAUR4_NQ,14509
|
89
89
|
modal/_utils/bytes_io_segment_payload.py,sha256=uunxVJS4PE1LojF_UpURMzVK9GuvmYWRqQo_bxEj5TU,3385
|
90
|
-
modal/_utils/deprecation.py,sha256=
|
91
|
-
modal/_utils/function_utils.py,sha256=
|
90
|
+
modal/_utils/deprecation.py,sha256=dycySRBxyZf3ITzEqPNM6MxXTk9-0VVLA8oCPQ5j_Os,3426
|
91
|
+
modal/_utils/function_utils.py,sha256=4LYFbNY5aHc96QitwP4Ty-dBl45SD1HjfZrvBFUF-ko,25343
|
92
92
|
modal/_utils/grpc_testing.py,sha256=H1zHqthv19eGPJz2HKXDyWXWGSqO4BRsxah3L5Xaa8A,8619
|
93
93
|
modal/_utils/grpc_utils.py,sha256=PPB5ay-vXencXNIWPVw5modr3EH7gfq2QPcO5YJ1lMU,7737
|
94
94
|
modal/_utils/hash_utils.py,sha256=zg3J6OGxTFGSFri1qQ12giDz90lWk8bzaxCTUCRtiX4,3034
|
@@ -110,19 +110,19 @@ modal/cli/_traceback.py,sha256=QlLa_iw3fAOA-mqCqjS8qAxvNT48J3YY3errtVVc2cw,7316
|
|
110
110
|
modal/cli/app.py,sha256=HkwI38FZxx66jxiur4o_DRN3uwyO3L8hqgyo8oXKZxc,7726
|
111
111
|
modal/cli/config.py,sha256=pXPLmX0bIoV57rQNqIPK7V-yllj-GPRY4jiBO_EklGg,1667
|
112
112
|
modal/cli/container.py,sha256=nCySVD10VJPzmX3ghTsGmpxdYeVYYMW6ofjsyt2gQcM,3667
|
113
|
-
modal/cli/dict.py,sha256=
|
113
|
+
modal/cli/dict.py,sha256=HaEcjfll7i3Uj3Fg56aj4407if5UljsYfr6fIq-D2W8,4589
|
114
114
|
modal/cli/entry_point.py,sha256=aaNxFAqZcmtSjwzkYIA_Ba9CkL4cL4_i2gy5VjoXxkM,4228
|
115
115
|
modal/cli/environment.py,sha256=Ayddkiq9jdj3XYDJ8ZmUqFpPPH8xajYlbexRkzGtUcg,4334
|
116
116
|
modal/cli/import_refs.py,sha256=wnqE5AMeyAN3IZmQvJCp54KRnJh8Nq_5fMqB6u6GEL8,9147
|
117
117
|
modal/cli/launch.py,sha256=uyI-ouGvYRjHLGxGQ2lYBZq32BiRT1i0L8ksz5iy7K8,2935
|
118
|
-
modal/cli/network_file_system.py,sha256=
|
118
|
+
modal/cli/network_file_system.py,sha256=o6VLTgN4xn5XUiNPBfxYec-5uWCgYrDmfFFLM1ZW_eE,8180
|
119
119
|
modal/cli/profile.py,sha256=rLXfjJObfPNjaZvNfHGIKqs7y9bGYyGe-K7V0w-Ni0M,3110
|
120
120
|
modal/cli/queues.py,sha256=MIh2OsliNE2QeL1erubfsRsNuG4fxqcqWA2vgIfQ4Mg,4494
|
121
|
-
modal/cli/run.py,sha256=
|
121
|
+
modal/cli/run.py,sha256=9SvPmBzB8ZZRaqUJc9LmL2tfT5OMiR4Ow0dLANVwuB8,17870
|
122
122
|
modal/cli/secret.py,sha256=uQpwYrMY98iMCWeZOQTcktOYhPTZ8IHnyealDc2CZqo,4206
|
123
123
|
modal/cli/token.py,sha256=mxSgOWakXG6N71hQb1ko61XAR9ZGkTMZD-Txn7gmTac,1924
|
124
124
|
modal/cli/utils.py,sha256=hZmjyzcPjDnQSkLvycZD2LhGdcsfdZshs_rOU78EpvI,3717
|
125
|
-
modal/cli/volume.py,sha256=
|
125
|
+
modal/cli/volume.py,sha256=Oxc8WGP8wm2a_S87bp-P4OnPwoT1wIYQhbgkCvvFIdI,9998
|
126
126
|
modal/cli/programs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
|
127
127
|
modal/cli/programs/run_jupyter.py,sha256=RRr07CqZrStMbLdBM3PpzU6KM8t9FtLbdIPthg2-Mpw,2755
|
128
128
|
modal/cli/programs/vscode.py,sha256=acKvTUNA2uIGITKWYS9mkb_W8WUuNmvOSOvf1KBtUco,2479
|
@@ -147,13 +147,13 @@ modal_global_objects/mounts/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0
|
|
147
147
|
modal_global_objects/mounts/modal_client_package.py,sha256=W0E_yShsRojPzWm6LtIQqNVolapdnrZkm2hVEQuZK_4,767
|
148
148
|
modal_global_objects/mounts/python_standalone.py,sha256=SL_riIxpd8mP4i4CLDCWiFFNj0Ltknm9c_UIGfX5d60,1836
|
149
149
|
modal_proto/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
|
150
|
-
modal_proto/api.proto,sha256=
|
151
|
-
modal_proto/api_grpc.py,sha256=
|
152
|
-
modal_proto/api_pb2.py,sha256=
|
153
|
-
modal_proto/api_pb2.pyi,sha256=
|
154
|
-
modal_proto/api_pb2_grpc.py,sha256=
|
155
|
-
modal_proto/api_pb2_grpc.pyi,sha256=
|
156
|
-
modal_proto/modal_api_grpc.py,sha256
|
150
|
+
modal_proto/api.proto,sha256=LdD5XC5IhLP4rL_7nLeO0FL3emTs7jpEZGON2JIJDs4,79741
|
151
|
+
modal_proto/api_grpc.py,sha256=AiUCWTHQQFC9RFB_XuavB_OnVMr7GJMRLEwcf4FSTio,102088
|
152
|
+
modal_proto/api_pb2.py,sha256=rvBtjxpHVIXZmecc0OZS5PgZm4n1DcI4q1EHE675iW0,293583
|
153
|
+
modal_proto/api_pb2.pyi,sha256=LNvol6MFzFuG1J_wKA4AKPiSKSLkYfNW1kF7c5XXABk,391781
|
154
|
+
modal_proto/api_pb2_grpc.py,sha256=dFxVTgosyp_o8NCI1JIySlR0qTzG4ILm9mq8MNo4jYc,220795
|
155
|
+
modal_proto/api_pb2_grpc.pyi,sha256=yJgwEl-1YU42m7MU_Sm5SK3rB9xdkisPk3nZB-mlqkg,51463
|
156
|
+
modal_proto/modal_api_grpc.py,sha256=MyNzvY_WqB7QTMOQjoH6lsqCY5-6_s1HP-knsOSjANs,13640
|
157
157
|
modal_proto/modal_options_grpc.py,sha256=qJ1cuwA54oRqrdTyPTbvfhFZYd9HhJKK5UCwt523r3Y,120
|
158
158
|
modal_proto/options.proto,sha256=a-siq4swVbZPfaFRXAipRZzGP2bq8OsdUvjlyzAeodQ,488
|
159
159
|
modal_proto/options_grpc.py,sha256=M18X3d-8F_cNYSVM3I25dUTO5rZ0rd-vCCfynfh13Nc,125
|
@@ -164,10 +164,10 @@ modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0y
|
|
164
164
|
modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
165
165
|
modal_version/__init__.py,sha256=RT6zPoOdFO99u5Wcxxaoir4ZCuPTbQ22cvzFAXl3vUY,470
|
166
166
|
modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
|
167
|
-
modal_version/_version_generated.py,sha256=
|
168
|
-
modal-0.68.
|
169
|
-
modal-0.68.
|
170
|
-
modal-0.68.
|
171
|
-
modal-0.68.
|
172
|
-
modal-0.68.
|
173
|
-
modal-0.68.
|
167
|
+
modal_version/_version_generated.py,sha256=ut0wAyoP-7s5gVURkLb4fKBrb9HgRbFc7l23f9RyI24,149
|
168
|
+
modal-0.68.50.dist-info/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
|
169
|
+
modal-0.68.50.dist-info/METADATA,sha256=bfjb4nM-LUkYVatsQ2-SdK_EOyiNICQFyKfYV5mRQjw,2329
|
170
|
+
modal-0.68.50.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
|
171
|
+
modal-0.68.50.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
|
172
|
+
modal-0.68.50.dist-info/top_level.txt,sha256=1nvYbOSIKcmU50fNrpnQnrrOpj269ei3LzgB6j9xGqg,64
|
173
|
+
modal-0.68.50.dist-info/RECORD,,
|
modal_proto/api.proto
CHANGED
@@ -321,6 +321,14 @@ message AppGetByDeploymentNameResponse {
|
|
321
321
|
string app_id = 1;
|
322
322
|
}
|
323
323
|
|
324
|
+
message AppGetLayoutRequest {
|
325
|
+
string app_id = 1;
|
326
|
+
}
|
327
|
+
|
328
|
+
message AppGetLayoutResponse {
|
329
|
+
AppLayout app_layout = 1;
|
330
|
+
}
|
331
|
+
|
324
332
|
message AppGetLogsRequest {
|
325
333
|
string app_id = 1;
|
326
334
|
float timeout = 2;
|
@@ -2700,6 +2708,7 @@ service ModalClient {
|
|
2700
2708
|
rpc AppDeploy(AppDeployRequest) returns (AppDeployResponse);
|
2701
2709
|
rpc AppDeploymentHistory(AppDeploymentHistoryRequest) returns (AppDeploymentHistoryResponse);
|
2702
2710
|
rpc AppGetByDeploymentName(AppGetByDeploymentNameRequest) returns (AppGetByDeploymentNameResponse);
|
2711
|
+
rpc AppGetLayout(AppGetLayoutRequest) returns (AppGetLayoutResponse);
|
2703
2712
|
rpc AppGetLogs(AppGetLogsRequest) returns (stream TaskLogsBatch);
|
2704
2713
|
rpc AppGetObjects(AppGetObjectsRequest) returns (AppGetObjectsResponse);
|
2705
2714
|
rpc AppGetOrCreate(AppGetOrCreateRequest) returns (AppGetOrCreateResponse);
|