3 from _typeshed import FileDescriptorLike, Self
4 from abc import ABCMeta, abstractmethod
5 from socket import AddressFamily, SocketKind, _Address, _RetAddress, socket
6 from typing import IO, Any, Awaitable, Callable, Dict, Generator, Sequence, Tuple, TypeVar, Union, overload
7 from typing_extensions import Literal
9 from .base_events import Server
10 from .futures import Future
11 from .protocols import BaseProtocol
12 from .tasks import Task
13 from .transports import BaseTransport
14 from .unix_events import AbstractChildWatcher
16 if sys.version_info >= (3, 7):
17 from contextvars import Context
20 _Context = Dict[str, Any]
21 _ExceptionHandler = Callable[[AbstractEventLoop, _Context], Any]
22 _ProtocolFactory = Callable[[], BaseProtocol]
23 _SSLContext = Union[bool, None, ssl.SSLContext]
24 _TransProtPair = Tuple[BaseTransport, BaseProtocol]
29 if sys.version_info >= (3, 7):
31 self, callback: Callable[..., Any], args: Sequence[Any], loop: AbstractEventLoop, context: Context | None = ...
34 def __init__(self, callback: Callable[..., Any], args: Sequence[Any], loop: AbstractEventLoop) -> None: ...
35 def __repr__(self) -> str: ...
36 def cancel(self) -> None: ...
37 def _run(self) -> None: ...
38 if sys.version_info >= (3, 7):
39 def cancelled(self) -> bool: ...
41 class TimerHandle(Handle):
42 if sys.version_info >= (3, 7):
46 callback: Callable[..., Any],
48 loop: AbstractEventLoop,
49 context: Context | None = ...,
52 def __init__(self, when: float, callback: Callable[..., Any], args: Sequence[Any], loop: AbstractEventLoop) -> None: ...
53 def __hash__(self) -> int: ...
54 if sys.version_info >= (3, 7):
55 def when(self) -> float: ...
58 def close(self) -> None: ...
59 if sys.version_info >= (3, 7):
60 async def __aenter__(self: Self) -> Self: ...
61 async def __aexit__(self, *exc: Any) -> None: ...
62 def get_loop(self) -> AbstractEventLoop: ...
63 def is_serving(self) -> bool: ...
64 async def start_serving(self) -> None: ...
65 async def serve_forever(self) -> None: ...
66 async def wait_closed(self) -> None: ...
68 class AbstractEventLoop(metaclass=ABCMeta):
69 slow_callback_duration: float
71 def run_forever(self) -> None: ...
72 # Can't use a union, see mypy issue # 1873.
75 def run_until_complete(self, future: Generator[Any, None, _T]) -> _T: ...
78 def run_until_complete(self, future: Awaitable[_T]) -> _T: ...
80 def stop(self) -> None: ...
82 def is_running(self) -> bool: ...
84 def is_closed(self) -> bool: ...
86 def close(self) -> None: ...
88 async def shutdown_asyncgens(self) -> None: ...
89 # Methods scheduling callbacks. All these return Handles.
91 def call_soon(self, callback: Callable[..., Any], *args: Any) -> Handle: ...
93 def call_later(self, delay: float, callback: Callable[..., Any], *args: Any) -> TimerHandle: ...
95 def call_at(self, when: float, callback: Callable[..., Any], *args: Any) -> TimerHandle: ...
97 def time(self) -> float: ...
100 def create_future(self) -> Future[Any]: ...
102 if sys.version_info >= (3, 8):
104 def create_task(self, coro: Awaitable[_T] | Generator[Any, None, _T], *, name: str | None = ...) -> Task[_T]: ...
107 def create_task(self, coro: Awaitable[_T] | Generator[Any, None, _T]) -> Task[_T]: ...
109 def set_task_factory(self, factory: Callable[[AbstractEventLoop, Generator[Any, None, _T]], Future[_T]] | None) -> None: ...
111 def get_task_factory(self) -> Callable[[AbstractEventLoop, Generator[Any, None, _T]], Future[_T]] | None: ...
112 # Methods for interacting with threads
114 def call_soon_threadsafe(self, callback: Callable[..., Any], *args: Any) -> Handle: ...
116 def run_in_executor(self, executor: Any, func: Callable[..., _T], *args: Any) -> Future[_T]: ...
118 def set_default_executor(self, executor: Any) -> None: ...
119 # Network I/O methods returning Futures.
121 async def getaddrinfo(
122 self, host: str | None, port: str | int | None, *, family: int = ..., type: int = ..., proto: int = ..., flags: int = ...
123 ) -> list[tuple[AddressFamily, SocketKind, int, str, tuple[str, int] | tuple[str, int, int, int]]]: ...
125 async def getnameinfo(self, sockaddr: tuple[str, int] | tuple[str, int, int, int], flags: int = ...) -> tuple[str, str]: ...
126 if sys.version_info >= (3, 8):
129 async def create_connection(
131 protocol_factory: _ProtocolFactory,
135 ssl: _SSLContext = ...,
140 local_addr: tuple[str, int] | None = ...,
141 server_hostname: str | None = ...,
142 ssl_handshake_timeout: float | None = ...,
143 happy_eyeballs_delay: float | None = ...,
144 interleave: int | None = ...,
145 ) -> _TransProtPair: ...
148 async def create_connection(
150 protocol_factory: _ProtocolFactory,
154 ssl: _SSLContext = ...,
159 local_addr: None = ...,
160 server_hostname: str | None = ...,
161 ssl_handshake_timeout: float | None = ...,
162 happy_eyeballs_delay: float | None = ...,
163 interleave: int | None = ...,
164 ) -> _TransProtPair: ...
165 elif sys.version_info >= (3, 7):
168 async def create_connection(
170 protocol_factory: _ProtocolFactory,
174 ssl: _SSLContext = ...,
179 local_addr: tuple[str, int] | None = ...,
180 server_hostname: str | None = ...,
181 ssl_handshake_timeout: float | None = ...,
182 ) -> _TransProtPair: ...
185 async def create_connection(
187 protocol_factory: _ProtocolFactory,
191 ssl: _SSLContext = ...,
196 local_addr: None = ...,
197 server_hostname: str | None = ...,
198 ssl_handshake_timeout: float | None = ...,
199 ) -> _TransProtPair: ...
203 async def create_connection(
205 protocol_factory: _ProtocolFactory,
209 ssl: _SSLContext = ...,
214 local_addr: tuple[str, int] | None = ...,
215 server_hostname: str | None = ...,
216 ) -> _TransProtPair: ...
219 async def create_connection(
221 protocol_factory: _ProtocolFactory,
225 ssl: _SSLContext = ...,
230 local_addr: None = ...,
231 server_hostname: str | None = ...,
232 ) -> _TransProtPair: ...
233 if sys.version_info >= (3, 7):
235 async def sock_sendfile(
236 self, sock: socket, file: IO[bytes], offset: int = ..., count: int | None = ..., *, fallback: bool | None = ...
240 async def create_server(
242 protocol_factory: _ProtocolFactory,
243 host: str | Sequence[str] | None = ...,
250 ssl: _SSLContext = ...,
251 reuse_address: bool | None = ...,
252 reuse_port: bool | None = ...,
253 ssl_handshake_timeout: float | None = ...,
254 start_serving: bool = ...,
258 async def create_server(
260 protocol_factory: _ProtocolFactory,
268 ssl: _SSLContext = ...,
269 reuse_address: bool | None = ...,
270 reuse_port: bool | None = ...,
271 ssl_handshake_timeout: float | None = ...,
272 start_serving: bool = ...,
274 async def create_unix_connection(
276 protocol_factory: _ProtocolFactory,
277 path: str | None = ...,
279 ssl: _SSLContext = ...,
280 sock: socket | None = ...,
281 server_hostname: str | None = ...,
282 ssl_handshake_timeout: float | None = ...,
283 ) -> _TransProtPair: ...
284 async def create_unix_server(
286 protocol_factory: _ProtocolFactory,
287 path: str | None = ...,
289 sock: socket | None = ...,
291 ssl: _SSLContext = ...,
292 ssl_handshake_timeout: float | None = ...,
293 start_serving: bool = ...,
297 self, transport: BaseTransport, file: IO[bytes], offset: int = ..., count: int | None = ..., *, fallback: bool = ...
302 transport: BaseTransport,
303 protocol: BaseProtocol,
304 sslcontext: ssl.SSLContext,
306 server_side: bool = ...,
307 server_hostname: str | None = ...,
308 ssl_handshake_timeout: float | None = ...,
309 ) -> BaseTransport: ...
313 async def create_server(
315 protocol_factory: _ProtocolFactory,
316 host: str | Sequence[str] | None = ...,
323 ssl: _SSLContext = ...,
324 reuse_address: bool | None = ...,
325 reuse_port: bool | None = ...,
329 async def create_server(
331 protocol_factory: _ProtocolFactory,
339 ssl: _SSLContext = ...,
340 reuse_address: bool | None = ...,
341 reuse_port: bool | None = ...,
343 async def create_unix_connection(
345 protocol_factory: _ProtocolFactory,
348 ssl: _SSLContext = ...,
349 sock: socket | None = ...,
350 server_hostname: str | None = ...,
351 ) -> _TransProtPair: ...
352 async def create_unix_server(
354 protocol_factory: _ProtocolFactory,
357 sock: socket | None = ...,
359 ssl: _SSLContext = ...,
362 async def create_datagram_endpoint(
364 protocol_factory: _ProtocolFactory,
365 local_addr: tuple[str, int] | None = ...,
366 remote_addr: tuple[str, int] | None = ...,
371 reuse_address: bool | None = ...,
372 reuse_port: bool | None = ...,
373 allow_broadcast: bool | None = ...,
374 sock: socket | None = ...,
375 ) -> _TransProtPair: ...
376 # Pipes and subprocesses.
378 async def connect_read_pipe(self, protocol_factory: _ProtocolFactory, pipe: Any) -> _TransProtPair: ...
380 async def connect_write_pipe(self, protocol_factory: _ProtocolFactory, pipe: Any) -> _TransProtPair: ...
382 async def subprocess_shell(
384 protocol_factory: _ProtocolFactory,
387 stdin: int | IO[Any] | None = ...,
388 stdout: int | IO[Any] | None = ...,
389 stderr: int | IO[Any] | None = ...,
390 universal_newlines: Literal[False] = ...,
391 shell: Literal[True] = ...,
392 bufsize: Literal[0] = ...,
393 encoding: None = ...,
395 text: Literal[False, None] = ...,
397 ) -> _TransProtPair: ...
399 async def subprocess_exec(
401 protocol_factory: _ProtocolFactory,
404 stdin: int | IO[Any] | None = ...,
405 stdout: int | IO[Any] | None = ...,
406 stderr: int | IO[Any] | None = ...,
407 universal_newlines: Literal[False] = ...,
408 shell: Literal[True] = ...,
409 bufsize: Literal[0] = ...,
410 encoding: None = ...,
413 ) -> _TransProtPair: ...
415 def add_reader(self, fd: FileDescriptorLike, callback: Callable[..., Any], *args: Any) -> None: ...
417 def remove_reader(self, fd: FileDescriptorLike) -> None: ...
419 def add_writer(self, fd: FileDescriptorLike, callback: Callable[..., Any], *args: Any) -> None: ...
421 def remove_writer(self, fd: FileDescriptorLike) -> None: ...
422 # Completion based I/O methods returning Futures prior to 3.7
423 if sys.version_info >= (3, 7):
425 async def sock_recv(self, sock: socket, nbytes: int) -> bytes: ...
427 async def sock_recv_into(self, sock: socket, buf: bytearray) -> int: ...
429 async def sock_sendall(self, sock: socket, data: bytes) -> None: ...
431 async def sock_connect(self, sock: socket, address: _Address) -> None: ...
433 async def sock_accept(self, sock: socket) -> tuple[socket, _RetAddress]: ...
436 def sock_recv(self, sock: socket, nbytes: int) -> Future[bytes]: ...
438 def sock_sendall(self, sock: socket, data: bytes) -> Future[None]: ...
440 def sock_connect(self, sock: socket, address: _Address) -> Future[None]: ...
442 def sock_accept(self, sock: socket) -> Future[tuple[socket, _RetAddress]]: ...
445 def add_signal_handler(self, sig: int, callback: Callable[..., Any], *args: Any) -> None: ...
447 def remove_signal_handler(self, sig: int) -> bool: ...
450 def set_exception_handler(self, handler: _ExceptionHandler | None) -> None: ...
452 def get_exception_handler(self) -> _ExceptionHandler | None: ...
454 def default_exception_handler(self, context: _Context) -> None: ...
456 def call_exception_handler(self, context: _Context) -> None: ...
457 # Debug flag management.
459 def get_debug(self) -> bool: ...
461 def set_debug(self, enabled: bool) -> None: ...
462 if sys.version_info >= (3, 9):
464 async def shutdown_default_executor(self) -> None: ...
466 class AbstractEventLoopPolicy(metaclass=ABCMeta):
468 def get_event_loop(self) -> AbstractEventLoop: ...
470 def set_event_loop(self, loop: AbstractEventLoop | None) -> None: ...
472 def new_event_loop(self) -> AbstractEventLoop: ...
473 # Child processes handling (Unix only).
475 def get_child_watcher(self) -> AbstractChildWatcher: ...
477 def set_child_watcher(self, watcher: AbstractChildWatcher) -> None: ...
479 class BaseDefaultEventLoopPolicy(AbstractEventLoopPolicy, metaclass=ABCMeta):
480 def __init__(self) -> None: ...
481 def get_event_loop(self) -> AbstractEventLoop: ...
482 def set_event_loop(self, loop: AbstractEventLoop | None) -> None: ...
483 def new_event_loop(self) -> AbstractEventLoop: ...
485 def get_event_loop_policy() -> AbstractEventLoopPolicy: ...
486 def set_event_loop_policy(policy: AbstractEventLoopPolicy | None) -> None: ...
487 def get_event_loop() -> AbstractEventLoop: ...
488 def set_event_loop(loop: AbstractEventLoop | None) -> None: ...
489 def new_event_loop() -> AbstractEventLoop: ...
490 def get_child_watcher() -> AbstractChildWatcher: ...
491 def set_child_watcher(watcher: AbstractChildWatcher) -> None: ...
492 def _set_running_loop(__loop: AbstractEventLoop | None) -> None: ...
493 def _get_running_loop() -> AbstractEventLoop: ...
495 if sys.version_info >= (3, 7):
496 def get_running_loop() -> AbstractEventLoop: ...
497 if sys.version_info < (3, 8):
498 class SendfileNotAvailableError(RuntimeError): ...