3 from _typeshed import FileDescriptorLike
4 from abc import ABCMeta
5 from asyncio.events import AbstractEventLoop, AbstractServer, Handle, TimerHandle
6 from asyncio.futures import Future
7 from asyncio.protocols import BaseProtocol
8 from asyncio.tasks import Task
9 from asyncio.transports import BaseTransport
10 from collections.abc import Iterable
11 from socket import AddressFamily, SocketKind, _Address, _RetAddress, socket
12 from typing import IO, Any, Awaitable, Callable, Dict, Generator, Sequence, Tuple, TypeVar, Union, overload
13 from typing_extensions import Literal
15 if sys.version_info >= (3, 7):
16 from contextvars import Context
19 _Context = Dict[str, Any]
20 _ExceptionHandler = Callable[[AbstractEventLoop, _Context], Any]
21 _ProtocolFactory = Callable[[], BaseProtocol]
22 _SSLContext = Union[bool, None, ssl.SSLContext]
23 _TransProtPair = Tuple[BaseTransport, BaseProtocol]
25 class Server(AbstractServer):
26 if sys.version_info >= (3, 7):
29 loop: AbstractEventLoop,
30 sockets: Iterable[socket],
31 protocol_factory: _ProtocolFactory,
32 ssl_context: _SSLContext,
34 ssl_handshake_timeout: float | None,
37 def __init__(self, loop: AbstractEventLoop, sockets: list[socket]) -> None: ...
38 if sys.version_info >= (3, 8):
40 def sockets(self) -> Tuple[socket, ...]: ...
41 elif sys.version_info >= (3, 7):
43 def sockets(self) -> list[socket]: ...
45 sockets: list[socket] | None
47 class BaseEventLoop(AbstractEventLoop, metaclass=ABCMeta):
48 def run_forever(self) -> None: ...
49 # Can't use a union, see mypy issue # 1873.
51 def run_until_complete(self, future: Generator[Any, None, _T]) -> _T: ...
53 def run_until_complete(self, future: Awaitable[_T]) -> _T: ...
54 def stop(self) -> None: ...
55 def is_running(self) -> bool: ...
56 def is_closed(self) -> bool: ...
57 def close(self) -> None: ...
58 async def shutdown_asyncgens(self) -> None: ...
59 # Methods scheduling callbacks. All these return Handles.
60 if sys.version_info >= (3, 7):
61 def call_soon(self, callback: Callable[..., Any], *args: Any, context: Context | None = ...) -> Handle: ...
63 self, delay: float, callback: Callable[..., Any], *args: Any, context: Context | None = ...
66 self, when: float, callback: Callable[..., Any], *args: Any, context: Context | None = ...
69 def call_soon(self, callback: Callable[..., Any], *args: Any) -> Handle: ...
70 def call_later(self, delay: float, callback: Callable[..., Any], *args: Any) -> TimerHandle: ...
71 def call_at(self, when: float, callback: Callable[..., Any], *args: Any) -> TimerHandle: ...
72 def time(self) -> float: ...
74 def create_future(self) -> Future[Any]: ...
76 if sys.version_info >= (3, 8):
77 def create_task(self, coro: Awaitable[_T] | Generator[Any, None, _T], *, name: object = ...) -> Task[_T]: ...
79 def create_task(self, coro: Awaitable[_T] | Generator[Any, None, _T]) -> Task[_T]: ...
80 def set_task_factory(self, factory: Callable[[AbstractEventLoop, Generator[Any, None, _T]], Future[_T]] | None) -> None: ...
81 def get_task_factory(self) -> Callable[[AbstractEventLoop, Generator[Any, None, _T]], Future[_T]] | None: ...
82 # Methods for interacting with threads
83 if sys.version_info >= (3, 7):
84 def call_soon_threadsafe(self, callback: Callable[..., Any], *args: Any, context: Context | None = ...) -> Handle: ...
86 def call_soon_threadsafe(self, callback: Callable[..., Any], *args: Any) -> Handle: ...
87 def run_in_executor(self, executor: Any, func: Callable[..., _T], *args: Any) -> Future[_T]: ...
88 def set_default_executor(self, executor: Any) -> None: ...
89 # Network I/O methods returning Futures.
90 async def getaddrinfo(
91 self, host: str | None, port: str | int | None, *, family: int = ..., type: int = ..., proto: int = ..., flags: int = ...
92 ) -> list[tuple[AddressFamily, SocketKind, int, str, tuple[str, int] | tuple[str, int, int, int]]]: ...
93 async def getnameinfo(self, sockaddr: tuple[str, int] | tuple[str, int, int, int], flags: int = ...) -> tuple[str, str]: ...
94 if sys.version_info >= (3, 8):
96 async def create_connection(
98 protocol_factory: _ProtocolFactory,
102 ssl: _SSLContext = ...,
107 local_addr: tuple[str, int] | None = ...,
108 server_hostname: str | None = ...,
109 ssl_handshake_timeout: float | None = ...,
110 happy_eyeballs_delay: float | None = ...,
111 interleave: int | None = ...,
112 ) -> _TransProtPair: ...
114 async def create_connection(
116 protocol_factory: _ProtocolFactory,
120 ssl: _SSLContext = ...,
125 local_addr: None = ...,
126 server_hostname: str | None = ...,
127 ssl_handshake_timeout: float | None = ...,
128 happy_eyeballs_delay: float | None = ...,
129 interleave: int | None = ...,
130 ) -> _TransProtPair: ...
131 elif sys.version_info >= (3, 7):
133 async def create_connection(
135 protocol_factory: _ProtocolFactory,
139 ssl: _SSLContext = ...,
144 local_addr: tuple[str, int] | None = ...,
145 server_hostname: str | None = ...,
146 ssl_handshake_timeout: float | None = ...,
147 ) -> _TransProtPair: ...
149 async def create_connection(
151 protocol_factory: _ProtocolFactory,
155 ssl: _SSLContext = ...,
160 local_addr: None = ...,
161 server_hostname: str | None = ...,
162 ssl_handshake_timeout: float | None = ...,
163 ) -> _TransProtPair: ...
166 async def create_connection(
168 protocol_factory: _ProtocolFactory,
172 ssl: _SSLContext = ...,
177 local_addr: tuple[str, int] | None = ...,
178 server_hostname: str | None = ...,
179 ) -> _TransProtPair: ...
181 async def create_connection(
183 protocol_factory: _ProtocolFactory,
187 ssl: _SSLContext = ...,
192 local_addr: None = ...,
193 server_hostname: str | None = ...,
194 ) -> _TransProtPair: ...
195 if sys.version_info >= (3, 7):
196 async def sock_sendfile(
197 self, sock: socket, file: IO[bytes], offset: int = ..., count: int | None = ..., *, fallback: bool | None = ...
200 async def create_server(
202 protocol_factory: _ProtocolFactory,
203 host: str | Sequence[str] | None = ...,
210 ssl: _SSLContext = ...,
211 reuse_address: bool | None = ...,
212 reuse_port: bool | None = ...,
213 ssl_handshake_timeout: float | None = ...,
214 start_serving: bool = ...,
217 async def create_server(
219 protocol_factory: _ProtocolFactory,
227 ssl: _SSLContext = ...,
228 reuse_address: bool | None = ...,
229 reuse_port: bool | None = ...,
230 ssl_handshake_timeout: float | None = ...,
231 start_serving: bool = ...,
233 async def connect_accepted_socket(
235 protocol_factory: _ProtocolFactory,
238 ssl: _SSLContext = ...,
239 ssl_handshake_timeout: float | None = ...,
240 ) -> _TransProtPair: ...
242 self, transport: BaseTransport, file: IO[bytes], offset: int = ..., count: int | None = ..., *, fallback: bool = ...
246 transport: BaseTransport,
247 protocol: BaseProtocol,
248 sslcontext: ssl.SSLContext,
250 server_side: bool = ...,
251 server_hostname: str | None = ...,
252 ssl_handshake_timeout: float | None = ...,
253 ) -> BaseTransport: ...
256 async def create_server(
258 protocol_factory: _ProtocolFactory,
259 host: str | Sequence[str] | None = ...,
266 ssl: _SSLContext = ...,
267 reuse_address: bool | None = ...,
268 reuse_port: bool | None = ...,
271 async def create_server(
273 protocol_factory: _ProtocolFactory,
281 ssl: _SSLContext = ...,
282 reuse_address: bool | None = ...,
283 reuse_port: bool | None = ...,
285 async def connect_accepted_socket(
286 self, protocol_factory: _ProtocolFactory, sock: socket, *, ssl: _SSLContext = ...
287 ) -> _TransProtPair: ...
288 async def create_datagram_endpoint(
290 protocol_factory: _ProtocolFactory,
291 local_addr: tuple[str, int] | None = ...,
292 remote_addr: tuple[str, int] | None = ...,
297 reuse_address: bool | None = ...,
298 reuse_port: bool | None = ...,
299 allow_broadcast: bool | None = ...,
300 sock: socket | None = ...,
301 ) -> _TransProtPair: ...
302 # Pipes and subprocesses.
303 async def connect_read_pipe(self, protocol_factory: _ProtocolFactory, pipe: Any) -> _TransProtPair: ...
304 async def connect_write_pipe(self, protocol_factory: _ProtocolFactory, pipe: Any) -> _TransProtPair: ...
305 async def subprocess_shell(
307 protocol_factory: _ProtocolFactory,
310 stdin: int | IO[Any] | None = ...,
311 stdout: int | IO[Any] | None = ...,
312 stderr: int | IO[Any] | None = ...,
313 universal_newlines: Literal[False] = ...,
314 shell: Literal[True] = ...,
315 bufsize: Literal[0] = ...,
316 encoding: None = ...,
318 text: Literal[False, None] = ...,
320 ) -> _TransProtPair: ...
321 async def subprocess_exec(
323 protocol_factory: _ProtocolFactory,
326 stdin: int | IO[Any] | None = ...,
327 stdout: int | IO[Any] | None = ...,
328 stderr: int | IO[Any] | None = ...,
329 universal_newlines: Literal[False] = ...,
330 shell: Literal[True] = ...,
331 bufsize: Literal[0] = ...,
332 encoding: None = ...,
335 ) -> _TransProtPair: ...
336 def add_reader(self, fd: FileDescriptorLike, callback: Callable[..., Any], *args: Any) -> None: ...
337 def remove_reader(self, fd: FileDescriptorLike) -> None: ...
338 def add_writer(self, fd: FileDescriptorLike, callback: Callable[..., Any], *args: Any) -> None: ...
339 def remove_writer(self, fd: FileDescriptorLike) -> None: ...
340 # Completion based I/O methods returning Futures prior to 3.7
341 if sys.version_info >= (3, 7):
342 async def sock_recv(self, sock: socket, nbytes: int) -> bytes: ...
343 async def sock_recv_into(self, sock: socket, buf: bytearray) -> int: ...
344 async def sock_sendall(self, sock: socket, data: bytes) -> None: ...
345 async def sock_connect(self, sock: socket, address: _Address) -> None: ...
346 async def sock_accept(self, sock: socket) -> tuple[socket, _RetAddress]: ...
348 def sock_recv(self, sock: socket, nbytes: int) -> Future[bytes]: ...
349 def sock_sendall(self, sock: socket, data: bytes) -> Future[None]: ...
350 def sock_connect(self, sock: socket, address: _Address) -> Future[None]: ...
351 def sock_accept(self, sock: socket) -> Future[tuple[socket, _RetAddress]]: ...
353 def add_signal_handler(self, sig: int, callback: Callable[..., Any], *args: Any) -> None: ...
354 def remove_signal_handler(self, sig: int) -> bool: ...
356 def set_exception_handler(self, handler: _ExceptionHandler | None) -> None: ...
357 def get_exception_handler(self) -> _ExceptionHandler | None: ...
358 def default_exception_handler(self, context: _Context) -> None: ...
359 def call_exception_handler(self, context: _Context) -> None: ...
360 # Debug flag management.
361 def get_debug(self) -> bool: ...
362 def set_debug(self, enabled: bool) -> None: ...
363 if sys.version_info >= (3, 9):
364 async def shutdown_default_executor(self) -> None: ...