modal 0.73.81__py3-none-any.whl → 0.73.84__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/__init__.py +13 -1
- modal/_partial_function.py +64 -21
- modal/app.py +2 -2
- modal/client.pyi +2 -2
- modal/partial_function.py +2 -0
- modal/partial_function.pyi +14 -6
- {modal-0.73.81.dist-info → modal-0.73.84.dist-info}/METADATA +1 -1
- {modal-0.73.81.dist-info → modal-0.73.84.dist-info}/RECORD +13 -13
- modal_version/_version_generated.py +1 -1
- {modal-0.73.81.dist-info → modal-0.73.84.dist-info}/LICENSE +0 -0
- {modal-0.73.81.dist-info → modal-0.73.84.dist-info}/WHEEL +0 -0
- {modal-0.73.81.dist-info → modal-0.73.84.dist-info}/entry_points.txt +0 -0
- {modal-0.73.81.dist-info → modal-0.73.84.dist-info}/top_level.txt +0 -0
modal/__init__.py
CHANGED
@@ -23,7 +23,18 @@ try:
|
|
23
23
|
from .mount import Mount
|
24
24
|
from .network_file_system import NetworkFileSystem
|
25
25
|
from .output import enable_output
|
26
|
-
from .partial_function import
|
26
|
+
from .partial_function import (
|
27
|
+
asgi_app,
|
28
|
+
batched,
|
29
|
+
build,
|
30
|
+
enter,
|
31
|
+
exit,
|
32
|
+
fastapi_endpoint,
|
33
|
+
method,
|
34
|
+
web_endpoint,
|
35
|
+
web_server,
|
36
|
+
wsgi_app,
|
37
|
+
)
|
27
38
|
from .proxy import Proxy
|
28
39
|
from .queue import Queue
|
29
40
|
from .retries import Retries
|
@@ -76,6 +87,7 @@ __all__ = [
|
|
76
87
|
"enable_output",
|
77
88
|
"enter",
|
78
89
|
"exit",
|
90
|
+
"fastapi_endpoint",
|
79
91
|
"forward",
|
80
92
|
"is_local",
|
81
93
|
"interact",
|
modal/_partial_function.py
CHANGED
@@ -54,7 +54,6 @@ class _PartialFunction(typing.Generic[P, ReturnType, OriginalReturnType]):
|
|
54
54
|
flags: _PartialFunctionFlags
|
55
55
|
webhook_config: Optional[api_pb2.WebhookConfig]
|
56
56
|
is_generator: bool
|
57
|
-
keep_warm: Optional[int]
|
58
57
|
batch_max_size: Optional[int]
|
59
58
|
batch_wait_ms: Optional[int]
|
60
59
|
force_build: bool
|
@@ -65,9 +64,9 @@ class _PartialFunction(typing.Generic[P, ReturnType, OriginalReturnType]):
|
|
65
64
|
self,
|
66
65
|
raw_f: Callable[P, ReturnType],
|
67
66
|
flags: _PartialFunctionFlags,
|
67
|
+
*,
|
68
68
|
webhook_config: Optional[api_pb2.WebhookConfig] = None,
|
69
69
|
is_generator: Optional[bool] = None,
|
70
|
-
keep_warm: Optional[int] = None,
|
71
70
|
batch_max_size: Optional[int] = None,
|
72
71
|
batch_wait_ms: Optional[int] = None,
|
73
72
|
cluster_size: Optional[int] = None, # Experimental: Clustered functions
|
@@ -84,7 +83,6 @@ class _PartialFunction(typing.Generic[P, ReturnType, OriginalReturnType]):
|
|
84
83
|
final_is_generator = is_generator
|
85
84
|
|
86
85
|
self.is_generator = final_is_generator
|
87
|
-
self.keep_warm = keep_warm
|
88
86
|
self.wrapped = False # Make sure that this was converted into a FunctionHandle
|
89
87
|
self.batch_max_size = batch_max_size
|
90
88
|
self.batch_wait_ms = batch_wait_ms
|
@@ -141,7 +139,6 @@ class _PartialFunction(typing.Generic[P, ReturnType, OriginalReturnType]):
|
|
141
139
|
raw_f=self.raw_f,
|
142
140
|
flags=(self.flags | flags),
|
143
141
|
webhook_config=self.webhook_config,
|
144
|
-
keep_warm=self.keep_warm,
|
145
142
|
batch_max_size=self.batch_max_size,
|
146
143
|
batch_wait_ms=self.batch_wait_ms,
|
147
144
|
force_build=self.force_build,
|
@@ -198,7 +195,6 @@ def _method(
|
|
198
195
|
# Set this to True if it's a non-generator function returning
|
199
196
|
# a [sync/async] generator object
|
200
197
|
is_generator: Optional[bool] = None,
|
201
|
-
keep_warm: Optional[int] = None, # Deprecated: Use keep_warm on @app.cls() instead
|
202
198
|
) -> _MethodDecoratorType:
|
203
199
|
"""Decorator for methods that should be transformed into a Modal Function registered against this class's App.
|
204
200
|
|
@@ -216,17 +212,6 @@ def _method(
|
|
216
212
|
if _warn_parentheses_missing is not None:
|
217
213
|
raise InvalidError("Positional arguments are not allowed. Did you forget parentheses? Suggestion: `@method()`.")
|
218
214
|
|
219
|
-
if keep_warm is not None:
|
220
|
-
deprecation_warning(
|
221
|
-
(2024, 6, 10),
|
222
|
-
(
|
223
|
-
"`keep_warm=` is no longer supported per-method on Modal classes. "
|
224
|
-
"All methods and web endpoints of a class use the same set of containers now. "
|
225
|
-
"Use keep_warm via the @app.cls() decorator instead. "
|
226
|
-
),
|
227
|
-
pending=True,
|
228
|
-
)
|
229
|
-
|
230
215
|
def wrapper(raw_f: Callable[..., Any]) -> _PartialFunction:
|
231
216
|
nonlocal is_generator
|
232
217
|
if isinstance(raw_f, _PartialFunction) and raw_f.webhook_config:
|
@@ -241,7 +226,7 @@ def _method(
|
|
241
226
|
"Batched function on classes should not be wrapped by `@method`. "
|
242
227
|
"Suggestion: remove the `@method` decorator."
|
243
228
|
)
|
244
|
-
return _PartialFunction(raw_f, _PartialFunctionFlags.FUNCTION, is_generator=is_generator
|
229
|
+
return _PartialFunction(raw_f, _PartialFunctionFlags.FUNCTION, is_generator=is_generator)
|
245
230
|
|
246
231
|
return wrapper # type: ignore # synchronicity issue with wrapped vs unwrapped types and protocols
|
247
232
|
|
@@ -256,6 +241,64 @@ def _parse_custom_domains(custom_domains: Optional[Iterable[str]] = None) -> lis
|
|
256
241
|
return _custom_domains
|
257
242
|
|
258
243
|
|
244
|
+
def _fastapi_endpoint(
|
245
|
+
_warn_parentheses_missing=None,
|
246
|
+
*,
|
247
|
+
method: str = "GET", # REST method for the created endpoint.
|
248
|
+
label: Optional[str] = None, # Label for created endpoint. Final subdomain will be <workspace>--<label>.modal.run.
|
249
|
+
custom_domains: Optional[Iterable[str]] = None, # Custom fully-qualified domain name (FQDN) for the endpoint.
|
250
|
+
docs: bool = False, # Whether to enable interactive documentation for this endpoint at /docs.
|
251
|
+
requires_proxy_auth: bool = False, # Require Modal-Key and Modal-Secret HTTP Headers on requests.
|
252
|
+
) -> Callable[[Callable[P, ReturnType]], _PartialFunction[P, ReturnType, ReturnType]]:
|
253
|
+
"""Register a basic web endpoint with this application.
|
254
|
+
|
255
|
+
This is the simple way to create a web endpoint on Modal. The function
|
256
|
+
behaves as a [FastAPI](https://fastapi.tiangolo.com/) handler and should
|
257
|
+
return a response object to the caller.
|
258
|
+
|
259
|
+
Endpoints created with `@app.fastapi_endpoint` are meant to be simple, single
|
260
|
+
request handlers and automatically have
|
261
|
+
[CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) enabled.
|
262
|
+
For more flexibility, use `@app.asgi_app`.
|
263
|
+
|
264
|
+
To learn how to use Modal with popular web frameworks, see the
|
265
|
+
[guide on web endpoints](https://modal.com/docs/guide/webhooks).
|
266
|
+
|
267
|
+
This function replaces the deprecated `@web_endpoint` decorator.
|
268
|
+
"""
|
269
|
+
if isinstance(_warn_parentheses_missing, str):
|
270
|
+
# Probably passing the method string as a positional argument.
|
271
|
+
raise InvalidError('Positional arguments are not allowed. Suggestion: `@fastapi_endpoint(method="GET")`.')
|
272
|
+
elif _warn_parentheses_missing is not None:
|
273
|
+
raise InvalidError(
|
274
|
+
"Positional arguments are not allowed. Did you forget parentheses? Suggestion: `@fastapi_endpoint()`."
|
275
|
+
)
|
276
|
+
|
277
|
+
def wrapper(raw_f: Callable[..., Any]) -> _PartialFunction:
|
278
|
+
if isinstance(raw_f, _Function):
|
279
|
+
raw_f = raw_f.get_raw_f()
|
280
|
+
raise InvalidError(
|
281
|
+
f"Applying decorators for {raw_f} in the wrong order!\nUsage:\n\n"
|
282
|
+
"@app.function()\n@app.fastapi_endpoint()\ndef my_webhook():\n ..."
|
283
|
+
)
|
284
|
+
|
285
|
+
return _PartialFunction(
|
286
|
+
raw_f,
|
287
|
+
_PartialFunctionFlags.FUNCTION,
|
288
|
+
webhook_config=api_pb2.WebhookConfig(
|
289
|
+
type=api_pb2.WEBHOOK_TYPE_FUNCTION,
|
290
|
+
method=method,
|
291
|
+
web_endpoint_docs=docs,
|
292
|
+
requested_suffix=label or "",
|
293
|
+
async_mode=api_pb2.WEBHOOK_ASYNC_MODE_AUTO,
|
294
|
+
custom_domains=_parse_custom_domains(custom_domains),
|
295
|
+
requires_proxy_auth=requires_proxy_auth,
|
296
|
+
),
|
297
|
+
)
|
298
|
+
|
299
|
+
return wrapper
|
300
|
+
|
301
|
+
|
259
302
|
def _web_endpoint(
|
260
303
|
_warn_parentheses_missing=None,
|
261
304
|
*,
|
@@ -300,7 +343,7 @@ def _web_endpoint(
|
|
300
343
|
return _PartialFunction(
|
301
344
|
raw_f,
|
302
345
|
_PartialFunctionFlags.FUNCTION,
|
303
|
-
api_pb2.WebhookConfig(
|
346
|
+
webhook_config=api_pb2.WebhookConfig(
|
304
347
|
type=api_pb2.WEBHOOK_TYPE_FUNCTION,
|
305
348
|
method=method,
|
306
349
|
web_endpoint_docs=docs,
|
@@ -370,7 +413,7 @@ def _asgi_app(
|
|
370
413
|
return _PartialFunction(
|
371
414
|
raw_f,
|
372
415
|
_PartialFunctionFlags.FUNCTION,
|
373
|
-
api_pb2.WebhookConfig(
|
416
|
+
webhook_config=api_pb2.WebhookConfig(
|
374
417
|
type=api_pb2.WEBHOOK_TYPE_ASGI_APP,
|
375
418
|
requested_suffix=label,
|
376
419
|
async_mode=api_pb2.WEBHOOK_ASYNC_MODE_AUTO,
|
@@ -438,7 +481,7 @@ def _wsgi_app(
|
|
438
481
|
return _PartialFunction(
|
439
482
|
raw_f,
|
440
483
|
_PartialFunctionFlags.FUNCTION,
|
441
|
-
api_pb2.WebhookConfig(
|
484
|
+
webhook_config=api_pb2.WebhookConfig(
|
442
485
|
type=api_pb2.WEBHOOK_TYPE_WSGI_APP,
|
443
486
|
requested_suffix=label,
|
444
487
|
async_mode=api_pb2.WEBHOOK_ASYNC_MODE_AUTO,
|
@@ -493,7 +536,7 @@ def _web_server(
|
|
493
536
|
return _PartialFunction(
|
494
537
|
raw_f,
|
495
538
|
_PartialFunctionFlags.FUNCTION,
|
496
|
-
api_pb2.WebhookConfig(
|
539
|
+
webhook_config=api_pb2.WebhookConfig(
|
497
540
|
type=api_pb2.WEBHOOK_TYPE_WEB_SERVER,
|
498
541
|
requested_suffix=label,
|
499
542
|
async_mode=api_pb2.WEBHOOK_ASYNC_MODE_AUTO,
|
modal/app.py
CHANGED
@@ -658,13 +658,13 @@ class _App:
|
|
658
658
|
if is_method_fn(f.raw_f.__qualname__):
|
659
659
|
raise InvalidError(
|
660
660
|
"The `@app.function` decorator cannot be used on class methods. "
|
661
|
-
"Swap with `@modal.method` or
|
661
|
+
"Swap with `@modal.method` or one of the web endpoint decorators. "
|
662
662
|
"Example: "
|
663
663
|
"\n\n"
|
664
664
|
"```python\n"
|
665
665
|
"@app.cls()\n"
|
666
666
|
"class MyClass:\n"
|
667
|
-
" @modal.
|
667
|
+
" @modal.method()\n"
|
668
668
|
" def f(self, x):\n"
|
669
669
|
" ...\n"
|
670
670
|
"```\n"
|
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.84"
|
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.84"
|
89
89
|
): ...
|
90
90
|
def is_closed(self) -> bool: ...
|
91
91
|
@property
|
modal/partial_function.py
CHANGED
@@ -7,6 +7,7 @@ from ._partial_function import (
|
|
7
7
|
_build,
|
8
8
|
_enter,
|
9
9
|
_exit,
|
10
|
+
_fastapi_endpoint,
|
10
11
|
_method,
|
11
12
|
_PartialFunction,
|
12
13
|
_web_endpoint,
|
@@ -19,6 +20,7 @@ from ._partial_function import (
|
|
19
20
|
PartialFunction = synchronize_api(_PartialFunction, target_module=__name__)
|
20
21
|
method = synchronize_api(_method, target_module=__name__)
|
21
22
|
web_endpoint = synchronize_api(_web_endpoint, target_module=__name__)
|
23
|
+
fastapi_endpoint = synchronize_api(_fastapi_endpoint, target_module=__name__)
|
22
24
|
asgi_app = synchronize_api(_asgi_app, target_module=__name__)
|
23
25
|
wsgi_app = synchronize_api(_wsgi_app, target_module=__name__)
|
24
26
|
web_server = synchronize_api(_web_server, target_module=__name__)
|
modal/partial_function.pyi
CHANGED
@@ -13,7 +13,6 @@ class PartialFunction(
|
|
13
13
|
flags: modal._partial_function._PartialFunctionFlags
|
14
14
|
webhook_config: typing.Optional[modal_proto.api_pb2.WebhookConfig]
|
15
15
|
is_generator: bool
|
16
|
-
keep_warm: typing.Optional[int]
|
17
16
|
batch_max_size: typing.Optional[int]
|
18
17
|
batch_wait_ms: typing.Optional[int]
|
19
18
|
force_build: bool
|
@@ -24,9 +23,9 @@ class PartialFunction(
|
|
24
23
|
self,
|
25
24
|
raw_f: collections.abc.Callable[modal._partial_function.P, modal._partial_function.ReturnType],
|
26
25
|
flags: modal._partial_function._PartialFunctionFlags,
|
26
|
+
*,
|
27
27
|
webhook_config: typing.Optional[modal_proto.api_pb2.WebhookConfig] = None,
|
28
28
|
is_generator: typing.Optional[bool] = None,
|
29
|
-
keep_warm: typing.Optional[int] = None,
|
30
29
|
batch_max_size: typing.Optional[int] = None,
|
31
30
|
batch_wait_ms: typing.Optional[int] = None,
|
32
31
|
cluster_size: typing.Optional[int] = None,
|
@@ -44,10 +43,7 @@ class PartialFunction(
|
|
44
43
|
def add_flags(self, flags) -> PartialFunction: ...
|
45
44
|
|
46
45
|
def method(
|
47
|
-
_warn_parentheses_missing=None,
|
48
|
-
*,
|
49
|
-
is_generator: typing.Optional[bool] = None,
|
50
|
-
keep_warm: typing.Optional[int] = None,
|
46
|
+
_warn_parentheses_missing=None, *, is_generator: typing.Optional[bool] = None
|
51
47
|
) -> modal._partial_function._MethodDecoratorType: ...
|
52
48
|
def web_endpoint(
|
53
49
|
_warn_parentheses_missing=None,
|
@@ -61,6 +57,18 @@ def web_endpoint(
|
|
61
57
|
[collections.abc.Callable[modal._partial_function.P, modal._partial_function.ReturnType]],
|
62
58
|
PartialFunction[modal._partial_function.P, modal._partial_function.ReturnType, modal._partial_function.ReturnType],
|
63
59
|
]: ...
|
60
|
+
def fastapi_endpoint(
|
61
|
+
_warn_parentheses_missing=None,
|
62
|
+
*,
|
63
|
+
method: str = "GET",
|
64
|
+
label: typing.Optional[str] = None,
|
65
|
+
custom_domains: typing.Optional[collections.abc.Iterable[str]] = None,
|
66
|
+
docs: bool = False,
|
67
|
+
requires_proxy_auth: bool = False,
|
68
|
+
) -> collections.abc.Callable[
|
69
|
+
[collections.abc.Callable[modal._partial_function.P, modal._partial_function.ReturnType]],
|
70
|
+
PartialFunction[modal._partial_function.P, modal._partial_function.ReturnType, modal._partial_function.ReturnType],
|
71
|
+
]: ...
|
64
72
|
def asgi_app(
|
65
73
|
_warn_parentheses_missing=None,
|
66
74
|
*,
|
@@ -1,4 +1,4 @@
|
|
1
|
-
modal/__init__.py,sha256=
|
1
|
+
modal/__init__.py,sha256=KcoVQVCfwuHmIJ74OxQPn66MHfiJcWi8V5srBW12jTA,2464
|
2
2
|
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
|
@@ -8,7 +8,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
|
10
10
|
modal/_output.py,sha256=Z0nngPh2mKHMQc4MQ92YjVPc3ewOLa3I4dFBlL9nvQY,25656
|
11
|
-
modal/_partial_function.py,sha256=
|
11
|
+
modal/_partial_function.py,sha256=3rmdWxX2nmAJU4SSfhCE7IDHFNrKYHVVbuxBlK0cI_g,30023
|
12
12
|
modal/_proxy_tunnel.py,sha256=gnKyCfmVB7x2d1A6c-JDysNIP3kEFxmXzhcXhPrzPn0,1906
|
13
13
|
modal/_pty.py,sha256=JZfPDDpzqICZqtyPI_oMJf_9w-p_lLNuzHhwhodUXio,1329
|
14
14
|
modal/_resolver.py,sha256=RtoXoYzSllPlFu0D1vel_FWiEmDO7RyToiC2bxeN8ZY,6917
|
@@ -18,11 +18,11 @@ modal/_traceback.py,sha256=IZQzB3fVlUfMHOSyKUgw0H6qv4yHnpyq-XVCNZKfUdA,5023
|
|
18
18
|
modal/_tunnel.py,sha256=zTBxBiuH1O22tS1OliAJdIsSmaZS8PlnifS_6S5z-mk,6320
|
19
19
|
modal/_tunnel.pyi,sha256=JmmDYAy9F1FpgJ_hWx0xkom2nTOFQjn4mTPYlU3PFo4,1245
|
20
20
|
modal/_watcher.py,sha256=K6LYnlmSGQB4tWWI9JADv-tvSvQ1j522FwT71B51CX8,3584
|
21
|
-
modal/app.py,sha256=
|
21
|
+
modal/app.py,sha256=PPYAQ7ts6PeJHcV2D5DWsJw-vfZzM4Rpnw7S2BNnEk8,45474
|
22
22
|
modal/app.pyi,sha256=tZFbcsu20SuvfB2puxCyuXLFNJ9bQulzag55rVpgZmc,26827
|
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=kCq-GfIM9Ahb4umbNkcEsLdhhxXnag6beolz8_FDzHw,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
28
|
modal/cls.py,sha256=5DjpSBP1IyROKZm5ItDiEGdbRnfTT6K1Ul0jEvEKw_Q,31695
|
@@ -56,8 +56,8 @@ modal/object.pyi,sha256=kyJkRQcVv3ct7zSAxvvXcuhBVeH914v80uSlqeS7cA4,5632
|
|
56
56
|
modal/output.py,sha256=q4T9uHduunj4NwY-YSwkHGgjZlCXMuJbfQ5UFaAGRAc,1968
|
57
57
|
modal/parallel_map.py,sha256=POBTyiWabe2e4qBNlsjjksiu1AAPEsNqI-mM8cgNFco,16042
|
58
58
|
modal/parallel_map.pyi,sha256=-YKY_bVuQv8B4gtFrHnXtuNV0_JpmU9vqMJzR7beeCU,2524
|
59
|
-
modal/partial_function.py,sha256=
|
60
|
-
modal/partial_function.pyi,sha256
|
59
|
+
modal/partial_function.py,sha256=uu8zvIV0Big0jiTlC4-VPL16dOScNB5jhfPeqxvvCrI,1117
|
60
|
+
modal/partial_function.pyi,sha256=-MAK61qJRi6Wjym-Measz5_9moJurYrJfdi7uSQZa5M,4936
|
61
61
|
modal/proxy.py,sha256=NrOevrWxG3G7-zlyRzG6BcIvop7AWLeyahZxitbBaOk,1418
|
62
62
|
modal/proxy.pyi,sha256=1OEKIVUyC-xb7fHMzngakQso0nTsK60TVhXtlcMj6Wk,390
|
63
63
|
modal/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -168,10 +168,10 @@ modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0y
|
|
168
168
|
modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
169
169
|
modal_version/__init__.py,sha256=wiJQ53c-OMs0Xf1UeXOxQ7FwlV1VzIjnX6o-pRYZ_Pk,470
|
170
170
|
modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
|
171
|
-
modal_version/_version_generated.py,sha256=
|
172
|
-
modal-0.73.
|
173
|
-
modal-0.73.
|
174
|
-
modal-0.73.
|
175
|
-
modal-0.73.
|
176
|
-
modal-0.73.
|
177
|
-
modal-0.73.
|
171
|
+
modal_version/_version_generated.py,sha256=6NDydGuk5jv_G-VRhREbufmsEGLmjLJXrOSb7BiQmXU,149
|
172
|
+
modal-0.73.84.dist-info/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
|
173
|
+
modal-0.73.84.dist-info/METADATA,sha256=JE85zuzg-i__LiV5KWYnDyYeYI_3_5oELXrh2BMgFns,2452
|
174
|
+
modal-0.73.84.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
|
175
|
+
modal-0.73.84.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
|
176
|
+
modal-0.73.84.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
|
177
|
+
modal-0.73.84.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|