mirror of
https://github.com/nonebot/nonebot2.git
synced 2025-07-27 16:21:28 +00:00
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:
@ -33,7 +33,14 @@ from nonebot.drivers import (
|
||||
combine_driver,
|
||||
)
|
||||
from nonebot.drivers.none import Driver as NoneDriver
|
||||
from nonebot.internal.driver import Cookies, CookieTypes, HeaderTypes, QueryTypes
|
||||
from nonebot.internal.driver import (
|
||||
Cookies,
|
||||
CookieTypes,
|
||||
HeaderTypes,
|
||||
QueryTypes,
|
||||
Timeout,
|
||||
TimeoutTypes,
|
||||
)
|
||||
|
||||
try:
|
||||
import httpx
|
||||
@ -52,7 +59,7 @@ class Session(HTTPClientSession):
|
||||
headers: HeaderTypes = None,
|
||||
cookies: CookieTypes = None,
|
||||
version: Union[str, HTTPVersion] = HTTPVersion.H11,
|
||||
timeout: Optional[float] = None,
|
||||
timeout: TimeoutTypes = None,
|
||||
proxy: Optional[str] = None,
|
||||
):
|
||||
self._client: Optional[httpx.AsyncClient] = None
|
||||
@ -65,7 +72,16 @@ class Session(HTTPClientSession):
|
||||
)
|
||||
self._cookies = Cookies(cookies)
|
||||
self._version = HTTPVersion(version)
|
||||
self._timeout = timeout
|
||||
|
||||
if isinstance(timeout, Timeout):
|
||||
self._timeout = httpx.Timeout(
|
||||
timeout=timeout.total,
|
||||
connect=timeout.connect,
|
||||
read=timeout.read,
|
||||
)
|
||||
else:
|
||||
self._timeout = httpx.Timeout(timeout)
|
||||
|
||||
self._proxy = proxy
|
||||
|
||||
@property
|
||||
@ -76,6 +92,15 @@ class Session(HTTPClientSession):
|
||||
|
||||
@override
|
||||
async def request(self, setup: Request) -> Response:
|
||||
if isinstance(setup.timeout, Timeout):
|
||||
timeout = httpx.Timeout(
|
||||
timeout=setup.timeout.total,
|
||||
connect=setup.timeout.connect,
|
||||
read=setup.timeout.read,
|
||||
)
|
||||
else:
|
||||
timeout = httpx.Timeout(setup.timeout)
|
||||
|
||||
response = await self.client.request(
|
||||
setup.method,
|
||||
str(setup.url),
|
||||
@ -87,7 +112,7 @@ class Session(HTTPClientSession):
|
||||
params=setup.url.raw_query_string,
|
||||
headers=tuple(setup.headers.items()),
|
||||
cookies=setup.cookies.jar,
|
||||
timeout=setup.timeout,
|
||||
timeout=timeout,
|
||||
)
|
||||
return Response(
|
||||
response.status_code,
|
||||
@ -103,6 +128,15 @@ class Session(HTTPClientSession):
|
||||
*,
|
||||
chunk_size: int = 1024,
|
||||
) -> AsyncGenerator[Response, None]:
|
||||
if isinstance(setup.timeout, Timeout):
|
||||
timeout = httpx.Timeout(
|
||||
timeout=setup.timeout.total,
|
||||
connect=setup.timeout.connect,
|
||||
read=setup.timeout.read,
|
||||
)
|
||||
else:
|
||||
timeout = httpx.Timeout(setup.timeout)
|
||||
|
||||
async with self.client.stream(
|
||||
setup.method,
|
||||
str(setup.url),
|
||||
@ -114,7 +148,7 @@ class Session(HTTPClientSession):
|
||||
params=setup.url.raw_query_string,
|
||||
headers=tuple(setup.headers.items()),
|
||||
cookies=setup.cookies.jar,
|
||||
timeout=setup.timeout,
|
||||
timeout=timeout,
|
||||
) as response:
|
||||
response_headers = response.headers.multi_items()
|
||||
async for chunk in response.aiter_bytes(chunk_size=chunk_size):
|
||||
@ -183,7 +217,7 @@ class Mixin(HTTPClientMixin):
|
||||
headers: HeaderTypes = None,
|
||||
cookies: CookieTypes = None,
|
||||
version: Union[str, HTTPVersion] = HTTPVersion.H11,
|
||||
timeout: Optional[float] = None,
|
||||
timeout: TimeoutTypes = None,
|
||||
proxy: Optional[str] = None,
|
||||
) -> Session:
|
||||
return Session(
|
||||
|
Reference in New Issue
Block a user