--- /dev/null
+# Stubs for selector\r
+# See https://docs.python.org/3/library/selectors.html\r
+\r
+from typing import Any, List, NamedTuple, Mapping, Tuple, Optional, Union\r
+from abc import ABCMeta, abstractmethod\r
+import socket\r
+\r
+\r
+# Type aliases added mainly to preserve some context\r
+#\r
+# See https://github.com/python/typeshed/issues/482\r
+# for details regarding how _FileObject is typed.\r
+_FileObject = Union[int, socket.socket]\r
+_FileDescriptor = int\r
+_EventMask = int\r
+\r
+\r
+EVENT_READ = ... # type: _EventMask\r
+EVENT_WRITE = ... # type: _EventMask\r
+\r
+\r
+SelectorKey = NamedTuple('SelectorKey', [\r
+ ('fileobj', _FileObject),\r
+ ('fd', _FileDescriptor),\r
+ ('events', _EventMask),\r
+ ('data', Any)\r
+])\r
+\r
+\r
+class BaseSelector(metaclass=ABCMeta):\r
+ @abstractmethod\r
+ def register(self, fileobj: _FileObject, events: _EventMask, data: Any = ...) -> SelectorKey: ...\r
+\r
+ @abstractmethod\r
+ def unregister(self, fileobj: _FileObject) -> SelectorKey: ...\r
+\r
+ def modify(self, fileobj: _FileObject, events: _EventMask, data: Any = ...) -> SelectorKey: ...\r
+\r
+ @abstractmethod\r
+ def select(self, timeout: Optional[float] = ...) -> List[Tuple[SelectorKey, _EventMask]]: ...\r
+\r
+ def close(self) -> None: ...\r
+\r
+ def get_key(self, fileobj: _FileObject) -> SelectorKey: ...\r
+\r
+ @abstractmethod\r
+ def get_map(self) -> Mapping[_FileObject, SelectorKey]: ...\r
+\r
+ def __enter__(self) -> BaseSelector: ...\r
+\r
+ def __exit__(self, *args: Any) -> None: ...\r
+\r
+class SelectSelector(BaseSelector):\r
+ def register(self, fileobj: _FileObject, events: _EventMask, data: Any = ...) -> SelectorKey: ...\r
+ def unregister(self, fileobj: _FileObject) -> SelectorKey: ...\r
+ def select(self, timeout: Optional[float] = ...) -> List[Tuple[SelectorKey, _EventMask]]: ...\r
+ def get_map(self) -> Mapping[_FileObject, SelectorKey]: ...\r
+\r
+class PollSelector(BaseSelector):\r
+ def register(self, fileobj: _FileObject, events: _EventMask, data: Any = ...) -> SelectorKey: ...\r
+ def unregister(self, fileobj: _FileObject) -> SelectorKey: ...\r
+ def select(self, timeout: Optional[float] = ...) -> List[Tuple[SelectorKey, _EventMask]]: ...\r
+ def get_map(self) -> Mapping[_FileObject, SelectorKey]: ...\r
+\r
+class EpollSelector(BaseSelector):\r
+ def fileno(self) -> int: ...\r
+ def register(self, fileobj: _FileObject, events: _EventMask, data: Any = ...) -> SelectorKey: ...\r
+ def unregister(self, fileobj: _FileObject) -> SelectorKey: ...\r
+ def select(self, timeout: Optional[float] = ...) -> List[Tuple[SelectorKey, _EventMask]]: ...\r
+ def get_map(self) -> Mapping[_FileObject, SelectorKey]: ...\r
+\r
+class DevpollSelector(BaseSelector):\r
+ def fileno(self) -> int: ...\r
+ def register(self, fileobj: _FileObject, events: _EventMask, data: Any = ...) -> SelectorKey: ...\r
+ def unregister(self, fileobj: _FileObject) -> SelectorKey: ...\r
+ def select(self, timeout: Optional[float] = ...) -> List[Tuple[SelectorKey, _EventMask]]: ...\r
+ def get_map(self) -> Mapping[_FileObject, SelectorKey]: ...\r
+\r
+class KqueueSelector(BaseSelector):\r
+ def fileno(self) -> int: ...\r
+ def register(self, fileobj: _FileObject, events: _EventMask, data: Any = ...) -> SelectorKey: ...\r
+ def unregister(self, fileobj: _FileObject) -> SelectorKey: ...\r
+ def select(self, timeout: Optional[float] = ...) -> List[Tuple[SelectorKey, _EventMask]]: ...\r
+ def get_map(self) -> Mapping[_FileObject, SelectorKey]: ...\r
+\r
+class DefaultSelector(BaseSelector):\r
+ def register(self, fileobj: _FileObject, events: _EventMask, data: Any = ...) -> SelectorKey: ...\r
+ def unregister(self, fileobj: _FileObject) -> SelectorKey: ...\r
+ def select(self, timeout: Optional[float] = ...) -> List[Tuple[SelectorKey, _EventMask]]: ...\r
+ def get_map(self) -> Mapping[_FileObject, SelectorKey]: ...\r