Feature: 细化内置驱动器请求参数中的超时控制颗粒度 (#3571)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Ju4tCode <42488585+yanyongyu@users.noreply.github.com>
This commit is contained in:
Ailitonia
2025-07-15 10:29:18 +08:00
committed by GitHub
parent bc0682af8f
commit 4ec9bfb7d7
8 changed files with 115 additions and 19 deletions

View File

@ -25,7 +25,7 @@ from types import CoroutineType
from typing import TYPE_CHECKING, Any, Callable, TypeVar, Union
from typing_extensions import ParamSpec, override
from nonebot.drivers import Request, WebSocketClientMixin, combine_driver
from nonebot.drivers import Request, Timeout, WebSocketClientMixin, combine_driver
from nonebot.drivers import WebSocket as BaseWebSocket
from nonebot.drivers.none import Driver as NoneDriver
from nonebot.exception import WebSocketClosed
@ -73,10 +73,16 @@ class Mixin(WebSocketClientMixin):
async def websocket(self, setup: Request) -> AsyncGenerator["WebSocket", None]:
if setup.proxy is not None:
logger.warning("proxy is not supported by websockets driver")
if isinstance(setup.timeout, Timeout):
timeout = setup.timeout.total or setup.timeout.connect or setup.timeout.read
else:
timeout = setup.timeout
connection = Connect(
str(setup.url),
extra_headers={**setup.headers, **setup.cookies.as_header(setup)},
open_timeout=setup.timeout,
open_timeout=timeout,
)
async with connection as ws:
yield WebSocket(request=setup, websocket=ws)