modal 1.1.5.dev33__py3-none-any.whl → 1.1.5.dev35__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/_functions.py +7 -1
- modal/cli/cluster.py +7 -1
- modal/client.pyi +2 -2
- modal/cloud_bucket_mount.py +2 -2
- modal/cloud_bucket_mount.pyi +1 -1
- modal/cls.py +11 -3
- modal/cls.pyi +13 -4
- {modal-1.1.5.dev33.dist-info → modal-1.1.5.dev35.dist-info}/METADATA +1 -1
- {modal-1.1.5.dev33.dist-info → modal-1.1.5.dev35.dist-info}/RECORD +14 -14
- modal_version/__init__.py +1 -1
- {modal-1.1.5.dev33.dist-info → modal-1.1.5.dev35.dist-info}/WHEEL +0 -0
- {modal-1.1.5.dev33.dist-info → modal-1.1.5.dev35.dist-info}/entry_points.txt +0 -0
- {modal-1.1.5.dev33.dist-info → modal-1.1.5.dev35.dist-info}/licenses/LICENSE +0 -0
- {modal-1.1.5.dev33.dist-info → modal-1.1.5.dev35.dist-info}/top_level.txt +0 -0
modal/_functions.py
CHANGED
|
@@ -1224,6 +1224,8 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
|
|
|
1224
1224
|
replace_secret_ids=bool(options.secrets),
|
|
1225
1225
|
replace_volume_mounts=len(volume_mounts) > 0,
|
|
1226
1226
|
volume_mounts=volume_mounts,
|
|
1227
|
+
cloud_bucket_mounts=cloud_bucket_mounts_to_proto(options.cloud_bucket_mounts),
|
|
1228
|
+
replace_cloud_bucket_mounts=bool(options.cloud_bucket_mounts),
|
|
1227
1229
|
resources=options.resources,
|
|
1228
1230
|
retry_policy=options.retry_policy,
|
|
1229
1231
|
concurrency_limit=options.max_containers,
|
|
@@ -1253,7 +1255,11 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
|
|
|
1253
1255
|
|
|
1254
1256
|
def _deps():
|
|
1255
1257
|
if options:
|
|
1256
|
-
all_deps =
|
|
1258
|
+
all_deps = (
|
|
1259
|
+
[v for _, v in options.validated_volumes]
|
|
1260
|
+
+ list(options.secrets)
|
|
1261
|
+
+ [mount.secret for _, mount in options.cloud_bucket_mounts if mount.secret]
|
|
1262
|
+
)
|
|
1257
1263
|
return [dep for dep in all_deps if not dep.is_hydrated]
|
|
1258
1264
|
return []
|
|
1259
1265
|
|
modal/cli/cluster.py
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
from typing import Optional, Union
|
|
3
3
|
|
|
4
4
|
import typer
|
|
5
|
+
from rich.table import Column
|
|
5
6
|
from rich.text import Text
|
|
6
7
|
|
|
7
8
|
from modal._object import _get_environment_name
|
|
@@ -33,7 +34,12 @@ async def list_(env: Optional[str] = ENV_OPTION, json: bool = False):
|
|
|
33
34
|
api_pb2.ClusterListRequest(environment_name=environment_name)
|
|
34
35
|
)
|
|
35
36
|
|
|
36
|
-
column_names
|
|
37
|
+
column_names: list[Union[Column, str]] = [
|
|
38
|
+
Column("Cluster ID", min_width=25),
|
|
39
|
+
Column("App ID", min_width=25),
|
|
40
|
+
"Start Time",
|
|
41
|
+
"Nodes",
|
|
42
|
+
]
|
|
37
43
|
rows: list[list[Union[Text, str]]] = []
|
|
38
44
|
res.clusters.sort(key=lambda c: c.started_at, reverse=True)
|
|
39
45
|
|
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.5.
|
|
36
|
+
version: str = "1.1.5.dev35",
|
|
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.5.
|
|
167
|
+
version: str = "1.1.5.dev35",
|
|
168
168
|
):
|
|
169
169
|
"""mdmd:hidden
|
|
170
170
|
The Modal client object is not intended to be instantiated directly by users.
|
modal/cloud_bucket_mount.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Copyright Modal Labs 2022
|
|
2
2
|
from dataclasses import dataclass
|
|
3
|
-
from typing import Optional
|
|
3
|
+
from typing import Optional, Sequence
|
|
4
4
|
from urllib.parse import urlparse
|
|
5
5
|
|
|
6
6
|
from modal_proto import api_pb2
|
|
@@ -119,7 +119,7 @@ class _CloudBucketMount:
|
|
|
119
119
|
requester_pays: bool = False
|
|
120
120
|
|
|
121
121
|
|
|
122
|
-
def cloud_bucket_mounts_to_proto(mounts:
|
|
122
|
+
def cloud_bucket_mounts_to_proto(mounts: Sequence[tuple[str, _CloudBucketMount]]) -> list[api_pb2.CloudBucketMount]:
|
|
123
123
|
"""Helper function to convert `CloudBucketMount` to a list of protobufs that can be passed to the server."""
|
|
124
124
|
cloud_bucket_mounts: list[api_pb2.CloudBucketMount] = []
|
|
125
125
|
|
modal/cloud_bucket_mount.pyi
CHANGED
|
@@ -122,7 +122,7 @@ class _CloudBucketMount:
|
|
|
122
122
|
...
|
|
123
123
|
|
|
124
124
|
def cloud_bucket_mounts_to_proto(
|
|
125
|
-
mounts:
|
|
125
|
+
mounts: typing.Sequence[tuple[str, _CloudBucketMount]],
|
|
126
126
|
) -> list[modal_proto.api_pb2.CloudBucketMount]:
|
|
127
127
|
"""Helper function to convert `CloudBucketMount` to a list of protobufs that can be passed to the server."""
|
|
128
128
|
...
|
modal/cls.py
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# Copyright Modal Labs 2022
|
|
2
2
|
import dataclasses
|
|
3
3
|
import inspect
|
|
4
|
-
import os
|
|
5
4
|
import typing
|
|
6
5
|
from collections.abc import Collection
|
|
6
|
+
from pathlib import PurePosixPath
|
|
7
7
|
from typing import Any, Callable, Optional, Sequence, TypeVar, Union
|
|
8
8
|
|
|
9
9
|
from google.protobuf.message import Message
|
|
@@ -33,6 +33,7 @@ from ._utils.deprecation import (
|
|
|
33
33
|
from ._utils.grpc_utils import retry_transient_errors
|
|
34
34
|
from ._utils.mount_utils import validate_volumes
|
|
35
35
|
from .client import _Client
|
|
36
|
+
from .cloud_bucket_mount import _CloudBucketMount
|
|
36
37
|
from .config import config
|
|
37
38
|
from .exception import ExecutionError, InvalidError, NotFoundError
|
|
38
39
|
from .gpu import GPU_T
|
|
@@ -95,6 +96,7 @@ class _ServiceOptions:
|
|
|
95
96
|
batch_wait_ms: Optional[int] = None
|
|
96
97
|
scheduler_placement: Optional[api_pb2.SchedulerPlacement] = None
|
|
97
98
|
cloud: Optional[str] = None
|
|
99
|
+
cloud_bucket_mounts: typing.Sequence[tuple[str, _CloudBucketMount]] = ()
|
|
98
100
|
|
|
99
101
|
def merge_options(self, new_options: "_ServiceOptions") -> "_ServiceOptions":
|
|
100
102
|
"""Implement protobuf-like MergeFrom semantics for this dataclass.
|
|
@@ -688,7 +690,7 @@ More information on class parameterization can be found here: https://modal.com/
|
|
|
688
690
|
gpu: GPU_T = None,
|
|
689
691
|
env: Optional[dict[str, Optional[str]]] = None,
|
|
690
692
|
secrets: Optional[Collection[_Secret]] = None,
|
|
691
|
-
volumes: dict[Union[str,
|
|
693
|
+
volumes: dict[Union[str, PurePosixPath], Union[_Volume, _CloudBucketMount]] = {},
|
|
692
694
|
retries: Optional[Union[int, Retries]] = None,
|
|
693
695
|
max_containers: Optional[int] = None, # Limit on the number of containers that can be concurrently running.
|
|
694
696
|
buffer_containers: Optional[int] = None, # Additional containers to scale up while Function is active.
|
|
@@ -762,13 +764,19 @@ More information on class parameterization can be found here: https://modal.com/
|
|
|
762
764
|
cls = _Cls._from_loader(_load_from_base, rep=f"{self._name}.with_options(...)", is_another_app=True, deps=_deps)
|
|
763
765
|
cls._initialize_from_other(self)
|
|
764
766
|
|
|
767
|
+
# Validate volumes
|
|
768
|
+
validated_volumes = validate_volumes(volumes)
|
|
769
|
+
cloud_bucket_mounts = [(k, v) for k, v in validated_volumes if isinstance(v, _CloudBucketMount)]
|
|
770
|
+
validated_volumes_no_cloud_buckets = [(k, v) for k, v in validated_volumes if isinstance(v, _Volume)]
|
|
771
|
+
|
|
765
772
|
secrets = secrets or []
|
|
766
773
|
if env:
|
|
767
774
|
secrets = [*secrets, _Secret.from_dict(env)]
|
|
768
775
|
|
|
769
776
|
new_options = _ServiceOptions(
|
|
770
777
|
secrets=secrets,
|
|
771
|
-
validated_volumes=
|
|
778
|
+
validated_volumes=validated_volumes_no_cloud_buckets,
|
|
779
|
+
cloud_bucket_mounts=cloud_bucket_mounts,
|
|
772
780
|
resources=resources,
|
|
773
781
|
retry_policy=retry_policy,
|
|
774
782
|
max_containers=max_containers,
|
modal/cls.pyi
CHANGED
|
@@ -6,6 +6,7 @@ import modal._object
|
|
|
6
6
|
import modal._partial_function
|
|
7
7
|
import modal.app
|
|
8
8
|
import modal.client
|
|
9
|
+
import modal.cloud_bucket_mount
|
|
9
10
|
import modal.functions
|
|
10
11
|
import modal.gpu
|
|
11
12
|
import modal.object
|
|
@@ -14,7 +15,7 @@ import modal.retries
|
|
|
14
15
|
import modal.secret
|
|
15
16
|
import modal.volume
|
|
16
17
|
import modal_proto.api_pb2
|
|
17
|
-
import
|
|
18
|
+
import pathlib
|
|
18
19
|
import typing
|
|
19
20
|
import typing_extensions
|
|
20
21
|
|
|
@@ -24,7 +25,7 @@ def _use_annotation_parameters(user_cls: type) -> bool: ...
|
|
|
24
25
|
def _get_class_constructor_signature(user_cls: type) -> inspect.Signature: ...
|
|
25
26
|
|
|
26
27
|
class _ServiceOptions:
|
|
27
|
-
"""_ServiceOptions(secrets: collections.abc.Collection[modal.secret._Secret] = (), validated_volumes: Sequence[tuple[str, modal.volume._Volume]] = (), resources: Optional[modal_proto.api_pb2.Resources] = None, retry_policy: Optional[modal_proto.api_pb2.FunctionRetryPolicy] = None, max_containers: Optional[int] = None, buffer_containers: Optional[int] = None, scaledown_window: Optional[int] = None, timeout_secs: Optional[int] = None, max_concurrent_inputs: Optional[int] = None, target_concurrent_inputs: Optional[int] = None, batch_max_size: Optional[int] = None, batch_wait_ms: Optional[int] = None, scheduler_placement: Optional[modal_proto.api_pb2.SchedulerPlacement] = None, cloud: Optional[str] = None)"""
|
|
28
|
+
"""_ServiceOptions(secrets: collections.abc.Collection[modal.secret._Secret] = (), validated_volumes: Sequence[tuple[str, modal.volume._Volume]] = (), resources: Optional[modal_proto.api_pb2.Resources] = None, retry_policy: Optional[modal_proto.api_pb2.FunctionRetryPolicy] = None, max_containers: Optional[int] = None, buffer_containers: Optional[int] = None, scaledown_window: Optional[int] = None, timeout_secs: Optional[int] = None, max_concurrent_inputs: Optional[int] = None, target_concurrent_inputs: Optional[int] = None, batch_max_size: Optional[int] = None, batch_wait_ms: Optional[int] = None, scheduler_placement: Optional[modal_proto.api_pb2.SchedulerPlacement] = None, cloud: Optional[str] = None, cloud_bucket_mounts: Sequence[tuple[str, modal.cloud_bucket_mount._CloudBucketMount]] = ())"""
|
|
28
29
|
|
|
29
30
|
secrets: collections.abc.Collection[modal.secret._Secret]
|
|
30
31
|
validated_volumes: typing.Sequence[tuple[str, modal.volume._Volume]]
|
|
@@ -40,6 +41,7 @@ class _ServiceOptions:
|
|
|
40
41
|
batch_wait_ms: typing.Optional[int]
|
|
41
42
|
scheduler_placement: typing.Optional[modal_proto.api_pb2.SchedulerPlacement]
|
|
42
43
|
cloud: typing.Optional[str]
|
|
44
|
+
cloud_bucket_mounts: typing.Sequence[tuple[str, modal.cloud_bucket_mount._CloudBucketMount]]
|
|
43
45
|
|
|
44
46
|
def merge_options(self, new_options: _ServiceOptions) -> _ServiceOptions:
|
|
45
47
|
"""Implement protobuf-like MergeFrom semantics for this dataclass.
|
|
@@ -64,6 +66,7 @@ class _ServiceOptions:
|
|
|
64
66
|
batch_wait_ms: typing.Optional[int] = None,
|
|
65
67
|
scheduler_placement: typing.Optional[modal_proto.api_pb2.SchedulerPlacement] = None,
|
|
66
68
|
cloud: typing.Optional[str] = None,
|
|
69
|
+
cloud_bucket_mounts: typing.Sequence[tuple[str, modal.cloud_bucket_mount._CloudBucketMount]] = (),
|
|
67
70
|
) -> None:
|
|
68
71
|
"""Initialize self. See help(type(self)) for accurate signature."""
|
|
69
72
|
...
|
|
@@ -398,7 +401,10 @@ class _Cls(modal._object._Object):
|
|
|
398
401
|
gpu: typing.Union[None, str, modal.gpu._GPUConfig] = None,
|
|
399
402
|
env: typing.Optional[dict[str, typing.Optional[str]]] = None,
|
|
400
403
|
secrets: typing.Optional[collections.abc.Collection[modal.secret._Secret]] = None,
|
|
401
|
-
volumes: dict[
|
|
404
|
+
volumes: dict[
|
|
405
|
+
typing.Union[str, pathlib.PurePosixPath],
|
|
406
|
+
typing.Union[modal.volume._Volume, modal.cloud_bucket_mount._CloudBucketMount],
|
|
407
|
+
] = {},
|
|
402
408
|
retries: typing.Union[int, modal.retries.Retries, None] = None,
|
|
403
409
|
max_containers: typing.Optional[int] = None,
|
|
404
410
|
buffer_containers: typing.Optional[int] = None,
|
|
@@ -577,7 +583,10 @@ class Cls(modal.object.Object):
|
|
|
577
583
|
gpu: typing.Union[None, str, modal.gpu._GPUConfig] = None,
|
|
578
584
|
env: typing.Optional[dict[str, typing.Optional[str]]] = None,
|
|
579
585
|
secrets: typing.Optional[collections.abc.Collection[modal.secret.Secret]] = None,
|
|
580
|
-
volumes: dict[
|
|
586
|
+
volumes: dict[
|
|
587
|
+
typing.Union[str, pathlib.PurePosixPath],
|
|
588
|
+
typing.Union[modal.volume.Volume, modal.cloud_bucket_mount.CloudBucketMount],
|
|
589
|
+
] = {},
|
|
581
590
|
retries: typing.Union[int, modal.retries.Retries, None] = None,
|
|
582
591
|
max_containers: typing.Optional[int] = None,
|
|
583
592
|
buffer_containers: typing.Optional[int] = None,
|
|
@@ -3,7 +3,7 @@ modal/__main__.py,sha256=45H-GtwzaDfN-1nP4_HYvzN3s7AG_HXR4-ynrsjO_OI,2803
|
|
|
3
3
|
modal/_clustered_functions.py,sha256=Sy4Sf_17EO8OL-FUe8LYcm4hrqLyQFCssNhr3p0SroU,3013
|
|
4
4
|
modal/_clustered_functions.pyi,sha256=JmYwAGOLEnD5AF-gYF9O5tu-SgGjeoJz-X1j48b1Ijg,1157
|
|
5
5
|
modal/_container_entrypoint.py,sha256=fLluT_sU34vGPCTG1Q58VI1RvxF5n7vQzCVCsL-MMk8,29033
|
|
6
|
-
modal/_functions.py,sha256
|
|
6
|
+
modal/_functions.py,sha256=-T41_HZxzKe6RdwxZAuZFHGuq3VZ5Nl3h1VgMY8AbKM,91605
|
|
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=gwsLdXb-Ecd8nH8LVCo8oVZPzzdyo9BrN1DjgQmsSuM,11967
|
|
@@ -22,11 +22,11 @@ modal/app.py,sha256=OBFaL-8KVMtBMEmspHA76LvblPdnSgdoGioLkQBjhdQ,48851
|
|
|
22
22
|
modal/app.pyi,sha256=Cqk3pOeEEroCLejj3yJ3XHDqt0rMzeSA295gMKEx6Ww,43955
|
|
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=
|
|
26
|
-
modal/cloud_bucket_mount.py,sha256=
|
|
27
|
-
modal/cloud_bucket_mount.pyi,sha256
|
|
28
|
-
modal/cls.py,sha256=
|
|
29
|
-
modal/cls.pyi,sha256=
|
|
25
|
+
modal/client.pyi,sha256=9ikTQbecc_G1Zqqg0Ucpi_6WOiDvaCTX-8sBj8u3vGo,15831
|
|
26
|
+
modal/cloud_bucket_mount.py,sha256=I2GRXYhOWLIz2kJZjXu75jAm9EJkBNcutGc6jR2ReUw,5928
|
|
27
|
+
modal/cloud_bucket_mount.pyi,sha256=VuUOipMIHqFXMkD-3g2bsoqpSxV5qswlFHDOqPQzYAo,7405
|
|
28
|
+
modal/cls.py,sha256=R1uLQbdqWRRjvxs0I57a4hZZELZkBVCxOKxvKryU5_s,41639
|
|
29
|
+
modal/cls.pyi,sha256=PRvC9lWIBL-L4cMc9cIt8I_ZDXI7oFttitKaFWWwhUk,29709
|
|
30
30
|
modal/config.py,sha256=hpcfT03tdB-G0exZ4HjYDHwDtA8XcnliiyZzCcTbr8o,12124
|
|
31
31
|
modal/container_process.py,sha256=Mutkl7sg_WR5zP4oJiWSC-3UdYRqp0zdKi1shZbi-bk,6996
|
|
32
32
|
modal/container_process.pyi,sha256=9m-st3hCUlNN1GOTctfPPvIvoLtEl7FbuGWwif5-7YU,6037
|
|
@@ -128,7 +128,7 @@ 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
130
|
modal/cli/app.py,sha256=rbuAG92my-1eZN0olk6p2eD4oBnyBliUsrCOUW-U-9k,7832
|
|
131
|
-
modal/cli/cluster.py,sha256=
|
|
131
|
+
modal/cli/cluster.py,sha256=MMdFXqyOOeNO7P2VIUN78xKJLvesLIy_28Dt56XEXhM,3307
|
|
132
132
|
modal/cli/config.py,sha256=lhp2Pq4RbTDhaZJ-ZJvhrMqJj8c-WjuRX6gjE3TrvXc,1691
|
|
133
133
|
modal/cli/container.py,sha256=9Ti-TIZ6vjDSmn9mk9h6SRwyhkQjtwirBN18LjpLyvE,3719
|
|
134
134
|
modal/cli/dict.py,sha256=YAJtiv41YcCd5Fqam3hXCNTs4Y0yOgGR_i6RfQNSAFM,4572
|
|
@@ -153,7 +153,7 @@ modal/experimental/__init__.py,sha256=fCqzo_f3vcY750vHtd7CtLs5dvdM_C0ZLLGb3zXuK9
|
|
|
153
153
|
modal/experimental/flash.py,sha256=7qRAL2Nrwbb60YKobcnpM0zJ8vw4xGJqabLPFgEzMZE,28295
|
|
154
154
|
modal/experimental/flash.pyi,sha256=R9VV0UDotiY9BRUjacB-xI4qhR3yBymAvEZFRFHztLs,15143
|
|
155
155
|
modal/experimental/ipython.py,sha256=TrCfmol9LGsRZMeDoeMPx3Hv3BFqQhYnmD_iH0pqdhk,2904
|
|
156
|
-
modal-1.1.5.
|
|
156
|
+
modal-1.1.5.dev35.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
|
|
157
157
|
modal_docs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
|
|
158
158
|
modal_docs/gen_cli_docs.py,sha256=c1yfBS_x--gL5bs0N4ihMwqwX8l3IBWSkBAKNNIi6bQ,3801
|
|
159
159
|
modal_docs/gen_reference_docs.py,sha256=d_CQUGQ0rfw28u75I2mov9AlS773z9rG40-yq5o7g2U,6359
|
|
@@ -176,10 +176,10 @@ modal_proto/options_pb2.pyi,sha256=l7DBrbLO7q3Ir-XDkWsajm0d0TQqqrfuX54i4BMpdQg,1
|
|
|
176
176
|
modal_proto/options_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
|
177
177
|
modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0yJSI,247
|
|
178
178
|
modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
179
|
-
modal_version/__init__.py,sha256=
|
|
179
|
+
modal_version/__init__.py,sha256=1XQG4nuRMbg6LbDXHK-6xrgFrBCpBCEOxzA_QQ78_F8,121
|
|
180
180
|
modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
|
|
181
|
-
modal-1.1.5.
|
|
182
|
-
modal-1.1.5.
|
|
183
|
-
modal-1.1.5.
|
|
184
|
-
modal-1.1.5.
|
|
185
|
-
modal-1.1.5.
|
|
181
|
+
modal-1.1.5.dev35.dist-info/METADATA,sha256=xtZirs_bY8pzmUWTxZF4QcqrW-fwBCLtQ7kOw3wXSvw,2460
|
|
182
|
+
modal-1.1.5.dev35.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
|
|
183
|
+
modal-1.1.5.dev35.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
|
|
184
|
+
modal-1.1.5.dev35.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
|
|
185
|
+
modal-1.1.5.dev35.dist-info/RECORD,,
|
modal_version/__init__.py
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|