补充 named pipe 文件的类型注解
This commit is contained in:
@@ -3,7 +3,7 @@
|
|||||||
适用于 Windows 平台,使用 asyncio ProactorEventLoop 的 named pipe 支持。
|
适用于 Windows 平台,使用 asyncio ProactorEventLoop 的 named pipe 支持。
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from typing import Any, Optional, Protocol, cast
|
from typing import Any, Callable, Dict, List, Optional, Protocol, Tuple, cast
|
||||||
|
|
||||||
import asyncio
|
import asyncio
|
||||||
import os
|
import os
|
||||||
@@ -17,12 +17,24 @@ _PIPE_PREFIX = "\\\\.\\pipe\\"
|
|||||||
_DEFAULT_PIPE_PREFIX = "maibot-plugin"
|
_DEFAULT_PIPE_PREFIX = "maibot-plugin"
|
||||||
|
|
||||||
|
|
||||||
|
class _NamedPipeServerHandle(Protocol):
|
||||||
|
def close(self) -> None: ...
|
||||||
|
|
||||||
|
|
||||||
class _NamedPipeEventLoop(Protocol):
|
class _NamedPipeEventLoop(Protocol):
|
||||||
async def start_serving_pipe(self, protocol_factory: Any, address: str) -> list[Any]: ...
|
async def start_serving_pipe(
|
||||||
|
self,
|
||||||
|
protocol_factory: Callable[[], asyncio.BaseProtocol],
|
||||||
|
address: str,
|
||||||
|
) -> List[_NamedPipeServerHandle]: ...
|
||||||
|
|
||||||
async def create_pipe_connection(self, protocol_factory: Any, address: str) -> tuple[Any, Any]: ...
|
async def create_pipe_connection(
|
||||||
|
self,
|
||||||
|
protocol_factory: Callable[[], asyncio.BaseProtocol],
|
||||||
|
address: str,
|
||||||
|
) -> Tuple[asyncio.BaseTransport, asyncio.BaseProtocol]: ...
|
||||||
|
|
||||||
def call_exception_handler(self, context: dict[str, Any]) -> None: ...
|
def call_exception_handler(self, context: Dict[str, Any]) -> None: ...
|
||||||
|
|
||||||
def create_task(self, coro: Any) -> asyncio.Task[None]: ...
|
def create_task(self, coro: Any) -> asyncio.Task[None]: ...
|
||||||
|
|
||||||
@@ -50,10 +62,10 @@ class NamedPipeConnection(Connection):
|
|||||||
|
|
||||||
class _NamedPipeServerProtocol(asyncio.StreamReaderProtocol):
|
class _NamedPipeServerProtocol(asyncio.StreamReaderProtocol):
|
||||||
def __init__(self, handler: ConnectionHandler, loop: asyncio.AbstractEventLoop) -> None:
|
def __init__(self, handler: ConnectionHandler, loop: asyncio.AbstractEventLoop) -> None:
|
||||||
self._reader = asyncio.StreamReader()
|
self._reader: asyncio.StreamReader = asyncio.StreamReader()
|
||||||
super().__init__(self._reader)
|
super().__init__(self._reader)
|
||||||
self._handler = handler
|
self._handler: ConnectionHandler = handler
|
||||||
self._loop = loop
|
self._loop: asyncio.AbstractEventLoop = loop
|
||||||
self._handler_task: Optional[asyncio.Task[None]] = None
|
self._handler_task: Optional[asyncio.Task[None]] = None
|
||||||
|
|
||||||
def connection_made(self, transport: asyncio.BaseTransport) -> None:
|
def connection_made(self, transport: asyncio.BaseTransport) -> None:
|
||||||
@@ -86,8 +98,8 @@ class NamedPipeTransportServer(TransportServer):
|
|||||||
"""Windows Named Pipe 传输服务端。"""
|
"""Windows Named Pipe 传输服务端。"""
|
||||||
|
|
||||||
def __init__(self, pipe_name: Optional[str] = None) -> None:
|
def __init__(self, pipe_name: Optional[str] = None) -> None:
|
||||||
self._address = _normalize_pipe_address(pipe_name)
|
self._address: str = _normalize_pipe_address(pipe_name)
|
||||||
self._servers: list[Any] = []
|
self._servers: List[_NamedPipeServerHandle] = []
|
||||||
|
|
||||||
async def start(self, handler: ConnectionHandler) -> None:
|
async def start(self, handler: ConnectionHandler) -> None:
|
||||||
if sys.platform != "win32":
|
if sys.platform != "win32":
|
||||||
@@ -117,7 +129,7 @@ class NamedPipeTransportClient(TransportClient):
|
|||||||
"""Windows Named Pipe 传输客户端。"""
|
"""Windows Named Pipe 传输客户端。"""
|
||||||
|
|
||||||
def __init__(self, address: str) -> None:
|
def __init__(self, address: str) -> None:
|
||||||
self._address = _normalize_pipe_address(address)
|
self._address: str = _normalize_pipe_address(address)
|
||||||
|
|
||||||
async def connect(self) -> Connection:
|
async def connect(self) -> Connection:
|
||||||
if sys.platform != "win32":
|
if sys.platform != "win32":
|
||||||
|
|||||||
Reference in New Issue
Block a user