modal 0.73.1__py3-none-any.whl → 0.73.2__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/_container_entrypoint.py +1 -1
- modal/_utils/function_utils.py +2 -2
- modal/_vendor/cloudpickle.py +1 -1
- modal/client.pyi +2 -2
- modal/cls.py +3 -3
- modal/functions.py +1 -1
- modal/partial_function.py +1 -1
- {modal-0.73.1.dist-info → modal-0.73.2.dist-info}/METADATA +1 -1
- {modal-0.73.1.dist-info → modal-0.73.2.dist-info}/RECORD +14 -14
- modal_version/_version_generated.py +1 -1
- {modal-0.73.1.dist-info → modal-0.73.2.dist-info}/LICENSE +0 -0
- {modal-0.73.1.dist-info → modal-0.73.2.dist-info}/WHEEL +0 -0
- {modal-0.73.1.dist-info → modal-0.73.2.dist-info}/entry_points.txt +0 -0
- {modal-0.73.1.dist-info → modal-0.73.2.dist-info}/top_level.txt +0 -0
modal/_container_entrypoint.py
CHANGED
@@ -373,7 +373,7 @@ def call_lifecycle_functions(
|
|
373
373
|
"""Call function(s), can be sync or async, but any return values are ignored."""
|
374
374
|
with container_io_manager.handle_user_exception():
|
375
375
|
for func in funcs:
|
376
|
-
# We are deprecating
|
376
|
+
# We are deprecating parametrized exit methods but want to gracefully handle old code.
|
377
377
|
# We can remove this once the deprecation in the actual @exit decorator is enforced.
|
378
378
|
args = (None, None, None) if callable_has_non_self_params(func) else ()
|
379
379
|
# in case func is non-async, it's executed here and sigint will by default
|
modal/_utils/function_utils.py
CHANGED
@@ -289,8 +289,8 @@ class FunctionInfo:
|
|
289
289
|
if not _use_annotation_parameters(self.user_cls):
|
290
290
|
return api_pb2.ClassParameterInfo(format=api_pb2.ClassParameterInfo.PARAM_SERIALIZATION_FORMAT_PICKLE)
|
291
291
|
|
292
|
-
# annotation parameters trigger strictly typed
|
293
|
-
# which enables web endpoint for
|
292
|
+
# annotation parameters trigger strictly typed parametrization
|
293
|
+
# which enables web endpoint for parametrized classes
|
294
294
|
|
295
295
|
modal_parameters: list[api_pb2.ClassParameterSpec] = []
|
296
296
|
signature = _get_class_constructor_signature(self.user_cls)
|
modal/_vendor/cloudpickle.py
CHANGED
@@ -597,7 +597,7 @@ def _get_bases(typ):
|
|
597
597
|
if "__orig_bases__" in getattr(typ, "__dict__", {}):
|
598
598
|
# For generic types (see PEP 560)
|
599
599
|
# Note that simply checking `hasattr(typ, '__orig_bases__')` is not
|
600
|
-
# correct. Subclasses of a fully-
|
600
|
+
# correct. Subclasses of a fully-parametrized generic class does not
|
601
601
|
# have `__orig_bases__` defined, but `hasattr(typ, '__orig_bases__')`
|
602
602
|
# will return True because it's defined in the base class.
|
603
603
|
bases_attr = "__orig_bases__"
|
modal/client.pyi
CHANGED
@@ -27,7 +27,7 @@ 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.73.
|
30
|
+
self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.73.2"
|
31
31
|
): ...
|
32
32
|
def is_closed(self) -> bool: ...
|
33
33
|
@property
|
@@ -85,7 +85,7 @@ class Client:
|
|
85
85
|
_snapshotted: bool
|
86
86
|
|
87
87
|
def __init__(
|
88
|
-
self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.73.
|
88
|
+
self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.73.2"
|
89
89
|
): ...
|
90
90
|
def is_closed(self) -> bool: ...
|
91
91
|
@property
|
modal/cls.py
CHANGED
@@ -75,7 +75,7 @@ def _bind_instance_method(service_function: _Function, class_bound_method: _Func
|
|
75
75
|
"""Binds an "instance service function" to a specific method name.
|
76
76
|
This "dummy" _Function gets no unique object_id and isn't backend-backed at the moment, since all
|
77
77
|
it does it forward invocations to the underlying instance_service_function with the specified method,
|
78
|
-
and we don't support web_config for
|
78
|
+
and we don't support web_config for parametrized methods at the moment.
|
79
79
|
"""
|
80
80
|
# TODO(elias): refactor to not use `_from_loader()` as a crutch for lazy-loading the
|
81
81
|
# underlying instance_service_function. It's currently used in order to take advantage
|
@@ -90,7 +90,7 @@ def _bind_instance_method(service_function: _Function, class_bound_method: _Func
|
|
90
90
|
method_placeholder_fun._web_url = (
|
91
91
|
class_bound_method._web_url
|
92
92
|
) # TODO: this shouldn't be set when actual parameters are used
|
93
|
-
method_placeholder_fun._function_name = f"{class_bound_method._function_name}[
|
93
|
+
method_placeholder_fun._function_name = f"{class_bound_method._function_name}[parametrized]"
|
94
94
|
method_placeholder_fun._is_generator = class_bound_method._is_generator
|
95
95
|
method_placeholder_fun._cluster_size = class_bound_method._cluster_size
|
96
96
|
method_placeholder_fun._use_method_name = method_name
|
@@ -98,7 +98,7 @@ def _bind_instance_method(service_function: _Function, class_bound_method: _Func
|
|
98
98
|
|
99
99
|
async def _load(fun: "_Function", resolver: Resolver, existing_object_id: Optional[str]):
|
100
100
|
# there is currently no actual loading logic executed to create each method on
|
101
|
-
# the *
|
101
|
+
# the *parametrized* instance of a class - it uses the parameter-bound service-function
|
102
102
|
# for the instance. This load method just makes sure to set all attributes after the
|
103
103
|
# `service_function` has been loaded (it's in the `_deps`)
|
104
104
|
hydrate_from_instance_service_function(fun)
|
modal/functions.py
CHANGED
@@ -960,7 +960,7 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
|
|
960
960
|
identity = f"{parent.info.function_name} class service function"
|
961
961
|
except Exception:
|
962
962
|
# Can't always look up the function name that way, so fall back to generic message
|
963
|
-
identity = "class service function for a
|
963
|
+
identity = "class service function for a parametrized class"
|
964
964
|
if not parent.is_hydrated:
|
965
965
|
if parent.app._running_app is None:
|
966
966
|
reason = ", because the App it is defined on is not running"
|
modal/partial_function.py
CHANGED
@@ -614,7 +614,7 @@ ExitHandlerType = Union[
|
|
614
614
|
# synchronicity type stubs would strip Awaitable so we use Any for now
|
615
615
|
# Original, __exit__ style method signature (now deprecated)
|
616
616
|
Callable[[Any, Optional[type[BaseException]], Optional[BaseException], Any], Any],
|
617
|
-
# Forward-looking
|
617
|
+
# Forward-looking unparametrized method
|
618
618
|
Callable[[Any], Any],
|
619
619
|
]
|
620
620
|
|
@@ -2,7 +2,7 @@ modal/__init__.py,sha256=df6aKAigSPFXnmIohWySf_1zZ9Gzgrb7-oprSbopD4w,2299
|
|
2
2
|
modal/__main__.py,sha256=scYhGFqh8OJcVDo-VOxIT6CCwxOgzgflYWMnIZiMRqE,2871
|
3
3
|
modal/_clustered_functions.py,sha256=kTf-9YBXY88NutC1akI-gCbvf01RhMPCw-zoOI_YIUE,2700
|
4
4
|
modal/_clustered_functions.pyi,sha256=vllkegc99A0jrUOWa8mdlSbdp6uz36TsHhGxysAOpaQ,771
|
5
|
-
modal/_container_entrypoint.py,sha256=
|
5
|
+
modal/_container_entrypoint.py,sha256=qahIuJvaMmWG85N5vNS1yuAQ9XZoo1ftzfatkos_q7I,29553
|
6
6
|
modal/_ipython.py,sha256=TW1fkVOmZL3YYqdS2YlM1hqpf654Yf8ZyybHdBnlhSw,301
|
7
7
|
modal/_location.py,sha256=S3lSxIU3h9HkWpkJ3Pwo0pqjIOSB1fjeSgUsY3x7eec,1202
|
8
8
|
modal/_object.py,sha256=ItQcsMNkz9Y3kdTsvfNarbW-paJ2qabDyQ7njaqY0XI,11359
|
@@ -20,10 +20,10 @@ modal/app.py,sha256=BEl90AuVlcrVlXKhM0wDFn1E8hewvbia9Qdq6SiT-FE,44225
|
|
20
20
|
modal/app.pyi,sha256=NnUpnKq5y5fM45F5cXLMZK5zVJZA9T_UKawloOXCVXE,25858
|
21
21
|
modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
|
22
22
|
modal/client.py,sha256=8SQawr7P1PNUCq1UmJMUQXG2jIo4Nmdcs311XqrNLRE,15276
|
23
|
-
modal/client.pyi,sha256=
|
23
|
+
modal/client.pyi,sha256=FvwjAiLmNZM1wrVrCIuXxlm3PeZiQ3I980lWvf9yfnI,7591
|
24
24
|
modal/cloud_bucket_mount.py,sha256=YOe9nnvSr4ZbeCn587d7_VhE9IioZYRvF9VYQTQux08,5914
|
25
25
|
modal/cloud_bucket_mount.pyi,sha256=30T3K1a89l6wzmEJ_J9iWv9SknoGqaZDx59Xs-ZQcmk,1607
|
26
|
-
modal/cls.py,sha256=
|
26
|
+
modal/cls.py,sha256=DLgFTEAWUlIdhqOoF3cb1yzru3FiVpFTvEnPuwD5AQI,32680
|
27
27
|
modal/cls.pyi,sha256=LIoQrf96E2eZXTsO-o87jf2ppGAnYwQ8nVxsDmx7QHs,9040
|
28
28
|
modal/config.py,sha256=BzhZYUUwOmvVwf6x5kf0ywMC257s648dmuhsnB6g3gk,11041
|
29
29
|
modal/container_process.py,sha256=WTqLn01dJPVkPpwR_0w_JH96ceN5mV4TGtiu1ZR2RRA,6108
|
@@ -38,7 +38,7 @@ modal/experimental.pyi,sha256=24tIYu_w9RLwFrz1cIsgYuqmDCtV8eg6-bQNz3zjhDo,939
|
|
38
38
|
modal/file_io.py,sha256=lcMs_E9Xfm0YX1t9U2wNIBPnqHRxmImqjLW1GHqVmyg,20945
|
39
39
|
modal/file_io.pyi,sha256=NTRft1tbPSWf9TlWVeZmTlgB5AZ_Zhu2srWIrWr7brk,9445
|
40
40
|
modal/file_pattern_matcher.py,sha256=1cZ4V2wSLiaXqAqStETSwp3bzDD6QZOt6pmmjk3Okz4,6505
|
41
|
-
modal/functions.py,sha256=
|
41
|
+
modal/functions.py,sha256=SCdDaPKzG6xZAXjzulXMENyfFD11Tq1KgefqqC_ADJY,69950
|
42
42
|
modal/functions.pyi,sha256=eHwUCC7wt_DkCWDnNKuL8LBc4JIRm-rzCOtdmdUgGKY,26641
|
43
43
|
modal/gpu.py,sha256=2qZMNnoMrjU-5Bu7fx68pANUAKTtZq0EWEEeBA9OUVQ,7426
|
44
44
|
modal/image.py,sha256=c6-RsdVDCscmfOoZI26gj8GvBBw1oVC18n8WaYKBWAw,90949
|
@@ -54,7 +54,7 @@ modal/object.pyi,sha256=kyJkRQcVv3ct7zSAxvvXcuhBVeH914v80uSlqeS7cA4,5632
|
|
54
54
|
modal/output.py,sha256=N0xf4qeudEaYrslzdAl35VKV8rapstgIM2e9wO8_iy0,1967
|
55
55
|
modal/parallel_map.py,sha256=POBTyiWabe2e4qBNlsjjksiu1AAPEsNqI-mM8cgNFco,16042
|
56
56
|
modal/parallel_map.pyi,sha256=0ltjcIpPUqPGGOWmHqzCfBu5y3ISjRZDrqOJhiNhfYk,2522
|
57
|
-
modal/partial_function.py,sha256=
|
57
|
+
modal/partial_function.py,sha256=_rPSY8glSN-pAdMfIfcfo2GE9rrydzDTrYUQGBVmXi0,28710
|
58
58
|
modal/partial_function.pyi,sha256=Dj4WDxbGkXjxAbucSBSqr2_vrNbEWEAwdXnMzh2d80Y,9905
|
59
59
|
modal/proxy.py,sha256=NrOevrWxG3G7-zlyRzG6BcIvop7AWLeyahZxitbBaOk,1418
|
60
60
|
modal/proxy.pyi,sha256=1OEKIVUyC-xb7fHMzngakQso0nTsK60TVhXtlcMj6Wk,390
|
@@ -93,7 +93,7 @@ modal/_utils/blob_utils.py,sha256=N66LtZI8PpCkZ7maA7GLW5CAmYUoNJdG-GjaAUR4_NQ,14
|
|
93
93
|
modal/_utils/bytes_io_segment_payload.py,sha256=uunxVJS4PE1LojF_UpURMzVK9GuvmYWRqQo_bxEj5TU,3385
|
94
94
|
modal/_utils/deprecation.py,sha256=dycySRBxyZf3ITzEqPNM6MxXTk9-0VVLA8oCPQ5j_Os,3426
|
95
95
|
modal/_utils/docker_utils.py,sha256=h1uETghR40mp_y3fSWuZAfbIASH1HMzuphJHghAL6DU,3722
|
96
|
-
modal/_utils/function_utils.py,sha256=
|
96
|
+
modal/_utils/function_utils.py,sha256=ue15TIvHiSSuuLQaGb3gJ5YmxdaFBhfE3Rt5frqIWhM,27185
|
97
97
|
modal/_utils/grpc_testing.py,sha256=H1zHqthv19eGPJz2HKXDyWXWGSqO4BRsxah3L5Xaa8A,8619
|
98
98
|
modal/_utils/grpc_utils.py,sha256=PPB5ay-vXencXNIWPVw5modr3EH7gfq2QPcO5YJ1lMU,7737
|
99
99
|
modal/_utils/hash_utils.py,sha256=zg3J6OGxTFGSFri1qQ12giDz90lWk8bzaxCTUCRtiX4,3034
|
@@ -107,7 +107,7 @@ modal/_utils/rand_pb_testing.py,sha256=mmVPk1rZldHwHZx0DnHTuHQlRLAiiAYdxjwEJpxvT
|
|
107
107
|
modal/_utils/shell_utils.py,sha256=hWHzv730Br2Xyj6cGPiMZ-198Z3RZuOu3pDXhFSZ22c,2157
|
108
108
|
modal/_vendor/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
|
109
109
|
modal/_vendor/a2wsgi_wsgi.py,sha256=Q1AsjpV_Q_vzQsz_cSqmP9jWzsGsB-ARFU6vpQYml8k,21878
|
110
|
-
modal/_vendor/cloudpickle.py,sha256=
|
110
|
+
modal/_vendor/cloudpickle.py,sha256=avxOIgNKqL9KyPNuIOVQzBm0D1l9ipeB4RrcUMUGmeQ,55216
|
111
111
|
modal/_vendor/tblib.py,sha256=g1O7QUDd3sDoLd8YPFltkXkih7r_fyZOjgmGuligv3s,9722
|
112
112
|
modal/cli/__init__.py,sha256=waLjl5c6IPDhSsdWAm9Bji4e2PVxamYABKAze6CHVXY,28
|
113
113
|
modal/cli/_download.py,sha256=t6BXZwjTd9MgznDvbsV8rp0FZWggdzC-lUAGZU4xx1g,3984
|
@@ -169,10 +169,10 @@ modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0y
|
|
169
169
|
modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
170
170
|
modal_version/__init__.py,sha256=wiJQ53c-OMs0Xf1UeXOxQ7FwlV1VzIjnX6o-pRYZ_Pk,470
|
171
171
|
modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
|
172
|
-
modal_version/_version_generated.py,sha256=
|
173
|
-
modal-0.73.
|
174
|
-
modal-0.73.
|
175
|
-
modal-0.73.
|
176
|
-
modal-0.73.
|
177
|
-
modal-0.73.
|
178
|
-
modal-0.73.
|
172
|
+
modal_version/_version_generated.py,sha256=C7SCtsGrjUfPyAf7v_S93_caxnusk8RliITZG0S9S48,148
|
173
|
+
modal-0.73.2.dist-info/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
|
174
|
+
modal-0.73.2.dist-info/METADATA,sha256=fOtBQBc1qAuX2n9IN_MM4OPe4JkuIW0b5QyDHJlJQ4M,2328
|
175
|
+
modal-0.73.2.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
|
176
|
+
modal-0.73.2.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
|
177
|
+
modal-0.73.2.dist-info/top_level.txt,sha256=1nvYbOSIKcmU50fNrpnQnrrOpj269ei3LzgB6j9xGqg,64
|
178
|
+
modal-0.73.2.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|