modal 0.74.53__py3-none-any.whl → 0.74.55__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/_functions.py CHANGED
@@ -139,8 +139,10 @@ class _Invocation:
139
139
  from_spawn_map: bool = False,
140
140
  ) -> "_Invocation":
141
141
  assert client.stub
142
+ stub = client.stub
143
+
142
144
  function_id = function.object_id
143
- item = await _create_input(args, kwargs, client, method_name=function._use_method_name)
145
+ item = await _create_input(args, kwargs, stub, method_name=function._use_method_name)
144
146
 
145
147
  request = api_pb2.FunctionMapRequest(
146
148
  function_id=function_id,
@@ -181,7 +183,7 @@ class _Invocation:
181
183
  item=item,
182
184
  sync_client_retries_enabled=response.sync_client_retries_enabled,
183
185
  )
184
- return _Invocation(client.stub, function_call_id, client, retry_context)
186
+ return _Invocation(stub, function_call_id, client, retry_context)
185
187
 
186
188
  request_put = api_pb2.FunctionPutInputsRequest(
187
189
  function_id=function_id, inputs=[item], function_call_id=function_call_id
@@ -203,7 +205,7 @@ class _Invocation:
203
205
  item=item,
204
206
  sync_client_retries_enabled=response.sync_client_retries_enabled,
205
207
  )
206
- return _Invocation(client.stub, function_call_id, client, retry_context)
208
+ return _Invocation(stub, function_call_id, client, retry_context)
207
209
 
