mirror of
https://github.com/nonebot/nonebot2.git
synced 2026-02-26 20:54:44 +00:00
💥 Remove: 移除 Python 3.9 支持 (#3860)
This commit is contained in:
@@ -19,7 +19,7 @@ FrontMatter:
|
||||
|
||||
from collections.abc import AsyncGenerator
|
||||
from contextlib import asynccontextmanager
|
||||
from typing import TYPE_CHECKING, Optional, Union
|
||||
from typing import TYPE_CHECKING
|
||||
from typing_extensions import override
|
||||
|
||||
from multidict import CIMultiDict
|
||||
@@ -62,11 +62,11 @@ class Session(HTTPClientSession):
|
||||
params: QueryTypes = None,
|
||||
headers: HeaderTypes = None,
|
||||
cookies: CookieTypes = None,
|
||||
version: Union[str, HTTPVersion] = HTTPVersion.H11,
|
||||
version: str | HTTPVersion = HTTPVersion.H11,
|
||||
timeout: TimeoutTypes = None,
|
||||
proxy: Optional[str] = None,
|
||||
proxy: str | None = None,
|
||||
):
|
||||
self._client: Optional[aiohttp.ClientSession] = None
|
||||
self._client: aiohttp.ClientSession | None = None
|
||||
|
||||
self._params = URL.build(query=params).query if params is not None else None
|
||||
|
||||
@@ -279,9 +279,9 @@ class Mixin(HTTPClientMixin, WebSocketClientMixin):
|
||||
params: QueryTypes = None,
|
||||
headers: HeaderTypes = None,
|
||||
cookies: CookieTypes = None,
|
||||
version: Union[str, HTTPVersion] = HTTPVersion.H11,
|
||||
version: str | HTTPVersion = HTTPVersion.H11,
|
||||
timeout: TimeoutTypes = None,
|
||||
proxy: Optional[str] = None,
|
||||
proxy: str | None = None,
|
||||
) -> Session:
|
||||
return Session(
|
||||
params=params,
|
||||
|
||||
@@ -20,7 +20,7 @@ FrontMatter:
|
||||
import contextlib
|
||||
from functools import wraps
|
||||
import logging
|
||||
from typing import Any, Optional, Union
|
||||
from typing import Any
|
||||
from typing_extensions import override
|
||||
|
||||
from pydantic import BaseModel
|
||||
@@ -63,23 +63,23 @@ def catch_closed(func):
|
||||
class Config(BaseModel):
|
||||
"""FastAPI 驱动框架设置,详情参考 FastAPI 文档"""
|
||||
|
||||
fastapi_openapi_url: Optional[str] = None
|
||||
fastapi_openapi_url: str | None = None
|
||||
"""`openapi.json` 地址,默认为 `None` 即关闭"""
|
||||
fastapi_docs_url: Optional[str] = None
|
||||
fastapi_docs_url: str | None = None
|
||||
"""`swagger` 地址,默认为 `None` 即关闭"""
|
||||
fastapi_redoc_url: Optional[str] = None
|
||||
fastapi_redoc_url: str | None = None
|
||||
"""`redoc` 地址,默认为 `None` 即关闭"""
|
||||
fastapi_include_adapter_schema: bool = True
|
||||
"""是否包含适配器路由的 schema,默认为 `True`"""
|
||||
fastapi_reload: bool = False
|
||||
"""开启/关闭冷重载"""
|
||||
fastapi_reload_dirs: Optional[list[str]] = None
|
||||
fastapi_reload_dirs: list[str] | None = None
|
||||
"""重载监控文件夹列表,默认为 uvicorn 默认值"""
|
||||
fastapi_reload_delay: float = 0.25
|
||||
"""重载延迟,默认为 uvicorn 默认值"""
|
||||
fastapi_reload_includes: Optional[list[str]] = None
|
||||
fastapi_reload_includes: list[str] | None = None
|
||||
"""要监听的文件列表,支持 glob pattern,默认为 uvicorn 默认值"""
|
||||
fastapi_reload_excludes: Optional[list[str]] = None
|
||||
fastapi_reload_excludes: list[str] | None = None
|
||||
"""不要监听的文件列表,支持 glob pattern,默认为 uvicorn 默认值"""
|
||||
fastapi_extra: dict[str, Any] = {}
|
||||
"""传递给 `FastAPI` 的其他参数。"""
|
||||
@@ -160,10 +160,10 @@ class Driver(BaseDriver, ASGIMixin):
|
||||
@override
|
||||
def run(
|
||||
self,
|
||||
host: Optional[str] = None,
|
||||
port: Optional[int] = None,
|
||||
host: str | None = None,
|
||||
port: int | None = None,
|
||||
*args,
|
||||
app: Optional[str] = None,
|
||||
app: str | None = None,
|
||||
**kwargs,
|
||||
):
|
||||
"""使用 `uvicorn` 启动 FastAPI"""
|
||||
@@ -206,8 +206,8 @@ class Driver(BaseDriver, ASGIMixin):
|
||||
with contextlib.suppress(Exception):
|
||||
json = await request.json()
|
||||
|
||||
data: Optional[dict] = None
|
||||
files: Optional[list[tuple[str, FileTypes]]] = None
|
||||
data: dict | None = None
|
||||
files: list[tuple[str, FileTypes]] | None = None
|
||||
with contextlib.suppress(Exception):
|
||||
form = await request.form()
|
||||
data = {}
|
||||
@@ -280,7 +280,7 @@ class FastAPIWebSocket(BaseWebSocket):
|
||||
await self.websocket.close(code, reason)
|
||||
|
||||
@override
|
||||
async def receive(self) -> Union[str, bytes]:
|
||||
async def receive(self) -> str | bytes:
|
||||
# assert self.websocket.application_state == WebSocketState.CONNECTED
|
||||
msg = await self.websocket.receive()
|
||||
if msg["type"] == "websocket.disconnect":
|
||||
|
||||
@@ -18,7 +18,7 @@ FrontMatter:
|
||||
"""
|
||||
|
||||
from collections.abc import AsyncGenerator
|
||||
from typing import TYPE_CHECKING, Optional, Union
|
||||
from typing import TYPE_CHECKING
|
||||
from typing_extensions import override
|
||||
|
||||
from multidict import CIMultiDict
|
||||
@@ -58,11 +58,11 @@ class Session(HTTPClientSession):
|
||||
params: QueryTypes = None,
|
||||
headers: HeaderTypes = None,
|
||||
cookies: CookieTypes = None,
|
||||
version: Union[str, HTTPVersion] = HTTPVersion.H11,
|
||||
version: str | HTTPVersion = HTTPVersion.H11,
|
||||
timeout: TimeoutTypes = None,
|
||||
proxy: Optional[str] = None,
|
||||
proxy: str | None = None,
|
||||
):
|
||||
self._client: Optional[httpx.AsyncClient] = None
|
||||
self._client: httpx.AsyncClient | None = None
|
||||
|
||||
self._params = (
|
||||
tuple(URL.build(query=params).query.items()) if params is not None else None
|
||||
@@ -216,9 +216,9 @@ class Mixin(HTTPClientMixin):
|
||||
params: QueryTypes = None,
|
||||
headers: HeaderTypes = None,
|
||||
cookies: CookieTypes = None,
|
||||
version: Union[str, HTTPVersion] = HTTPVersion.H11,
|
||||
version: str | HTTPVersion = HTTPVersion.H11,
|
||||
timeout: TimeoutTypes = None,
|
||||
proxy: Optional[str] = None,
|
||||
proxy: str | None = None,
|
||||
) -> Session:
|
||||
return Session(
|
||||
params=params,
|
||||
|
||||
@@ -12,7 +12,6 @@ FrontMatter:
|
||||
"""
|
||||
|
||||
import signal
|
||||
from typing import Optional
|
||||
from typing_extensions import override
|
||||
|
||||
import anyio
|
||||
@@ -112,7 +111,7 @@ class Driver(BaseDriver):
|
||||
if not self.should_exit.is_set():
|
||||
logger.info("Application startup completed.")
|
||||
|
||||
async def _listen_exit(self, tg: Optional[TaskGroup] = None):
|
||||
async def _listen_exit(self, tg: TaskGroup | None = None):
|
||||
await self.should_exit.wait()
|
||||
|
||||
if tg is not None:
|
||||
|
||||
@@ -19,7 +19,7 @@ FrontMatter:
|
||||
|
||||
import asyncio
|
||||
from functools import wraps
|
||||
from typing import Any, Optional, Union, cast
|
||||
from typing import Any, cast
|
||||
from typing_extensions import override
|
||||
|
||||
from pydantic import BaseModel
|
||||
@@ -65,13 +65,13 @@ class Config(BaseModel):
|
||||
|
||||
quart_reload: bool = False
|
||||
"""开启/关闭冷重载"""
|
||||
quart_reload_dirs: Optional[list[str]] = None
|
||||
quart_reload_dirs: list[str] | None = None
|
||||
"""重载监控文件夹列表,默认为 uvicorn 默认值"""
|
||||
quart_reload_delay: float = 0.25
|
||||
"""重载延迟,默认为 uvicorn 默认值"""
|
||||
quart_reload_includes: Optional[list[str]] = None
|
||||
quart_reload_includes: list[str] | None = None
|
||||
"""要监听的文件列表,支持 glob pattern,默认为 uvicorn 默认值"""
|
||||
quart_reload_excludes: Optional[list[str]] = None
|
||||
quart_reload_excludes: list[str] | None = None
|
||||
"""不要监听的文件列表,支持 glob pattern,默认为 uvicorn 默认值"""
|
||||
quart_extra: dict[str, Any] = {}
|
||||
"""传递给 `Quart` 的其他参数。"""
|
||||
@@ -141,10 +141,10 @@ class Driver(BaseDriver, ASGIMixin):
|
||||
@override
|
||||
def run(
|
||||
self,
|
||||
host: Optional[str] = None,
|
||||
port: Optional[int] = None,
|
||||
host: str | None = None,
|
||||
port: int | None = None,
|
||||
*args,
|
||||
app: Optional[str] = None,
|
||||
app: str | None = None,
|
||||
**kwargs,
|
||||
):
|
||||
"""使用 `uvicorn` 启动 Quart"""
|
||||
@@ -257,7 +257,7 @@ class WebSocket(BaseWebSocket):
|
||||
|
||||
@override
|
||||
@catch_closed
|
||||
async def receive(self) -> Union[str, bytes]:
|
||||
async def receive(self) -> str | bytes:
|
||||
return await self.websocket.receive()
|
||||
|
||||
@override
|
||||
|
||||
@@ -17,12 +17,12 @@ FrontMatter:
|
||||
description: nonebot.drivers.websockets 模块
|
||||
"""
|
||||
|
||||
from collections.abc import AsyncGenerator
|
||||
from collections.abc import AsyncGenerator, Callable
|
||||
from contextlib import asynccontextmanager
|
||||
from functools import wraps
|
||||
import logging
|
||||
from types import CoroutineType
|
||||
from typing import TYPE_CHECKING, Any, Callable, TypeVar, Union
|
||||
from typing import TYPE_CHECKING, Any, TypeVar
|
||||
from typing_extensions import ParamSpec, override
|
||||
|
||||
from nonebot.drivers import Request, Timeout, WebSocketClientMixin, combine_driver
|
||||
@@ -108,7 +108,7 @@ class WebSocket(BaseWebSocket):
|
||||
|
||||
@override
|
||||
@catch_closed
|
||||
async def receive(self) -> Union[str, bytes]:
|
||||
async def receive(self) -> str | bytes:
|
||||
return await self.websocket.recv()
|
||||
|
||||
@override
|
||||
|
||||
Reference in New Issue
Block a user