modAL 1.4.1.dev0__tar.gz → 1.4.1.dev1__tar.gz
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-1.4.1.dev0 → modal-1.4.1.dev1}/PKG-INFO +1 -1
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/container.py +25 -4
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/client.pyi +2 -2
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/functions.pyi +6 -6
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/mount.py +7 -5
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal.egg-info/PKG-INFO +1 -1
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_proto/api_pb2.py +1040 -1040
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_proto/api_pb2.pyi +4 -1
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_version/__init__.py +1 -1
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/LICENSE +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/README.md +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/__init__.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/__main__.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_billing.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_clustered_functions.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_clustered_functions.pyi +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_container_entrypoint.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_functions.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_grpc_client.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_ipython.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_load_context.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_location.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_logs.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_object.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_output/__init__.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_output/manager.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_output/pty.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_output/rich.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_output/status.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_partial_function.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_resolver.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_resources.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_runtime/__init__.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_runtime/asgi.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_runtime/container_io_manager.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_runtime/container_io_manager.pyi +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_runtime/execution_context.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_runtime/execution_context.pyi +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_runtime/gpu_memory_snapshot.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_runtime/telemetry.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_runtime/user_code_event_loop.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_runtime/user_code_imports.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_serialization.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_server.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_traceback.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_tunnel.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_tunnel.pyi +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_type_manager.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/__init__.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/app_utils.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/async_utils.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/auth_token_manager.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/blob_utils.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/browser_utils.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/bytes_io_segment_payload.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/deprecation.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/docker_utils.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/function_utils.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/git_utils.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/grpc_testing.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/grpc_utils.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/hash_utils.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/http_utils.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/jwt_utils.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/logger.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/mount_utils.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/name_utils.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/package_utils.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/pattern_utils.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/rand_pb_testing.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/sandbox_fs_utils.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/shell_utils.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/task_command_router_client.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_utils/time_utils.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_vendor/__init__.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_vendor/a2wsgi_wsgi.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_vendor/cloudpickle.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_vendor/tblib.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_vendor/version.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/_watcher.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/app.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/app.pyi +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/billing.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/builder/2023.12.312.txt +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/builder/2023.12.txt +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/builder/2024.04.txt +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/builder/2024.10.txt +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/builder/2025.06.txt +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/builder/PREVIEW.txt +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/builder/README.md +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/builder/base-images.json +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/call_graph.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/__init__.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/_download.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/_traceback.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/app.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/billing.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/changelog.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/cluster.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/config.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/dashboard.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/dict.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/entry_point.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/environment.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/import_refs.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/launch.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/network_file_system.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/profile.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/programs/__init__.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/programs/run_jupyter.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/programs/vscode.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/queues.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/run.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/secret.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/selector.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/shell.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/token.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/utils.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cli/volume.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/client.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cloud_bucket_mount.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cloud_bucket_mount.pyi +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cls.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/cls.pyi +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/config.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/container_process.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/container_process.pyi +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/dict.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/dict.pyi +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/environments.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/environments.pyi +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/exception.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/experimental/__init__.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/experimental/flash.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/experimental/flash.pyi +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/experimental/ipython.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/file_io.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/file_io.pyi +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/file_pattern_matcher.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/functions.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/image.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/image.pyi +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/io_streams.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/io_streams.pyi +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/mount.pyi +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/network_file_system.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/network_file_system.pyi +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/object.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/object.pyi +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/output.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/parallel_map.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/parallel_map.pyi +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/partial_function.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/partial_function.pyi +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/proxy.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/proxy.pyi +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/py.typed +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/queue.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/queue.pyi +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/retries.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/runner.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/runner.pyi +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/running_app.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/sandbox.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/sandbox.pyi +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/sandbox_fs.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/sandbox_fs.pyi +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/schedule.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/scheduler_placement.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/secret.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/secret.pyi +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/server.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/server.pyi +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/serving.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/serving.pyi +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/snapshot.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/snapshot.pyi +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/stream_type.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/token_flow.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/token_flow.pyi +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/volume.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal/volume.pyi +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal.egg-info/SOURCES.txt +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal.egg-info/dependency_links.txt +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal.egg-info/entry_points.txt +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal.egg-info/requires.txt +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal.egg-info/top_level.txt +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_docs/__init__.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_docs/gen_cli_docs.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_docs/gen_cli_docs_main.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_docs/gen_reference_docs.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_docs/gen_reference_docs_main.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_docs/mdmd/__init__.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_docs/mdmd/mdmd.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_docs/mdmd/signatures.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_proto/__init__.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_proto/api_grpc.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_proto/api_pb2_grpc.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_proto/api_pb2_grpc.pyi +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_proto/modal_api_grpc.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_proto/py.typed +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_proto/task_command_router_grpc.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_proto/task_command_router_pb2.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_proto/task_command_router_pb2.pyi +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_proto/task_command_router_pb2_grpc.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/modal_version/__main__.py +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/pyproject.toml +0 -0
- {modal-1.4.1.dev0 → modal-1.4.1.dev1}/setup.cfg +0 -0
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# Copyright Modal Labs 2022
|
|
2
|
+
import warnings
|
|
2
3
|
from datetime import datetime, timezone
|
|
3
4
|
from typing import Optional, Union
|
|
4
5
|
|
|
@@ -185,20 +186,40 @@ async def logs(
|
|
|
185
186
|
task_info_resp = await client.stub.TaskGetInfo(api_pb2.TaskGetInfoRequest(task_id=task_id))
|
|
186
187
|
app_id = task_info_resp.app_id
|
|
187
188
|
|
|
189
|
+
if not task_info_resp.info.started_at:
|
|
190
|
+
# Unlikely race or Modal backend issue, don't treat as a usage exception
|
|
191
|
+
return
|
|
192
|
+
container_started_dt = datetime.fromtimestamp(task_info_resp.info.started_at, timezone.utc)
|
|
193
|
+
|
|
188
194
|
now = datetime.now(timezone.utc)
|
|
189
195
|
if all_logs:
|
|
190
|
-
since_dt =
|
|
196
|
+
since_dt = container_started_dt
|
|
191
197
|
if task_info_resp.info.finished_at:
|
|
192
198
|
until_dt = datetime.fromtimestamp(task_info_resp.info.finished_at, timezone.utc)
|
|
193
199
|
else:
|
|
194
200
|
until_dt = now
|
|
195
201
|
else:
|
|
196
|
-
since_dt = _parse_time_arg(since, default=
|
|
197
|
-
|
|
202
|
+
since_dt = _parse_time_arg(since, default=container_started_dt)
|
|
203
|
+
if task_info_resp.info.finished_at:
|
|
204
|
+
default_until_dt = datetime.fromtimestamp(task_info_resp.info.finished_at, timezone.utc)
|
|
205
|
+
else:
|
|
206
|
+
default_until_dt = now
|
|
207
|
+
until_dt = _parse_time_arg(until, default=default_until_dt)
|
|
198
208
|
|
|
199
|
-
if
|
|
209
|
+
if since is not None and until is not None and since_dt >= until_dt:
|
|
210
|
+
# User provided both --since and --until, but did so incorrectly
|
|
200
211
|
raise UsageError("--since must be before --until.")
|
|
201
212
|
|
|
213
|
+
if since is not None and until is None and since_dt >= until_dt:
|
|
214
|
+
# User provided only --since and it is after the container finished
|
|
215
|
+
warnings.warn("--since time is after the Container finished, no logs to fetch.", UserWarning)
|
|
216
|
+
return
|
|
217
|
+
|
|
218
|
+
if until is not None and since is None and since_dt >= until_dt:
|
|
219
|
+
# User provided only --until and it is before the Container started
|
|
220
|
+
warnings.warn("--until time is before the Container started, no logs to fetch.", UserWarning)
|
|
221
|
+
return
|
|
222
|
+
|
|
202
223
|
if since_dt is not None:
|
|
203
224
|
effective_until = until_dt or now
|
|
204
225
|
if effective_until - since_dt > _MAX_FETCH_RANGE:
|
|
@@ -35,7 +35,7 @@ class _Client:
|
|
|
35
35
|
server_url: str,
|
|
36
36
|
client_type: int,
|
|
37
37
|
credentials: typing.Optional[tuple[str, str]],
|
|
38
|
-
version: str = "1.4.1.
|
|
38
|
+
version: str = "1.4.1.dev1",
|
|
39
39
|
):
|
|
40
40
|
"""mdmd:hidden
|
|
41
41
|
The Modal client object is not intended to be instantiated directly by users.
|
|
@@ -171,7 +171,7 @@ class Client:
|
|
|
171
171
|
server_url: str,
|
|
172
172
|
client_type: int,
|
|
173
173
|
credentials: typing.Optional[tuple[str, str]],
|
|
174
|
-
version: str = "1.4.1.
|
|
174
|
+
version: str = "1.4.1.dev1",
|
|
175
175
|
):
|
|
176
176
|
"""mdmd:hidden
|
|
177
177
|
The Modal client object is not intended to be instantiated directly by users.
|
|
@@ -348,7 +348,7 @@ class Function(
|
|
|
348
348
|
|
|
349
349
|
_call_generator: ___call_generator_spec
|
|
350
350
|
|
|
351
|
-
class __remote_spec(typing_extensions.Protocol[
|
|
351
|
+
class __remote_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER]):
|
|
352
352
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER:
|
|
353
353
|
"""Calls the function remotely, executing it with the given arguments and returning the execution's result."""
|
|
354
354
|
...
|
|
@@ -357,7 +357,7 @@ class Function(
|
|
|
357
357
|
"""Calls the function remotely, executing it with the given arguments and returning the execution's result."""
|
|
358
358
|
...
|
|
359
359
|
|
|
360
|
-
remote: __remote_spec[modal._functions.
|
|
360
|
+
remote: __remote_spec[modal._functions.P, modal._functions.ReturnType]
|
|
361
361
|
|
|
362
362
|
class __remote_gen_spec(typing_extensions.Protocol):
|
|
363
363
|
def __call__(self, /, *args, **kwargs) -> typing.Generator[typing.Any, None, None]:
|
|
@@ -384,7 +384,7 @@ class Function(
|
|
|
384
384
|
"""
|
|
385
385
|
...
|
|
386
386
|
|
|
387
|
-
class ___experimental_spawn_spec(typing_extensions.Protocol[
|
|
387
|
+
class ___experimental_spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER]):
|
|
388
388
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
|
|
389
389
|
"""[Experimental] Calls the function with the given arguments, without waiting for the results.
|
|
390
390
|
|
|
@@ -407,7 +407,7 @@ class Function(
|
|
|
407
407
|
"""
|
|
408
408
|
...
|
|
409
409
|
|
|
410
|
-
_experimental_spawn: ___experimental_spawn_spec[modal._functions.
|
|
410
|
+
_experimental_spawn: ___experimental_spawn_spec[modal._functions.P, modal._functions.ReturnType]
|
|
411
411
|
|
|
412
412
|
class ___spawn_map_inner_spec(typing_extensions.Protocol[P_INNER]):
|
|
413
413
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> None: ...
|
|
@@ -415,7 +415,7 @@ class Function(
|
|
|
415
415
|
|
|
416
416
|
_spawn_map_inner: ___spawn_map_inner_spec[modal._functions.P]
|
|
417
417
|
|
|
418
|
-
class __spawn_spec(typing_extensions.Protocol[
|
|
418
|
+
class __spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER]):
|
|
419
419
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
|
|
420
420
|
"""Calls the function with the given arguments, without waiting for the results.
|
|
421
421
|
|
|
@@ -436,7 +436,7 @@ class Function(
|
|
|
436
436
|
"""
|
|
437
437
|
...
|
|
438
438
|
|
|
439
|
-
spawn: __spawn_spec[modal._functions.
|
|
439
|
+
spawn: __spawn_spec[modal._functions.P, modal._functions.ReturnType]
|
|
440
440
|
|
|
441
441
|
def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]:
|
|
442
442
|
"""Return the inner Python object wrapped by this Modal Function."""
|
|
@@ -699,16 +699,18 @@ Mount = synchronize_api(_Mount)
|
|
|
699
699
|
|
|
700
700
|
def _create_client_mount():
|
|
701
701
|
# TODO(erikbern): make this a static method on the Mount class
|
|
702
|
-
import
|
|
702
|
+
import importlib
|
|
703
703
|
|
|
704
|
-
import
|
|
704
|
+
import synchronicity
|
|
705
705
|
|
|
706
|
-
# Get the base_path because it also contains `modal_proto`.
|
|
707
|
-
modal_parent_dir, _ = os.path.split(modal.__path__[0])
|
|
708
706
|
client_mount = _Mount._new()
|
|
709
707
|
|
|
710
708
|
for pkg_name in MODAL_PACKAGES:
|
|
711
|
-
|
|
709
|
+
# Look up each package's actual install path via importlib rather than
|
|
710
|
+
# assuming all packages are siblings of `modal`. In Bazel runfiles,
|
|
711
|
+
# modal and modal_proto live in different directories.
|
|
712
|
+
pkg_module = importlib.import_module(pkg_name)
|
|
713
|
+
package_base_path = Path(pkg_module.__path__[0])
|
|
712
714
|
client_mount = client_mount.add_local_dir(
|
|
713
715
|
package_base_path,
|
|
714
716
|
remote_path=f"/pkg/{pkg_name}",
|