208
210
  async def pop_function_call_outputs(
209
211
  self, timeout: Optional[float], clear_on_success: bool, input_jwts: Optional[list[str]] = None
@@ -249,7 +251,7 @@ class _Invocation:
249
251
  item = api_pb2.FunctionRetryInputsItem(input_jwt=ctx.input_jwt, input=ctx.item.input)
250
252
  request = api_pb2.FunctionRetryInputsRequest(function_call_jwt=ctx.function_call_jwt, inputs=[item])
251
253
  await retry_transient_errors(
252
- self.client.stub.FunctionRetryInputs,
254
+ self.stub.FunctionRetryInputs,
253
255
  request,
254
256
  )
255
257
 
@@ -14,6 +14,7 @@ from synchronicity.exceptions import UserCodeException
14
14
 
15
15
  import modal_proto
16
16
  from modal_proto import api_pb2
17
+ from modal_proto.modal_api_grpc import ModalClientModal
17
18
 
18
19
  from .._serialization import (
19
20
  deserialize,
@@ -511,7 +512,7 @@ async def _process_result(result: api_pb2.GenericResult, data_format: int, stub,
511
512
 
512
513
 
513
514
  async def _create_input(
514
- args, kwargs, client, *, idx: Optional[int] = None, method_name: Optional[str] = None
515
+ args, kwargs, stub: ModalClientModal, *, idx: Optional[int] = None, method_name: Optional[str] = None
515
516
  ) -> api_pb2.FunctionPutInputsItem:
516
517
  """Serialize function arguments and create a FunctionInput protobuf,
517
518
  uploading to blob storage if needed.
@@ -524,7 +525,7 @@ async def _create_input(
524
525
  args_serialized = serialize((args, kwargs))
525
526
 
526
527
  if len(args_serialized) > MAX_OBJECT_SIZE_BYTES:
527
- args_blob_id = await blob_upload(args_serialized, client.stub)
528
+ args_blob_id = await blob_upload(args_serialized, stub)
528
529
 
529
530
  return api_pb2.FunctionPutInputsItem(
530
531
  input=api_pb2.FunctionInput(
@@ -78,14 +78,44 @@ class RetryWarningMessage:
78
78
  errors_to_warn_for: typing.List[Status]
79
79
 
80
80
 
81
+ class ConnectionManager:
82
+ """ConnectionManager is a helper class for sharing connections to the Modal server.
83
+
84
+ It can create, cache, and close channels to the Modal server. This is useful since
85
+ multiple ModalClientModal stubs may target the same server URL, in which case they
86
+ should share the same connection.
87
+ """
88
+
89
+ def __init__(self, client: "modal.client._Client", metadata: dict[str, str] = {}):
90
+ self._client = client
91
+ # Warning: This metadata is shared across all channels! If the metadata is mutated
92
+ # in one `create_channel` call, the mutation will be reflected in all channels.
93
+ self._metadata = metadata
94
+ self._channels: dict[str, grpclib.client.Channel] = {}
95
+
96
+ async def get_or_create_channel(self, server_url: str) -> grpclib.client.Channel:
97
+ if server_url not in self._channels:
98
+ self._channels[server_url] = create_channel(server_url, self._metadata)
99
+ try:
100
+ await connect_channel(self._channels[server_url])
101
+ except OSError as exc:
102
+ raise ConnectionError("Could not connect to the Modal server.") from exc
103
+ return self._channels[server_url]
104
+
105
+ def close(self):
106
+ for channel in self._channels.values():
107
+ channel.close()
108
+ self._channels.clear()
109
+
110
+
81
111
  def create_channel(
82
112
  server_url: str,
83
113
  metadata: dict[str, str] = {},
84
114
  ) -> grpclib.client.Channel:
85
- """Creates a grpclib.Channel.
115
+ """Creates a grpclib.Channel to be used by a GRPC stub.
86
116
 
87
- Either to be used directly by a GRPC stub, or indirectly used through the channel pool.
88
- See `create_channel`.
117
+ Note that this function mutates the given metadata argument by adding an x-modal-auth-token
118
+ if one is present in the trailing metadata of any response.
89
119
  """
90
120
  o = urllib.parse.urlparse(server_url)
91
121
 
modal/client.py CHANGED
@@ -26,9 +26,9 @@ from modal_version import __version__
26
26
  from ._traceback import print_server_warnings
27
27
  from ._utils import async_utils
28
28
  from ._utils.async_utils import TaskContext, synchronize_api
29
- from ._utils.grpc_utils import connect_channel, create_channel, retry_transient_errors
29
+ from ._utils.grpc_utils import ConnectionManager, retry_transient_errors
30
30
  from .config import _check_config, _is_remote, config, logger
31
- from .exception import AuthError, ClientClosed, ConnectionError
31
+ from .exception import AuthError, ClientClosed
32
32
 
33
33
  HEARTBEAT_INTERVAL: float = config.get("heartbeat_interval")
34
34
  HEARTBEAT_TIMEOUT: float = HEARTBEAT_INTERVAL + 0.1
@@ -94,7 +94,6 @@ class _Client:
94
94
  self._credentials = credentials
95
95
  self.version = version
96
96
  self._closed = False
97
- self._channel: Optional[grpclib.client.Channel] = None
98
97
  self._stub: Optional[modal_api_grpc.ModalClientModal] = None
99
98
  self._snapshotted = False
100
99
  self._owner_pid = None
@@ -104,10 +103,28 @@ class _Client:
104
103
 
105
104
  @property
106
105
  def stub(self) -> modal_api_grpc.ModalClientModal:
107
- """mdmd:hidden"""
106
+ """mdmd:hidden
107
+ The default stub. Stubs can safely be used across forks / client snapshots.
108
+
109
+ This is useful if you want to make requests to the default Modal server in us-east, for example
110
+ control plane requests.
111
+
112
+ This is equivalent to client.get_stub(default_server_url), but it's cached, so it's a bit faster.
113
+ """
108
114
  assert self._stub
109
115
  return self._stub
110
116
 
117
+ async def get_stub(self, server_url: str) -> modal_api_grpc.ModalClientModal:
118
+ """mdmd:hidden
119
+ Get a stub for a specific server URL. Stubs can safely be used across forks / client snapshots.
120
+
121
+ This is useful if you want to make requests to a regional Modal server, for example low-latency
122
+ function calls in us-west.
123
+
124
+ This function is O(n) where n is the number of RPCs in ModalClient.
125
+ """
126
+ return await modal_api_grpc.ModalClientModal._create(self, server_url)
127
+
111
128
  async def _open(self):
112
129
  self._closed = False
113
130
  assert self._stub is None
@@ -115,13 +132,9 @@ class _Client:
115
132
  self._cancellation_context = TaskContext(grace=0.5) # allow running rpcs to finish in 0.5s when closing client
116
133
  self._cancellation_context_event_loop = asyncio.get_running_loop()
117
134
  await self._cancellation_context.__aenter__()
118
- self._channel = create_channel(self.server_url, metadata=metadata)
119
- try:
120
- await connect_channel(self._channel)
121
- except OSError as exc:
122
- raise ConnectionError("Could not connect to the Modal server.") from exc
123
- self._grpclib_stub = api_grpc.ModalClientStub(self._channel)
124
- self._stub = modal_api_grpc.ModalClientModal(self._grpclib_stub, client=self)
135
+
136
+ self._connection_manager = ConnectionManager(client=self, metadata=metadata)
137
+ self._stub = await self.get_stub(self.server_url)
125
138
  self._owner_pid = os.getpid()
126
139
 
127
140
  async def _close(self, prep_for_restore: bool = False):
@@ -129,8 +142,8 @@ class _Client:
129
142
  self._closed = True
130
143
  if hasattr(self, "_cancellation_context"):
131
144
  await self._cancellation_context.__aexit__(None, None, None) # wait for all rpcs to be finished/cancelled
132
- if self._channel is not None:
133
- self._channel.close()
145
+ if self._connection_manager:
146
+ self._connection_manager.close()
134
147
 
135
148
  if prep_for_restore:
136
149
  self._snapshotted = True
@@ -284,43 +297,40 @@ class _Client:
284
297
  if self._owner_pid and self._owner_pid != os.getpid():
285
298
  # not calling .close() since that would also interact with stale resources
286
299
  # just reset the internal state
287
- self._channel = None
300
+ self._connection_manager = None
288
301
  self._stub = None
289
- self._grpclib_stub = None
290
302
  self._owner_pid = None
291
303
 
292
304
  self.set_env_client(None)
293
305
  # TODO(elias): reset _cancellation_context in case ?
294
306
  await self._open()
295
307
 
296
- async def _get_grpclib_method(self, method_name: str) -> Any:
297
- # safely get grcplib method that is bound to a valid channel
298
- # This prevents usage of stale methods across forks of processes
308
+ async def _get_channel(self, server_url: str) -> grpclib.client.Channel:
309
+ # Get a valid grpclib channel, reusing existing channels if possible.
310
+ # This prevents usage of stale channels across forks of processes.
299
311
  await self._reset_on_pid_change()
300
- return getattr(self._grpclib_stub, method_name)
312
+ return await self._connection_manager.get_or_create_channel(server_url)
301
313
 
302
314
  @synchronizer.nowrap
303
315
  async def _call_unary(
304
316
  self,
305
- method_name: str,
317
+ grpclib_method: grpclib.client.UnaryUnaryMethod[RequestType, ResponseType],
306
318
  request: Any,
307
319
  *,
308
320
  timeout: Optional[float] = None,
309
321
  metadata: Optional[_MetadataLike] = None,
310
322
  ) -> Any:
311
- grpclib_method = await self._get_grpclib_method(method_name)
312
323
  coro = grpclib_method(request, timeout=timeout, metadata=metadata)
313
324
  return await self._call_safely(coro, grpclib_method.name)
314
325
 
315
326
  @synchronizer.nowrap
316
327
  async def _call_stream(
317
328
  self,
318
- method_name: str,
329
+ grpclib_method: grpclib.client.UnaryStreamMethod[RequestType, ResponseType],
319
330
  request: Any,
320
331
  *,
321
332
  metadata: Optional[_MetadataLike],
322
333
  ) -> AsyncGenerator[Any, None]:
323
- grpclib_method = await self._get_grpclib_method(method_name)
324
334
  stream_context = grpclib_method.open(metadata=metadata)
325
335
  stream = await self._call_safely(stream_context.__aenter__(), f"{grpclib_method.name}.open")
326
336
  try:
@@ -347,16 +357,19 @@ class UnaryUnaryWrapper(Generic[RequestType, ResponseType]):
347
357
  wrapped_method: grpclib.client.UnaryUnaryMethod[RequestType, ResponseType]
348
358
  client: _Client
349
359
 
350
- def __init__(self, wrapped_method: grpclib.client.UnaryUnaryMethod[RequestType, ResponseType], client: _Client):
351
- # we pass in the wrapped_method here to get the correct static types
352
- # but don't use the reference directly, see `def wrapped_method` below
353
- self._wrapped_full_name = wrapped_method.name
354
- self._wrapped_method_name = wrapped_method.name.rsplit("/", 1)[1]
360
+ def __init__(
361
+ self,
362
+ wrapped_method: grpclib.client.UnaryUnaryMethod[RequestType, ResponseType],
363
+ client: _Client,
364
+ server_url: str,
365
+ ):
366
+ self.wrapped_method = wrapped_method
355
367
  self.client = client
368
+ self.server_url = server_url
356
369
 
357
370
  @property
358
371
  def name(self) -> str:
359
- return self._wrapped_full_name
372
+ return self.wrapped_method.name
360
373
 
361
374
  async def __call__(
362
375
  self,
@@ -366,22 +379,38 @@ class UnaryUnaryWrapper(Generic[RequestType, ResponseType]):
366
379
  metadata: Optional[_MetadataLike] = None,
367
380
  ) -> ResponseType:
368
381
  if self.client._snapshotted:
369
- logger.debug(f"refreshing client after snapshot for {self._wrapped_method_name}")
382
+ logger.debug(f"refreshing client after snapshot for {self.name.rsplit('/', 1)[1]}")
370
383
  self.client = await _Client.from_env()
371
- return await self.client._call_unary(self._wrapped_method_name, req, timeout=timeout, metadata=metadata)
384
+
385
+ # Note: We override the grpclib method's channel (see grpclib's code [1]). I think this is fine
386
+ # since grpclib's code doesn't seem to change very much, but we could also recreate the
387
+ # grpclib stub if we aren't comfortable with this. The downside is then we need to cache
388
+ # the grpclib stub so the rest of our code becomes a bit more complicated.
389
+ #
390
+ # We need to override the channel because after the process is forked or the client is
391
+ # snapshotted, the existing channel may be stale / unusable.
392
+ #
393
+ # [1]: https://github.com/vmagamedov/grpclib/blob/62f968a4c84e3f64e6966097574ff0a59969ea9b/grpclib/client.py#L844
394
+ self.wrapped_method.channel = await self.client._get_channel(self.server_url)
395
+ return await self.client._call_unary(self.wrapped_method, req, timeout=timeout, metadata=metadata)
372
396
 
373
397
 
374
398
  class UnaryStreamWrapper(Generic[RequestType, ResponseType]):
375
399
  wrapped_method: grpclib.client.UnaryStreamMethod[RequestType, ResponseType]
376
400
 
377
- def __init__(self, wrapped_method: grpclib.client.UnaryStreamMethod[RequestType, ResponseType], client: _Client):
378
- self._wrapped_full_name = wrapped_method.name
379
- self._wrapped_method_name = wrapped_method.name.rsplit("/", 1)[1]
401
+ def __init__(
402
+ self,
403
+ wrapped_method: grpclib.client.UnaryStreamMethod[RequestType, ResponseType],
404
+ client: _Client,
405
+ server_url: str,
406
+ ):
407
+ self.wrapped_method = wrapped_method
380
408
  self.client = client
409
+ self.server_url = server_url
381
410
 
382
411
  @property
383
412
  def name(self) -> str:
384
- return self._wrapped_full_name
413
+ return self.wrapped_method.name
385
414
 
386
415
  async def unary_stream(
387
416
  self,
@@ -389,7 +418,8 @@ class UnaryStreamWrapper(Generic[RequestType, ResponseType]):
389
418
  metadata: Optional[Any] = None,
390
419
  ):
391
420
  if self.client._snapshotted:
392
- logger.debug(f"refreshing client after snapshot for {self._wrapped_method_name}")
421
+ logger.debug(f"refreshing client after snapshot for {self.name.rsplit('/', 1)[1]}")
393
422
  self.client = await _Client.from_env()
394
- async for response in self.client._call_stream(self._wrapped_method_name, request, metadata=metadata):
423
+ self.wrapped_method.channel = await self.client._get_channel(self.server_url)
424
+ async for response in self.client._call_stream(self.wrapped_method, request, metadata=metadata):
395
425
  yield response
modal/client.pyi CHANGED
@@ -27,11 +27,12 @@ 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.53"
30
+ self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.74.55"
31
31
  ): ...
32
32
  def is_closed(self) -> bool: ...
33
33
  @property
34
34
  def stub(self) -> modal_proto.modal_api_grpc.ModalClientModal: ...
35
+ async def get_stub(self, server_url: str) -> modal_proto.modal_api_grpc.ModalClientModal: ...
35
36
  async def _open(self): ...
36
37
  async def _close(self, prep_for_restore: bool = False): ...
37
38
  async def hello(self): ...
@@ -49,10 +50,10 @@ class _Client:
49
50
  def set_env_client(cls, client: typing.Optional[_Client]): ...
50
51
  async def _call_safely(self, coro, readable_method: str): ...
51
52
  async def _reset_on_pid_change(self): ...
52
- async def _get_grpclib_method(self, method_name: str) -> typing.Any: ...
53
+ async def _get_channel(self, server_url: str) -> grpclib.client.Channel: ...
53
54
  async def _call_unary(
54
55
  self,
55
- method_name: str,
56
+ grpclib_method: grpclib.client.UnaryUnaryMethod[RequestType, ResponseType],
56
57
  request: typing.Any,
57
58
  *,
58
59
  timeout: typing.Optional[float] = None,
@@ -64,7 +65,7 @@ class _Client:
64
65
  ) -> typing.Any: ...
65
66
  def _call_stream(
66
67
  self,
67
- method_name: str,
68
+ grpclib_method: grpclib.client.UnaryStreamMethod[RequestType, ResponseType],
68
69
  request: typing.Any,
69
70
  *,
70
71
  metadata: typing.Union[
@@ -85,12 +86,18 @@ class Client:
85
86
  _snapshotted: bool
86
87
 
87
88
  def __init__(
88
- self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.74.53"
89
+ self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.74.55"
89
90
  ): ...
90
91
  def is_closed(self) -> bool: ...
91
92
  @property
92
93
  def stub(self) -> modal_proto.modal_api_grpc.ModalClientModal: ...
93
94
 
95
+ class __get_stub_spec(typing_extensions.Protocol[SUPERSELF]):
96
+ def __call__(self, server_url: str) -> modal_proto.modal_api_grpc.ModalClientModal: ...
97
+ async def aio(self, server_url: str) -> modal_proto.modal_api_grpc.ModalClientModal: ...
98
+
99
+ get_stub: __get_stub_spec[typing_extensions.Self]
100
+
94
101
  class ___open_spec(typing_extensions.Protocol[SUPERSELF]):
95
102
  def __call__(self): ...
96
103
  async def aio(self): ...
@@ -136,15 +143,15 @@ class Client:
136
143
 
137
144
  _reset_on_pid_change: ___reset_on_pid_change_spec[typing_extensions.Self]
138
145
 
139
- class ___get_grpclib_method_spec(typing_extensions.Protocol[SUPERSELF]):
140
- def __call__(self, method_name: str) -> typing.Any: ...
141
- async def aio(self, method_name: str) -> typing.Any: ...
146
+ class ___get_channel_spec(typing_extensions.Protocol[SUPERSELF]):
147
+ def __call__(self, server_url: str) -> grpclib.client.Channel: ...
148
+ async def aio(self, server_url: str) -> grpclib.client.Channel: ...
142
149
 
143
- _get_grpclib_method: ___get_grpclib_method_spec[typing_extensions.Self]
150
+ _get_channel: ___get_channel_spec[typing_extensions.Self]
144
151
 
145
152
  async def _call_unary(
146
153
  self,
147
- method_name: str,
154
+ grpclib_method: grpclib.client.UnaryUnaryMethod[RequestType, ResponseType],
148
155
  request: typing.Any,
149
156
  *,
150
157
  timeout: typing.Optional[float] = None,
@@ -156,7 +163,7 @@ class Client:
156
163
  ) -> typing.Any: ...
157
164
  def _call_stream(
158
165
  self,
159
- method_name: str,
166
+ grpclib_method: grpclib.client.UnaryStreamMethod[RequestType, ResponseType],
160
167
  request: typing.Any,
161
168
  *,
162
169
  metadata: typing.Union[
@@ -170,7 +177,12 @@ class UnaryUnaryWrapper(typing.Generic[RequestType, ResponseType]):
170
177
  wrapped_method: grpclib.client.UnaryUnaryMethod[RequestType, ResponseType]
171
178
  client: _Client
172
179
 
173
- def __init__(self, wrapped_method: grpclib.client.UnaryUnaryMethod[RequestType, ResponseType], client: _Client): ...
180
+ def __init__(
181
+ self,
182
+ wrapped_method: grpclib.client.UnaryUnaryMethod[RequestType, ResponseType],
183
+ client: _Client,
184
+ server_url: str,
185
+ ): ...
174
186
  @property
175
187
  def name(self) -> str: ...
176
188
  async def __call__(
@@ -189,7 +201,10 @@ class UnaryStreamWrapper(typing.Generic[RequestType, ResponseType]):
189
201
  wrapped_method: grpclib.client.UnaryStreamMethod[RequestType, ResponseType]
190
202
 
191
203
  def __init__(
192
- self, wrapped_method: grpclib.client.UnaryStreamMethod[RequestType, ResponseType], client: _Client
204
+ self,
205
+ wrapped_method: grpclib.client.UnaryStreamMethod[RequestType, ResponseType],
206
+ client: _Client,
207
+ server_url: str,
193
208
  ): ...
194
209
  @property
195
210
  def name(self) -> str: ...
modal/config.py CHANGED
@@ -102,6 +102,9 @@ from ._utils.deprecation import deprecation_error
102
102
  from ._utils.logger import configure_logger
103
103
  from .exception import InvalidError
104
104
 
105
+ DEFAULT_SERVER_URL = "https://api.modal.com"
106
+
107
+
105
108
  # Locate config file and read it
106
109
 
107
110
  user_config_path: str = os.environ.get("MODAL_CONFIG_PATH") or os.path.expanduser("~/.modal.toml")
@@ -222,7 +225,7 @@ _SETTINGS = {
222
225
  "loglevel": _Setting("WARNING", lambda s: s.upper()),
223
226
  "log_format": _Setting("STRING", lambda s: s.upper()),
224
227
  "log_pattern": _Setting(), # optional override of the formatting pattern
225
- "server_url": _Setting("https://api.modal.com"),
228
+ "server_url": _Setting(DEFAULT_SERVER_URL),
226
229
  "token_id": _Setting(),
227
230
  "token_secret": _Setting(),
228
231
  "task_id": _Setting(),
@@ -316,7 +319,9 @@ configure_logger(logger, config["loglevel"], config["log_format"])
316
319
 
317
320
 
318
321
  def _store_user_config(
319
- new_settings: dict[str, Any], profile: Optional[str] = None, active_profile: Optional[str] = None
322
+ new_settings: dict[str, Any],
323
+ profile: Optional[str] = None,
324
+ active_profile: Optional[str] = None,
320
325
  ):
321
326
  """Internal method, used by the CLI to set tokens."""
322
327
  if profile is None:
modal/parallel_map.py CHANGED
@@ -138,7 +138,7 @@ async def _map_invocation(
138
138
  idx = inputs_created
139
139
  inputs_created += 1
140
140
  (args, kwargs) = argskwargs
141
- return await _create_input(args, kwargs, client, idx=idx, method_name=function._use_method_name)
141
+ return await _create_input(args, kwargs, client.stub, idx=idx, method_name=function._use_method_name)
142
142
 
143
143
  async def input_iter():
144
144
  while 1:
modal/token_flow.py CHANGED
@@ -14,7 +14,7 @@ from modal_proto import api_pb2
14
14
  from ._utils.async_utils import synchronize_api
15
15
  from ._utils.http_utils import run_temporary_http_server
16
16
  from .client import _Client
17
- from .config import _lookup_workspace, _store_user_config, config, config_profiles, user_config_path
17
+ from .config import DEFAULT_SERVER_URL, _lookup_workspace, _store_user_config, config, config_profiles, user_config_path
18
18
  from .exception import AuthError
19
19
 
20
20
 
@@ -108,6 +108,8 @@ async def _new_token(
108
108
 
109
109
  console.print("[green]Web authentication finished successfully![/green]")
110
110
 
111
+ server_url = client.server_url
112
+
111
113
  assert result is not None
112
114
 
113
115
  if result.workspace_username:
@@ -115,7 +117,9 @@ async def _new_token(
115
117
  f"[green]Token is connected to the [magenta]{result.workspace_username}[/magenta] workspace.[/green]"
116
118
  )
117
119
 
118
- await _set_token(result.token_id, result.token_secret, profile=profile, activate=activate, verify=verify)
120
+ await _set_token(
121
+ result.token_id, result.token_secret, profile=profile, activate=activate, verify=verify, server_url=server_url
122
+ )
119
123
 
120
124
 
121
125
  async def _set_token(
@@ -125,6 +129,7 @@ async def _set_token(
125
129
  profile: Optional[str] = None,
126
130
  activate: bool = True,
127
131
  verify: bool = True,
132
+ server_url: Optional[str] = None,
128
133
  ):
129
134
  # TODO add server_url as a parameter for verification?
130
135
  server_url = config.get("server_url", profile=profile)
@@ -149,6 +154,8 @@ async def _set_token(
149
154
  profile = workspace.username
150
155
 
151
156
  config_data = {"token_id": token_id, "token_secret": token_secret}
157
+ if server_url is not None and server_url != DEFAULT_SERVER_URL:
158
+ config_data["server_url"] = server_url
152
159
  # Activate the profile when requested or if no other profiles currently exist
153
160
  active_profile = profile if (activate or not config_profiles()) else None
154
161
  with console.status("Storing token", spinner="dots"):
modal/token_flow.pyi CHANGED
@@ -53,5 +53,6 @@ async def _set_token(
53
53
  profile: typing.Optional[str] = None,
54
54
  activate: bool = True,
55
55
  verify: bool = True,
56
+ server_url: typing.Optional[str] = None,
56
57
  ): ...
57
58
  def _open_url(url: str) -> bool: ...
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 0.74.53
3
+ Version: 0.74.55
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License: Apache-2.0
@@ -3,7 +3,7 @@ modal/__main__.py,sha256=sTJcc9EbDuCKSwg3tL6ZckFw9WWdlkXW8mId1IvJCNc,2846
3
3
  modal/_clustered_functions.py,sha256=kTf-9YBXY88NutC1akI-gCbvf01RhMPCw-zoOI_YIUE,2700
4
4
  modal/_clustered_functions.pyi,sha256=vllkegc99A0jrUOWa8mdlSbdp6uz36TsHhGxysAOpaQ,771
5
5
  modal/_container_entrypoint.py,sha256=2Zx9O_EMJg0H77EdnC2vGKs6uFMWwbP1NLFf-qYmWmU,28962
6
- modal/_functions.py,sha256=gxkLeVvj21akFNzHLeSH0F8AvjEnqRkD_2WIM3NymvE,77674
6
+ modal/_functions.py,sha256=XouGO1IvJA3qSmjwZYt6i-dZxH-FJkfhwVJp4o_0j1s,77679
7
7
  modal/_ipython.py,sha256=TW1fkVOmZL3YYqdS2YlM1hqpf654Yf8ZyybHdBnlhSw,301
8
8
  modal/_location.py,sha256=joiX-0ZeutEUDTrrqLF1GHXCdVLF-rHzstocbMcd_-k,366
9
9
  modal/_object.py,sha256=6ve4sI2nRAnjPCuAXdSoUplaXfzC9MqRlF_ZLULwwy0,11472
@@ -21,13 +21,13 @@ modal/_watcher.py,sha256=K6LYnlmSGQB4tWWI9JADv-tvSvQ1j522FwT71B51CX8,3584
21
21
  modal/app.py,sha256=r-9vVU1lrR1CWtJEo60fuaianvxY_oOXZyv1Qx1DEkI,51231
22
22
  modal/app.pyi,sha256=0QNtnUpAFbOPcbwCt119ge7OmoBqMFw5SajLgdE5eOw,28600
23
23
  modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
24
- modal/client.py,sha256=U-YKSw0n7J1ZLREt9cbEJCtmHe5YoPKFxl0xlkan2yc,15565
25
- modal/client.pyi,sha256=5wYu91DsQSQu93l6m11lHwtQM6U1U3ifdESoi48sOgw,7593
24
+ modal/client.py,sha256=o-aQThHpvDHUzg_kUafyhWzACViUBhY2WLZ2EitnSHA,16787
25
+ modal/client.pyi,sha256=9fUzrcuA2uqCuRxHuIZxhsTR-lopTQuKxs_VvusFdLY,8343
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
29
29
  modal/cls.pyi,sha256=B--Y4xEOo3GRE3QiiFdIE8jnIKEeBcOtwAbXvg2Z8H4,12012
30
- modal/config.py,sha256=_2KU5jG-vZQ4vDLYQ83r4aQdnjnN00TY12DtSJMGYsA,12617
30
+ modal/config.py,sha256=OOMEJ5LHNFbHRW5wUpuhl0TH6EPW8D1XV9I3OJXrZrk,12668
31
31
  modal/container_process.py,sha256=vvyK3DVPUMsuqvkKdUiQ49cDLF9JawGrxpglLk5vfgI,6208
32
32
  modal/container_process.pyi,sha256=bXs2KHe7nxVuLAm6RRBqXCvDKelANGX9gFY8qIuZYDs,2898
33
33
  modal/dict.py,sha256=7NJVI05hisF9gTuJMYestH9X0LIOaE9PPqbCeYtwSRs,13365
@@ -52,7 +52,7 @@ modal/network_file_system.pyi,sha256=C_ZiXmpdkTObapVhAPlRmB4ofmM2D7SdKlUCZVg-1IQ
52
52
  modal/object.py,sha256=bTeskuY8JFrESjU4_UL_nTwYlBQdOLmVaOX3X6EMxsg,164
53
53
  modal/object.pyi,sha256=kyJkRQcVv3ct7zSAxvvXcuhBVeH914v80uSlqeS7cA4,5632
54
54
  modal/output.py,sha256=q4T9uHduunj4NwY-YSwkHGgjZlCXMuJbfQ5UFaAGRAc,1968
55
- modal/parallel_map.py,sha256=sHx1lZfj7Q5xNk--RrPgClbtu_Qh8XLwehlWHb2IwQM,35689
55
+ modal/parallel_map.py,sha256=ZOzjgCBcXv4gyOmEsLPVRkji1r2yqPIsP4Diw7G0hWI,35694
56
56
  modal/parallel_map.pyi,sha256=bLh_D57e5KOIkmP4WW-C_rMSzfxRUNfdtpNJKj4jWA4,5865
57
57
  modal/partial_function.py,sha256=SwuAAj2wj4SO6F6nkSnwNZrczEmm9w9YdlQTHh6hr04,1195
58
58
  modal/partial_function.pyi,sha256=NFWz1aCAs2B3-GnPf1cTatWRZOLnYpFKCnjP_X9iNRs,6411
@@ -76,8 +76,8 @@ modal/serving.pyi,sha256=KGSaZhg0qwygLmDkhgJedUfWeNSkXsyoOipq10vYffU,1978
76
76
  modal/snapshot.py,sha256=6rQvDP3iX9hdiAudKTy0-m0JESt4kk0q2gusXbaRA-8,1279
77
77
  modal/snapshot.pyi,sha256=Ypd4NKsjOTnnnqXyTGGLKq5lkocRrUURYjY5Pi67_qA,670
78
78
  modal/stream_type.py,sha256=A6320qoAAWhEfwOCZfGtymQTu5AfLfJXXgARqooTPvY,417
79
- modal/token_flow.py,sha256=ZYCa-uVP6jrJmUKA6wAG4lngqNem8Mgm2HXz1DR19BM,7355
80
- modal/token_flow.pyi,sha256=0XV3d-9CGQL3qjPdw3RgwIFVqqxo8Z-u044_mkgAM3o,2064
79
+ modal/token_flow.py,sha256=0_4KabXKsuE4OXTJ1OuLOtA-b1sesShztMZkkRFK7tA,7605
80
+ modal/token_flow.pyi,sha256=7WBDuk9l_VNLxUwr6zDZg2gLyujTiGlAkjmjPV_7FWc,2109
81
81
  modal/volume.py,sha256=d8x6i2qJgacJQ5qbNMvzeNFrK7ap4jPtjxZEpWstpCw,40624
82
82
  modal/volume.pyi,sha256=rjlkEt9zuCy7GLe1TuVDSTiGJliFX9v6_KGKqL8HaeM,18760
83
83
  modal/_runtime/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
@@ -96,10 +96,10 @@ modal/_utils/blob_utils.py,sha256=IexC2Jbtqp_Tkmy62ayfgzTYte0UPCNufB_v-DO21g8,18
96
96
  modal/_utils/bytes_io_segment_payload.py,sha256=uunxVJS4PE1LojF_UpURMzVK9GuvmYWRqQo_bxEj5TU,3385
97
97
  modal/_utils/deprecation.py,sha256=EXP1beU4pmEqEzWMLw6E3kUfNfpmNA_VOp6i0EHi93g,4856
98
98
  modal/_utils/docker_utils.py,sha256=h1uETghR40mp_y3fSWuZAfbIASH1HMzuphJHghAL6DU,3722
99
- modal/_utils/function_utils.py,sha256=_q89uQr9v5ontrBkJ-WwEGR-VInJQpaCxmReCmfp4_A,27277
99
+ modal/_utils/function_utils.py,sha256=KNoFx_DBtfw3QMB8V_HPDcj4GylnI3tuf7RKPF2T3-I,27342
100
100
  modal/_utils/git_utils.py,sha256=qtUU6JAttF55ZxYq51y55OR58B0tDPZsZWK5dJe6W5g,3182
101
101
  modal/_utils/grpc_testing.py,sha256=H1zHqthv19eGPJz2HKXDyWXWGSqO4BRsxah3L5Xaa8A,8619
102
- modal/_utils/grpc_utils.py,sha256=VmVHEFxEWXNLrgYwLk0vFwwls8g97Pg6B4RGz_5RA1w,9207
102
+ modal/_utils/grpc_utils.py,sha256=Op0D25Z3WOogoo1ZPKc4zOco1IWckJCfq_QOxfkzroI,10599
103
103
  modal/_utils/hash_utils.py,sha256=zg3J6OGxTFGSFri1qQ12giDz90lWk8bzaxCTUCRtiX4,3034
104
104
  modal/_utils/http_utils.py,sha256=yeTFsXYr0rYMEhB7vBP7audG9Uc7OLhzKBANFDZWVt0,2451
105
105
  modal/_utils/jwt_utils.py,sha256=fxH9plyrbAemTbjSsQtzIdDXE9QXxvMC4DiUZ16G0aA,1360
@@ -145,7 +145,7 @@ modal/requirements/2024.10.txt,sha256=qD-5cVIVM9wXesJ6JC89Ew-3m2KjEElUz3jaw_MddR
145
145
  modal/requirements/PREVIEW.txt,sha256=qD-5cVIVM9wXesJ6JC89Ew-3m2KjEElUz3jaw_MddRo,296
146
146
  modal/requirements/README.md,sha256=9tK76KP0Uph7O0M5oUgsSwEZDj5y-dcUPsnpR0Sc-Ik,854
147
147
  modal/requirements/base-images.json,sha256=57vMSqzMbLBxw5tFWSaMiIkkVEps4JfX5PAtXGnkS4U,740
148
- modal-0.74.53.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
148
+ modal-0.74.55.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
149
149
  modal_docs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
150
150
  modal_docs/gen_cli_docs.py,sha256=c1yfBS_x--gL5bs0N4ihMwqwX8l3IBWSkBAKNNIi6bQ,3801
151
151
  modal_docs/gen_reference_docs.py,sha256=d_CQUGQ0rfw28u75I2mov9AlS773z9rG40-yq5o7g2U,6359
@@ -159,7 +159,7 @@ modal_proto/api_pb2.py,sha256=EWWs8G_DH4ezUzsNSCRiYCW7TV3J9pM3NDtdcR1N9YA,332519
159
159
  modal_proto/api_pb2.pyi,sha256=K05tcHYkl_ZFGK_mfFOxjJ2V1SryTpCng6CkeqOAA0Q,452511
160
160
  modal_proto/api_pb2_grpc.py,sha256=-KPQMzXmTYwgF23_tGpODCVK79iOdV1sRsw5mN-byMw,247448
161
161
  modal_proto/api_pb2_grpc.pyi,sha256=ls1qcby7goTrlE6BluSWpo73cW_ajvh3rOe41azMBWM,57929
162
- modal_proto/modal_api_grpc.py,sha256=X-sgFt2CYE5cahn41gc0oDNfK0sWIOs7AlmHUWKMB1k,15234
162
+ modal_proto/modal_api_grpc.py,sha256=eoJvCFelooz_mlLa1sJ5CEsNuUSIui-4aUgSmiCwKOI,17312
163
163
  modal_proto/modal_options_grpc.py,sha256=qJ1cuwA54oRqrdTyPTbvfhFZYd9HhJKK5UCwt523r3Y,120
164
164
  modal_proto/options.proto,sha256=zp9h5r61ivsp0XwEWwNBsVqNTbRA1VSY_UtN7sEcHtE,549
165
165
  modal_proto/options_grpc.py,sha256=M18X3d-8F_cNYSVM3I25dUTO5rZ0rd-vCCfynfh13Nc,125
@@ -170,9 +170,9 @@ modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0y
170
170
  modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
171
171
  modal_version/__init__.py,sha256=m94xZNWIjH8oUtJk4l9xfovzDJede2o7X-q0MHVECtM,470
172
172
  modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
173
- modal_version/_version_generated.py,sha256=dOZz3ZFdnpOr2hUmFEfsoIrf0JYzaXBHbU96sIwcpNo,149
174
- modal-0.74.53.dist-info/METADATA,sha256=zMWScwZ1llUOIrcr09t2ymZiVsHBI6q5hfX5muJwnUM,2451
175
- modal-0.74.53.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
176
- modal-0.74.53.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
177
- modal-0.74.53.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
178
- modal-0.74.53.dist-info/RECORD,,
173
+ modal_version/_version_generated.py,sha256=OZ_XmoTkO3MCoksyO8lR_vFkMH1zV93AgoruWFvLPis,149
174
+ modal-0.74.55.dist-info/METADATA,sha256=oCE7_7EOAb5XgRznncfj2CpEJmlHutoa2JPOv9cDg_I,2451
175
+ modal-0.74.55.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
176
+ modal-0.74.55.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
177
+ modal-0.74.55.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
178
+ modal-0.74.55.dist-info/RECORD,,
@@ -10,154 +10,160 @@ if typing.TYPE_CHECKING:
10
10
 
11
11
 
12
12
  class ModalClientModal:
13
+ @classmethod
14
+ async def _create(cls, client: 'modal.client._Client', server_url: str):
15
+ channel = await client._get_channel(server_url)
16
+ grpclib_stub = modal_proto.api_grpc.ModalClientStub(channel)
17
+ return cls(grpclib_stub, client, server_url)
13
18
 
14
- def __init__(self, grpclib_stub: modal_proto.api_grpc.ModalClientStub, client: "modal.client._Client") -> None:
15
- self.AppClientDisconnect = modal.client.UnaryUnaryWrapper(grpclib_stub.AppClientDisconnect, client)
16
- self.AppCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.AppCreate, client)
17
- self.AppDeploy = modal.client.UnaryUnaryWrapper(grpclib_stub.AppDeploy, client)
18
- self.AppDeploymentHistory = modal.client.UnaryUnaryWrapper(grpclib_stub.AppDeploymentHistory, client)
19
- self.AppGetByDeploymentName = modal.client.UnaryUnaryWrapper(grpclib_stub.AppGetByDeploymentName, client)
20
- self.AppGetLayout = modal.client.UnaryUnaryWrapper(grpclib_stub.AppGetLayout, client)
21
- self.AppGetLogs = modal.client.UnaryStreamWrapper(grpclib_stub.AppGetLogs, client)
22
- self.AppGetObjects = modal.client.UnaryUnaryWrapper(grpclib_stub.AppGetObjects, client)
23
- self.AppGetOrCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.AppGetOrCreate, client)
24
- self.AppHeartbeat = modal.client.UnaryUnaryWrapper(grpclib_stub.AppHeartbeat, client)
25
- self.AppList = modal.client.UnaryUnaryWrapper(grpclib_stub.AppList, client)
26
- self.AppLookup = modal.client.UnaryUnaryWrapper(grpclib_stub.AppLookup, client)
27
- self.AppPublish = modal.client.UnaryUnaryWrapper(grpclib_stub.AppPublish, client)
28
- self.AppRollback = modal.client.UnaryUnaryWrapper(grpclib_stub.AppRollback, client)
29
- self.AppSetObjects = modal.client.UnaryUnaryWrapper(grpclib_stub.AppSetObjects, client)
30
- self.AppStop = modal.client.UnaryUnaryWrapper(grpclib_stub.AppStop, client)
31
- self.AttemptAwait = modal.client.UnaryUnaryWrapper(grpclib_stub.AttemptAwait, client)
32
- self.AttemptStart = modal.client.UnaryUnaryWrapper(grpclib_stub.AttemptStart, client)
33
- self.BlobCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.BlobCreate, client)
34
- self.BlobGet = modal.client.UnaryUnaryWrapper(grpclib_stub.BlobGet, client)
35
- self.ClassCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.ClassCreate, client)
36
- self.ClassGet = modal.client.UnaryUnaryWrapper(grpclib_stub.ClassGet, client)
37
- self.ClientHello = modal.client.UnaryUnaryWrapper(grpclib_stub.ClientHello, client)
38
- self.ClusterGet = modal.client.UnaryUnaryWrapper(grpclib_stub.ClusterGet, client)
39
- self.ClusterList = modal.client.UnaryUnaryWrapper(grpclib_stub.ClusterList, client)
40
- self.ContainerCheckpoint = modal.client.UnaryUnaryWrapper(grpclib_stub.ContainerCheckpoint, client)
41
- self.ContainerExec = modal.client.UnaryUnaryWrapper(grpclib_stub.ContainerExec, client)
42
- self.ContainerExecGetOutput = modal.client.UnaryStreamWrapper(grpclib_stub.ContainerExecGetOutput, client)
43
- self.ContainerExecPutInput = modal.client.UnaryUnaryWrapper(grpclib_stub.ContainerExecPutInput, client)
44
- self.ContainerExecWait = modal.client.UnaryUnaryWrapper(grpclib_stub.ContainerExecWait, client)
45
- self.ContainerFilesystemExec = modal.client.UnaryUnaryWrapper(grpclib_stub.ContainerFilesystemExec, client)
46
- self.ContainerFilesystemExecGetOutput = modal.client.UnaryStreamWrapper(grpclib_stub.ContainerFilesystemExecGetOutput, client)
47
- self.ContainerHeartbeat = modal.client.UnaryUnaryWrapper(grpclib_stub.ContainerHeartbeat, client)
48
- self.ContainerHello = modal.client.UnaryUnaryWrapper(grpclib_stub.ContainerHello, client)
49
- self.ContainerLog = modal.client.UnaryUnaryWrapper(grpclib_stub.ContainerLog, client)
50
- self.ContainerStop = modal.client.UnaryUnaryWrapper(grpclib_stub.ContainerStop, client)
51
- self.DictClear = modal.client.UnaryUnaryWrapper(grpclib_stub.DictClear, client)
52
- self.DictContains = modal.client.UnaryUnaryWrapper(grpclib_stub.DictContains, client)
53
- self.DictContents = modal.client.UnaryStreamWrapper(grpclib_stub.DictContents, client)
54
- self.DictDelete = modal.client.UnaryUnaryWrapper(grpclib_stub.DictDelete, client)
55
- self.DictGet = modal.client.UnaryUnaryWrapper(grpclib_stub.DictGet, client)
56
- self.DictGetOrCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.DictGetOrCreate, client)
57
- self.DictHeartbeat = modal.client.UnaryUnaryWrapper(grpclib_stub.DictHeartbeat, client)
58
- self.DictLen = modal.client.UnaryUnaryWrapper(grpclib_stub.DictLen, client)
59
- self.DictList = modal.client.UnaryUnaryWrapper(grpclib_stub.DictList, client)
60
- self.DictPop = modal.client.UnaryUnaryWrapper(grpclib_stub.DictPop, client)
61
- self.DictUpdate = modal.client.UnaryUnaryWrapper(grpclib_stub.DictUpdate, client)
62
- self.DomainCertificateVerify = modal.client.UnaryUnaryWrapper(grpclib_stub.DomainCertificateVerify, client)
63
- self.DomainCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.DomainCreate, client)
64
- self.DomainList = modal.client.UnaryUnaryWrapper(grpclib_stub.DomainList, client)
65
- self.EnvironmentCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.EnvironmentCreate, client)
66
- self.EnvironmentDelete = modal.client.UnaryUnaryWrapper(grpclib_stub.EnvironmentDelete, client)
67
- self.EnvironmentGetOrCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.EnvironmentGetOrCreate, client)
68
- self.EnvironmentList = modal.client.UnaryUnaryWrapper(grpclib_stub.EnvironmentList, client)
69
- self.EnvironmentUpdate = modal.client.UnaryUnaryWrapper(grpclib_stub.EnvironmentUpdate, client)
70
- self.FunctionAsyncInvoke = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionAsyncInvoke, client)
71
- self.FunctionBindParams = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionBindParams, client)
72
- self.FunctionCallCancel = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionCallCancel, client)
73
- self.FunctionCallGetDataIn = modal.client.UnaryStreamWrapper(grpclib_stub.FunctionCallGetDataIn, client)
74
- self.FunctionCallGetDataOut = modal.client.UnaryStreamWrapper(grpclib_stub.FunctionCallGetDataOut, client)
75
- self.FunctionCallList = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionCallList, client)
76
- self.FunctionCallPutDataOut = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionCallPutDataOut, client)
77
- self.FunctionCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionCreate, client)
78
- self.FunctionGet = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionGet, client)
79
- self.FunctionGetCallGraph = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionGetCallGraph, client)
80
- self.FunctionGetCurrentStats = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionGetCurrentStats, client)
81
- self.FunctionGetDynamicConcurrency = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionGetDynamicConcurrency, client)
82
- self.FunctionGetInputs = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionGetInputs, client)
83
- self.FunctionGetOutputs = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionGetOutputs, client)
84
- self.FunctionGetSerialized = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionGetSerialized, client)
85
- self.FunctionMap = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionMap, client)
86
- self.FunctionPrecreate = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionPrecreate, client)
87
- self.FunctionPutInputs = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionPutInputs, client)
88
- self.FunctionPutOutputs = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionPutOutputs, client)
89
- self.FunctionRetryInputs = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionRetryInputs, client)
90
- self.FunctionStartPtyShell = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionStartPtyShell, client)
91
- self.FunctionUpdateSchedulingParams = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionUpdateSchedulingParams, client)
92
- self.ImageFromId = modal.client.UnaryUnaryWrapper(grpclib_stub.ImageFromId, client)
93
- self.ImageGetOrCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.ImageGetOrCreate, client)
94
- self.ImageJoinStreaming = modal.client.UnaryStreamWrapper(grpclib_stub.ImageJoinStreaming, client)
95
- self.MountGetOrCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.MountGetOrCreate, client)
96
- self.MountPutFile = modal.client.UnaryUnaryWrapper(grpclib_stub.MountPutFile, client)
97
- self.NotebookKernelPublishResults = modal.client.UnaryUnaryWrapper(grpclib_stub.NotebookKernelPublishResults, client)
98
- self.ProxyAddIp = modal.client.UnaryUnaryWrapper(grpclib_stub.ProxyAddIp, client)
99
- self.ProxyCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.ProxyCreate, client)
100
- self.ProxyDelete = modal.client.UnaryUnaryWrapper(grpclib_stub.ProxyDelete, client)
101
- self.ProxyGet = modal.client.UnaryUnaryWrapper(grpclib_stub.ProxyGet, client)
102
- self.ProxyGetOrCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.ProxyGetOrCreate, client)
103
- self.ProxyList = modal.client.UnaryUnaryWrapper(grpclib_stub.ProxyList, client)
104
- self.ProxyRemoveIp = modal.client.UnaryUnaryWrapper(grpclib_stub.ProxyRemoveIp, client)
105
- self.QueueClear = modal.client.UnaryUnaryWrapper(grpclib_stub.QueueClear, client)
106
- self.QueueDelete = modal.client.UnaryUnaryWrapper(grpclib_stub.QueueDelete, client)
107
- self.QueueGet = modal.client.UnaryUnaryWrapper(grpclib_stub.QueueGet, client)
108
- self.QueueGetOrCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.QueueGetOrCreate, client)
109
- self.QueueHeartbeat = modal.client.UnaryUnaryWrapper(grpclib_stub.QueueHeartbeat, client)
110
- self.QueueLen = modal.client.UnaryUnaryWrapper(grpclib_stub.QueueLen, client)
111
- self.QueueList = modal.client.UnaryUnaryWrapper(grpclib_stub.QueueList, client)
112
- self.QueueNextItems = modal.client.UnaryUnaryWrapper(grpclib_stub.QueueNextItems, client)
113
- self.QueuePut = modal.client.UnaryUnaryWrapper(grpclib_stub.QueuePut, client)
114
- self.SandboxCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.SandboxCreate, client)
115
- self.SandboxGetLogs = modal.client.UnaryStreamWrapper(grpclib_stub.SandboxGetLogs, client)
116
- self.SandboxGetResourceUsage = modal.client.UnaryUnaryWrapper(grpclib_stub.SandboxGetResourceUsage, client)
117
- self.SandboxGetTaskId = modal.client.UnaryUnaryWrapper(grpclib_stub.SandboxGetTaskId, client)
118
- self.SandboxGetTunnels = modal.client.UnaryUnaryWrapper(grpclib_stub.SandboxGetTunnels, client)
119
- self.SandboxList = modal.client.UnaryUnaryWrapper(grpclib_stub.SandboxList, client)
120
- self.SandboxRestore = modal.client.UnaryUnaryWrapper(grpclib_stub.SandboxRestore, client)
121
- self.SandboxSnapshot = modal.client.UnaryUnaryWrapper(grpclib_stub.SandboxSnapshot, client)
122
- self.SandboxSnapshotFs = modal.client.UnaryUnaryWrapper(grpclib_stub.SandboxSnapshotFs, client)
123
- self.SandboxSnapshotGet = modal.client.UnaryUnaryWrapper(grpclib_stub.SandboxSnapshotGet, client)
124
- self.SandboxSnapshotWait = modal.client.UnaryUnaryWrapper(grpclib_stub.SandboxSnapshotWait, client)
125
- self.SandboxStdinWrite = modal.client.UnaryUnaryWrapper(grpclib_stub.SandboxStdinWrite, client)
126
- self.SandboxTagsSet = modal.client.UnaryUnaryWrapper(grpclib_stub.SandboxTagsSet, client)
127
- self.SandboxTerminate = modal.client.UnaryUnaryWrapper(grpclib_stub.SandboxTerminate, client)
128
- self.SandboxWait = modal.client.UnaryUnaryWrapper(grpclib_stub.SandboxWait, client)
129
- self.SecretDelete = modal.client.UnaryUnaryWrapper(grpclib_stub.SecretDelete, client)
130
- self.SecretGetOrCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.SecretGetOrCreate, client)
131
- self.SecretList = modal.client.UnaryUnaryWrapper(grpclib_stub.SecretList, client)
132
- self.SharedVolumeDelete = modal.client.UnaryUnaryWrapper(grpclib_stub.SharedVolumeDelete, client)
133
- self.SharedVolumeGetFile = modal.client.UnaryUnaryWrapper(grpclib_stub.SharedVolumeGetFile, client)
134
- self.SharedVolumeGetOrCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.SharedVolumeGetOrCreate, client)
135
- self.SharedVolumeHeartbeat = modal.client.UnaryUnaryWrapper(grpclib_stub.SharedVolumeHeartbeat, client)
136
- self.SharedVolumeList = modal.client.UnaryUnaryWrapper(grpclib_stub.SharedVolumeList, client)
137
- self.SharedVolumeListFiles = modal.client.UnaryUnaryWrapper(grpclib_stub.SharedVolumeListFiles, client)
138
- self.SharedVolumeListFilesStream = modal.client.UnaryStreamWrapper(grpclib_stub.SharedVolumeListFilesStream, client)
139
- self.SharedVolumePutFile = modal.client.UnaryUnaryWrapper(grpclib_stub.SharedVolumePutFile, client)
140
- self.SharedVolumeRemoveFile = modal.client.UnaryUnaryWrapper(grpclib_stub.SharedVolumeRemoveFile, client)
141
- self.TaskClusterHello = modal.client.UnaryUnaryWrapper(grpclib_stub.TaskClusterHello, client)
142
- self.TaskCurrentInputs = modal.client.UnaryUnaryWrapper(grpclib_stub.TaskCurrentInputs, client)
143
- self.TaskList = modal.client.UnaryUnaryWrapper(grpclib_stub.TaskList, client)
144
- self.TaskResult = modal.client.UnaryUnaryWrapper(grpclib_stub.TaskResult, client)
145
- self.TokenFlowCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.TokenFlowCreate, client)
146
- self.TokenFlowWait = modal.client.UnaryUnaryWrapper(grpclib_stub.TokenFlowWait, client)
147
- self.TunnelStart = modal.client.UnaryUnaryWrapper(grpclib_stub.TunnelStart, client)
148
- self.TunnelStop = modal.client.UnaryUnaryWrapper(grpclib_stub.TunnelStop, client)
149
- self.VolumeCommit = modal.client.UnaryUnaryWrapper(grpclib_stub.VolumeCommit, client)
150
- self.VolumeCopyFiles = modal.client.UnaryUnaryWrapper(grpclib_stub.VolumeCopyFiles, client)
151
- self.VolumeDelete = modal.client.UnaryUnaryWrapper(grpclib_stub.VolumeDelete, client)
152
- self.VolumeGetFile = modal.client.UnaryUnaryWrapper(grpclib_stub.VolumeGetFile, client)
153
- self.VolumeGetFile2 = modal.client.UnaryUnaryWrapper(grpclib_stub.VolumeGetFile2, client)
154
- self.VolumeGetOrCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.VolumeGetOrCreate, client)
155
- self.VolumeHeartbeat = modal.client.UnaryUnaryWrapper(grpclib_stub.VolumeHeartbeat, client)
156
- self.VolumeList = modal.client.UnaryUnaryWrapper(grpclib_stub.VolumeList, client)
157
- self.VolumeListFiles = modal.client.UnaryStreamWrapper(grpclib_stub.VolumeListFiles, client)
158
- self.VolumePutFiles = modal.client.UnaryUnaryWrapper(grpclib_stub.VolumePutFiles, client)
159
- self.VolumePutFiles2 = modal.client.UnaryUnaryWrapper(grpclib_stub.VolumePutFiles2, client)
160
- self.VolumeReload = modal.client.UnaryUnaryWrapper(grpclib_stub.VolumeReload, client)
161
- self.VolumeRemoveFile = modal.client.UnaryUnaryWrapper(grpclib_stub.VolumeRemoveFile, client)
162
- self.VolumeRename = modal.client.UnaryUnaryWrapper(grpclib_stub.VolumeRename, client)
163
- self.WorkspaceNameLookup = modal.client.UnaryUnaryWrapper(grpclib_stub.WorkspaceNameLookup, client)
19
+
20
+ def __init__(self, grpclib_stub: modal_proto.api_grpc.ModalClientStub, client: "modal.client._Client", server_url: str) -> None:
21
+ self.AppClientDisconnect = modal.client.UnaryUnaryWrapper(grpclib_stub.AppClientDisconnect, client, server_url)
22
+ self.AppCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.AppCreate, client, server_url)
23
+ self.AppDeploy = modal.client.UnaryUnaryWrapper(grpclib_stub.AppDeploy, client, server_url)
24
+ self.AppDeploymentHistory = modal.client.UnaryUnaryWrapper(grpclib_stub.AppDeploymentHistory, client, server_url)
25
+ self.AppGetByDeploymentName = modal.client.UnaryUnaryWrapper(grpclib_stub.AppGetByDeploymentName, client, server_url)
26
+ self.AppGetLayout = modal.client.UnaryUnaryWrapper(grpclib_stub.AppGetLayout, client, server_url)
27
+ self.AppGetLogs = modal.client.UnaryStreamWrapper(grpclib_stub.AppGetLogs, client, server_url)
28
+ self.AppGetObjects = modal.client.UnaryUnaryWrapper(grpclib_stub.AppGetObjects, client, server_url)
29
+ self.AppGetOrCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.AppGetOrCreate, client, server_url)
30
+ self.AppHeartbeat = modal.client.UnaryUnaryWrapper(grpclib_stub.AppHeartbeat, client, server_url)
31
+ self.AppList = modal.client.UnaryUnaryWrapper(grpclib_stub.AppList, client, server_url)
32
+ self.AppLookup = modal.client.UnaryUnaryWrapper(grpclib_stub.AppLookup, client, server_url)
33
+ self.AppPublish = modal.client.UnaryUnaryWrapper(grpclib_stub.AppPublish, client, server_url)
34
+ self.AppRollback = modal.client.UnaryUnaryWrapper(grpclib_stub.AppRollback, client, server_url)
35
+ self.AppSetObjects = modal.client.UnaryUnaryWrapper(grpclib_stub.AppSetObjects, client, server_url)
36
+ self.AppStop = modal.client.UnaryUnaryWrapper(grpclib_stub.AppStop, client, server_url)
37
+ self.AttemptAwait = modal.client.UnaryUnaryWrapper(grpclib_stub.AttemptAwait, client, server_url)
38
+ self.AttemptStart = modal.client.UnaryUnaryWrapper(grpclib_stub.AttemptStart, client, server_url)
39
+ self.BlobCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.BlobCreate, client, server_url)
40
+ self.BlobGet = modal.client.UnaryUnaryWrapper(grpclib_stub.BlobGet, client, server_url)
41
+ self.ClassCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.ClassCreate, client, server_url)
42
+ self.ClassGet = modal.client.UnaryUnaryWrapper(grpclib_stub.ClassGet, client, server_url)
43
+ self.ClientHello = modal.client.UnaryUnaryWrapper(grpclib_stub.ClientHello, client, server_url)
44
+ self.ClusterGet = modal.client.UnaryUnaryWrapper(grpclib_stub.ClusterGet, client, server_url)
45
+ self.ClusterList = modal.client.UnaryUnaryWrapper(grpclib_stub.ClusterList, client, server_url)
46
+ self.ContainerCheckpoint = modal.client.UnaryUnaryWrapper(grpclib_stub.ContainerCheckpoint, client, server_url)
47
+ self.ContainerExec = modal.client.UnaryUnaryWrapper(grpclib_stub.ContainerExec, client, server_url)
48
+ self.ContainerExecGetOutput = modal.client.UnaryStreamWrapper(grpclib_stub.ContainerExecGetOutput, client, server_url)
49
+ self.ContainerExecPutInput = modal.client.UnaryUnaryWrapper(grpclib_stub.ContainerExecPutInput, client, server_url)
50
+ self.ContainerExecWait = modal.client.UnaryUnaryWrapper(grpclib_stub.ContainerExecWait, client, server_url)
51
+ self.ContainerFilesystemExec = modal.client.UnaryUnaryWrapper(grpclib_stub.ContainerFilesystemExec, client, server_url)
52
+ self.ContainerFilesystemExecGetOutput = modal.client.UnaryStreamWrapper(grpclib_stub.ContainerFilesystemExecGetOutput, client, server_url)
53
+ self.ContainerHeartbeat = modal.client.UnaryUnaryWrapper(grpclib_stub.ContainerHeartbeat, client, server_url)
54
+ self.ContainerHello = modal.client.UnaryUnaryWrapper(grpclib_stub.ContainerHello, client, server_url)
55
+ self.ContainerLog = modal.client.UnaryUnaryWrapper(grpclib_stub.ContainerLog, client, server_url)
56
+ self.ContainerStop = modal.client.UnaryUnaryWrapper(grpclib_stub.ContainerStop, client, server_url)
57
+ self.DictClear = modal.client.UnaryUnaryWrapper(grpclib_stub.DictClear, client, server_url)
58
+ self.DictContains = modal.client.UnaryUnaryWrapper(grpclib_stub.DictContains, client, server_url)
59
+ self.DictContents = modal.client.UnaryStreamWrapper(grpclib_stub.DictContents, client, server_url)
60
+ self.DictDelete = modal.client.UnaryUnaryWrapper(grpclib_stub.DictDelete, client, server_url)
61
+ self.DictGet = modal.client.UnaryUnaryWrapper(grpclib_stub.DictGet, client, server_url)
62
+ self.DictGetOrCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.DictGetOrCreate, client, server_url)
63
+ self.DictHeartbeat = modal.client.UnaryUnaryWrapper(grpclib_stub.DictHeartbeat, client, server_url)
64
+ self.DictLen = modal.client.UnaryUnaryWrapper(grpclib_stub.DictLen, client, server_url)
65
+ self.DictList = modal.client.UnaryUnaryWrapper(grpclib_stub.DictList, client, server_url)
66
+ self.DictPop = modal.client.UnaryUnaryWrapper(grpclib_stub.DictPop, client, server_url)
67
+ self.DictUpdate = modal.client.UnaryUnaryWrapper(grpclib_stub.DictUpdate, client, server_url)
68
+ self.DomainCertificateVerify = modal.client.UnaryUnaryWrapper(grpclib_stub.DomainCertificateVerify, client, server_url)
69
+ self.DomainCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.DomainCreate, client, server_url)
70
+ self.DomainList = modal.client.UnaryUnaryWrapper(grpclib_stub.DomainList, client, server_url)
71
+ self.EnvironmentCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.EnvironmentCreate, client, server_url)
72
+ self.EnvironmentDelete = modal.client.UnaryUnaryWrapper(grpclib_stub.EnvironmentDelete, client, server_url)
73
+ self.EnvironmentGetOrCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.EnvironmentGetOrCreate, client, server_url)
74
+ self.EnvironmentList = modal.client.UnaryUnaryWrapper(grpclib_stub.EnvironmentList, client, server_url)
75
+ self.EnvironmentUpdate = modal.client.UnaryUnaryWrapper(grpclib_stub.EnvironmentUpdate, client, server_url)
76
+ self.FunctionAsyncInvoke = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionAsyncInvoke, client, server_url)
77
+ self.FunctionBindParams = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionBindParams, client, server_url)
78
+ self.FunctionCallCancel = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionCallCancel, client, server_url)
79
+ self.FunctionCallGetDataIn = modal.client.UnaryStreamWrapper(grpclib_stub.FunctionCallGetDataIn, client, server_url)
80
+ self.FunctionCallGetDataOut = modal.client.UnaryStreamWrapper(grpclib_stub.FunctionCallGetDataOut, client, server_url)
81
+ self.FunctionCallList = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionCallList, client, server_url)
82
+ self.FunctionCallPutDataOut = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionCallPutDataOut, client, server_url)
83
+ self.FunctionCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionCreate, client, server_url)
84
+ self.FunctionGet = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionGet, client, server_url)
85
+ self.FunctionGetCallGraph = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionGetCallGraph, client, server_url)
86
+ self.FunctionGetCurrentStats = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionGetCurrentStats, client, server_url)
87
+ self.FunctionGetDynamicConcurrency = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionGetDynamicConcurrency, client, server_url)
88
+ self.FunctionGetInputs = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionGetInputs, client, server_url)
89
+ self.FunctionGetOutputs = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionGetOutputs, client, server_url)
90
+ self.FunctionGetSerialized = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionGetSerialized, client, server_url)
91
+ self.FunctionMap = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionMap, client, server_url)
92
+ self.FunctionPrecreate = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionPrecreate, client, server_url)
93
+ self.FunctionPutInputs = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionPutInputs, client, server_url)
94
+ self.FunctionPutOutputs = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionPutOutputs, client, server_url)
95
+ self.FunctionRetryInputs = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionRetryInputs, client, server_url)
96
+ self.FunctionStartPtyShell = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionStartPtyShell, client, server_url)
97
+ self.FunctionUpdateSchedulingParams = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionUpdateSchedulingParams, client, server_url)
98
+ self.ImageFromId = modal.client.UnaryUnaryWrapper(grpclib_stub.ImageFromId, client, server_url)
99
+ self.ImageGetOrCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.ImageGetOrCreate, client, server_url)
100
+ self.ImageJoinStreaming = modal.client.UnaryStreamWrapper(grpclib_stub.ImageJoinStreaming, client, server_url)
101
+ self.MountGetOrCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.MountGetOrCreate, client, server_url)
102
+ self.MountPutFile = modal.client.UnaryUnaryWrapper(grpclib_stub.MountPutFile, client, server_url)
103
+ self.NotebookKernelPublishResults = modal.client.UnaryUnaryWrapper(grpclib_stub.NotebookKernelPublishResults, client, server_url)
104
+ self.ProxyAddIp = modal.client.UnaryUnaryWrapper(grpclib_stub.ProxyAddIp, client, server_url)
105
+ self.ProxyCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.ProxyCreate, client, server_url)
106
+ self.ProxyDelete = modal.client.UnaryUnaryWrapper(grpclib_stub.ProxyDelete, client, server_url)
107
+ self.ProxyGet = modal.client.UnaryUnaryWrapper(grpclib_stub.ProxyGet, client, server_url)
108
+ self.ProxyGetOrCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.ProxyGetOrCreate, client, server_url)
109
+ self.ProxyList = modal.client.UnaryUnaryWrapper(grpclib_stub.ProxyList, client, server_url)
110
+ self.ProxyRemoveIp = modal.client.UnaryUnaryWrapper(grpclib_stub.ProxyRemoveIp, client, server_url)
111
+ self.QueueClear = modal.client.UnaryUnaryWrapper(grpclib_stub.QueueClear, client, server_url)
112
+ self.QueueDelete = modal.client.UnaryUnaryWrapper(grpclib_stub.QueueDelete, client, server_url)
113
+ self.QueueGet = modal.client.UnaryUnaryWrapper(grpclib_stub.QueueGet, client, server_url)
114
+ self.QueueGetOrCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.QueueGetOrCreate, client, server_url)
115
+ self.QueueHeartbeat = modal.client.UnaryUnaryWrapper(grpclib_stub.QueueHeartbeat, client, server_url)
116
+ self.QueueLen = modal.client.UnaryUnaryWrapper(grpclib_stub.QueueLen, client, server_url)
117
+ self.QueueList = modal.client.UnaryUnaryWrapper(grpclib_stub.QueueList, client, server_url)
118
+ self.QueueNextItems = modal.client.UnaryUnaryWrapper(grpclib_stub.QueueNextItems, client, server_url)
119
+ self.QueuePut = modal.client.UnaryUnaryWrapper(grpclib_stub.QueuePut, client, server_url)
120
+ self.SandboxCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.SandboxCreate, client, server_url)
121
+ self.SandboxGetLogs = modal.client.UnaryStreamWrapper(grpclib_stub.SandboxGetLogs, client, server_url)
122
+ self.SandboxGetResourceUsage = modal.client.UnaryUnaryWrapper(grpclib_stub.SandboxGetResourceUsage, client, server_url)
123
+ self.SandboxGetTaskId = modal.client.UnaryUnaryWrapper(grpclib_stub.SandboxGetTaskId, client, server_url)
124
+ self.SandboxGetTunnels = modal.client.UnaryUnaryWrapper(grpclib_stub.SandboxGetTunnels, client, server_url)
125
+ self.SandboxList = modal.client.UnaryUnaryWrapper(grpclib_stub.SandboxList, client, server_url)
126
+ self.SandboxRestore = modal.client.UnaryUnaryWrapper(grpclib_stub.SandboxRestore, client, server_url)
127
+ self.SandboxSnapshot = modal.client.UnaryUnaryWrapper(grpclib_stub.SandboxSnapshot, client, server_url)
128
+ self.SandboxSnapshotFs = modal.client.UnaryUnaryWrapper(grpclib_stub.SandboxSnapshotFs, client, server_url)
129
+ self.SandboxSnapshotGet = modal.client.UnaryUnaryWrapper(grpclib_stub.SandboxSnapshotGet, client, server_url)
130
+ self.SandboxSnapshotWait = modal.client.UnaryUnaryWrapper(grpclib_stub.SandboxSnapshotWait, client, server_url)
131
+ self.SandboxStdinWrite = modal.client.UnaryUnaryWrapper(grpclib_stub.SandboxStdinWrite, client, server_url)
132
+ self.SandboxTagsSet = modal.client.UnaryUnaryWrapper(grpclib_stub.SandboxTagsSet, client, server_url)
133
+ self.SandboxTerminate = modal.client.UnaryUnaryWrapper(grpclib_stub.SandboxTerminate, client, server_url)
134
+ self.SandboxWait = modal.client.UnaryUnaryWrapper(grpclib_stub.SandboxWait, client, server_url)
135
+ self.SecretDelete = modal.client.UnaryUnaryWrapper(grpclib_stub.SecretDelete, client, server_url)
136
+ self.SecretGetOrCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.SecretGetOrCreate, client, server_url)
137
+ self.SecretList = modal.client.UnaryUnaryWrapper(grpclib_stub.SecretList, client, server_url)
138
+ self.SharedVolumeDelete = modal.client.UnaryUnaryWrapper(grpclib_stub.SharedVolumeDelete, client, server_url)
139
+ self.SharedVolumeGetFile = modal.client.UnaryUnaryWrapper(grpclib_stub.SharedVolumeGetFile, client, server_url)
140
+ self.SharedVolumeGetOrCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.SharedVolumeGetOrCreate, client, server_url)
141
+ self.SharedVolumeHeartbeat = modal.client.UnaryUnaryWrapper(grpclib_stub.SharedVolumeHeartbeat, client, server_url)
142
+ self.SharedVolumeList = modal.client.UnaryUnaryWrapper(grpclib_stub.SharedVolumeList, client, server_url)
143
+ self.SharedVolumeListFiles = modal.client.UnaryUnaryWrapper(grpclib_stub.SharedVolumeListFiles, client, server_url)
144
+ self.SharedVolumeListFilesStream = modal.client.UnaryStreamWrapper(grpclib_stub.SharedVolumeListFilesStream, client, server_url)
145
+ self.SharedVolumePutFile = modal.client.UnaryUnaryWrapper(grpclib_stub.SharedVolumePutFile, client, server_url)
146
+ self.SharedVolumeRemoveFile = modal.client.UnaryUnaryWrapper(grpclib_stub.SharedVolumeRemoveFile, client, server_url)
147
+ self.TaskClusterHello = modal.client.UnaryUnaryWrapper(grpclib_stub.TaskClusterHello, client, server_url)
148
+ self.TaskCurrentInputs = modal.client.UnaryUnaryWrapper(grpclib_stub.TaskCurrentInputs, client, server_url)
149
+ self.TaskList = modal.client.UnaryUnaryWrapper(grpclib_stub.TaskList, client, server_url)
150
+ self.TaskResult = modal.client.UnaryUnaryWrapper(grpclib_stub.TaskResult, client, server_url)
151
+ self.TokenFlowCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.TokenFlowCreate, client, server_url)
152
+ self.TokenFlowWait = modal.client.UnaryUnaryWrapper(grpclib_stub.TokenFlowWait, client, server_url)
153
+ self.TunnelStart = modal.client.UnaryUnaryWrapper(grpclib_stub.TunnelStart, client, server_url)
154
+ self.TunnelStop = modal.client.UnaryUnaryWrapper(grpclib_stub.TunnelStop, client, server_url)
155
+ self.VolumeCommit = modal.client.UnaryUnaryWrapper(grpclib_stub.VolumeCommit, client, server_url)
156
+ self.VolumeCopyFiles = modal.client.UnaryUnaryWrapper(grpclib_stub.VolumeCopyFiles, client, server_url)
157
+ self.VolumeDelete = modal.client.UnaryUnaryWrapper(grpclib_stub.VolumeDelete, client, server_url)
158
+ self.VolumeGetFile = modal.client.UnaryUnaryWrapper(grpclib_stub.VolumeGetFile, client, server_url)
159
+ self.VolumeGetFile2 = modal.client.UnaryUnaryWrapper(grpclib_stub.VolumeGetFile2, client, server_url)
160
+ self.VolumeGetOrCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.VolumeGetOrCreate, client, server_url)
161
+ self.VolumeHeartbeat = modal.client.UnaryUnaryWrapper(grpclib_stub.VolumeHeartbeat, client, server_url)
162
+ self.VolumeList = modal.client.UnaryUnaryWrapper(grpclib_stub.VolumeList, client, server_url)
163
+ self.VolumeListFiles = modal.client.UnaryStreamWrapper(grpclib_stub.VolumeListFiles, client, server_url)
164
+ self.VolumePutFiles = modal.client.UnaryUnaryWrapper(grpclib_stub.VolumePutFiles, client, server_url)
165
+ self.VolumePutFiles2 = modal.client.UnaryUnaryWrapper(grpclib_stub.VolumePutFiles2, client, server_url)
166
+ self.VolumeReload = modal.client.UnaryUnaryWrapper(grpclib_stub.VolumeReload, client, server_url)
167
+ self.VolumeRemoveFile = modal.client.UnaryUnaryWrapper(grpclib_stub.VolumeRemoveFile, client, server_url)
168
+ self.VolumeRename = modal.client.UnaryUnaryWrapper(grpclib_stub.VolumeRename, client, server_url)
169
+ self.WorkspaceNameLookup = modal.client.UnaryUnaryWrapper(grpclib_stub.WorkspaceNameLookup, client, server_url)
@@ -1,4 +1,4 @@
1
1
  # Copyright Modal Labs 2025
2
2
 
3
3
  # Note: Reset this value to -1 whenever you make a minor `0.X` release of the client.
4
- build_number = 53 # git: 50e5d04
4
+ build_number = 55 # git: aa1b399