from collections.abc import Generator, Mapping from typing import Any, Protocol import httpx from dify_graph.file import File class HttpClientProtocol(Protocol): @property def max_retries_exceeded_error(self) -> type[Exception]: ... @property def request_error(self) -> type[Exception]: ... def get(self, url: str, max_retries: int = ..., **kwargs: Any) -> httpx.Response: ... def head(self, url: str, max_retries: int = ..., **kwargs: Any) -> httpx.Response: ... def post(self, url: str, max_retries: int = ..., **kwargs: Any) -> httpx.Response: ... def put(self, url: str, max_retries: int = ..., **kwargs: Any) -> httpx.Response: ... def delete(self, url: str, max_retries: int = ..., **kwargs: Any) -> httpx.Response: ... def patch(self, url: str, max_retries: int = ..., **kwargs: Any) -> httpx.Response: ... class FileManagerProtocol(Protocol): def download(self, f: File, /) -> bytes: ... class ToolFileManagerProtocol(Protocol): def create_file_by_raw( self, *, file_binary: bytes, mimetype: str, filename: str | None = None, ) -> Any: ... def get_file_generator_by_tool_file_id(self, tool_file_id: str) -> tuple[Generator | None, File | None]: ... class FileReferenceFactoryProtocol(Protocol): def build_from_mapping(self, *, mapping: Mapping[str, Any]) -> File: ...