--- /dev/null
+from _typeshed import SupportsRead
+from _typeshed.wsgi import InputStream, WSGIEnvironment
+from typing import Any, Iterable, Text
+
+from .middleware.dispatcher import DispatcherMiddleware as DispatcherMiddleware
+from .middleware.http_proxy import ProxyMiddleware as ProxyMiddleware
+from .middleware.shared_data import SharedDataMiddleware as SharedDataMiddleware
+
+def responder(f): ...
+def get_current_url(
+ environ, root_only: bool = ..., strip_querystring: bool = ..., host_only: bool = ..., trusted_hosts: Any | None = ...
+): ...
+def host_is_trusted(hostname, trusted_list): ...
+def get_host(environ, trusted_hosts: Any | None = ...): ...
+def get_content_length(environ: WSGIEnvironment) -> int | None: ...
+def get_input_stream(environ: WSGIEnvironment, safe_fallback: bool = ...) -> InputStream: ...
+def get_query_string(environ): ...
+def get_path_info(environ, charset: Text = ..., errors: Text = ...): ...
+def get_script_name(environ, charset: Text = ..., errors: Text = ...): ...
+def pop_path_info(environ, charset: Text = ..., errors: Text = ...): ...
+def peek_path_info(environ, charset: Text = ..., errors: Text = ...): ...
+def extract_path_info(
+ environ_or_baseurl, path_or_url, charset: Text = ..., errors: Text = ..., collapse_http_schemes: bool = ...
+): ...
+
+class ClosingIterator:
+ def __init__(self, iterable, callbacks: Any | None = ...): ...
+ def __iter__(self): ...
+ def __next__(self): ...
+ def close(self): ...
+
+def wrap_file(environ: WSGIEnvironment, file: SupportsRead[bytes], buffer_size: int = ...) -> Iterable[bytes]: ...
+
+class FileWrapper:
+ file: SupportsRead[bytes]
+ buffer_size: int
+ def __init__(self, file: SupportsRead[bytes], buffer_size: int = ...) -> None: ...
+ def close(self) -> None: ...
+ def seekable(self) -> bool: ...
+ def seek(self, offset: int, whence: int = ...) -> None: ...
+ def tell(self) -> int | None: ...
+ def __iter__(self) -> FileWrapper: ...
+ def __next__(self) -> bytes: ...
+
+class _RangeWrapper:
+ iterable: Any
+ byte_range: Any
+ start_byte: Any
+ end_byte: Any
+ read_length: Any
+ seekable: Any
+ end_reached: Any
+ def __init__(self, iterable, start_byte: int = ..., byte_range: Any | None = ...): ...
+ def __iter__(self): ...
+ def __next__(self): ...
+ def close(self): ...
+
+def make_line_iter(stream, limit: Any | None = ..., buffer_size=..., cap_at_buffer: bool = ...): ...
+def make_chunk_iter(stream, separator, limit: Any | None = ..., buffer_size=..., cap_at_buffer: bool = ...): ...
+
+class LimitedStream:
+ limit: Any
+ def __init__(self, stream, limit): ...
+ def __iter__(self): ...
+ @property
+ def is_exhausted(self): ...
+ def on_exhausted(self): ...
+ def on_disconnect(self): ...
+ def exhaust(self, chunk_size=...): ...
+ def read(self, size: Any | None = ...): ...
+ def readline(self, size: Any | None = ...): ...
+ def readlines(self, size: Any | None = ...): ...
+ def tell(self): ...
+ def __next__(self): ...