modal 1.1.1.dev37__py3-none-any.whl → 1.1.1.dev39__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of modal might be problematic. Click here for more details.
- modal/_output.py +2 -2
- modal/_utils/time_utils.py +8 -4
- modal/cli/app.py +4 -4
- modal/cli/cluster.py +2 -2
- modal/cli/container.py +2 -2
- modal/cli/dict.py +2 -2
- modal/cli/network_file_system.py +2 -2
- modal/cli/queues.py +2 -2
- modal/cli/secret.py +3 -3
- modal/cli/volume.py +3 -3
- modal/client.pyi +2 -2
- modal/dict.py +2 -1
- modal/functions.pyi +6 -6
- modal/image.py +4 -4
- modal/queue.py +2 -1
- modal/secret.py +2 -1
- modal/volume.py +2 -1
- {modal-1.1.1.dev37.dist-info → modal-1.1.1.dev39.dist-info}/METADATA +1 -1
- {modal-1.1.1.dev37.dist-info → modal-1.1.1.dev39.dist-info}/RECORD +24 -24
- modal_version/__init__.py +1 -1
- {modal-1.1.1.dev37.dist-info → modal-1.1.1.dev39.dist-info}/WHEEL +0 -0
- {modal-1.1.1.dev37.dist-info → modal-1.1.1.dev39.dist-info}/entry_points.txt +0 -0
- {modal-1.1.1.dev37.dist-info → modal-1.1.1.dev39.dist-info}/licenses/LICENSE +0 -0
- {modal-1.1.1.dev37.dist-info → modal-1.1.1.dev39.dist-info}/top_level.txt +0 -0
modal/_output.py
CHANGED
|
@@ -31,7 +31,7 @@ from rich.progress import (
|
|
|
31
31
|
from rich.spinner import Spinner
|
|
32
32
|
from rich.text import Text
|
|
33
33
|
|
|
34
|
-
from modal._utils.time_utils import
|
|
34
|
+
from modal._utils.time_utils import timestamp_to_localized_str
|
|
35
35
|
from modal_proto import api_pb2
|
|
36
36
|
|
|
37
37
|
from ._utils.grpc_utils import RETRYABLE_GRPC_STATUS_CODES, retry_transient_errors
|
|
@@ -91,7 +91,7 @@ class LineBufferedOutput:
|
|
|
91
91
|
|
|
92
92
|
if self._show_timestamps:
|
|
93
93
|
for i in range(0, len(chunks) - 1, 2):
|
|
94
|
-
chunks[i] = f"{
|
|
94
|
+
chunks[i] = f"{timestamp_to_localized_str(log.timestamp)} {chunks[i]}"
|
|
95
95
|
|
|
96
96
|
completed_lines = "".join(chunks[:-1])
|
|
97
97
|
remainder = chunks[-1]
|
modal/_utils/time_utils.py
CHANGED
|
@@ -3,13 +3,17 @@ from datetime import datetime
|
|
|
3
3
|
from typing import Optional
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
def
|
|
6
|
+
def timestamp_to_localized_dt(ts: float) -> datetime:
|
|
7
|
+
locale_tz = datetime.now().astimezone().tzinfo
|
|
8
|
+
return datetime.fromtimestamp(ts, tz=locale_tz)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def timestamp_to_localized_str(ts: float, isotz: bool = True) -> Optional[str]:
|
|
7
12
|
if ts > 0:
|
|
8
|
-
|
|
9
|
-
dt = datetime.fromtimestamp(ts, tz=locale_tz)
|
|
13
|
+
dt = timestamp_to_localized_dt(ts)
|
|
10
14
|
if isotz:
|
|
11
15
|
return dt.isoformat(sep=" ", timespec="seconds")
|
|
12
16
|
else:
|
|
13
|
-
return f"{
|
|
17
|
+
return f"{dt:%Y-%m-%d %H:%M %Z}"
|
|
14
18
|
else:
|
|
15
19
|
return None
|
modal/cli/app.py
CHANGED
|
@@ -15,7 +15,7 @@ from modal.client import _Client
|
|
|
15
15
|
from modal.environments import ensure_env
|
|
16
16
|
from modal_proto import api_pb2
|
|
17
17
|
|
|
18
|
-
from .._utils.time_utils import
|
|
18
|
+
from .._utils.time_utils import timestamp_to_localized_str
|
|
19
19
|
from .utils import ENV_OPTION, display_table, get_app_id_from_name, stream_app_logs
|
|
20
20
|
|
|
21
21
|
APP_IDENTIFIER = Argument("", help="App name or ID")
|
|
@@ -71,8 +71,8 @@ async def list_(env: Optional[str] = ENV_OPTION, json: bool = False):
|
|
|
71
71
|
app_stats.description,
|
|
72
72
|
state,
|
|
73
73
|
str(app_stats.n_running_tasks),
|
|
74
|
-
|
|
75
|
-
|
|
74
|
+
timestamp_to_localized_str(app_stats.created_at, json),
|
|
75
|
+
timestamp_to_localized_str(app_stats.stopped_at, json),
|
|
76
76
|
]
|
|
77
77
|
)
|
|
78
78
|
|
|
@@ -217,7 +217,7 @@ async def history(
|
|
|
217
217
|
|
|
218
218
|
row = [
|
|
219
219
|
Text(f"v{app_stats.version}", style=style),
|
|
220
|
-
Text(
|
|
220
|
+
Text(timestamp_to_localized_str(app_stats.deployed_at, json), style=style),
|
|
221
221
|
Text(app_stats.client_version, style=style),
|
|
222
222
|
Text(app_stats.deployed_by, style=style),
|
|
223
223
|
]
|
modal/cli/cluster.py
CHANGED
|
@@ -8,7 +8,7 @@ from modal._object import _get_environment_name
|
|
|
8
8
|
from modal._output import make_console
|
|
9
9
|
from modal._pty import get_pty_info
|
|
10
10
|
from modal._utils.async_utils import synchronizer
|
|
11
|
-
from modal._utils.time_utils import
|
|
11
|
+
from modal._utils.time_utils import timestamp_to_localized_str
|
|
12
12
|
from modal.cli.utils import ENV_OPTION, display_table, is_tty
|
|
13
13
|
from modal.client import _Client
|
|
14
14
|
from modal.config import config
|
|
@@ -42,7 +42,7 @@ async def list_(env: Optional[str] = ENV_OPTION, json: bool = False):
|
|
|
42
42
|
[
|
|
43
43
|
c.cluster_id,
|
|
44
44
|
c.app_id,
|
|
45
|
-
|
|
45
|
+
timestamp_to_localized_str(c.started_at, json) if c.started_at else "Pending",
|
|
46
46
|
str(len(c.task_ids)),
|
|
47
47
|
]
|
|
48
48
|
)
|
modal/cli/container.py
CHANGED
|
@@ -8,7 +8,7 @@ from modal._object import _get_environment_name
|
|
|
8
8
|
from modal._pty import get_pty_info
|
|
9
9
|
from modal._utils.async_utils import synchronizer
|
|
10
10
|
from modal._utils.grpc_utils import retry_transient_errors
|
|
11
|
-
from modal._utils.time_utils import
|
|
11
|
+
from modal._utils.time_utils import timestamp_to_localized_str
|
|
12
12
|
from modal.cli.utils import ENV_OPTION, display_table, is_tty, stream_app_logs
|
|
13
13
|
from modal.client import _Client
|
|
14
14
|
from modal.config import config
|
|
@@ -40,7 +40,7 @@ async def list_(env: Optional[str] = ENV_OPTION, json: bool = False):
|
|
|
40
40
|
task_stats.task_id,
|
|
41
41
|
task_stats.app_id,
|
|
42
42
|
task_stats.app_description,
|
|
43
|
-
|
|
43
|
+
timestamp_to_localized_str(task_stats.started_at, json) if task_stats.started_at else "Pending",
|
|
44
44
|
]
|
|
45
45
|
)
|
|
46
46
|
|
modal/cli/dict.py
CHANGED
|
@@ -8,7 +8,7 @@ from modal._output import make_console
|
|
|
8
8
|
from modal._resolver import Resolver
|
|
9
9
|
from modal._utils.async_utils import synchronizer
|
|
10
10
|
from modal._utils.grpc_utils import retry_transient_errors
|
|
11
|
-
from modal._utils.time_utils import
|
|
11
|
+
from modal._utils.time_utils import timestamp_to_localized_str
|
|
12
12
|
from modal.cli.utils import ENV_OPTION, YES_OPTION, display_table
|
|
13
13
|
from modal.client import _Client
|
|
14
14
|
from modal.dict import _Dict
|
|
@@ -44,7 +44,7 @@ async def list_(*, json: bool = False, env: Optional[str] = ENV_OPTION):
|
|
|
44
44
|
request = api_pb2.DictListRequest(environment_name=env)
|
|
45
45
|
response = await retry_transient_errors(client.stub.DictList, request)
|
|
46
46
|
|
|
47
|
-
rows = [(d.name,
|
|
47
|
+
rows = [(d.name, timestamp_to_localized_str(d.created_at, json)) for d in response.dicts]
|
|
48
48
|
display_table(["Name", "Created at"], rows, json)
|
|
49
49
|
|
|
50
50
|
|
modal/cli/network_file_system.py
CHANGED
|
@@ -16,7 +16,7 @@ from modal._location import display_location
|
|
|
16
16
|
from modal._output import OutputManager, ProgressHandler, make_console
|
|
17
17
|
from modal._utils.async_utils import synchronizer
|
|
18
18
|
from modal._utils.grpc_utils import retry_transient_errors
|
|
19
|
-
from modal._utils.time_utils import
|
|
19
|
+
from modal._utils.time_utils import timestamp_to_localized_str
|
|
20
20
|
from modal.cli._download import _volume_download
|
|
21
21
|
from modal.cli.utils import ENV_OPTION, YES_OPTION, display_table
|
|
22
22
|
from modal.client import _Client
|
|
@@ -44,7 +44,7 @@ async def list_(env: Optional[str] = ENV_OPTION, json: Optional[bool] = False):
|
|
|
44
44
|
[
|
|
45
45
|
item.label,
|
|
46
46
|
display_location(item.cloud_provider),
|
|
47
|
-
|
|
47
|
+
timestamp_to_localized_str(item.created_at, json),
|
|
48
48
|
]
|
|
49
49
|
)
|
|
50
50
|
display_table(column_names, rows, json, title=f"Shared Volumes{env_part}")
|
modal/cli/queues.py
CHANGED
|
@@ -8,7 +8,7 @@ from modal._output import make_console
|
|
|
8
8
|
from modal._resolver import Resolver
|
|
9
9
|
from modal._utils.async_utils import synchronizer
|
|
10
10
|
from modal._utils.grpc_utils import retry_transient_errors
|
|
11
|
-
from modal._utils.time_utils import
|
|
11
|
+
from modal._utils.time_utils import timestamp_to_localized_str
|
|
12
12
|
from modal.cli.utils import ENV_OPTION, YES_OPTION, display_table
|
|
13
13
|
from modal.client import _Client
|
|
14
14
|
from modal.environments import ensure_env
|
|
@@ -71,7 +71,7 @@ async def list_(*, json: bool = False, env: Optional[str] = ENV_OPTION):
|
|
|
71
71
|
rows = [
|
|
72
72
|
(
|
|
73
73
|
q.name,
|
|
74
|
-
|
|
74
|
+
timestamp_to_localized_str(q.created_at, json),
|
|
75
75
|
str(q.num_partitions),
|
|
76
76
|
str(q.total_size) if q.total_size <= max_total_size else f">{max_total_size}",
|
|
77
77
|
)
|
modal/cli/secret.py
CHANGED
|
@@ -15,7 +15,7 @@ from typer import Argument
|
|
|
15
15
|
from modal._output import make_console
|
|
16
16
|
from modal._utils.async_utils import synchronizer
|
|
17
17
|
from modal._utils.grpc_utils import retry_transient_errors
|
|
18
|
-
from modal._utils.time_utils import
|
|
18
|
+
from modal._utils.time_utils import timestamp_to_localized_str
|
|
19
19
|
from modal.cli.utils import ENV_OPTION, YES_OPTION, display_table
|
|
20
20
|
from modal.client import _Client
|
|
21
21
|
from modal.environments import ensure_env
|
|
@@ -38,8 +38,8 @@ async def list_(env: Optional[str] = ENV_OPTION, json: bool = False):
|
|
|
38
38
|
rows.append(
|
|
39
39
|
[
|
|
40
40
|
item.label,
|
|
41
|
-
|
|
42
|
-
|
|
41
|
+
timestamp_to_localized_str(item.created_at, json),
|
|
42
|
+
timestamp_to_localized_str(item.last_used_at, json) if item.last_used_at else "-",
|
|
43
43
|
]
|
|
44
44
|
)
|
|
45
45
|
|
modal/cli/volume.py
CHANGED
|
@@ -14,7 +14,7 @@ import modal
|
|
|
14
14
|
from modal._output import OutputManager, ProgressHandler, make_console
|
|
15
15
|
from modal._utils.async_utils import synchronizer
|
|
16
16
|
from modal._utils.grpc_utils import retry_transient_errors
|
|
17
|
-
from modal._utils.time_utils import
|
|
17
|
+
from modal._utils.time_utils import timestamp_to_localized_str
|
|
18
18
|
from modal.cli._download import _volume_download
|
|
19
19
|
from modal.cli.utils import ENV_OPTION, YES_OPTION, display_table
|
|
20
20
|
from modal.client import _Client
|
|
@@ -116,7 +116,7 @@ async def list_(env: Optional[str] = ENV_OPTION, json: Optional[bool] = False):
|
|
|
116
116
|
column_names = ["Name", "Created at"]
|
|
117
117
|
rows = []
|
|
118
118
|
for item in response.items:
|
|
119
|
-
rows.append([item.label,
|
|
119
|
+
rows.append([item.label, timestamp_to_localized_str(item.created_at, json)])
|
|
120
120
|
display_table(column_names, rows, json, title=f"Volumes{env_part}")
|
|
121
121
|
|
|
122
122
|
|
|
@@ -163,7 +163,7 @@ async def ls(
|
|
|
163
163
|
(
|
|
164
164
|
entry.path.encode("unicode_escape").decode("utf-8"),
|
|
165
165
|
filetype,
|
|
166
|
-
|
|
166
|
+
timestamp_to_localized_str(entry.mtime, False),
|
|
167
167
|
humanize_filesize(entry.size),
|
|
168
168
|
)
|
|
169
169
|
)
|
modal/client.pyi
CHANGED
|
@@ -33,7 +33,7 @@ class _Client:
|
|
|
33
33
|
server_url: str,
|
|
34
34
|
client_type: int,
|
|
35
35
|
credentials: typing.Optional[tuple[str, str]],
|
|
36
|
-
version: str = "1.1.1.
|
|
36
|
+
version: str = "1.1.1.dev39",
|
|
37
37
|
):
|
|
38
38
|
"""mdmd:hidden
|
|
39
39
|
The Modal client object is not intended to be instantiated directly by users.
|
|
@@ -164,7 +164,7 @@ class Client:
|
|
|
164
164
|
server_url: str,
|
|
165
165
|
client_type: int,
|
|
166
166
|
credentials: typing.Optional[tuple[str, str]],
|
|
167
|
-
version: str = "1.1.1.
|
|
167
|
+
version: str = "1.1.1.dev39",
|
|
168
168
|
):
|
|
169
169
|
"""mdmd:hidden
|
|
170
170
|
The Modal client object is not intended to be instantiated directly by users.
|
modal/dict.py
CHANGED
|
@@ -17,6 +17,7 @@ from ._utils.async_utils import TaskContext, synchronize_api
|
|
|
17
17
|
from ._utils.deprecation import deprecation_warning, warn_if_passing_namespace
|
|
18
18
|
from ._utils.grpc_utils import retry_transient_errors
|
|
19
19
|
from ._utils.name_utils import check_object_name
|
|
20
|
+
from ._utils.time_utils import timestamp_to_localized_dt
|
|
20
21
|
from .client import _Client
|
|
21
22
|
from .config import logger
|
|
22
23
|
from .exception import RequestSizeError
|
|
@@ -248,7 +249,7 @@ class _Dict(_Object, type_prefix="di"):
|
|
|
248
249
|
creation_info = metadata.creation_info
|
|
249
250
|
return DictInfo(
|
|
250
251
|
name=metadata.name or None,
|
|
251
|
-
created_at=
|
|
252
|
+
created_at=timestamp_to_localized_dt(creation_info.created_at),
|
|
252
253
|
created_by=creation_info.created_by or None,
|
|
253
254
|
)
|
|
254
255
|
|
modal/functions.pyi
CHANGED
|
@@ -427,7 +427,7 @@ class Function(
|
|
|
427
427
|
|
|
428
428
|
_call_generator: ___call_generator_spec[typing_extensions.Self]
|
|
429
429
|
|
|
430
|
-
class __remote_spec(typing_extensions.Protocol[
|
|
430
|
+
class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
|
|
431
431
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER:
|
|
432
432
|
"""Calls the function remotely, executing it with the given arguments and returning the execution's result."""
|
|
433
433
|
...
|
|
@@ -436,7 +436,7 @@ class Function(
|
|
|
436
436
|
"""Calls the function remotely, executing it with the given arguments and returning the execution's result."""
|
|
437
437
|
...
|
|
438
438
|
|
|
439
|
-
remote: __remote_spec[modal._functions.
|
|
439
|
+
remote: __remote_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
|
|
440
440
|
|
|
441
441
|
class __remote_gen_spec(typing_extensions.Protocol[SUPERSELF]):
|
|
442
442
|
def __call__(self, /, *args, **kwargs) -> typing.Generator[typing.Any, None, None]:
|
|
@@ -463,7 +463,7 @@ class Function(
|
|
|
463
463
|
"""
|
|
464
464
|
...
|
|
465
465
|
|
|
466
|
-
class ___experimental_spawn_spec(typing_extensions.Protocol[
|
|
466
|
+
class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
|
|
467
467
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
|
|
468
468
|
"""[Experimental] Calls the function with the given arguments, without waiting for the results.
|
|
469
469
|
|
|
@@ -487,7 +487,7 @@ class Function(
|
|
|
487
487
|
...
|
|
488
488
|
|
|
489
489
|
_experimental_spawn: ___experimental_spawn_spec[
|
|
490
|
-
modal._functions.
|
|
490
|
+
modal._functions.ReturnType, modal._functions.P, typing_extensions.Self
|
|
491
491
|
]
|
|
492
492
|
|
|
493
493
|
class ___spawn_map_inner_spec(typing_extensions.Protocol[P_INNER, SUPERSELF]):
|
|
@@ -496,7 +496,7 @@ class Function(
|
|
|
496
496
|
|
|
497
497
|
_spawn_map_inner: ___spawn_map_inner_spec[modal._functions.P, typing_extensions.Self]
|
|
498
498
|
|
|
499
|
-
class __spawn_spec(typing_extensions.Protocol[
|
|
499
|
+
class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
|
|
500
500
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
|
|
501
501
|
"""Calls the function with the given arguments, without waiting for the results.
|
|
502
502
|
|
|
@@ -517,7 +517,7 @@ class Function(
|
|
|
517
517
|
"""
|
|
518
518
|
...
|
|
519
519
|
|
|
520
|
-
spawn: __spawn_spec[modal._functions.
|
|
520
|
+
spawn: __spawn_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
|
|
521
521
|
|
|
522
522
|
def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]:
|
|
523
523
|
"""Return the inner Python object wrapped by this Modal Function."""
|
modal/image.py
CHANGED
|
@@ -1189,11 +1189,11 @@ class _Image(_Object, type_prefix="im"):
|
|
|
1189
1189
|
else:
|
|
1190
1190
|
commands.append(f"COPY --from=ghcr.io/astral-sh/uv:{uv_version} /uv {UV_ROOT}/uv")
|
|
1191
1191
|
|
|
1192
|
-
# NOTE: Using
|
|
1192
|
+
# NOTE: Using $(command -v python) assumes:
|
|
1193
1193
|
# - python is on the PATH and uv is installing into the first python in the PATH
|
|
1194
|
-
# - the shell supports
|
|
1195
|
-
# - `
|
|
1196
|
-
uv_pip_args = ["--python
|
|
1194
|
+
# - the shell supports $() for substitution
|
|
1195
|
+
# - `command` command is on the PATH
|
|
1196
|
+
uv_pip_args = ["--python $(command -v python)", "--compile-bytecode"]
|
|
1197
1197
|
context_files = {}
|
|
1198
1198
|
|
|
1199
1199
|
if find_links:
|
modal/queue.py
CHANGED
|
@@ -20,6 +20,7 @@ from ._utils.async_utils import TaskContext, synchronize_api, warn_if_generator_
|
|
|
20
20
|
from ._utils.deprecation import deprecation_warning, warn_if_passing_namespace
|
|
21
21
|
from ._utils.grpc_utils import retry_transient_errors
|
|
22
22
|
from ._utils.name_utils import check_object_name
|
|
23
|
+
from ._utils.time_utils import timestamp_to_localized_dt
|
|
23
24
|
from .client import _Client
|
|
24
25
|
from .exception import InvalidError, RequestSizeError
|
|
25
26
|
|
|
@@ -260,7 +261,7 @@ class _Queue(_Object, type_prefix="qu"):
|
|
|
260
261
|
creation_info = metadata.creation_info
|
|
261
262
|
return QueueInfo(
|
|
262
263
|
name=metadata.name or None,
|
|
263
|
-
created_at=
|
|
264
|
+
created_at=timestamp_to_localized_dt(creation_info.created_at),
|
|
264
265
|
created_by=creation_info.created_by or None,
|
|
265
266
|
)
|
|
266
267
|
|
modal/secret.py
CHANGED
|
@@ -16,6 +16,7 @@ from ._utils.async_utils import synchronize_api
|
|
|
16
16
|
from ._utils.deprecation import deprecation_warning, warn_if_passing_namespace
|
|
17
17
|
from ._utils.grpc_utils import retry_transient_errors
|
|
18
18
|
from ._utils.name_utils import check_object_name
|
|
19
|
+
from ._utils.time_utils import timestamp_to_localized_dt
|
|
19
20
|
from .client import _Client
|
|
20
21
|
from .exception import InvalidError, NotFoundError
|
|
21
22
|
|
|
@@ -299,7 +300,7 @@ class _Secret(_Object, type_prefix="st"):
|
|
|
299
300
|
creation_info = metadata.creation_info
|
|
300
301
|
return SecretInfo(
|
|
301
302
|
name=metadata.name or None,
|
|
302
|
-
created_at=
|
|
303
|
+
created_at=timestamp_to_localized_dt(creation_info.created_at),
|
|
303
304
|
created_by=creation_info.created_by or None,
|
|
304
305
|
)
|
|
305
306
|
|
modal/volume.py
CHANGED
|
@@ -55,6 +55,7 @@ from ._utils.deprecation import deprecation_warning, warn_if_passing_namespace
|
|
|
55
55
|
from ._utils.grpc_utils import retry_transient_errors
|
|
56
56
|
from ._utils.http_utils import ClientSessionRegistry
|
|
57
57
|
from ._utils.name_utils import check_object_name
|
|
58
|
+
from ._utils.time_utils import timestamp_to_localized_dt
|
|
58
59
|
from .client import _Client
|
|
59
60
|
from .config import logger
|
|
60
61
|
|
|
@@ -364,7 +365,7 @@ class _Volume(_Object, type_prefix="vo"):
|
|
|
364
365
|
creation_info = metadata.creation_info
|
|
365
366
|
return VolumeInfo(
|
|
366
367
|
name=metadata.name or None,
|
|
367
|
-
created_at=
|
|
368
|
+
created_at=timestamp_to_localized_dt(creation_info.created_at),
|
|
368
369
|
created_by=creation_info.created_by or None,
|
|
369
370
|
)
|
|
370
371
|
|
|
@@ -7,7 +7,7 @@ modal/_functions.py,sha256=MVQEkih76OLsmy-QbphuyTH1gien8hTwjGs3Jxwx6cA,82826
|
|
|
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=nCkQeLibSuvVAEIheGaLnUfN5PIh1CGpJCnzPIXymGY,11563
|
|
10
|
-
modal/_output.py,sha256=
|
|
10
|
+
modal/_output.py,sha256=G9CeSQEBzjhveWWEzWmYa5Uwbu4lZf8N8IFH1UM4fU0,25803
|
|
11
11
|
modal/_partial_function.py,sha256=B1J4S9W-La0NHaVmY1aCuH0E3QxJHIX6ZWY5eNTQ7io,37142
|
|
12
12
|
modal/_pty.py,sha256=JZfPDDpzqICZqtyPI_oMJf_9w-p_lLNuzHhwhodUXio,1329
|
|
13
13
|
modal/_resolver.py,sha256=2RWvm34cNSnbv1v7izJMNZgfvpLDD6LzaBlr0lIrLnY,7364
|
|
@@ -22,7 +22,7 @@ modal/app.py,sha256=kpq4kXp7pch688y6g55QYAC10wqPTU5FXKoWPMirA3E,47899
|
|
|
22
22
|
modal/app.pyi,sha256=-jKXlGDBWRPVsuenBhdMRqawK-L2eiJ7gHbmSblhltg,43525
|
|
23
23
|
modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
|
|
24
24
|
modal/client.py,sha256=kyAIVB3Ay-XKJizQ_1ufUFB__EagV0MLmHJpyYyJ7J0,18636
|
|
25
|
-
modal/client.pyi,sha256=
|
|
25
|
+
modal/client.pyi,sha256=a_2musjq7MAO1-KDZbSQo69whteVNe4lhJRsFerzxTw,15831
|
|
26
26
|
modal/cloud_bucket_mount.py,sha256=YOe9nnvSr4ZbeCn587d7_VhE9IioZYRvF9VYQTQux08,5914
|
|
27
27
|
modal/cloud_bucket_mount.pyi,sha256=-qSfYAQvIoO_l2wsCCGTG5ZUwQieNKXdAO00yP1-LYU,7394
|
|
28
28
|
modal/cls.py,sha256=7A0xGnugQzm8dOfnKMjLjtqekRlRtQ0jPFRYgq6xdUM,40018
|
|
@@ -30,7 +30,7 @@ modal/cls.pyi,sha256=_tZ5qrlL-ZDEcD-mf9BZkkNH5XPr4SmGTEQ-RVmqF3I,27772
|
|
|
30
30
|
modal/config.py,sha256=FqVewLPVVR4feq_46JBENiCzqTuXKpnvQZxaeWbS39g,12009
|
|
31
31
|
modal/container_process.py,sha256=XkPwNIW-iD_GB9u9yqv9q8y-i5cQ8eBbLZZ_GvEw9t8,6858
|
|
32
32
|
modal/container_process.pyi,sha256=9m-st3hCUlNN1GOTctfPPvIvoLtEl7FbuGWwif5-7YU,6037
|
|
33
|
-
modal/dict.py,sha256=
|
|
33
|
+
modal/dict.py,sha256=IWpPQtBwR96TJN7ogpIZvL9Ge9rxY4KJ2CjkUKfWr6g,15864
|
|
34
34
|
modal/dict.pyi,sha256=vUrNmCKWZqiPIQSdbMT6fCq9q1QV3qkGVdz2B_yld34,22578
|
|
35
35
|
modal/environments.py,sha256=gHFNLG78bqgizpQ4w_elz27QOqmcgAonFsmLs7NjUJ4,6804
|
|
36
36
|
modal/environments.pyi,sha256=9-KtrzAcUe55cCP4020lSUD7-fWS7OPakAHssq4-bro,4219
|
|
@@ -39,9 +39,9 @@ modal/file_io.py,sha256=BVqAJ0sgPUfN8QsYztWiGB4j56he60TncM02KsylnCw,21449
|
|
|
39
39
|
modal/file_io.pyi,sha256=cPT_hsplE5iLCXhYOLn1Sp9eDdk7DxdFmicQHanJZyg,15918
|
|
40
40
|
modal/file_pattern_matcher.py,sha256=urAue8es8jxqX94k9EYoZxxhtfgOlsEES8lbFHOorzc,7734
|
|
41
41
|
modal/functions.py,sha256=kcNHvqeGBxPI7Cgd57NIBBghkfbeFJzXO44WW0jSmao,325
|
|
42
|
-
modal/functions.pyi,sha256=
|
|
42
|
+
modal/functions.pyi,sha256=VYPnfnCLfHRDAl6t5AaVHmZEz0T5f2igjTeMOtHPie8,34766
|
|
43
43
|
modal/gpu.py,sha256=Fe5ORvVPDIstSq1xjmM6OoNgLYFWvogP9r5BgmD3hYg,6769
|
|
44
|
-
modal/image.py,sha256=
|
|
44
|
+
modal/image.py,sha256=Gm1TGIy1IzaNaYG659C6Jl_flPe6YYzGdSRpf0epDAg,102833
|
|
45
45
|
modal/image.pyi,sha256=mlGwmpkKdwNK_VRrCa0WMDURmQPSOohm7hgiiFTfdXI,68541
|
|
46
46
|
modal/io_streams.py,sha256=ut9tY_yEtiBsgQ40u_72Ns87IZHfbMxfnh8t6U9RSGA,16204
|
|
47
47
|
modal/io_streams.pyi,sha256=aOun_jUFKHSJyUY6-7gKvNoxzcULsa8_hxdtEO7v-gk,13980
|
|
@@ -59,7 +59,7 @@ modal/partial_function.pyi,sha256=lqqOzZ9-QvHTDWKQ_oAYYOvsXgTOBKhO9u-RI98JbUk,13
|
|
|
59
59
|
modal/proxy.py,sha256=NQJJMGo-D2IfmeU0vb10WWaE4oTLcuf9jTeEJvactOg,1446
|
|
60
60
|
modal/proxy.pyi,sha256=yWGWwADCRGrC2w81B7671UTH4Uv3HMZKy5vVqlJUZoA,1417
|
|
61
61
|
modal/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
62
|
-
modal/queue.py,sha256=
|
|
62
|
+
modal/queue.py,sha256=6oKACWiFus03vx5-cDxowxX80a1J7sAwNpBBHLJM8sk,20366
|
|
63
63
|
modal/queue.pyi,sha256=Pv4OtY7j17Yb89HGKaMQRiIv0yol-aV-ZtelxQ9GrlU,28330
|
|
64
64
|
modal/retries.py,sha256=IvNLDM0f_GLUDD5VgEDoN09C88yoxSrCquinAuxT1Sc,5205
|
|
65
65
|
modal/runner.py,sha256=ostdzYpQb-20tlD6dIq7bpWTkZkOhjJBNuMNektqnJA,24068
|
|
@@ -69,7 +69,7 @@ modal/sandbox.py,sha256=eQd0Cf9yTFCNshnj7oH8WvecbhVIwsEsmuXB9O-REis,40927
|
|
|
69
69
|
modal/sandbox.pyi,sha256=_ddnvZGauSRG-WelsMB5oPil8KVWb0PSvmuAzAzrLIw,41713
|
|
70
70
|
modal/schedule.py,sha256=ng0g0AqNY5GQI9KhkXZQ5Wam5G42glbkqVQsNpBtbDE,3078
|
|
71
71
|
modal/scheduler_placement.py,sha256=BAREdOY5HzHpzSBqt6jDVR6YC_jYfHMVqOzkyqQfngU,1235
|
|
72
|
-
modal/secret.py,sha256=
|
|
72
|
+
modal/secret.py,sha256=_d_OQUE1S0v_wO5Ck728dsC_1v8-B_4ku4TS4BgC4Bc,12027
|
|
73
73
|
modal/secret.pyi,sha256=zcC_OM0JzIF1ccnhNvVIlL6sY3xVjq3t0s3fE1ZDDVs,9732
|
|
74
74
|
modal/serving.py,sha256=3I3WBeVbzZY258u9PXBCW_dZBgypq3OhwBuTVvlgubE,4423
|
|
75
75
|
modal/serving.pyi,sha256=YfixTaWikyYpwhnNxCHMZnDDQiPmV1xJ87QF91U_WGU,1924
|
|
@@ -78,7 +78,7 @@ modal/snapshot.pyi,sha256=0q83hlmWxAhDu8xwZyL5VmYh0i8Tigf7S60or2k30L8,1682
|
|
|
78
78
|
modal/stream_type.py,sha256=A6320qoAAWhEfwOCZfGtymQTu5AfLfJXXgARqooTPvY,417
|
|
79
79
|
modal/token_flow.py,sha256=GWpar0gANs71vm9Bd_Cj87UG1K3ljTURbkEjG3JLsrY,7616
|
|
80
80
|
modal/token_flow.pyi,sha256=eirYjyqbRiT3GCKMIPHJPpkvBTu8WxDKqSHehWaJI_4,2533
|
|
81
|
-
modal/volume.py,sha256=
|
|
81
|
+
modal/volume.py,sha256=6sMyykbz9lvwzClAOW9Pdbl9naXo9CipYf65t-eJdrs,45418
|
|
82
82
|
modal/volume.pyi,sha256=lMXzeyeC85ji8g2j0Ghy1WQrk2A2J0LPVpLFpabbr6A,41933
|
|
83
83
|
modal/_runtime/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
|
|
84
84
|
modal/_runtime/asgi.py,sha256=_2xSTsDD27Cit7xnMs4lzkJA2wzer2_N4Oa3BkXFzVA,22521
|
|
@@ -111,7 +111,7 @@ modal/_utils/package_utils.py,sha256=LcL2olGN4xaUzu2Tbv-C-Ft9Qp6bsLxEfETOAVd-mjU
|
|
|
111
111
|
modal/_utils/pattern_utils.py,sha256=ZUffaECfe2iYBhH6cvCB-0-UWhmEBTZEl_TwG_So3ag,6714
|
|
112
112
|
modal/_utils/rand_pb_testing.py,sha256=mmVPk1rZldHwHZx0DnHTuHQlRLAiiAYdxjwEJpxvT9c,3900
|
|
113
113
|
modal/_utils/shell_utils.py,sha256=hWHzv730Br2Xyj6cGPiMZ-198Z3RZuOu3pDXhFSZ22c,2157
|
|
114
|
-
modal/_utils/time_utils.py,sha256=
|
|
114
|
+
modal/_utils/time_utils.py,sha256=Un_nCG9ZXPMPKK5kJayrFVl1eFckVikPyqrWtI2553M,553
|
|
115
115
|
modal/_vendor/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
|
|
116
116
|
modal/_vendor/a2wsgi_wsgi.py,sha256=Q1AsjpV_Q_vzQsz_cSqmP9jWzsGsB-ARFU6vpQYml8k,21878
|
|
117
117
|
modal/_vendor/cloudpickle.py,sha256=avxOIgNKqL9KyPNuIOVQzBm0D1l9ipeB4RrcUMUGmeQ,55216
|
|
@@ -127,23 +127,23 @@ modal/builder/base-images.json,sha256=JYSDAgHTl-WrV_TZW5icY-IJEnbe2eQ4CZ_KN6EOZK
|
|
|
127
127
|
modal/cli/__init__.py,sha256=6FRleWQxBDT19y7OayO4lBOzuL6Bs9r0rLINYYYbHwQ,769
|
|
128
128
|
modal/cli/_download.py,sha256=tV8JFkncTtQKh85bSguQg6AW5aRRlynf-rvyN7ruigc,4337
|
|
129
129
|
modal/cli/_traceback.py,sha256=IKj9xtc6LjAxyhGJWolNIXEX3MhAIulnRqywZNOFmkU,7324
|
|
130
|
-
modal/cli/app.py,sha256=
|
|
131
|
-
modal/cli/cluster.py,sha256=
|
|
130
|
+
modal/cli/app.py,sha256=rbuAG92my-1eZN0olk6p2eD4oBnyBliUsrCOUW-U-9k,7832
|
|
131
|
+
modal/cli/cluster.py,sha256=8pQurDUvLP_HdSeHH5ZB6WIoDh48FR8qP9vGOtSsFXI,3168
|
|
132
132
|
modal/cli/config.py,sha256=lhp2Pq4RbTDhaZJ-ZJvhrMqJj8c-WjuRX6gjE3TrvXc,1691
|
|
133
|
-
modal/cli/container.py,sha256=
|
|
134
|
-
modal/cli/dict.py,sha256=
|
|
133
|
+
modal/cli/container.py,sha256=9Ti-TIZ6vjDSmn9mk9h6SRwyhkQjtwirBN18LjpLyvE,3719
|
|
134
|
+
modal/cli/dict.py,sha256=XsySnxSOcfF9ZehHO3whRgFuxZGGNE_I87Hiye36wE4,4655
|
|
135
135
|
modal/cli/entry_point.py,sha256=M9ZeIsYx7rxdc6XP2iOIptVzmpj39D3rU8nfW7Dc3CQ,4388
|
|
136
136
|
modal/cli/environment.py,sha256=Ayddkiq9jdj3XYDJ8ZmUqFpPPH8xajYlbexRkzGtUcg,4334
|
|
137
137
|
modal/cli/import_refs.py,sha256=X59Z5JwgliRO6C-cIFto2Pr7o3SwlZMKQPKA0aI4ZK4,13927
|
|
138
138
|
modal/cli/launch.py,sha256=0_sBu6bv2xJEPWi-rbGS6Ri9ggnkWQvrGlgpYSUBMyY,3097
|
|
139
|
-
modal/cli/network_file_system.py,sha256=
|
|
139
|
+
modal/cli/network_file_system.py,sha256=I9IqTpVfk32uKYwGd8LTldkQx6UKYrQYNZ26q7Ab5Oo,8126
|
|
140
140
|
modal/cli/profile.py,sha256=r5hnA_GPe_2zwgv6n0Mi8XQXyejQgShb17yjD4dPXcw,3212
|
|
141
|
-
modal/cli/queues.py,sha256=
|
|
141
|
+
modal/cli/queues.py,sha256=6Ck7B-Eu3ZEV6oOX0GxnVMQ5k9DWrIZPYXxaHVqUhKU,4565
|
|
142
142
|
modal/cli/run.py,sha256=96m6fpJKbjtva4xzJut0pxS36Z5WCMq0umpAry96im0,24946
|
|
143
|
-
modal/cli/secret.py,sha256=
|
|
143
|
+
modal/cli/secret.py,sha256=PqAvgaiIHTYDbXsKLLQcDvwQn283QnmtgfIr5jH4Prw,6646
|
|
144
144
|
modal/cli/token.py,sha256=NAmQzKBfEHkcldWKeFxAVIqQBoo1RTp7_A4yc7-8qM0,1911
|
|
145
145
|
modal/cli/utils.py,sha256=aUXDU9_VgcJrGaGRy4bGf4dqwKYXHCpoO27x4m_bpuo,3293
|
|
146
|
-
modal/cli/volume.py,sha256=
|
|
146
|
+
modal/cli/volume.py,sha256=L4ryL-_yjgUyr0Zwy390DYsFCLtMxeOW2elm7J76y7w,10985
|
|
147
147
|
modal/cli/programs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
|
|
148
148
|
modal/cli/programs/run_jupyter.py,sha256=44Lpvqk2l3hH-uOkmAOzw60NEsfB5uaRDWDKVshvQhs,2682
|
|
149
149
|
modal/cli/programs/vscode.py,sha256=KbTAaIXyQBVCDXxXjmBHmKpgXkUw0q4R4KkJvUjCYgk,3380
|
|
@@ -151,7 +151,7 @@ modal/experimental/__init__.py,sha256=nuc7AL4r_Fs08DD5dciWFZhrV1nanwoClOfdTcudU0
|
|
|
151
151
|
modal/experimental/flash.py,sha256=viXQumCIFp5VFsPFURdFTBTjP_QnsAi8nSWXAMmfjeQ,19744
|
|
152
152
|
modal/experimental/flash.pyi,sha256=A8_qJGtGoXEzKDdHbvhmCw7oqfneFEvJQK3ZdTOvUdU,10830
|
|
153
153
|
modal/experimental/ipython.py,sha256=TrCfmol9LGsRZMeDoeMPx3Hv3BFqQhYnmD_iH0pqdhk,2904
|
|
154
|
-
modal-1.1.1.
|
|
154
|
+
modal-1.1.1.dev39.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
|
|
155
155
|
modal_docs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
|
|
156
156
|
modal_docs/gen_cli_docs.py,sha256=c1yfBS_x--gL5bs0N4ihMwqwX8l3IBWSkBAKNNIi6bQ,3801
|
|
157
157
|
modal_docs/gen_reference_docs.py,sha256=d_CQUGQ0rfw28u75I2mov9AlS773z9rG40-yq5o7g2U,6359
|
|
@@ -174,10 +174,10 @@ modal_proto/options_pb2.pyi,sha256=l7DBrbLO7q3Ir-XDkWsajm0d0TQqqrfuX54i4BMpdQg,1
|
|
|
174
174
|
modal_proto/options_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
|
175
175
|
modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0yJSI,247
|
|
176
176
|
modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
177
|
-
modal_version/__init__.py,sha256=
|
|
177
|
+
modal_version/__init__.py,sha256=kmEUkQFUT22ZfBBMV0TZNmncFuP8hjyTyg7_aX1Si8M,121
|
|
178
178
|
modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
|
|
179
|
-
modal-1.1.1.
|
|
180
|
-
modal-1.1.1.
|
|
181
|
-
modal-1.1.1.
|
|
182
|
-
modal-1.1.1.
|
|
183
|
-
modal-1.1.1.
|
|
179
|
+
modal-1.1.1.dev39.dist-info/METADATA,sha256=Py52lro9nqfPE6f81CYnjaKcUoTfliDbvdB-FGGeOTI,2460
|
|
180
|
+
modal-1.1.1.dev39.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
|
|
181
|
+
modal-1.1.1.dev39.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
|
|
182
|
+
modal-1.1.1.dev39.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
|
|
183
|
+
modal-1.1.1.dev39.dist-info/RECORD,,
|
modal_version/__init__.py
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|