mirror of
https://github.com/davidhalter/typeshed.git
synced 2025-12-06 20:24:30 +08:00
169 lines
6.6 KiB
Python
169 lines
6.6 KiB
Python
import sys
|
|
import types
|
|
from _socket import _Address, _RetAddress
|
|
from _typeshed import ReadableBuffer
|
|
from collections.abc import Callable
|
|
from socket import socket as _socket
|
|
from typing import Any, BinaryIO, ClassVar
|
|
from typing_extensions import Self, TypeAlias
|
|
|
|
__all__ = [
|
|
"BaseServer",
|
|
"TCPServer",
|
|
"UDPServer",
|
|
"ThreadingUDPServer",
|
|
"ThreadingTCPServer",
|
|
"BaseRequestHandler",
|
|
"StreamRequestHandler",
|
|
"DatagramRequestHandler",
|
|
"ThreadingMixIn",
|
|
]
|
|
if sys.platform != "win32":
|
|
__all__ += [
|
|
"ForkingMixIn",
|
|
"ForkingTCPServer",
|
|
"ForkingUDPServer",
|
|
"ThreadingUnixDatagramServer",
|
|
"ThreadingUnixStreamServer",
|
|
"UnixDatagramServer",
|
|
"UnixStreamServer",
|
|
]
|
|
if sys.version_info >= (3, 12):
|
|
__all__ += ["ForkingUnixStreamServer", "ForkingUnixDatagramServer"]
|
|
|
|
_RequestType: TypeAlias = _socket | tuple[bytes, _socket]
|
|
_AfUnixAddress: TypeAlias = str | ReadableBuffer # address acceptable for an AF_UNIX socket
|
|
_AfInetAddress: TypeAlias = tuple[str | bytes | bytearray, int] # address acceptable for an AF_INET socket
|
|
|
|
# This can possibly be generic at some point:
|
|
class BaseServer:
|
|
address_family: int
|
|
server_address: _Address
|
|
socket: _socket
|
|
allow_reuse_address: bool
|
|
request_queue_size: int
|
|
socket_type: int
|
|
timeout: float | None
|
|
RequestHandlerClass: Callable[[Any, _RetAddress, Self], BaseRequestHandler]
|
|
def __init__(
|
|
self, server_address: _Address, RequestHandlerClass: Callable[[Any, _RetAddress, Self], BaseRequestHandler]
|
|
) -> None: ...
|
|
def fileno(self) -> int: ...
|
|
def handle_request(self) -> None: ...
|
|
def serve_forever(self, poll_interval: float = 0.5) -> None: ...
|
|
def shutdown(self) -> None: ...
|
|
def server_close(self) -> None: ...
|
|
def finish_request(self, request: _RequestType, client_address: _RetAddress) -> None: ...
|
|
def get_request(self) -> tuple[Any, Any]: ...
|
|
def handle_error(self, request: _RequestType, client_address: _RetAddress) -> None: ...
|
|
def handle_timeout(self) -> None: ...
|
|
def process_request(self, request: _RequestType, client_address: _RetAddress) -> None: ...
|
|
def server_activate(self) -> None: ...
|
|
def server_bind(self) -> None: ...
|
|
def verify_request(self, request: _RequestType, client_address: _RetAddress) -> bool: ...
|
|
def __enter__(self) -> Self: ...
|
|
def __exit__(
|
|
self, exc_type: type[BaseException] | None, exc_val: BaseException | None, exc_tb: types.TracebackType | None
|
|
) -> None: ...
|
|
def service_actions(self) -> None: ...
|
|
def shutdown_request(self, request: _RequestType) -> None: ... # undocumented
|
|
def close_request(self, request: _RequestType) -> None: ... # undocumented
|
|
|
|
class TCPServer(BaseServer):
|
|
if sys.version_info >= (3, 11):
|
|
allow_reuse_port: bool
|
|
server_address: _AfInetAddress
|
|
def __init__(
|
|
self,
|
|
server_address: _AfInetAddress,
|
|
RequestHandlerClass: Callable[[Any, _RetAddress, Self], BaseRequestHandler],
|
|
bind_and_activate: bool = True,
|
|
) -> None: ...
|
|
def get_request(self) -> tuple[_socket, _RetAddress]: ...
|
|
|
|
class UDPServer(TCPServer):
|
|
max_packet_size: ClassVar[int]
|
|
def get_request(self) -> tuple[tuple[bytes, _socket], _RetAddress]: ... # type: ignore[override]
|
|
|
|
if sys.platform != "win32":
|
|
class UnixStreamServer(TCPServer):
|
|
server_address: _AfUnixAddress # type: ignore[assignment]
|
|
def __init__(
|
|
self,
|
|
server_address: _AfUnixAddress,
|
|
RequestHandlerClass: Callable[[Any, _RetAddress, Self], BaseRequestHandler],
|
|
bind_and_activate: bool = True,
|
|
) -> None: ...
|
|
|
|
class UnixDatagramServer(UDPServer):
|
|
server_address: _AfUnixAddress # type: ignore[assignment]
|
|
def __init__(
|
|
self,
|
|
server_address: _AfUnixAddress,
|
|
RequestHandlerClass: Callable[[Any, _RetAddress, Self], BaseRequestHandler],
|
|
bind_and_activate: bool = True,
|
|
) -> None: ...
|
|
|
|
if sys.platform != "win32":
|
|
class ForkingMixIn:
|
|
timeout: float | None # undocumented
|
|
active_children: set[int] | None # undocumented
|
|
max_children: int # undocumented
|
|
block_on_close: bool
|
|
def collect_children(self, *, blocking: bool = False) -> None: ... # undocumented
|
|
def handle_timeout(self) -> None: ... # undocumented
|
|
def service_actions(self) -> None: ... # undocumented
|
|
def process_request(self, request: _RequestType, client_address: _RetAddress) -> None: ...
|
|
def server_close(self) -> None: ...
|
|
|
|
class ThreadingMixIn:
|
|
daemon_threads: bool
|
|
block_on_close: bool
|
|
def process_request_thread(self, request: _RequestType, client_address: _RetAddress) -> None: ... # undocumented
|
|
def process_request(self, request: _RequestType, client_address: _RetAddress) -> None: ...
|
|
def server_close(self) -> None: ...
|
|
|
|
if sys.platform != "win32":
|
|
class ForkingTCPServer(ForkingMixIn, TCPServer): ...
|
|
class ForkingUDPServer(ForkingMixIn, UDPServer): ...
|
|
if sys.version_info >= (3, 12):
|
|
class ForkingUnixStreamServer(ForkingMixIn, UnixStreamServer): ...
|
|
class ForkingUnixDatagramServer(ForkingMixIn, UnixDatagramServer): ...
|
|
|
|
class ThreadingTCPServer(ThreadingMixIn, TCPServer): ...
|
|
class ThreadingUDPServer(ThreadingMixIn, UDPServer): ...
|
|
|
|
if sys.platform != "win32":
|
|
class ThreadingUnixStreamServer(ThreadingMixIn, UnixStreamServer): ...
|
|
class ThreadingUnixDatagramServer(ThreadingMixIn, UnixDatagramServer): ...
|
|
|
|
class BaseRequestHandler:
|
|
# `request` is technically of type _RequestType,
|
|
# but there are some concerns that having a union here would cause
|
|
# too much inconvenience to people using it (see
|
|
# https://github.com/python/typeshed/pull/384#issuecomment-234649696)
|
|
#
|
|
# Note also that _RetAddress is also just an alias for `Any`
|
|
request: Any
|
|
client_address: _RetAddress
|
|
server: BaseServer
|
|
def __init__(self, request: _RequestType, client_address: _RetAddress, server: BaseServer) -> None: ...
|
|
def setup(self) -> None: ...
|
|
def handle(self) -> None: ...
|
|
def finish(self) -> None: ...
|
|
|
|
class StreamRequestHandler(BaseRequestHandler):
|
|
rbufsize: ClassVar[int] # undocumented
|
|
wbufsize: ClassVar[int] # undocumented
|
|
timeout: ClassVar[float | None] # undocumented
|
|
disable_nagle_algorithm: ClassVar[bool] # undocumented
|
|
connection: Any # undocumented
|
|
rfile: BinaryIO
|
|
wfile: BinaryIO
|
|
|
|
class DatagramRequestHandler(BaseRequestHandler):
|
|
packet: _socket # undocumented
|
|
socket: _socket # undocumented
|
|
rfile: BinaryIO
|
|
wfile: BinaryIO
|