modal 0.73.35__py3-none-any.whl → 0.73.36__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 +35 -19
- modal/client.pyi +2 -2
- modal/cls.py +2 -1
- modal/functions.pyi +8 -6
- {modal-0.73.35.dist-info → modal-0.73.36.dist-info}/METADATA +1 -1
- {modal-0.73.35.dist-info → modal-0.73.36.dist-info}/RECORD +11 -11
- modal_version/_version_generated.py +1 -1
- {modal-0.73.35.dist-info → modal-0.73.36.dist-info}/LICENSE +0 -0
- {modal-0.73.35.dist-info → modal-0.73.36.dist-info}/WHEEL +0 -0
- {modal-0.73.35.dist-info → modal-0.73.36.dist-info}/entry_points.txt +0 -0
- {modal-0.73.35.dist-info → modal-0.73.36.dist-info}/top_level.txt +0 -0
modal/_functions.py
CHANGED
@@ -1074,25 +1074,9 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
|
|
1074
1074
|
await retry_transient_errors(self.client.stub.FunctionUpdateSchedulingParams, request)
|
1075
1075
|
|
1076
1076
|
@classmethod
|
1077
|
-
|
1078
|
-
|
1079
|
-
|
1080
|
-
app_name: str,
|
1081
|
-
name: str,
|
1082
|
-
namespace=api_pb2.DEPLOYMENT_NAMESPACE_WORKSPACE,
|
1083
|
-
environment_name: Optional[str] = None,
|
1084
|
-
) -> "_Function":
|
1085
|
-
"""Reference a Function from a deployed App by its name.
|
1086
|
-
|
1087
|
-
In contrast to `modal.Function.lookup`, this is a lazy method
|
1088
|
-
that defers hydrating the local object with metadata from
|
1089
|
-
Modal servers until the first time it is actually used.
|
1090
|
-
|
1091
|
-
```python
|
1092
|
-
f = modal.Function.from_name("other-app", "function")
|
1093
|
-
```
|
1094
|
-
"""
|
1095
|
-
|
1077
|
+
def _from_name(cls, app_name: str, name: str, namespace, environment_name: Optional[str]):
|
1078
|
+
# internal function lookup implementation that allows lookup of class "service functions"
|
1079
|
+
# in addition to non-class functions
|
1096
1080
|
async def _load_remote(self: _Function, resolver: Resolver, existing_object_id: Optional[str]):
|
1097
1081
|
assert resolver.client and resolver.client.stub
|
1098
1082
|
request = api_pb2.FunctionGetRequest(
|
@@ -1116,6 +1100,38 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
|
|
1116
1100
|
rep = f"Function.from_name({app_name}, {name})"
|
1117
1101
|
return cls._from_loader(_load_remote, rep, is_another_app=True, hydrate_lazily=True)
|
1118
1102
|
|
1103
|
+
@classmethod
|
1104
|
+
@renamed_parameter((2024, 12, 18), "tag", "name")
|
1105
|
+
def from_name(
|
1106
|
+
cls: type["_Function"],
|
1107
|
+
app_name: str,
|
1108
|
+
name: str,
|
1109
|
+
namespace=api_pb2.DEPLOYMENT_NAMESPACE_WORKSPACE,
|
1110
|
+
environment_name: Optional[str] = None,
|
1111
|
+
) -> "_Function":
|
1112
|
+
"""Reference a Function from a deployed App by its name.
|
1113
|
+
|
1114
|
+
In contrast to `modal.Function.lookup`, this is a lazy method
|
1115
|
+
that defers hydrating the local object with metadata from
|
1116
|
+
Modal servers until the first time it is actually used.
|
1117
|
+
|
1118
|
+
```python
|
1119
|
+
f = modal.Function.from_name("other-app", "function")
|
1120
|
+
```
|
1121
|
+
"""
|
1122
|
+
if "." in name:
|
1123
|
+
class_name, method_name = name.split(".", 1)
|
1124
|
+
deprecation_warning(
|
1125
|
+
(2025, 2, 11),
|
1126
|
+
"Looking up class methods using Function.from_name will be deprecated"
|
1127
|
+
" in a future version of Modal.\nUse modal.Cls.from_name instead, e.g.\n\n"
|
1128
|
+
f'{class_name} = modal.Cls.from_name("{app_name}", "{class_name}")\n'
|
1129
|
+
f"instance = {class_name}(...)\n"
|
1130
|
+
f"instance.{method_name}.remote(...)\n",
|
1131
|
+
)
|
1132
|
+
|
1133
|
+
return cls._from_name(app_name, name, namespace, environment_name)
|
1134
|
+
|
1119
1135
|
@staticmethod
|
1120
1136
|
@renamed_parameter((2024, 12, 18), "tag", "name")
|
1121
1137
|
async def lookup(
|
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.36"
|
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.36"
|
89
89
|
): ...
|
90
90
|
def is_closed(self) -> bool: ...
|
91
91
|
@property
|
modal/cls.py
CHANGED
@@ -558,9 +558,10 @@ class _Cls(_Object, type_prefix="cs"):
|
|
558
558
|
cls = cls._from_loader(_load_remote, rep, is_another_app=True, hydrate_lazily=True)
|
559
559
|
|
560
560
|
class_service_name = f"{name}.*" # special name of the base service function for the class
|
561
|
-
cls._class_service_function = _Function.
|
561
|
+
cls._class_service_function = _Function._from_name(
|
562
562
|
app_name,
|
563
563
|
class_service_name,
|
564
|
+
namespace=namespace,
|
564
565
|
environment_name=_environment_name,
|
565
566
|
)
|
566
567
|
cls._name = name
|
modal/functions.pyi
CHANGED
@@ -116,6 +116,8 @@ class Function(
|
|
116
116
|
|
117
117
|
keep_warm: __keep_warm_spec[typing_extensions.Self]
|
118
118
|
|
119
|
+
@classmethod
|
120
|
+
def _from_name(cls, app_name: str, name: str, namespace, environment_name: typing.Optional[str]): ...
|
119
121
|
@classmethod
|
120
122
|
def from_name(
|
121
123
|
cls: type[Function], app_name: str, name: str, namespace=1, environment_name: typing.Optional[str] = None
|
@@ -198,11 +200,11 @@ class Function(
|
|
198
200
|
|
199
201
|
_call_generator_nowait: ___call_generator_nowait_spec[typing_extensions.Self]
|
200
202
|
|
201
|
-
class __remote_spec(typing_extensions.Protocol[
|
203
|
+
class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
|
202
204
|
def __call__(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER: ...
|
203
205
|
async def aio(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER: ...
|
204
206
|
|
205
|
-
remote: __remote_spec[modal._functions.
|
207
|
+
remote: __remote_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
|
206
208
|
|
207
209
|
class __remote_gen_spec(typing_extensions.Protocol[SUPERSELF]):
|
208
210
|
def __call__(self, *args, **kwargs) -> typing.Generator[typing.Any, None, None]: ...
|
@@ -217,19 +219,19 @@ class Function(
|
|
217
219
|
self, *args: modal._functions.P.args, **kwargs: modal._functions.P.kwargs
|
218
220
|
) -> modal._functions.OriginalReturnType: ...
|
219
221
|
|
220
|
-
class ___experimental_spawn_spec(typing_extensions.Protocol[
|
222
|
+
class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
|
221
223
|
def __call__(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
|
222
224
|
async def aio(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
|
223
225
|
|
224
226
|
_experimental_spawn: ___experimental_spawn_spec[
|
225
|
-
modal._functions.
|
227
|
+
modal._functions.ReturnType, modal._functions.P, typing_extensions.Self
|
226
228
|
]
|
227
229
|
|
228
|
-
class __spawn_spec(typing_extensions.Protocol[
|
230
|
+
class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
|
229
231
|
def __call__(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
|
230
232
|
async def aio(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
|
231
233
|
|
232
|
-
spawn: __spawn_spec[modal._functions.
|
234
|
+
spawn: __spawn_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
|
233
235
|
|
234
236
|
def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]: ...
|
235
237
|
|
@@ -3,7 +3,7 @@ modal/__main__.py,sha256=CgIjP8m1xJjjd4AXc-delmR6LdBCZclw2A_V38CFIio,2870
|
|
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=YtfJ852XUDtAWBD-yVs99zy933-VBEKQyIngEj36Qcw,29286
|
6
|
-
modal/_functions.py,sha256=
|
6
|
+
modal/_functions.py,sha256=UpkT7V6YjIL_BWJzIUV847-eSwBPWZSMnONtftr_Ses,72372
|
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=ItQcsMNkz9Y3kdTsvfNarbW-paJ2qabDyQ7njaqY0XI,11359
|
@@ -22,10 +22,10 @@ modal/app.py,sha256=rCOPD51gVyow8muyaqMuV65qfTnAZKf_w1OCZdSF_6o,44636
|
|
22
22
|
modal/app.pyi,sha256=0MMCgskIL4r3eq8oBcfm2lLyeao2gXjS3iXaIfmaJ-o,25959
|
23
23
|
modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
|
24
24
|
modal/client.py,sha256=8SQawr7P1PNUCq1UmJMUQXG2jIo4Nmdcs311XqrNLRE,15276
|
25
|
-
modal/client.pyi,sha256=
|
25
|
+
modal/client.pyi,sha256=gy7-aWZUpvjyNpRtJ00m-uSlLs_Rxaw9ZCWUk8vGx8Q,7593
|
26
26
|
modal/cloud_bucket_mount.py,sha256=YOe9nnvSr4ZbeCn587d7_VhE9IioZYRvF9VYQTQux08,5914
|
27
27
|
modal/cloud_bucket_mount.pyi,sha256=30T3K1a89l6wzmEJ_J9iWv9SknoGqaZDx59Xs-ZQcmk,1607
|
28
|
-
modal/cls.py,sha256=
|
28
|
+
modal/cls.py,sha256=nJhJr-YuttOmdNWxtMHcBV-q6iQmY5qXkEy9yO43clY,31130
|
29
29
|
modal/cls.pyi,sha256=QqYoRKVCKhP_HkHittKpEZ6sqXkEdtEl4n1wMqeoe3M,8897
|
30
30
|
modal/config.py,sha256=XT1W4Y9PVkbYMAXjJRshvQEPDhZmnfW_ZRMwl8XKoqA,11149
|
31
31
|
modal/container_process.py,sha256=WTqLn01dJPVkPpwR_0w_JH96ceN5mV4TGtiu1ZR2RRA,6108
|
@@ -41,7 +41,7 @@ modal/file_io.py,sha256=lcMs_E9Xfm0YX1t9U2wNIBPnqHRxmImqjLW1GHqVmyg,20945
|
|
41
41
|
modal/file_io.pyi,sha256=NTRft1tbPSWf9TlWVeZmTlgB5AZ_Zhu2srWIrWr7brk,9445
|
42
42
|
modal/file_pattern_matcher.py,sha256=trosX-Bp7dOubudN1bLLhRAoidWy1TcoaR4Pv8CedWw,6497
|
43
43
|
modal/functions.py,sha256=kcNHvqeGBxPI7Cgd57NIBBghkfbeFJzXO44WW0jSmao,325
|
44
|
-
modal/functions.pyi,sha256=
|
44
|
+
modal/functions.pyi,sha256=CEM12TJcrb-6v-VAHcDvzrgAlynFTDhUTXKf68E9O30,14378
|
45
45
|
modal/gpu.py,sha256=Kbhs_u49FaC2Zi0TjCdrpstpRtT5eZgecynmQi5IZVE,6752
|
46
46
|
modal/image.py,sha256=KYc6bg-m9A6wiLF38dWcFBMrEATyR2KOF0sp-6O9uC0,91508
|
47
47
|
modal/image.pyi,sha256=kMkIDHcyyhA7BC2Vrx0RfrLEsqK8Ng2-IqUKL-CJexI,26250
|
@@ -172,10 +172,10 @@ modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0y
|
|
172
172
|
modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
173
173
|
modal_version/__init__.py,sha256=wiJQ53c-OMs0Xf1UeXOxQ7FwlV1VzIjnX6o-pRYZ_Pk,470
|
174
174
|
modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
|
175
|
-
modal_version/_version_generated.py,sha256=
|
176
|
-
modal-0.73.
|
177
|
-
modal-0.73.
|
178
|
-
modal-0.73.
|
179
|
-
modal-0.73.
|
180
|
-
modal-0.73.
|
181
|
-
modal-0.73.
|
175
|
+
modal_version/_version_generated.py,sha256=fP5zP8t74bD5IjSKt6l4Uo9LQlYTy8J8zrEL-zloyfw,149
|
176
|
+
modal-0.73.36.dist-info/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
|
177
|
+
modal-0.73.36.dist-info/METADATA,sha256=oHHOvStUgzT8jJR-061X0tYvZrXsQ8PD7bWy2rQ9zKM,2330
|
178
|
+
modal-0.73.36.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
|
179
|
+
modal-0.73.36.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
|
180
|
+
modal-0.73.36.dist-info/top_level.txt,sha256=1nvYbOSIKcmU50fNrpnQnrrOpj269ei3LzgB6j9xGqg,64
|
181
|
+
modal-0.73.36.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|