mirror of
https://github.com/nonebot/nonebot2.git
synced 2026-02-26 12:44:35 +00:00
💥 Remove: 移除 Python 3.9 支持 (#3860)
This commit is contained in:
2
.github/workflows/codecov.yml
vendored
2
.github/workflows/codecov.yml
vendored
@@ -25,7 +25,7 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
|
python-version: ["3.10", "3.11", "3.12", "3.13"]
|
||||||
os: [ubuntu-latest, windows-latest, macos-latest]
|
os: [ubuntu-latest, windows-latest, macos-latest]
|
||||||
env: [pydantic-v1, pydantic-v2]
|
env: [pydantic-v1, pydantic-v2]
|
||||||
env:
|
env:
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ FrontMatter:
|
|||||||
|
|
||||||
from importlib.metadata import version
|
from importlib.metadata import version
|
||||||
import os
|
import os
|
||||||
from typing import Any, Optional, TypeVar, Union, overload
|
from typing import Any, TypeVar, overload
|
||||||
|
|
||||||
import loguru
|
import loguru
|
||||||
|
|
||||||
@@ -65,7 +65,7 @@ except Exception: # pragma: no cover
|
|||||||
|
|
||||||
A = TypeVar("A", bound=Adapter)
|
A = TypeVar("A", bound=Adapter)
|
||||||
|
|
||||||
_driver: Optional[Driver] = None
|
_driver: Driver | None = None
|
||||||
|
|
||||||
|
|
||||||
def get_driver() -> Driver:
|
def get_driver() -> Driver:
|
||||||
@@ -112,7 +112,7 @@ def get_adapter(name: type[A]) -> A:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
def get_adapter(name: Union[str, type[Adapter]]) -> Adapter:
|
def get_adapter(name: str | type[Adapter]) -> Adapter:
|
||||||
"""获取已注册的 {ref}`nonebot.adapters.Adapter` 实例。
|
"""获取已注册的 {ref}`nonebot.adapters.Adapter` 实例。
|
||||||
|
|
||||||
异常:
|
异常:
|
||||||
@@ -196,7 +196,7 @@ def get_asgi() -> Any:
|
|||||||
return driver.asgi
|
return driver.asgi
|
||||||
|
|
||||||
|
|
||||||
def get_bot(self_id: Optional[str] = None) -> Bot:
|
def get_bot(self_id: str | None = None) -> Bot:
|
||||||
"""获取一个连接到 NoneBot 的 {ref}`nonebot.adapters.Bot` 对象。
|
"""获取一个连接到 NoneBot 的 {ref}`nonebot.adapters.Bot` 对象。
|
||||||
|
|
||||||
当提供 `self_id` 时,此函数是 `get_bots()[self_id]` 的简写;
|
当提供 `self_id` 时,此函数是 `get_bots()[self_id]` 的简写;
|
||||||
@@ -277,7 +277,7 @@ def _log_patcher(record: "loguru.Record"):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def init(*, _env_file: Optional[DOTENV_TYPE] = None, **kwargs: Any) -> None:
|
def init(*, _env_file: DOTENV_TYPE | None = None, **kwargs: Any) -> None:
|
||||||
"""初始化 NoneBot 以及 全局 {ref}`nonebot.drivers.Driver` 对象。
|
"""初始化 NoneBot 以及 全局 {ref}`nonebot.drivers.Driver` 对象。
|
||||||
|
|
||||||
NoneBot 将会从 .env 文件中读取环境信息,并使用相应的 env 文件配置。
|
NoneBot 将会从 .env 文件中读取环境信息,并使用相应的 env 文件配置。
|
||||||
|
|||||||
@@ -9,23 +9,22 @@ FrontMatter:
|
|||||||
description: nonebot.compat 模块
|
description: nonebot.compat 模块
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from collections.abc import Generator
|
from collections.abc import Callable, Generator
|
||||||
from dataclasses import dataclass, is_dataclass
|
from dataclasses import dataclass, is_dataclass
|
||||||
from functools import cached_property, wraps
|
from functools import cached_property, wraps
|
||||||
from typing import (
|
from typing import (
|
||||||
TYPE_CHECKING,
|
TYPE_CHECKING,
|
||||||
Annotated,
|
Annotated,
|
||||||
Any,
|
Any,
|
||||||
Callable,
|
|
||||||
Generic,
|
Generic,
|
||||||
Literal,
|
Literal,
|
||||||
Optional,
|
|
||||||
Protocol,
|
Protocol,
|
||||||
TypeVar,
|
TypeVar,
|
||||||
Union,
|
get_args,
|
||||||
|
get_origin,
|
||||||
overload,
|
overload,
|
||||||
)
|
)
|
||||||
from typing_extensions import ParamSpec, Self, get_args, get_origin, is_typeddict
|
from typing_extensions import ParamSpec, Self, is_typeddict
|
||||||
|
|
||||||
from pydantic import VERSION, BaseModel
|
from pydantic import VERSION, BaseModel
|
||||||
|
|
||||||
@@ -129,7 +128,7 @@ if PYDANTIC_V2: # pragma: pydantic-v2
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _inherit_construct(
|
def _inherit_construct(
|
||||||
cls, field_info: Optional[BaseFieldInfo] = None, **kwargs: Any
|
cls, field_info: BaseFieldInfo | None = None, **kwargs: Any
|
||||||
) -> Self:
|
) -> Self:
|
||||||
init_kwargs = {}
|
init_kwargs = {}
|
||||||
if field_info:
|
if field_info:
|
||||||
@@ -158,7 +157,7 @@ if PYDANTIC_V2: # pragma: pydantic-v2
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def construct(
|
def construct(
|
||||||
cls, name: str, annotation: Any, field_info: Optional[FieldInfo] = None
|
cls, name: str, annotation: Any, field_info: FieldInfo | None = None
|
||||||
) -> Self:
|
) -> Self:
|
||||||
"""Construct a ModelField from given infos."""
|
"""Construct a ModelField from given infos."""
|
||||||
return cls._construct(name, annotation, field_info or FieldInfo())
|
return cls._construct(name, annotation, field_info or FieldInfo())
|
||||||
@@ -231,8 +230,8 @@ if PYDANTIC_V2: # pragma: pydantic-v2
|
|||||||
|
|
||||||
def model_dump(
|
def model_dump(
|
||||||
model: BaseModel,
|
model: BaseModel,
|
||||||
include: Optional[set[str]] = None,
|
include: set[str] | None = None,
|
||||||
exclude: Optional[set[str]] = None,
|
exclude: set[str] | None = None,
|
||||||
by_alias: bool = False,
|
by_alias: bool = False,
|
||||||
exclude_unset: bool = False,
|
exclude_unset: bool = False,
|
||||||
exclude_defaults: bool = False,
|
exclude_defaults: bool = False,
|
||||||
@@ -251,7 +250,7 @@ if PYDANTIC_V2: # pragma: pydantic-v2
|
|||||||
"""Validate data with given type."""
|
"""Validate data with given type."""
|
||||||
return TypeAdapter(type_).validate_python(data)
|
return TypeAdapter(type_).validate_python(data)
|
||||||
|
|
||||||
def type_validate_json(type_: type[T], data: Union[str, bytes]) -> T:
|
def type_validate_json(type_: type[T], data: str | bytes) -> T:
|
||||||
"""Validate JSON with given type."""
|
"""Validate JSON with given type."""
|
||||||
return TypeAdapter(type_).validate_json(data)
|
return TypeAdapter(type_).validate_json(data)
|
||||||
|
|
||||||
@@ -317,7 +316,7 @@ else: # pragma: pydantic-v1
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _inherit_construct(
|
def _inherit_construct(
|
||||||
cls, field_info: Optional[BaseFieldInfo] = None, **kwargs: Any
|
cls, field_info: BaseFieldInfo | None = None, **kwargs: Any
|
||||||
):
|
):
|
||||||
if field_info:
|
if field_info:
|
||||||
init_kwargs = {
|
init_kwargs = {
|
||||||
@@ -350,7 +349,7 @@ else: # pragma: pydantic-v1
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def construct(
|
def construct(
|
||||||
cls, name: str, annotation: Any, field_info: Optional[FieldInfo] = None
|
cls, name: str, annotation: Any, field_info: FieldInfo | None = None
|
||||||
) -> Self:
|
) -> Self:
|
||||||
"""Construct a ModelField from given infos.
|
"""Construct a ModelField from given infos.
|
||||||
|
|
||||||
@@ -375,7 +374,7 @@ else: # pragma: pydantic-v1
|
|||||||
self,
|
self,
|
||||||
type: type[T],
|
type: type[T],
|
||||||
*,
|
*,
|
||||||
config: Optional[ConfigDict] = ...,
|
config: ConfigDict | None = ...,
|
||||||
) -> None: ...
|
) -> None: ...
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
@@ -383,14 +382,14 @@ else: # pragma: pydantic-v1
|
|||||||
self,
|
self,
|
||||||
type: Any,
|
type: Any,
|
||||||
*,
|
*,
|
||||||
config: Optional[ConfigDict] = ...,
|
config: ConfigDict | None = ...,
|
||||||
) -> None: ...
|
) -> None: ...
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
type: Any,
|
type: Any,
|
||||||
*,
|
*,
|
||||||
config: Optional[ConfigDict] = None,
|
config: ConfigDict | None = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
self.type = type
|
self.type = type
|
||||||
self.config = config
|
self.config = config
|
||||||
@@ -398,7 +397,7 @@ else: # pragma: pydantic-v1
|
|||||||
def validate_python(self, value: Any) -> T:
|
def validate_python(self, value: Any) -> T:
|
||||||
return type_validate_python(self.type, value)
|
return type_validate_python(self.type, value)
|
||||||
|
|
||||||
def validate_json(self, value: Union[str, bytes]) -> T:
|
def validate_json(self, value: str | bytes) -> T:
|
||||||
return type_validate_json(self.type, value)
|
return type_validate_json(self.type, value)
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
@@ -407,7 +406,7 @@ else: # pragma: pydantic-v1
|
|||||||
/,
|
/,
|
||||||
*fields: str,
|
*fields: str,
|
||||||
mode: Literal["before"],
|
mode: Literal["before"],
|
||||||
check_fields: Optional[bool] = None,
|
check_fields: bool | None = None,
|
||||||
): ...
|
): ...
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
@@ -416,7 +415,7 @@ else: # pragma: pydantic-v1
|
|||||||
/,
|
/,
|
||||||
*fields: str,
|
*fields: str,
|
||||||
mode: Literal["after"] = ...,
|
mode: Literal["after"] = ...,
|
||||||
check_fields: Optional[bool] = None,
|
check_fields: bool | None = None,
|
||||||
): ...
|
): ...
|
||||||
|
|
||||||
def field_validator(
|
def field_validator(
|
||||||
@@ -424,7 +423,7 @@ else: # pragma: pydantic-v1
|
|||||||
/,
|
/,
|
||||||
*fields: str,
|
*fields: str,
|
||||||
mode: Literal["before", "after"] = "after",
|
mode: Literal["before", "after"] = "after",
|
||||||
check_fields: Optional[bool] = None,
|
check_fields: bool | None = None,
|
||||||
):
|
):
|
||||||
if mode == "before":
|
if mode == "before":
|
||||||
return validator(
|
return validator(
|
||||||
@@ -458,8 +457,8 @@ else: # pragma: pydantic-v1
|
|||||||
|
|
||||||
def model_dump(
|
def model_dump(
|
||||||
model: BaseModel,
|
model: BaseModel,
|
||||||
include: Optional[set[str]] = None,
|
include: set[str] | None = None,
|
||||||
exclude: Optional[set[str]] = None,
|
exclude: set[str] | None = None,
|
||||||
by_alias: bool = False,
|
by_alias: bool = False,
|
||||||
exclude_unset: bool = False,
|
exclude_unset: bool = False,
|
||||||
exclude_defaults: bool = False,
|
exclude_defaults: bool = False,
|
||||||
@@ -490,7 +489,7 @@ else: # pragma: pydantic-v1
|
|||||||
"""Validate data with given type."""
|
"""Validate data with given type."""
|
||||||
return parse_obj_as(type_, data)
|
return parse_obj_as(type_, data)
|
||||||
|
|
||||||
def type_validate_json(type_: type[T], data: Union[str, bytes]) -> T:
|
def type_validate_json(type_: type[T], data: str | bytes) -> T:
|
||||||
"""Validate JSON with given type."""
|
"""Validate JSON with given type."""
|
||||||
return parse_raw_as(type_, data)
|
return parse_raw_as(type_, data)
|
||||||
|
|
||||||
|
|||||||
@@ -20,8 +20,7 @@ from ipaddress import IPv4Address
|
|||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import TYPE_CHECKING, Any, Optional, Union
|
from typing import TYPE_CHECKING, Any, TypeAlias, get_args, get_origin
|
||||||
from typing_extensions import TypeAlias, get_args, get_origin
|
|
||||||
|
|
||||||
from dotenv import dotenv_values
|
from dotenv import dotenv_values
|
||||||
from pydantic import BaseModel, Field
|
from pydantic import BaseModel, Field
|
||||||
@@ -41,9 +40,7 @@ from nonebot.log import logger
|
|||||||
from nonebot.typing import origin_is_union
|
from nonebot.typing import origin_is_union
|
||||||
from nonebot.utils import deep_update, lenient_issubclass, type_is_complex
|
from nonebot.utils import deep_update, lenient_issubclass, type_is_complex
|
||||||
|
|
||||||
DOTENV_TYPE: TypeAlias = Union[
|
DOTENV_TYPE: TypeAlias = Path | str | list[Path | str] | tuple[Path | str, ...]
|
||||||
Path, str, list[Union[Path, str]], tuple[Union[Path, str], ...]
|
|
||||||
]
|
|
||||||
|
|
||||||
ENV_FILE_SENTINEL = Path("")
|
ENV_FILE_SENTINEL = Path("")
|
||||||
|
|
||||||
@@ -84,10 +81,10 @@ class DotEnvSettingsSource(BaseSettingsSource):
|
|||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
settings_cls: type[BaseModel],
|
settings_cls: type[BaseModel],
|
||||||
env_file: Optional[DOTENV_TYPE],
|
env_file: DOTENV_TYPE | None,
|
||||||
env_file_encoding: str,
|
env_file_encoding: str,
|
||||||
case_sensitive: Optional[bool] = False,
|
case_sensitive: bool | None = False,
|
||||||
env_nested_delimiter: Optional[str] = None,
|
env_nested_delimiter: str | None = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
super().__init__(settings_cls)
|
super().__init__(settings_cls)
|
||||||
self.env_file = env_file
|
self.env_file = env_file
|
||||||
@@ -108,17 +105,17 @@ class DotEnvSettingsSource(BaseSettingsSource):
|
|||||||
return False, False
|
return False, False
|
||||||
|
|
||||||
def _parse_env_vars(
|
def _parse_env_vars(
|
||||||
self, env_vars: Mapping[str, Optional[str]]
|
self, env_vars: Mapping[str, str | None]
|
||||||
) -> dict[str, Optional[str]]:
|
) -> dict[str, str | None]:
|
||||||
return {
|
return {
|
||||||
self._apply_case_sensitive(key): value for key, value in env_vars.items()
|
self._apply_case_sensitive(key): value for key, value in env_vars.items()
|
||||||
}
|
}
|
||||||
|
|
||||||
def _read_env_file(self, file_path: Path) -> dict[str, Optional[str]]:
|
def _read_env_file(self, file_path: Path) -> dict[str, str | None]:
|
||||||
file_vars = dotenv_values(file_path, encoding=self.env_file_encoding)
|
file_vars = dotenv_values(file_path, encoding=self.env_file_encoding)
|
||||||
return self._parse_env_vars(file_vars)
|
return self._parse_env_vars(file_vars)
|
||||||
|
|
||||||
def _read_env_files(self) -> dict[str, Optional[str]]:
|
def _read_env_files(self) -> dict[str, str | None]:
|
||||||
env_files = self.env_file
|
env_files = self.env_file
|
||||||
if env_files is None:
|
if env_files is None:
|
||||||
return {}
|
return {}
|
||||||
@@ -126,16 +123,14 @@ class DotEnvSettingsSource(BaseSettingsSource):
|
|||||||
if isinstance(env_files, (str, os.PathLike)):
|
if isinstance(env_files, (str, os.PathLike)):
|
||||||
env_files = [env_files]
|
env_files = [env_files]
|
||||||
|
|
||||||
dotenv_vars: dict[str, Optional[str]] = {}
|
dotenv_vars: dict[str, str | None] = {}
|
||||||
for env_file in env_files:
|
for env_file in env_files:
|
||||||
env_path = Path(env_file).expanduser()
|
env_path = Path(env_file).expanduser()
|
||||||
if env_path.is_file():
|
if env_path.is_file():
|
||||||
dotenv_vars.update(self._read_env_file(env_path))
|
dotenv_vars.update(self._read_env_file(env_path))
|
||||||
return dotenv_vars
|
return dotenv_vars
|
||||||
|
|
||||||
def _next_field(
|
def _next_field(self, field: ModelField | None, key: str) -> ModelField | None:
|
||||||
self, field: Optional[ModelField], key: str
|
|
||||||
) -> Optional[ModelField]:
|
|
||||||
if not field or origin_is_union(get_origin(field.annotation)):
|
if not field or origin_is_union(get_origin(field.annotation)):
|
||||||
return None
|
return None
|
||||||
elif field.annotation and lenient_issubclass(field.annotation, BaseModel):
|
elif field.annotation and lenient_issubclass(field.annotation, BaseModel):
|
||||||
@@ -147,8 +142,8 @@ class DotEnvSettingsSource(BaseSettingsSource):
|
|||||||
def _explode_env_vars(
|
def _explode_env_vars(
|
||||||
self,
|
self,
|
||||||
field: ModelField,
|
field: ModelField,
|
||||||
env_vars: dict[str, Optional[str]],
|
env_vars: dict[str, str | None],
|
||||||
env_file_vars: dict[str, Optional[str]],
|
env_file_vars: dict[str, str | None],
|
||||||
) -> dict[str, Any]:
|
) -> dict[str, Any]:
|
||||||
if self.env_nested_delimiter is None:
|
if self.env_nested_delimiter is None:
|
||||||
return {}
|
return {}
|
||||||
@@ -164,7 +159,7 @@ class DotEnvSettingsSource(BaseSettingsSource):
|
|||||||
|
|
||||||
_, *keys, last_key = env_name.split(self.env_nested_delimiter)
|
_, *keys, last_key = env_name.split(self.env_nested_delimiter)
|
||||||
env_var = result
|
env_var = result
|
||||||
target_field: Optional[ModelField] = field
|
target_field: ModelField | None = field
|
||||||
for key in keys:
|
for key in keys:
|
||||||
target_field = self._next_field(target_field, key)
|
target_field = self._next_field(target_field, key)
|
||||||
env_var = env_var.setdefault(key, {})
|
env_var = env_var.setdefault(key, {})
|
||||||
@@ -293,18 +288,18 @@ class DotEnvSettingsSource(BaseSettingsSource):
|
|||||||
if PYDANTIC_V2: # pragma: pydantic-v2
|
if PYDANTIC_V2: # pragma: pydantic-v2
|
||||||
|
|
||||||
class SettingsConfig(ConfigDict, total=False):
|
class SettingsConfig(ConfigDict, total=False):
|
||||||
env_file: Optional[DOTENV_TYPE]
|
env_file: DOTENV_TYPE | None
|
||||||
env_file_encoding: str
|
env_file_encoding: str
|
||||||
case_sensitive: bool
|
case_sensitive: bool
|
||||||
env_nested_delimiter: Optional[str]
|
env_nested_delimiter: str | None
|
||||||
|
|
||||||
else: # pragma: pydantic-v1
|
else: # pragma: pydantic-v1
|
||||||
|
|
||||||
class SettingsConfig(ConfigDict):
|
class SettingsConfig(ConfigDict):
|
||||||
env_file: Optional[DOTENV_TYPE]
|
env_file: DOTENV_TYPE | None
|
||||||
env_file_encoding: str
|
env_file_encoding: str
|
||||||
case_sensitive: bool
|
case_sensitive: bool
|
||||||
env_nested_delimiter: Optional[str]
|
env_nested_delimiter: str | None
|
||||||
|
|
||||||
|
|
||||||
class BaseSettings(BaseModel):
|
class BaseSettings(BaseModel):
|
||||||
@@ -332,9 +327,9 @@ class BaseSettings(BaseModel):
|
|||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
__settings_self__, # pyright: ignore[reportSelfClsParameterName]
|
__settings_self__, # pyright: ignore[reportSelfClsParameterName]
|
||||||
_env_file: Optional[DOTENV_TYPE] = ENV_FILE_SENTINEL,
|
_env_file: DOTENV_TYPE | None = ENV_FILE_SENTINEL,
|
||||||
_env_file_encoding: Optional[str] = None,
|
_env_file_encoding: str | None = None,
|
||||||
_env_nested_delimiter: Optional[str] = None,
|
_env_nested_delimiter: str | None = None,
|
||||||
**values: Any,
|
**values: Any,
|
||||||
) -> None:
|
) -> None:
|
||||||
settings_config = model_config(__settings_self__.__class__)
|
settings_config = model_config(__settings_self__.__class__)
|
||||||
@@ -372,9 +367,9 @@ class BaseSettings(BaseModel):
|
|||||||
def _settings_build_values(
|
def _settings_build_values(
|
||||||
settings_cls: type[BaseModel],
|
settings_cls: type[BaseModel],
|
||||||
init_kwargs: dict[str, Any],
|
init_kwargs: dict[str, Any],
|
||||||
env_file: Optional[DOTENV_TYPE],
|
env_file: DOTENV_TYPE | None,
|
||||||
env_file_encoding: str,
|
env_file_encoding: str,
|
||||||
env_nested_delimiter: Optional[str],
|
env_nested_delimiter: str | None,
|
||||||
) -> dict[str, Any]:
|
) -> dict[str, Any]:
|
||||||
init_settings = InitSettingsSource(settings_cls, init_kwargs=init_kwargs)
|
init_settings = InitSettingsSource(settings_cls, init_kwargs=init_kwargs)
|
||||||
env_settings = DotEnvSettingsSource(
|
env_settings = DotEnvSettingsSource(
|
||||||
@@ -409,7 +404,7 @@ class Config(BaseSettings):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
_env_file: Optional[DOTENV_TYPE] = ".env", ".env.prod"
|
_env_file: DOTENV_TYPE | None = ".env", ".env.prod"
|
||||||
|
|
||||||
# nonebot configs
|
# nonebot configs
|
||||||
driver: str = "~fastapi"
|
driver: str = "~fastapi"
|
||||||
@@ -425,7 +420,7 @@ class Config(BaseSettings):
|
|||||||
"""NoneBot {ref}`nonebot.drivers.ReverseDriver` 服务端监听的 IP/主机名。"""
|
"""NoneBot {ref}`nonebot.drivers.ReverseDriver` 服务端监听的 IP/主机名。"""
|
||||||
port: int = Field(default=8080, ge=1, le=65535)
|
port: int = Field(default=8080, ge=1, le=65535)
|
||||||
"""NoneBot {ref}`nonebot.drivers.ReverseDriver` 服务端监听的端口。"""
|
"""NoneBot {ref}`nonebot.drivers.ReverseDriver` 服务端监听的端口。"""
|
||||||
log_level: Union[int, str] = LegacyUnionField(default="INFO")
|
log_level: int | str = LegacyUnionField(default="INFO")
|
||||||
"""NoneBot 日志输出等级,可以为 `int` 类型等级或等级名称。
|
"""NoneBot 日志输出等级,可以为 `int` 类型等级或等级名称。
|
||||||
|
|
||||||
参考 [记录日志](https://nonebot.dev/docs/appendices/log),[loguru 日志等级](https://loguru.readthedocs.io/en/stable/api/logger.html#levels)。
|
参考 [记录日志](https://nonebot.dev/docs/appendices/log),[loguru 日志等级](https://loguru.readthedocs.io/en/stable/api/logger.html#levels)。
|
||||||
@@ -442,7 +437,7 @@ class Config(BaseSettings):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
# bot connection configs
|
# bot connection configs
|
||||||
api_timeout: Optional[float] = 30.0
|
api_timeout: float | None = 30.0
|
||||||
"""API 请求超时时间,单位: 秒。"""
|
"""API 请求超时时间,单位: 秒。"""
|
||||||
|
|
||||||
# bot runtime configs
|
# bot runtime configs
|
||||||
|
|||||||
@@ -8,11 +8,11 @@ FrontMatter:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
import abc
|
import abc
|
||||||
from collections.abc import Awaitable, Iterable
|
from collections.abc import Awaitable, Callable, Iterable
|
||||||
from dataclasses import dataclass, field
|
from dataclasses import dataclass, field
|
||||||
from functools import partial
|
from functools import partial
|
||||||
import inspect
|
import inspect
|
||||||
from typing import Any, Callable, Generic, Optional, TypeVar, cast
|
from typing import Any, Generic, TypeVar, cast
|
||||||
|
|
||||||
import anyio
|
import anyio
|
||||||
from exceptiongroup import BaseExceptionGroup, catch
|
from exceptiongroup import BaseExceptionGroup, catch
|
||||||
@@ -47,13 +47,13 @@ class Param(abc.ABC, FieldInfo):
|
|||||||
@classmethod
|
@classmethod
|
||||||
def _check_param(
|
def _check_param(
|
||||||
cls, param: inspect.Parameter, allow_types: tuple[type["Param"], ...]
|
cls, param: inspect.Parameter, allow_types: tuple[type["Param"], ...]
|
||||||
) -> Optional["Param"]:
|
) -> "Param | None":
|
||||||
return
|
return
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _check_parameterless(
|
def _check_parameterless(
|
||||||
cls, value: Any, allow_types: tuple[type["Param"], ...]
|
cls, value: Any, allow_types: tuple[type["Param"], ...]
|
||||||
) -> Optional["Param"]:
|
) -> "Param | None":
|
||||||
return
|
return
|
||||||
|
|
||||||
@abc.abstractmethod
|
@abc.abstractmethod
|
||||||
@@ -92,7 +92,7 @@ class Dependent(Generic[R]):
|
|||||||
)
|
)
|
||||||
|
|
||||||
async def __call__(self, **kwargs: Any) -> R:
|
async def __call__(self, **kwargs: Any) -> R:
|
||||||
exception: Optional[BaseExceptionGroup[SkippedException]] = None
|
exception: BaseExceptionGroup[SkippedException] | None = None
|
||||||
|
|
||||||
def _handle_skipped(exc_group: BaseExceptionGroup[SkippedException]):
|
def _handle_skipped(exc_group: BaseExceptionGroup[SkippedException]):
|
||||||
nonlocal exception
|
nonlocal exception
|
||||||
@@ -167,7 +167,7 @@ class Dependent(Generic[R]):
|
|||||||
cls,
|
cls,
|
||||||
*,
|
*,
|
||||||
call: _DependentCallable[R],
|
call: _DependentCallable[R],
|
||||||
parameterless: Optional[Iterable[Any]] = None,
|
parameterless: Iterable[Any] | None = None,
|
||||||
allow_types: Iterable[type[Param]],
|
allow_types: Iterable[type[Param]],
|
||||||
) -> "Dependent[R]":
|
) -> "Dependent[R]":
|
||||||
allow_types = tuple(allow_types)
|
allow_types = tuple(allow_types)
|
||||||
|
|||||||
@@ -6,8 +6,9 @@ FrontMatter:
|
|||||||
description: nonebot.dependencies.utils 模块
|
description: nonebot.dependencies.utils 模块
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
from collections.abc import Callable
|
||||||
import inspect
|
import inspect
|
||||||
from typing import Any, Callable, ForwardRef, cast
|
from typing import Any, ForwardRef, cast
|
||||||
from typing_extensions import TypeAliasType
|
from typing_extensions import TypeAliasType
|
||||||
|
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ FrontMatter:
|
|||||||
|
|
||||||
from collections.abc import AsyncGenerator
|
from collections.abc import AsyncGenerator
|
||||||
from contextlib import asynccontextmanager
|
from contextlib import asynccontextmanager
|
||||||
from typing import TYPE_CHECKING, Optional, Union
|
from typing import TYPE_CHECKING
|
||||||
from typing_extensions import override
|
from typing_extensions import override
|
||||||
|
|
||||||
from multidict import CIMultiDict
|
from multidict import CIMultiDict
|
||||||
@@ -62,11 +62,11 @@ class Session(HTTPClientSession):
|
|||||||
params: QueryTypes = None,
|
params: QueryTypes = None,
|
||||||
headers: HeaderTypes = None,
|
headers: HeaderTypes = None,
|
||||||
cookies: CookieTypes = None,
|
cookies: CookieTypes = None,
|
||||||
version: Union[str, HTTPVersion] = HTTPVersion.H11,
|
version: str | HTTPVersion = HTTPVersion.H11,
|
||||||
timeout: TimeoutTypes = None,
|
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
|
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,
|
params: QueryTypes = None,
|
||||||
headers: HeaderTypes = None,
|
headers: HeaderTypes = None,
|
||||||
cookies: CookieTypes = None,
|
cookies: CookieTypes = None,
|
||||||
version: Union[str, HTTPVersion] = HTTPVersion.H11,
|
version: str | HTTPVersion = HTTPVersion.H11,
|
||||||
timeout: TimeoutTypes = None,
|
timeout: TimeoutTypes = None,
|
||||||
proxy: Optional[str] = None,
|
proxy: str | None = None,
|
||||||
) -> Session:
|
) -> Session:
|
||||||
return Session(
|
return Session(
|
||||||
params=params,
|
params=params,
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ FrontMatter:
|
|||||||
import contextlib
|
import contextlib
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
import logging
|
import logging
|
||||||
from typing import Any, Optional, Union
|
from typing import Any
|
||||||
from typing_extensions import override
|
from typing_extensions import override
|
||||||
|
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
@@ -63,23 +63,23 @@ def catch_closed(func):
|
|||||||
class Config(BaseModel):
|
class Config(BaseModel):
|
||||||
"""FastAPI 驱动框架设置,详情参考 FastAPI 文档"""
|
"""FastAPI 驱动框架设置,详情参考 FastAPI 文档"""
|
||||||
|
|
||||||
fastapi_openapi_url: Optional[str] = None
|
fastapi_openapi_url: str | None = None
|
||||||
"""`openapi.json` 地址,默认为 `None` 即关闭"""
|
"""`openapi.json` 地址,默认为 `None` 即关闭"""
|
||||||
fastapi_docs_url: Optional[str] = None
|
fastapi_docs_url: str | None = None
|
||||||
"""`swagger` 地址,默认为 `None` 即关闭"""
|
"""`swagger` 地址,默认为 `None` 即关闭"""
|
||||||
fastapi_redoc_url: Optional[str] = None
|
fastapi_redoc_url: str | None = None
|
||||||
"""`redoc` 地址,默认为 `None` 即关闭"""
|
"""`redoc` 地址,默认为 `None` 即关闭"""
|
||||||
fastapi_include_adapter_schema: bool = True
|
fastapi_include_adapter_schema: bool = True
|
||||||
"""是否包含适配器路由的 schema,默认为 `True`"""
|
"""是否包含适配器路由的 schema,默认为 `True`"""
|
||||||
fastapi_reload: bool = False
|
fastapi_reload: bool = False
|
||||||
"""开启/关闭冷重载"""
|
"""开启/关闭冷重载"""
|
||||||
fastapi_reload_dirs: Optional[list[str]] = None
|
fastapi_reload_dirs: list[str] | None = None
|
||||||
"""重载监控文件夹列表,默认为 uvicorn 默认值"""
|
"""重载监控文件夹列表,默认为 uvicorn 默认值"""
|
||||||
fastapi_reload_delay: float = 0.25
|
fastapi_reload_delay: float = 0.25
|
||||||
"""重载延迟,默认为 uvicorn 默认值"""
|
"""重载延迟,默认为 uvicorn 默认值"""
|
||||||
fastapi_reload_includes: Optional[list[str]] = None
|
fastapi_reload_includes: list[str] | None = None
|
||||||
"""要监听的文件列表,支持 glob pattern,默认为 uvicorn 默认值"""
|
"""要监听的文件列表,支持 glob pattern,默认为 uvicorn 默认值"""
|
||||||
fastapi_reload_excludes: Optional[list[str]] = None
|
fastapi_reload_excludes: list[str] | None = None
|
||||||
"""不要监听的文件列表,支持 glob pattern,默认为 uvicorn 默认值"""
|
"""不要监听的文件列表,支持 glob pattern,默认为 uvicorn 默认值"""
|
||||||
fastapi_extra: dict[str, Any] = {}
|
fastapi_extra: dict[str, Any] = {}
|
||||||
"""传递给 `FastAPI` 的其他参数。"""
|
"""传递给 `FastAPI` 的其他参数。"""
|
||||||
@@ -160,10 +160,10 @@ class Driver(BaseDriver, ASGIMixin):
|
|||||||
@override
|
@override
|
||||||
def run(
|
def run(
|
||||||
self,
|
self,
|
||||||
host: Optional[str] = None,
|
host: str | None = None,
|
||||||
port: Optional[int] = None,
|
port: int | None = None,
|
||||||
*args,
|
*args,
|
||||||
app: Optional[str] = None,
|
app: str | None = None,
|
||||||
**kwargs,
|
**kwargs,
|
||||||
):
|
):
|
||||||
"""使用 `uvicorn` 启动 FastAPI"""
|
"""使用 `uvicorn` 启动 FastAPI"""
|
||||||
@@ -206,8 +206,8 @@ class Driver(BaseDriver, ASGIMixin):
|
|||||||
with contextlib.suppress(Exception):
|
with contextlib.suppress(Exception):
|
||||||
json = await request.json()
|
json = await request.json()
|
||||||
|
|
||||||
data: Optional[dict] = None
|
data: dict | None = None
|
||||||
files: Optional[list[tuple[str, FileTypes]]] = None
|
files: list[tuple[str, FileTypes]] | None = None
|
||||||
with contextlib.suppress(Exception):
|
with contextlib.suppress(Exception):
|
||||||
form = await request.form()
|
form = await request.form()
|
||||||
data = {}
|
data = {}
|
||||||
@@ -280,7 +280,7 @@ class FastAPIWebSocket(BaseWebSocket):
|
|||||||
await self.websocket.close(code, reason)
|
await self.websocket.close(code, reason)
|
||||||
|
|
||||||
@override
|
@override
|
||||||
async def receive(self) -> Union[str, bytes]:
|
async def receive(self) -> str | bytes:
|
||||||
# assert self.websocket.application_state == WebSocketState.CONNECTED
|
# assert self.websocket.application_state == WebSocketState.CONNECTED
|
||||||
msg = await self.websocket.receive()
|
msg = await self.websocket.receive()
|
||||||
if msg["type"] == "websocket.disconnect":
|
if msg["type"] == "websocket.disconnect":
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ FrontMatter:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
from collections.abc import AsyncGenerator
|
from collections.abc import AsyncGenerator
|
||||||
from typing import TYPE_CHECKING, Optional, Union
|
from typing import TYPE_CHECKING
|
||||||
from typing_extensions import override
|
from typing_extensions import override
|
||||||
|
|
||||||
from multidict import CIMultiDict
|
from multidict import CIMultiDict
|
||||||
@@ -58,11 +58,11 @@ class Session(HTTPClientSession):
|
|||||||
params: QueryTypes = None,
|
params: QueryTypes = None,
|
||||||
headers: HeaderTypes = None,
|
headers: HeaderTypes = None,
|
||||||
cookies: CookieTypes = None,
|
cookies: CookieTypes = None,
|
||||||
version: Union[str, HTTPVersion] = HTTPVersion.H11,
|
version: str | HTTPVersion = HTTPVersion.H11,
|
||||||
timeout: TimeoutTypes = None,
|
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 = (
|
self._params = (
|
||||||
tuple(URL.build(query=params).query.items()) if params is not None else None
|
tuple(URL.build(query=params).query.items()) if params is not None else None
|
||||||
@@ -216,9 +216,9 @@ class Mixin(HTTPClientMixin):
|
|||||||
params: QueryTypes = None,
|
params: QueryTypes = None,
|
||||||
headers: HeaderTypes = None,
|
headers: HeaderTypes = None,
|
||||||
cookies: CookieTypes = None,
|
cookies: CookieTypes = None,
|
||||||
version: Union[str, HTTPVersion] = HTTPVersion.H11,
|
version: str | HTTPVersion = HTTPVersion.H11,
|
||||||
timeout: TimeoutTypes = None,
|
timeout: TimeoutTypes = None,
|
||||||
proxy: Optional[str] = None,
|
proxy: str | None = None,
|
||||||
) -> Session:
|
) -> Session:
|
||||||
return Session(
|
return Session(
|
||||||
params=params,
|
params=params,
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ FrontMatter:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
import signal
|
import signal
|
||||||
from typing import Optional
|
|
||||||
from typing_extensions import override
|
from typing_extensions import override
|
||||||
|
|
||||||
import anyio
|
import anyio
|
||||||
@@ -112,7 +111,7 @@ class Driver(BaseDriver):
|
|||||||
if not self.should_exit.is_set():
|
if not self.should_exit.is_set():
|
||||||
logger.info("Application startup completed.")
|
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()
|
await self.should_exit.wait()
|
||||||
|
|
||||||
if tg is not None:
|
if tg is not None:
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ FrontMatter:
|
|||||||
|
|
||||||
import asyncio
|
import asyncio
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
from typing import Any, Optional, Union, cast
|
from typing import Any, cast
|
||||||
from typing_extensions import override
|
from typing_extensions import override
|
||||||
|
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
@@ -65,13 +65,13 @@ class Config(BaseModel):
|
|||||||
|
|
||||||
quart_reload: bool = False
|
quart_reload: bool = False
|
||||||
"""开启/关闭冷重载"""
|
"""开启/关闭冷重载"""
|
||||||
quart_reload_dirs: Optional[list[str]] = None
|
quart_reload_dirs: list[str] | None = None
|
||||||
"""重载监控文件夹列表,默认为 uvicorn 默认值"""
|
"""重载监控文件夹列表,默认为 uvicorn 默认值"""
|
||||||
quart_reload_delay: float = 0.25
|
quart_reload_delay: float = 0.25
|
||||||
"""重载延迟,默认为 uvicorn 默认值"""
|
"""重载延迟,默认为 uvicorn 默认值"""
|
||||||
quart_reload_includes: Optional[list[str]] = None
|
quart_reload_includes: list[str] | None = None
|
||||||
"""要监听的文件列表,支持 glob pattern,默认为 uvicorn 默认值"""
|
"""要监听的文件列表,支持 glob pattern,默认为 uvicorn 默认值"""
|
||||||
quart_reload_excludes: Optional[list[str]] = None
|
quart_reload_excludes: list[str] | None = None
|
||||||
"""不要监听的文件列表,支持 glob pattern,默认为 uvicorn 默认值"""
|
"""不要监听的文件列表,支持 glob pattern,默认为 uvicorn 默认值"""
|
||||||
quart_extra: dict[str, Any] = {}
|
quart_extra: dict[str, Any] = {}
|
||||||
"""传递给 `Quart` 的其他参数。"""
|
"""传递给 `Quart` 的其他参数。"""
|
||||||
@@ -141,10 +141,10 @@ class Driver(BaseDriver, ASGIMixin):
|
|||||||
@override
|
@override
|
||||||
def run(
|
def run(
|
||||||
self,
|
self,
|
||||||
host: Optional[str] = None,
|
host: str | None = None,
|
||||||
port: Optional[int] = None,
|
port: int | None = None,
|
||||||
*args,
|
*args,
|
||||||
app: Optional[str] = None,
|
app: str | None = None,
|
||||||
**kwargs,
|
**kwargs,
|
||||||
):
|
):
|
||||||
"""使用 `uvicorn` 启动 Quart"""
|
"""使用 `uvicorn` 启动 Quart"""
|
||||||
@@ -257,7 +257,7 @@ class WebSocket(BaseWebSocket):
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
@catch_closed
|
@catch_closed
|
||||||
async def receive(self) -> Union[str, bytes]:
|
async def receive(self) -> str | bytes:
|
||||||
return await self.websocket.receive()
|
return await self.websocket.receive()
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|||||||
@@ -17,12 +17,12 @@ FrontMatter:
|
|||||||
description: nonebot.drivers.websockets 模块
|
description: nonebot.drivers.websockets 模块
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from collections.abc import AsyncGenerator
|
from collections.abc import AsyncGenerator, Callable
|
||||||
from contextlib import asynccontextmanager
|
from contextlib import asynccontextmanager
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
import logging
|
import logging
|
||||||
from types import CoroutineType
|
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 typing_extensions import ParamSpec, override
|
||||||
|
|
||||||
from nonebot.drivers import Request, Timeout, WebSocketClientMixin, combine_driver
|
from nonebot.drivers import Request, Timeout, WebSocketClientMixin, combine_driver
|
||||||
@@ -108,7 +108,7 @@ class WebSocket(BaseWebSocket):
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
@catch_closed
|
@catch_closed
|
||||||
async def receive(self) -> Union[str, bytes]:
|
async def receive(self) -> str | bytes:
|
||||||
return await self.websocket.recv()
|
return await self.websocket.recv()
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ FrontMatter:
|
|||||||
description: nonebot.exception 模块
|
description: nonebot.exception 模块
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from typing import Any, Optional
|
from typing import Any
|
||||||
|
|
||||||
from nonebot.compat import ModelField
|
from nonebot.compat import ModelField
|
||||||
|
|
||||||
@@ -47,7 +47,7 @@ class NoneBotException(Exception):
|
|||||||
class ParserExit(NoneBotException):
|
class ParserExit(NoneBotException):
|
||||||
"""{ref}`nonebot.rule.shell_command` 处理消息失败时返回的异常。"""
|
"""{ref}`nonebot.rule.shell_command` 处理消息失败时返回的异常。"""
|
||||||
|
|
||||||
def __init__(self, status: int = 0, message: Optional[str] = None) -> None:
|
def __init__(self, status: int = 0, message: str | None = None) -> None:
|
||||||
self.status = status
|
self.status = status
|
||||||
self.message = message
|
self.message = message
|
||||||
|
|
||||||
@@ -232,7 +232,7 @@ class DriverException(NoneBotException):
|
|||||||
class WebSocketClosed(DriverException):
|
class WebSocketClosed(DriverException):
|
||||||
"""WebSocket 连接已关闭。"""
|
"""WebSocket 连接已关闭。"""
|
||||||
|
|
||||||
def __init__(self, code: int, reason: Optional[str] = None) -> None:
|
def __init__(self, code: int, reason: str | None = None) -> None:
|
||||||
self.code = code
|
self.code = code
|
||||||
self.reason = reason
|
self.reason = reason
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import abc
|
import abc
|
||||||
from functools import partial
|
from functools import partial
|
||||||
from typing import TYPE_CHECKING, Any, ClassVar, Optional, Protocol, Union
|
from typing import TYPE_CHECKING, Any, ClassVar, Protocol
|
||||||
|
|
||||||
import anyio
|
import anyio
|
||||||
from exceptiongroup import BaseExceptionGroup, catch
|
from exceptiongroup import BaseExceptionGroup, catch
|
||||||
@@ -77,7 +77,7 @@ class Bot(abc.ABC):
|
|||||||
|
|
||||||
result: Any = None
|
result: Any = None
|
||||||
skip_calling_api: bool = False
|
skip_calling_api: bool = False
|
||||||
exception: Optional[Exception] = None
|
exception: Exception | None = None
|
||||||
|
|
||||||
if self._calling_api_hook:
|
if self._calling_api_hook:
|
||||||
logger.debug("Running CallingAPI hooks...")
|
logger.debug("Running CallingAPI hooks...")
|
||||||
@@ -180,7 +180,7 @@ class Bot(abc.ABC):
|
|||||||
async def send(
|
async def send(
|
||||||
self,
|
self,
|
||||||
event: "Event",
|
event: "Event",
|
||||||
message: Union[str, "Message", "MessageSegment"],
|
message: "str | Message | MessageSegment",
|
||||||
**kwargs: Any,
|
**kwargs: Any,
|
||||||
) -> Any:
|
) -> Any:
|
||||||
"""调用机器人基础发送消息接口
|
"""调用机器人基础发送消息接口
|
||||||
|
|||||||
@@ -5,11 +5,9 @@ from dataclasses import asdict, dataclass, field
|
|||||||
from typing import ( # noqa: UP035
|
from typing import ( # noqa: UP035
|
||||||
Any,
|
Any,
|
||||||
Generic,
|
Generic,
|
||||||
Optional,
|
|
||||||
SupportsIndex,
|
SupportsIndex,
|
||||||
Type,
|
Type,
|
||||||
TypeVar,
|
TypeVar,
|
||||||
Union,
|
|
||||||
overload,
|
overload,
|
||||||
)
|
)
|
||||||
from typing_extensions import Self
|
from typing_extensions import Self
|
||||||
@@ -51,10 +49,10 @@ class MessageSegment(abc.ABC, Generic[TM]):
|
|||||||
) -> bool:
|
) -> bool:
|
||||||
return not self == other
|
return not self == other
|
||||||
|
|
||||||
def __add__(self, other: Union[str, Self, Iterable[Self]]) -> TM:
|
def __add__(self, other: str | Self | Iterable[Self]) -> TM:
|
||||||
return self.get_message_class()(self) + other
|
return self.get_message_class()(self) + other
|
||||||
|
|
||||||
def __radd__(self, other: Union[str, Self, Iterable[Self]]) -> TM:
|
def __radd__(self, other: str | Self | Iterable[Self]) -> TM:
|
||||||
return self.get_message_class()(other) + self
|
return self.get_message_class()(other) + self
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@@ -87,7 +85,7 @@ class MessageSegment(abc.ABC, Generic[TM]):
|
|||||||
def items(self):
|
def items(self):
|
||||||
return asdict(self).items()
|
return asdict(self).items()
|
||||||
|
|
||||||
def join(self, iterable: Iterable[Union[Self, TM]]) -> TM:
|
def join(self, iterable: Iterable[Self | TM]) -> TM:
|
||||||
return self.get_message_class()(self).join(iterable)
|
return self.get_message_class()(self).join(iterable)
|
||||||
|
|
||||||
def copy(self) -> Self:
|
def copy(self) -> Self:
|
||||||
@@ -109,7 +107,7 @@ class Message(list[TMS], abc.ABC):
|
|||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
message: Union[str, None, Iterable[TMS], TMS] = None,
|
message: str | None | Iterable[TMS] | TMS = None,
|
||||||
):
|
):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
if message is None:
|
if message is None:
|
||||||
@@ -124,7 +122,7 @@ class Message(list[TMS], abc.ABC):
|
|||||||
self.extend(self._construct(message)) # pragma: no cover
|
self.extend(self._construct(message)) # pragma: no cover
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def template(cls, format_string: Union[str, TM]) -> MessageTemplate[Self]:
|
def template(cls, format_string: str | TM) -> MessageTemplate[Self]:
|
||||||
"""创建消息模板。
|
"""创建消息模板。
|
||||||
|
|
||||||
用法和 `str.format` 大致相同,支持以 `Message` 对象作为消息模板并输出消息对象。
|
用法和 `str.format` 大致相同,支持以 `Message` 对象作为消息模板并输出消息对象。
|
||||||
@@ -177,17 +175,17 @@ class Message(list[TMS], abc.ABC):
|
|||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
def __add__( # pyright: ignore[reportIncompatibleMethodOverride]
|
def __add__( # pyright: ignore[reportIncompatibleMethodOverride]
|
||||||
self, other: Union[str, TMS, Iterable[TMS]]
|
self, other: str | TMS | Iterable[TMS]
|
||||||
) -> Self:
|
) -> Self:
|
||||||
result = self.copy()
|
result = self.copy()
|
||||||
result += other
|
result += other
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def __radd__(self, other: Union[str, TMS, Iterable[TMS]]) -> Self:
|
def __radd__(self, other: str | TMS | Iterable[TMS]) -> Self:
|
||||||
result = self.__class__(other)
|
result = self.__class__(other)
|
||||||
return result + self
|
return result + self
|
||||||
|
|
||||||
def __iadd__(self, other: Union[str, TMS, Iterable[TMS]]) -> Self:
|
def __iadd__(self, other: str | TMS | Iterable[TMS]) -> Self:
|
||||||
if isinstance(other, str):
|
if isinstance(other, str):
|
||||||
self.extend(self._construct(other))
|
self.extend(self._construct(other))
|
||||||
elif isinstance(other, MessageSegment):
|
elif isinstance(other, MessageSegment):
|
||||||
@@ -255,14 +253,8 @@ class Message(list[TMS], abc.ABC):
|
|||||||
|
|
||||||
def __getitem__( # pyright: ignore[reportIncompatibleMethodOverride]
|
def __getitem__( # pyright: ignore[reportIncompatibleMethodOverride]
|
||||||
self,
|
self,
|
||||||
args: Union[
|
args: str | tuple[str, int] | tuple[str, slice] | int | slice,
|
||||||
str,
|
) -> TMS | Self:
|
||||||
tuple[str, int],
|
|
||||||
tuple[str, slice],
|
|
||||||
int,
|
|
||||||
slice,
|
|
||||||
],
|
|
||||||
) -> Union[TMS, Self]:
|
|
||||||
arg1, arg2 = args if isinstance(args, tuple) else (args, None)
|
arg1, arg2 = args if isinstance(args, tuple) else (args, None)
|
||||||
if isinstance(arg1, int) and arg2 is None:
|
if isinstance(arg1, int) and arg2 is None:
|
||||||
return super().__getitem__(arg1)
|
return super().__getitem__(arg1)
|
||||||
@@ -278,7 +270,7 @@ class Message(list[TMS], abc.ABC):
|
|||||||
raise ValueError("Incorrect arguments to slice") # pragma: no cover
|
raise ValueError("Incorrect arguments to slice") # pragma: no cover
|
||||||
|
|
||||||
def __contains__( # pyright: ignore[reportIncompatibleMethodOverride]
|
def __contains__( # pyright: ignore[reportIncompatibleMethodOverride]
|
||||||
self, value: Union[TMS, str]
|
self, value: TMS | str
|
||||||
) -> bool:
|
) -> bool:
|
||||||
"""检查消息段是否存在
|
"""检查消息段是否存在
|
||||||
|
|
||||||
@@ -291,11 +283,11 @@ class Message(list[TMS], abc.ABC):
|
|||||||
return next((seg for seg in self if seg.type == value), None) is not None
|
return next((seg for seg in self if seg.type == value), None) is not None
|
||||||
return super().__contains__(value)
|
return super().__contains__(value)
|
||||||
|
|
||||||
def has(self, value: Union[TMS, str]) -> bool:
|
def has(self, value: TMS | str) -> bool:
|
||||||
"""与 {ref}``__contains__` <nonebot.adapters.Message.__contains__>` 相同"""
|
"""与 {ref}``__contains__` <nonebot.adapters.Message.__contains__>` 相同"""
|
||||||
return value in self
|
return value in self
|
||||||
|
|
||||||
def index(self, value: Union[TMS, str], *args: SupportsIndex) -> int:
|
def index(self, value: TMS | str, *args: SupportsIndex) -> int:
|
||||||
"""索引消息段
|
"""索引消息段
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
@@ -315,7 +307,7 @@ class Message(list[TMS], abc.ABC):
|
|||||||
return super().index(first_segment, *args)
|
return super().index(first_segment, *args)
|
||||||
return super().index(value, *args)
|
return super().index(value, *args)
|
||||||
|
|
||||||
def get(self, type_: str, count: Optional[int] = None) -> Self:
|
def get(self, type_: str, count: int | None = None) -> Self:
|
||||||
"""获取指定类型的消息段
|
"""获取指定类型的消息段
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
@@ -339,7 +331,7 @@ class Message(list[TMS], abc.ABC):
|
|||||||
filtered.append(seg)
|
filtered.append(seg)
|
||||||
return filtered
|
return filtered
|
||||||
|
|
||||||
def count(self, value: Union[TMS, str]) -> int:
|
def count(self, value: TMS | str) -> int:
|
||||||
"""计算指定消息段的个数
|
"""计算指定消息段的个数
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
@@ -350,7 +342,7 @@ class Message(list[TMS], abc.ABC):
|
|||||||
"""
|
"""
|
||||||
return len(self[value]) if isinstance(value, str) else super().count(value)
|
return len(self[value]) if isinstance(value, str) else super().count(value)
|
||||||
|
|
||||||
def only(self, value: Union[TMS, str]) -> bool:
|
def only(self, value: TMS | str) -> bool:
|
||||||
"""检查消息中是否仅包含指定消息段
|
"""检查消息中是否仅包含指定消息段
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
@@ -364,7 +356,7 @@ class Message(list[TMS], abc.ABC):
|
|||||||
return all(seg == value for seg in self)
|
return all(seg == value for seg in self)
|
||||||
|
|
||||||
def append( # pyright: ignore[reportIncompatibleMethodOverride]
|
def append( # pyright: ignore[reportIncompatibleMethodOverride]
|
||||||
self, obj: Union[str, TMS]
|
self, obj: str | TMS
|
||||||
) -> Self:
|
) -> Self:
|
||||||
"""添加一个消息段到消息数组末尾。
|
"""添加一个消息段到消息数组末尾。
|
||||||
|
|
||||||
@@ -380,7 +372,7 @@ class Message(list[TMS], abc.ABC):
|
|||||||
return self
|
return self
|
||||||
|
|
||||||
def extend( # pyright: ignore[reportIncompatibleMethodOverride]
|
def extend( # pyright: ignore[reportIncompatibleMethodOverride]
|
||||||
self, obj: Union[Self, Iterable[TMS]]
|
self, obj: Self | Iterable[TMS]
|
||||||
) -> Self:
|
) -> Self:
|
||||||
"""拼接一个消息数组或多个消息段到消息数组末尾。
|
"""拼接一个消息数组或多个消息段到消息数组末尾。
|
||||||
|
|
||||||
@@ -391,7 +383,7 @@ class Message(list[TMS], abc.ABC):
|
|||||||
self.append(segment)
|
self.append(segment)
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def join(self, iterable: Iterable[Union[TMS, Self]]) -> Self:
|
def join(self, iterable: Iterable[TMS | Self]) -> Self:
|
||||||
"""将多个消息连接并将自身作为分割
|
"""将多个消息连接并将自身作为分割
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
|
|||||||
@@ -1,19 +1,16 @@
|
|||||||
from _string import formatter_field_name_split # type: ignore
|
from _string import formatter_field_name_split # type: ignore
|
||||||
from collections.abc import Mapping, Sequence
|
from collections.abc import Callable, Mapping, Sequence
|
||||||
import functools
|
import functools
|
||||||
from string import Formatter
|
from string import Formatter
|
||||||
from typing import (
|
from typing import (
|
||||||
TYPE_CHECKING,
|
TYPE_CHECKING,
|
||||||
Any,
|
Any,
|
||||||
Callable,
|
|
||||||
Generic,
|
Generic,
|
||||||
Optional,
|
TypeAlias,
|
||||||
TypeVar,
|
TypeVar,
|
||||||
Union,
|
|
||||||
cast,
|
cast,
|
||||||
overload,
|
overload,
|
||||||
)
|
)
|
||||||
from typing_extensions import TypeAlias
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from .message import Message, MessageSegment
|
from .message import Message, MessageSegment
|
||||||
@@ -50,15 +47,15 @@ class MessageTemplate(Formatter, Generic[TF]):
|
|||||||
@overload
|
@overload
|
||||||
def __init__(
|
def __init__(
|
||||||
self: "MessageTemplate[TM]",
|
self: "MessageTemplate[TM]",
|
||||||
template: Union[str, TM],
|
template: str | TM,
|
||||||
factory: type[TM],
|
factory: type[TM],
|
||||||
private_getattr: bool = False,
|
private_getattr: bool = False,
|
||||||
) -> None: ...
|
) -> None: ...
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
template: Union[str, TM],
|
template: str | TM,
|
||||||
factory: Union[type[str], type[TM]] = str,
|
factory: type[str] | type[TM] = str,
|
||||||
private_getattr: bool = False,
|
private_getattr: bool = False,
|
||||||
) -> None:
|
) -> None:
|
||||||
self.template: TF = template # type: ignore
|
self.template: TF = template # type: ignore
|
||||||
@@ -70,7 +67,7 @@ class MessageTemplate(Formatter, Generic[TF]):
|
|||||||
return f"MessageTemplate({self.template!r}, factory={self.factory!r})"
|
return f"MessageTemplate({self.template!r}, factory={self.factory!r})"
|
||||||
|
|
||||||
def add_format_spec(
|
def add_format_spec(
|
||||||
self, spec: FormatSpecFunc_T, name: Optional[str] = None
|
self, spec: FormatSpecFunc_T, name: str | None = None
|
||||||
) -> FormatSpecFunc_T:
|
) -> FormatSpecFunc_T:
|
||||||
name = name or spec.__name__
|
name = name or spec.__name__
|
||||||
if name in self.format_specs:
|
if name in self.format_specs:
|
||||||
@@ -126,7 +123,7 @@ class MessageTemplate(Formatter, Generic[TF]):
|
|||||||
format_string: str,
|
format_string: str,
|
||||||
args: Sequence[Any],
|
args: Sequence[Any],
|
||||||
kwargs: Mapping[str, Any],
|
kwargs: Mapping[str, Any],
|
||||||
used_args: set[Union[int, str]],
|
used_args: set[int | str],
|
||||||
auto_arg_index: int = 0,
|
auto_arg_index: int = 0,
|
||||||
) -> tuple[TF, int]:
|
) -> tuple[TF, int]:
|
||||||
results: list[Any] = [self.factory()]
|
results: list[Any] = [self.factory()]
|
||||||
@@ -180,7 +177,7 @@ class MessageTemplate(Formatter, Generic[TF]):
|
|||||||
|
|
||||||
def get_field(
|
def get_field(
|
||||||
self, field_name: str, args: Sequence[Any], kwargs: Mapping[str, Any]
|
self, field_name: str, args: Sequence[Any], kwargs: Mapping[str, Any]
|
||||||
) -> tuple[Any, Union[int, str]]:
|
) -> tuple[Any, int | str]:
|
||||||
first, rest = formatter_field_name_split(field_name)
|
first, rest = formatter_field_name_split(field_name)
|
||||||
obj = self.get_value(first, args, kwargs)
|
obj = self.get_value(first, args, kwargs)
|
||||||
|
|
||||||
@@ -192,7 +189,7 @@ class MessageTemplate(Formatter, Generic[TF]):
|
|||||||
return obj, first
|
return obj, first
|
||||||
|
|
||||||
def format_field(self, value: Any, format_spec: str) -> Any:
|
def format_field(self, value: Any, format_spec: str) -> Any:
|
||||||
formatter: Optional[FormatSpecFunc] = self.format_specs.get(format_spec)
|
formatter: FormatSpecFunc | None = self.format_specs.get(format_spec)
|
||||||
if formatter is None and not issubclass(self.factory, str):
|
if formatter is None and not issubclass(self.factory, str):
|
||||||
segment_class: type["MessageSegment"] = self.factory.get_segment_class()
|
segment_class: type["MessageSegment"] = self.factory.get_segment_class()
|
||||||
method = getattr(segment_class, format_spec, None)
|
method = getattr(segment_class, format_spec, None)
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
from collections.abc import Awaitable, Iterable
|
from collections.abc import Awaitable, Callable, Iterable
|
||||||
from types import TracebackType
|
from types import TracebackType
|
||||||
from typing import Any, Callable, Optional, Union, cast
|
from typing import Any, TypeAlias, cast
|
||||||
from typing_extensions import TypeAlias
|
|
||||||
|
|
||||||
import anyio
|
import anyio
|
||||||
from anyio.abc import TaskGroup
|
from anyio.abc import TaskGroup
|
||||||
@@ -11,12 +10,12 @@ from nonebot.utils import is_coroutine_callable, run_sync
|
|||||||
|
|
||||||
SYNC_LIFESPAN_FUNC: TypeAlias = Callable[[], Any]
|
SYNC_LIFESPAN_FUNC: TypeAlias = Callable[[], Any]
|
||||||
ASYNC_LIFESPAN_FUNC: TypeAlias = Callable[[], Awaitable[Any]]
|
ASYNC_LIFESPAN_FUNC: TypeAlias = Callable[[], Awaitable[Any]]
|
||||||
LIFESPAN_FUNC: TypeAlias = Union[SYNC_LIFESPAN_FUNC, ASYNC_LIFESPAN_FUNC]
|
LIFESPAN_FUNC: TypeAlias = SYNC_LIFESPAN_FUNC | ASYNC_LIFESPAN_FUNC
|
||||||
|
|
||||||
|
|
||||||
class Lifespan:
|
class Lifespan:
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
self._task_group: Optional[TaskGroup] = None
|
self._task_group: TaskGroup | None = None
|
||||||
|
|
||||||
self._startup_funcs: list[LIFESPAN_FUNC] = []
|
self._startup_funcs: list[LIFESPAN_FUNC] = []
|
||||||
self._ready_funcs: list[LIFESPAN_FUNC] = []
|
self._ready_funcs: list[LIFESPAN_FUNC] = []
|
||||||
@@ -72,9 +71,9 @@ class Lifespan:
|
|||||||
async def shutdown(
|
async def shutdown(
|
||||||
self,
|
self,
|
||||||
*,
|
*,
|
||||||
exc_type: Optional[type[BaseException]] = None,
|
exc_type: type[BaseException] | None = None,
|
||||||
exc_val: Optional[BaseException] = None,
|
exc_val: BaseException | None = None,
|
||||||
exc_tb: Optional[TracebackType] = None,
|
exc_tb: TracebackType | None = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
if self._shutdown_funcs:
|
if self._shutdown_funcs:
|
||||||
# reverse shutdown funcs to ensure stack order
|
# reverse shutdown funcs to ensure stack order
|
||||||
@@ -93,8 +92,8 @@ class Lifespan:
|
|||||||
|
|
||||||
async def __aexit__(
|
async def __aexit__(
|
||||||
self,
|
self,
|
||||||
exc_type: Optional[type[BaseException]],
|
exc_type: type[BaseException] | None,
|
||||||
exc_val: Optional[BaseException],
|
exc_val: BaseException | None,
|
||||||
exc_tb: Optional[TracebackType],
|
exc_tb: TracebackType | None,
|
||||||
) -> None:
|
) -> None:
|
||||||
await self.shutdown(exc_type=exc_type, exc_val=exc_val, exc_tb=exc_tb)
|
await self.shutdown(exc_type=exc_type, exc_val=exc_val, exc_tb=exc_tb)
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ import abc
|
|||||||
from collections.abc import AsyncGenerator
|
from collections.abc import AsyncGenerator
|
||||||
from contextlib import AsyncExitStack, asynccontextmanager
|
from contextlib import AsyncExitStack, asynccontextmanager
|
||||||
from types import TracebackType
|
from types import TracebackType
|
||||||
from typing import TYPE_CHECKING, Any, ClassVar, Optional, Union
|
from typing import TYPE_CHECKING, Any, ClassVar, TypeAlias
|
||||||
from typing_extensions import Self, TypeAlias
|
from typing_extensions import Self
|
||||||
|
|
||||||
from anyio import CancelScope, create_task_group
|
from anyio import CancelScope, create_task_group
|
||||||
from anyio.abc import TaskGroup
|
from anyio.abc import TaskGroup
|
||||||
@@ -245,9 +245,9 @@ class HTTPClientSession(abc.ABC):
|
|||||||
params: QueryTypes = None,
|
params: QueryTypes = None,
|
||||||
headers: HeaderTypes = None,
|
headers: HeaderTypes = None,
|
||||||
cookies: CookieTypes = None,
|
cookies: CookieTypes = None,
|
||||||
version: Union[str, HTTPVersion] = HTTPVersion.H11,
|
version: str | HTTPVersion = HTTPVersion.H11,
|
||||||
timeout: TimeoutTypes = None,
|
timeout: TimeoutTypes = None,
|
||||||
proxy: Optional[str] = None,
|
proxy: str | None = None,
|
||||||
):
|
):
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
@@ -283,9 +283,9 @@ class HTTPClientSession(abc.ABC):
|
|||||||
|
|
||||||
async def __aexit__(
|
async def __aexit__(
|
||||||
self,
|
self,
|
||||||
exc_type: Optional[type[BaseException]],
|
exc_type: type[BaseException] | None,
|
||||||
exc: Optional[BaseException],
|
exc: BaseException | None,
|
||||||
tb: Optional[TracebackType],
|
tb: TracebackType | None,
|
||||||
) -> None:
|
) -> None:
|
||||||
await self.close()
|
await self.close()
|
||||||
|
|
||||||
@@ -315,9 +315,9 @@ class HTTPClientMixin(ForwardMixin):
|
|||||||
params: QueryTypes = None,
|
params: QueryTypes = None,
|
||||||
headers: HeaderTypes = None,
|
headers: HeaderTypes = None,
|
||||||
cookies: CookieTypes = None,
|
cookies: CookieTypes = None,
|
||||||
version: Union[str, HTTPVersion] = HTTPVersion.H11,
|
version: str | HTTPVersion = HTTPVersion.H11,
|
||||||
timeout: TimeoutTypes = None,
|
timeout: TimeoutTypes = None,
|
||||||
proxy: Optional[str] = None,
|
proxy: str | None = None,
|
||||||
) -> HTTPClientSession:
|
) -> HTTPClientSession:
|
||||||
"""获取一个 HTTP 会话"""
|
"""获取一个 HTTP 会话"""
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from typing import TYPE_CHECKING, TypeVar, Union, overload
|
from typing import TYPE_CHECKING, TypeVar, overload
|
||||||
|
|
||||||
from .abstract import Driver, Mixin
|
from .abstract import Driver, Mixin
|
||||||
|
|
||||||
@@ -21,7 +21,7 @@ def combine_driver(
|
|||||||
|
|
||||||
def combine_driver(
|
def combine_driver(
|
||||||
driver: type[D], *mixins: type[Mixin]
|
driver: type[D], *mixins: type[Mixin]
|
||||||
) -> Union[type[D], type["CombinedDriver"]]:
|
) -> type[D] | type["CombinedDriver"]:
|
||||||
"""将一个驱动器和多个混入类合并。"""
|
"""将一个驱动器和多个混入类合并。"""
|
||||||
# check first
|
# check first
|
||||||
if not issubclass(driver, Driver):
|
if not issubclass(driver, Driver):
|
||||||
|
|||||||
@@ -1,48 +1,51 @@
|
|||||||
import abc
|
import abc
|
||||||
from collections.abc import Awaitable, Iterator, Mapping, MutableMapping
|
from collections.abc import Awaitable, Callable, Iterator, Mapping, MutableMapping
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
from http.cookiejar import Cookie, CookieJar
|
from http.cookiejar import Cookie, CookieJar
|
||||||
from typing import IO, Any, Callable, Optional, Union
|
from typing import IO, Any, TypeAlias
|
||||||
from typing_extensions import TypeAlias
|
|
||||||
import urllib.request
|
import urllib.request
|
||||||
|
|
||||||
from multidict import CIMultiDict
|
from multidict import CIMultiDict
|
||||||
from yarl import URL as URL
|
from yarl import URL as URL
|
||||||
|
|
||||||
RawURL: TypeAlias = tuple[bytes, bytes, Optional[int], bytes]
|
|
||||||
|
|
||||||
SimpleQuery: TypeAlias = Union[str, int, float]
|
@dataclass
|
||||||
QueryVariable: TypeAlias = Union[SimpleQuery, list[SimpleQuery]]
|
class Timeout:
|
||||||
QueryTypes: TypeAlias = Union[
|
"""Request 超时配置。"""
|
||||||
None, str, Mapping[str, QueryVariable], list[tuple[str, SimpleQuery]]
|
|
||||||
]
|
|
||||||
|
|
||||||
HeaderTypes: TypeAlias = Union[
|
total: float | None = None
|
||||||
None,
|
connect: float | None = None
|
||||||
CIMultiDict[str],
|
read: float | None = None
|
||||||
dict[str, str],
|
|
||||||
list[tuple[str, str]],
|
|
||||||
]
|
|
||||||
|
|
||||||
CookieTypes: TypeAlias = Union[
|
|
||||||
None, "Cookies", CookieJar, dict[str, str], list[tuple[str, str]]
|
|
||||||
]
|
|
||||||
|
|
||||||
ContentTypes: TypeAlias = Union[str, bytes, None]
|
RawURL: TypeAlias = tuple[bytes, bytes, int | None, bytes]
|
||||||
DataTypes: TypeAlias = Union[dict, None]
|
|
||||||
FileContent: TypeAlias = Union[IO[bytes], bytes]
|
SimpleQuery: TypeAlias = str | int | float
|
||||||
FileType: TypeAlias = tuple[Optional[str], FileContent, Optional[str]]
|
QueryVariable: TypeAlias = SimpleQuery | list[SimpleQuery]
|
||||||
FileTypes: TypeAlias = Union[
|
QueryTypes: TypeAlias = (
|
||||||
# file (or bytes)
|
None | str | Mapping[str, QueryVariable] | list[tuple[str, SimpleQuery]]
|
||||||
FileContent,
|
)
|
||||||
# (filename, file (or bytes))
|
|
||||||
tuple[Optional[str], FileContent],
|
HeaderTypes: TypeAlias = (
|
||||||
# (filename, file (or bytes), content_type)
|
None | CIMultiDict[str] | dict[str, str] | list[tuple[str, str]]
|
||||||
FileType,
|
)
|
||||||
]
|
|
||||||
FilesTypes: TypeAlias = Union[dict[str, FileTypes], list[tuple[str, FileTypes]], None]
|
CookieTypes: TypeAlias = (
|
||||||
TimeoutTypes: TypeAlias = Union[float, "Timeout", None]
|
"None | Cookies | CookieJar | dict[str, str] | list[tuple[str, str]]"
|
||||||
|
)
|
||||||
|
|
||||||
|
ContentTypes: TypeAlias = str | bytes | None
|
||||||
|
DataTypes: TypeAlias = dict | None
|
||||||
|
FileContent: TypeAlias = IO[bytes] | bytes
|
||||||
|
FileType: TypeAlias = tuple[str | None, FileContent, str | None]
|
||||||
|
FileTypes: TypeAlias = (
|
||||||
|
FileContent # file (or bytes)
|
||||||
|
| tuple[str | None, FileContent] # (filename, file (or bytes))
|
||||||
|
| FileType # (filename, file (or bytes), content_type)
|
||||||
|
)
|
||||||
|
FilesTypes: TypeAlias = dict[str, FileTypes] | list[tuple[str, FileTypes]] | None
|
||||||
|
TimeoutTypes: TypeAlias = float | Timeout | None
|
||||||
|
|
||||||
|
|
||||||
class HTTPVersion(Enum):
|
class HTTPVersion(Enum):
|
||||||
@@ -51,20 +54,11 @@ class HTTPVersion(Enum):
|
|||||||
H2 = "2"
|
H2 = "2"
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
|
||||||
class Timeout:
|
|
||||||
"""Request 超时配置。"""
|
|
||||||
|
|
||||||
total: Optional[float] = None
|
|
||||||
connect: Optional[float] = None
|
|
||||||
read: Optional[float] = None
|
|
||||||
|
|
||||||
|
|
||||||
class Request:
|
class Request:
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
method: Union[str, bytes],
|
method: str | bytes,
|
||||||
url: Union["URL", str, RawURL],
|
url: "URL | str | RawURL",
|
||||||
*,
|
*,
|
||||||
params: QueryTypes = None,
|
params: QueryTypes = None,
|
||||||
headers: HeaderTypes = None,
|
headers: HeaderTypes = None,
|
||||||
@@ -73,9 +67,9 @@ class Request:
|
|||||||
data: DataTypes = None,
|
data: DataTypes = None,
|
||||||
json: Any = None,
|
json: Any = None,
|
||||||
files: FilesTypes = None,
|
files: FilesTypes = None,
|
||||||
version: Union[str, HTTPVersion] = HTTPVersion.H11,
|
version: str | HTTPVersion = HTTPVersion.H11,
|
||||||
timeout: TimeoutTypes = None,
|
timeout: TimeoutTypes = None,
|
||||||
proxy: Optional[str] = None,
|
proxy: str | None = None,
|
||||||
):
|
):
|
||||||
# method
|
# method
|
||||||
self.method: str = (
|
self.method: str = (
|
||||||
@@ -88,7 +82,7 @@ class Request:
|
|||||||
# timeout
|
# timeout
|
||||||
self.timeout: TimeoutTypes = timeout
|
self.timeout: TimeoutTypes = timeout
|
||||||
# proxy
|
# proxy
|
||||||
self.proxy: Optional[str] = proxy
|
self.proxy: str | None = proxy
|
||||||
|
|
||||||
# url
|
# url
|
||||||
if isinstance(url, tuple):
|
if isinstance(url, tuple):
|
||||||
@@ -117,7 +111,7 @@ class Request:
|
|||||||
self.content: ContentTypes = content
|
self.content: ContentTypes = content
|
||||||
self.data: DataTypes = data
|
self.data: DataTypes = data
|
||||||
self.json: Any = json
|
self.json: Any = json
|
||||||
self.files: Optional[list[tuple[str, FileType]]] = None
|
self.files: list[tuple[str, FileType]] | None = None
|
||||||
if files:
|
if files:
|
||||||
self.files = []
|
self.files = []
|
||||||
files_ = files.items() if isinstance(files, dict) else files
|
files_ = files.items() if isinstance(files, dict) else files
|
||||||
@@ -140,7 +134,7 @@ class Response:
|
|||||||
*,
|
*,
|
||||||
headers: HeaderTypes = None,
|
headers: HeaderTypes = None,
|
||||||
content: ContentTypes = None,
|
content: ContentTypes = None,
|
||||||
request: Optional[Request] = None,
|
request: Request | None = None,
|
||||||
):
|
):
|
||||||
# status code
|
# status code
|
||||||
self.status_code: int = status_code
|
self.status_code: int = status_code
|
||||||
@@ -153,7 +147,7 @@ class Response:
|
|||||||
self.content: ContentTypes = content
|
self.content: ContentTypes = content
|
||||||
|
|
||||||
# request
|
# request
|
||||||
self.request: Optional[Request] = request
|
self.request: Request | None = request
|
||||||
|
|
||||||
def __repr__(self) -> str:
|
def __repr__(self) -> str:
|
||||||
return f"{self.__class__.__name__}(status_code={self.status_code!r})"
|
return f"{self.__class__.__name__}(status_code={self.status_code!r})"
|
||||||
@@ -183,7 +177,7 @@ class WebSocket(abc.ABC):
|
|||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
@abc.abstractmethod
|
@abc.abstractmethod
|
||||||
async def receive(self) -> Union[str, bytes]:
|
async def receive(self) -> str | bytes:
|
||||||
"""接收一条 WebSocket text/bytes 信息"""
|
"""接收一条 WebSocket text/bytes 信息"""
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
@@ -197,7 +191,7 @@ class WebSocket(abc.ABC):
|
|||||||
"""接收一条 WebSocket binary 信息"""
|
"""接收一条 WebSocket binary 信息"""
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
async def send(self, data: Union[str, bytes]) -> None:
|
async def send(self, data: str | bytes) -> None:
|
||||||
"""发送一条 WebSocket text/bytes 信息"""
|
"""发送一条 WebSocket text/bytes 信息"""
|
||||||
if isinstance(data, str):
|
if isinstance(data, str):
|
||||||
await self.send_text(data)
|
await self.send_text(data)
|
||||||
@@ -258,11 +252,11 @@ class Cookies(MutableMapping):
|
|||||||
def get( # pyright: ignore[reportIncompatibleMethodOverride]
|
def get( # pyright: ignore[reportIncompatibleMethodOverride]
|
||||||
self,
|
self,
|
||||||
name: str,
|
name: str,
|
||||||
default: Optional[str] = None,
|
default: str | None = None,
|
||||||
domain: Optional[str] = None,
|
domain: str | None = None,
|
||||||
path: Optional[str] = None,
|
path: str | None = None,
|
||||||
) -> Optional[str]:
|
) -> str | None:
|
||||||
value: Optional[str] = None
|
value: str | None = None
|
||||||
for cookie in self.jar:
|
for cookie in self.jar:
|
||||||
if (
|
if (
|
||||||
cookie.name == name
|
cookie.name == name
|
||||||
@@ -277,7 +271,7 @@ class Cookies(MutableMapping):
|
|||||||
return default if value is None else value
|
return default if value is None else value
|
||||||
|
|
||||||
def delete(
|
def delete(
|
||||||
self, name: str, domain: Optional[str] = None, path: Optional[str] = None
|
self, name: str, domain: str | None = None, path: str | None = None
|
||||||
) -> None:
|
) -> None:
|
||||||
if domain is not None and path is not None:
|
if domain is not None and path is not None:
|
||||||
return self.jar.clear(domain, path, name)
|
return self.jar.clear(domain, path, name)
|
||||||
@@ -293,7 +287,7 @@ class Cookies(MutableMapping):
|
|||||||
for cookie in remove:
|
for cookie in remove:
|
||||||
self.jar.clear(cookie.domain, cookie.path, cookie.name)
|
self.jar.clear(cookie.domain, cookie.path, cookie.name)
|
||||||
|
|
||||||
def clear(self, domain: Optional[str] = None, path: Optional[str] = None) -> None:
|
def clear(self, domain: str | None = None, path: str | None = None) -> None:
|
||||||
self.jar.clear(domain, path)
|
self.jar.clear(domain, path)
|
||||||
|
|
||||||
def update( # pyright: ignore[reportIncompatibleMethodOverride]
|
def update( # pyright: ignore[reportIncompatibleMethodOverride]
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
from collections.abc import ItemsView, Iterator, KeysView, MutableMapping, ValuesView
|
from collections.abc import ItemsView, Iterator, KeysView, MutableMapping, ValuesView
|
||||||
from typing import TYPE_CHECKING, Optional, TypeVar, Union, overload
|
from typing import TYPE_CHECKING, TypeVar, overload
|
||||||
|
|
||||||
from .provider import DEFAULT_PROVIDER_CLASS, MatcherProvider
|
from .provider import DEFAULT_PROVIDER_CLASS, MatcherProvider
|
||||||
|
|
||||||
@@ -52,7 +52,7 @@ class MatcherManager(MutableMapping[int, list[type["Matcher"]]]):
|
|||||||
return self.provider.items()
|
return self.provider.items()
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
def get(self, key: int) -> Optional[list[type["Matcher"]]]: ...
|
def get(self, key: int) -> list[type["Matcher"]] | None: ...
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
def get(
|
def get(
|
||||||
@@ -60,11 +60,11 @@ class MatcherManager(MutableMapping[int, list[type["Matcher"]]]):
|
|||||||
) -> list[type["Matcher"]]: ...
|
) -> list[type["Matcher"]]: ...
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
def get(self, key: int, default: T) -> Union[list[type["Matcher"]], T]: ...
|
def get(self, key: int, default: T) -> list[type["Matcher"]] | T: ...
|
||||||
|
|
||||||
def get(
|
def get(
|
||||||
self, key: int, default: Optional[T] = None
|
self, key: int, default: T | None = None
|
||||||
) -> Optional[Union[list[type["Matcher"]], T]]:
|
) -> list[type["Matcher"]] | T | None:
|
||||||
return self.provider.get(key, default)
|
return self.provider.get(key, default)
|
||||||
|
|
||||||
def pop( # pyright: ignore[reportIncompatibleMethodOverride]
|
def pop( # pyright: ignore[reportIncompatibleMethodOverride]
|
||||||
|
|||||||
@@ -13,10 +13,8 @@ from typing import ( # noqa: UP035
|
|||||||
Callable,
|
Callable,
|
||||||
ClassVar,
|
ClassVar,
|
||||||
NoReturn,
|
NoReturn,
|
||||||
Optional,
|
|
||||||
Type,
|
Type,
|
||||||
TypeVar,
|
TypeVar,
|
||||||
Union,
|
|
||||||
overload,
|
overload,
|
||||||
)
|
)
|
||||||
from typing_extensions import Self
|
from typing_extensions import Self
|
||||||
@@ -87,15 +85,15 @@ current_handler: ContextVar[Dependent[Any]] = ContextVar("current_handler")
|
|||||||
class MatcherSource:
|
class MatcherSource:
|
||||||
"""Matcher 源代码上下文信息"""
|
"""Matcher 源代码上下文信息"""
|
||||||
|
|
||||||
plugin_id: Optional[str] = None
|
plugin_id: str | None = None
|
||||||
"""事件响应器所在插件标识符"""
|
"""事件响应器所在插件标识符"""
|
||||||
module_name: Optional[str] = None
|
module_name: str | None = None
|
||||||
"""事件响应器所在插件模块的路径名"""
|
"""事件响应器所在插件模块的路径名"""
|
||||||
lineno: Optional[int] = None
|
lineno: int | None = None
|
||||||
"""事件响应器所在行号"""
|
"""事件响应器所在行号"""
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def plugin(self) -> Optional["Plugin"]:
|
def plugin(self) -> "Plugin | None":
|
||||||
"""事件响应器所在插件"""
|
"""事件响应器所在插件"""
|
||||||
from nonebot.plugin import get_plugin
|
from nonebot.plugin import get_plugin
|
||||||
|
|
||||||
@@ -103,17 +101,17 @@ class MatcherSource:
|
|||||||
return get_plugin(self.plugin_id)
|
return get_plugin(self.plugin_id)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def plugin_name(self) -> Optional[str]:
|
def plugin_name(self) -> str | None:
|
||||||
"""事件响应器所在插件名"""
|
"""事件响应器所在插件名"""
|
||||||
return self.plugin and self.plugin.name
|
return self.plugin and self.plugin.name
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def module(self) -> Optional[ModuleType]:
|
def module(self) -> ModuleType | None:
|
||||||
if self.module_name is not None:
|
if self.module_name is not None:
|
||||||
return sys.modules.get(self.module_name)
|
return sys.modules.get(self.module_name)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def file(self) -> Optional[Path]:
|
def file(self) -> Path | None:
|
||||||
if self.module is not None and (file := inspect.getsourcefile(self.module)):
|
if self.module is not None and (file := inspect.getsourcefile(self.module)):
|
||||||
return Path(file).absolute()
|
return Path(file).absolute()
|
||||||
|
|
||||||
@@ -121,8 +119,8 @@ class MatcherSource:
|
|||||||
class MatcherMeta(type):
|
class MatcherMeta(type):
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
type: str
|
type: str
|
||||||
_source: Optional[MatcherSource]
|
_source: MatcherSource | None
|
||||||
module_name: Optional[str]
|
module_name: str | None
|
||||||
|
|
||||||
def __repr__(self) -> str:
|
def __repr__(self) -> str:
|
||||||
return (
|
return (
|
||||||
@@ -140,7 +138,7 @@ class MatcherMeta(type):
|
|||||||
class Matcher(metaclass=MatcherMeta):
|
class Matcher(metaclass=MatcherMeta):
|
||||||
"""事件响应器类"""
|
"""事件响应器类"""
|
||||||
|
|
||||||
_source: ClassVar[Optional[MatcherSource]] = None
|
_source: ClassVar[MatcherSource | None] = None
|
||||||
|
|
||||||
type: ClassVar[str] = ""
|
type: ClassVar[str] = ""
|
||||||
"""事件响应器类型"""
|
"""事件响应器类型"""
|
||||||
@@ -156,15 +154,15 @@ class Matcher(metaclass=MatcherMeta):
|
|||||||
"""事件响应器是否阻止事件传播"""
|
"""事件响应器是否阻止事件传播"""
|
||||||
temp: ClassVar[bool] = False
|
temp: ClassVar[bool] = False
|
||||||
"""事件响应器是否为临时"""
|
"""事件响应器是否为临时"""
|
||||||
expire_time: ClassVar[Optional[datetime]] = None
|
expire_time: ClassVar[datetime | None] = None
|
||||||
"""事件响应器过期时间点"""
|
"""事件响应器过期时间点"""
|
||||||
|
|
||||||
_default_state: ClassVar[T_State] = {}
|
_default_state: ClassVar[T_State] = {}
|
||||||
"""事件响应器默认状态"""
|
"""事件响应器默认状态"""
|
||||||
|
|
||||||
_default_type_updater: ClassVar[Optional[Dependent[str]]] = None
|
_default_type_updater: ClassVar[Dependent[str] | None] = None
|
||||||
"""事件响应器类型更新函数"""
|
"""事件响应器类型更新函数"""
|
||||||
_default_permission_updater: ClassVar[Optional[Dependent[Permission]]] = None
|
_default_permission_updater: ClassVar[Dependent[Permission] | None] = None
|
||||||
"""事件响应器权限更新函数"""
|
"""事件响应器权限更新函数"""
|
||||||
|
|
||||||
HANDLER_PARAM_TYPES: ClassVar[tuple[Type[Param], ...]] = ( # noqa: UP006
|
HANDLER_PARAM_TYPES: ClassVar[tuple[Type[Param], ...]] = ( # noqa: UP006
|
||||||
@@ -197,22 +195,22 @@ class Matcher(metaclass=MatcherMeta):
|
|||||||
def new(
|
def new(
|
||||||
cls,
|
cls,
|
||||||
type_: str = "",
|
type_: str = "",
|
||||||
rule: Optional[Rule] = None,
|
rule: Rule | None = None,
|
||||||
permission: Optional[Permission] = None,
|
permission: Permission | None = None,
|
||||||
handlers: Optional[list[Union[T_Handler, Dependent[Any]]]] = None,
|
handlers: list[T_Handler | Dependent[Any]] | None = None,
|
||||||
temp: bool = False,
|
temp: bool = False,
|
||||||
priority: int = 1,
|
priority: int = 1,
|
||||||
block: bool = False,
|
block: bool = False,
|
||||||
*,
|
*,
|
||||||
plugin: Optional["Plugin"] = None,
|
plugin: "Plugin | None" = None,
|
||||||
module: Optional[ModuleType] = None,
|
module: ModuleType | None = None,
|
||||||
source: Optional[MatcherSource] = None,
|
source: MatcherSource | None = None,
|
||||||
expire_time: Optional[Union[datetime, timedelta]] = None,
|
expire_time: datetime | timedelta | None = None,
|
||||||
default_state: Optional[T_State] = None,
|
default_state: T_State | None = None,
|
||||||
default_type_updater: Optional[Union[T_TypeUpdater, Dependent[str]]] = None,
|
default_type_updater: T_TypeUpdater | Dependent[str] | None = None,
|
||||||
default_permission_updater: Optional[
|
default_permission_updater: T_PermissionUpdater
|
||||||
Union[T_PermissionUpdater, Dependent[Permission]]
|
| Dependent[Permission]
|
||||||
] = None,
|
| None = None,
|
||||||
) -> Type[Self]: # noqa: UP006
|
) -> Type[Self]: # noqa: UP006
|
||||||
"""
|
"""
|
||||||
创建一个新的事件响应器,并存储至 `matchers <#matchers>`_
|
创建一个新的事件响应器,并存储至 `matchers <#matchers>`_
|
||||||
@@ -332,27 +330,27 @@ class Matcher(metaclass=MatcherMeta):
|
|||||||
matchers[cls.priority].remove(cls)
|
matchers[cls.priority].remove(cls)
|
||||||
|
|
||||||
@classproperty
|
@classproperty
|
||||||
def plugin(cls) -> Optional["Plugin"]:
|
def plugin(cls) -> "Plugin | None":
|
||||||
"""事件响应器所在插件"""
|
"""事件响应器所在插件"""
|
||||||
return cls._source and cls._source.plugin
|
return cls._source and cls._source.plugin
|
||||||
|
|
||||||
@classproperty
|
@classproperty
|
||||||
def plugin_id(cls) -> Optional[str]:
|
def plugin_id(cls) -> str | None:
|
||||||
"""事件响应器所在插件标识符"""
|
"""事件响应器所在插件标识符"""
|
||||||
return cls._source and cls._source.plugin_id
|
return cls._source and cls._source.plugin_id
|
||||||
|
|
||||||
@classproperty
|
@classproperty
|
||||||
def plugin_name(cls) -> Optional[str]:
|
def plugin_name(cls) -> str | None:
|
||||||
"""事件响应器所在插件名"""
|
"""事件响应器所在插件名"""
|
||||||
return cls._source and cls._source.plugin_name
|
return cls._source and cls._source.plugin_name
|
||||||
|
|
||||||
@classproperty
|
@classproperty
|
||||||
def module(cls) -> Optional[ModuleType]:
|
def module(cls) -> ModuleType | None:
|
||||||
"""事件响应器所在插件模块"""
|
"""事件响应器所在插件模块"""
|
||||||
return cls._source and cls._source.module
|
return cls._source and cls._source.module
|
||||||
|
|
||||||
@classproperty
|
@classproperty
|
||||||
def module_name(cls) -> Optional[str]:
|
def module_name(cls) -> str | None:
|
||||||
"""事件响应器所在插件模块路径"""
|
"""事件响应器所在插件模块路径"""
|
||||||
return cls._source and cls._source.module_name
|
return cls._source and cls._source.module_name
|
||||||
|
|
||||||
@@ -361,8 +359,8 @@ class Matcher(metaclass=MatcherMeta):
|
|||||||
cls,
|
cls,
|
||||||
bot: Bot,
|
bot: Bot,
|
||||||
event: Event,
|
event: Event,
|
||||||
stack: Optional[AsyncExitStack] = None,
|
stack: AsyncExitStack | None = None,
|
||||||
dependency_cache: Optional[T_DependencyCache] = None,
|
dependency_cache: T_DependencyCache | None = None,
|
||||||
) -> bool:
|
) -> bool:
|
||||||
"""检查是否满足触发权限
|
"""检查是否满足触发权限
|
||||||
|
|
||||||
@@ -386,8 +384,8 @@ class Matcher(metaclass=MatcherMeta):
|
|||||||
bot: Bot,
|
bot: Bot,
|
||||||
event: Event,
|
event: Event,
|
||||||
state: T_State,
|
state: T_State,
|
||||||
stack: Optional[AsyncExitStack] = None,
|
stack: AsyncExitStack | None = None,
|
||||||
dependency_cache: Optional[T_DependencyCache] = None,
|
dependency_cache: T_DependencyCache | None = None,
|
||||||
) -> bool:
|
) -> bool:
|
||||||
"""检查是否满足匹配规则
|
"""检查是否满足匹配规则
|
||||||
|
|
||||||
@@ -432,7 +430,7 @@ class Matcher(metaclass=MatcherMeta):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def append_handler(
|
def append_handler(
|
||||||
cls, handler: T_Handler, parameterless: Optional[Iterable[Any]] = None
|
cls, handler: T_Handler, parameterless: Iterable[Any] | None = None
|
||||||
) -> Dependent[Any]:
|
) -> Dependent[Any]:
|
||||||
handler_ = Dependent[Any].parse(
|
handler_ = Dependent[Any].parse(
|
||||||
call=handler,
|
call=handler,
|
||||||
@@ -444,7 +442,7 @@ class Matcher(metaclass=MatcherMeta):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def handle(
|
def handle(
|
||||||
cls, parameterless: Optional[Iterable[Any]] = None
|
cls, parameterless: Iterable[Any] | None = None
|
||||||
) -> Callable[[T_Handler], T_Handler]:
|
) -> Callable[[T_Handler], T_Handler]:
|
||||||
"""装饰一个函数来向事件响应器直接添加一个处理函数
|
"""装饰一个函数来向事件响应器直接添加一个处理函数
|
||||||
|
|
||||||
@@ -460,7 +458,7 @@ class Matcher(metaclass=MatcherMeta):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def receive(
|
def receive(
|
||||||
cls, id: str = "", parameterless: Optional[Iterable[Any]] = None
|
cls, id: str = "", parameterless: Iterable[Any] | None = None
|
||||||
) -> Callable[[T_Handler], T_Handler]:
|
) -> Callable[[T_Handler], T_Handler]:
|
||||||
"""装饰一个函数来指示 NoneBot 在接收用户新的一条消息后继续运行该函数
|
"""装饰一个函数来指示 NoneBot 在接收用户新的一条消息后继续运行该函数
|
||||||
|
|
||||||
@@ -503,8 +501,8 @@ class Matcher(metaclass=MatcherMeta):
|
|||||||
def got(
|
def got(
|
||||||
cls,
|
cls,
|
||||||
key: str,
|
key: str,
|
||||||
prompt: Optional[Union[str, Message, MessageSegment, MessageTemplate]] = None,
|
prompt: str | Message | MessageSegment | MessageTemplate | None = None,
|
||||||
parameterless: Optional[Iterable[Any]] = None,
|
parameterless: Iterable[Any] | None = None,
|
||||||
) -> Callable[[T_Handler], T_Handler]:
|
) -> Callable[[T_Handler], T_Handler]:
|
||||||
"""装饰一个函数来指示 NoneBot 获取一个参数 `key`
|
"""装饰一个函数来指示 NoneBot 获取一个参数 `key`
|
||||||
|
|
||||||
@@ -550,7 +548,7 @@ class Matcher(metaclass=MatcherMeta):
|
|||||||
@classmethod
|
@classmethod
|
||||||
async def send(
|
async def send(
|
||||||
cls,
|
cls,
|
||||||
message: Union[str, Message, MessageSegment, MessageTemplate],
|
message: str | Message | MessageSegment | MessageTemplate,
|
||||||
**kwargs: Any,
|
**kwargs: Any,
|
||||||
) -> Any:
|
) -> Any:
|
||||||
"""发送一条消息给当前交互用户
|
"""发送一条消息给当前交互用户
|
||||||
@@ -572,7 +570,7 @@ class Matcher(metaclass=MatcherMeta):
|
|||||||
@classmethod
|
@classmethod
|
||||||
async def finish(
|
async def finish(
|
||||||
cls,
|
cls,
|
||||||
message: Optional[Union[str, Message, MessageSegment, MessageTemplate]] = None,
|
message: str | Message | MessageSegment | MessageTemplate | None = None,
|
||||||
**kwargs,
|
**kwargs,
|
||||||
) -> NoReturn:
|
) -> NoReturn:
|
||||||
"""发送一条消息给当前交互用户并结束当前事件响应器
|
"""发送一条消息给当前交互用户并结束当前事件响应器
|
||||||
@@ -589,7 +587,7 @@ class Matcher(metaclass=MatcherMeta):
|
|||||||
@classmethod
|
@classmethod
|
||||||
async def pause(
|
async def pause(
|
||||||
cls,
|
cls,
|
||||||
prompt: Optional[Union[str, Message, MessageSegment, MessageTemplate]] = None,
|
prompt: str | Message | MessageSegment | MessageTemplate | None = None,
|
||||||
**kwargs,
|
**kwargs,
|
||||||
) -> NoReturn:
|
) -> NoReturn:
|
||||||
"""发送一条消息给当前交互用户并暂停事件响应器,在接收用户新的一条消息后继续下一个处理函数
|
"""发送一条消息给当前交互用户并暂停事件响应器,在接收用户新的一条消息后继续下一个处理函数
|
||||||
@@ -613,7 +611,7 @@ class Matcher(metaclass=MatcherMeta):
|
|||||||
@classmethod
|
@classmethod
|
||||||
async def reject(
|
async def reject(
|
||||||
cls,
|
cls,
|
||||||
prompt: Optional[Union[str, Message, MessageSegment, MessageTemplate]] = None,
|
prompt: str | Message | MessageSegment | MessageTemplate | None = None,
|
||||||
**kwargs,
|
**kwargs,
|
||||||
) -> NoReturn:
|
) -> NoReturn:
|
||||||
"""最近使用 `got` / `receive` 接收的消息不符合预期,
|
"""最近使用 `got` / `receive` 接收的消息不符合预期,
|
||||||
@@ -643,7 +641,7 @@ class Matcher(metaclass=MatcherMeta):
|
|||||||
async def reject_arg(
|
async def reject_arg(
|
||||||
cls,
|
cls,
|
||||||
key: str,
|
key: str,
|
||||||
prompt: Optional[Union[str, Message, MessageSegment, MessageTemplate]] = None,
|
prompt: str | Message | MessageSegment | MessageTemplate | None = None,
|
||||||
**kwargs,
|
**kwargs,
|
||||||
) -> NoReturn:
|
) -> NoReturn:
|
||||||
"""最近使用 `got` 接收的消息不符合预期,
|
"""最近使用 `got` 接收的消息不符合预期,
|
||||||
@@ -668,7 +666,7 @@ class Matcher(metaclass=MatcherMeta):
|
|||||||
async def reject_receive(
|
async def reject_receive(
|
||||||
cls,
|
cls,
|
||||||
id: str = "",
|
id: str = "",
|
||||||
prompt: Optional[Union[str, Message, MessageSegment, MessageTemplate]] = None,
|
prompt: str | Message | MessageSegment | MessageTemplate | None = None,
|
||||||
**kwargs,
|
**kwargs,
|
||||||
) -> NoReturn:
|
) -> NoReturn:
|
||||||
"""最近使用 `receive` 接收的消息不符合预期,
|
"""最近使用 `receive` 接收的消息不符合预期,
|
||||||
@@ -698,14 +696,12 @@ class Matcher(metaclass=MatcherMeta):
|
|||||||
raise SkippedException
|
raise SkippedException
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
def get_receive(self, id: str) -> Union[Event, None]: ...
|
def get_receive(self, id: str) -> Event | None: ...
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
def get_receive(self, id: str, default: T) -> Union[Event, T]: ...
|
def get_receive(self, id: str, default: T) -> Event | T: ...
|
||||||
|
|
||||||
def get_receive(
|
def get_receive(self, id: str, default: T | None = None) -> Event | T | None:
|
||||||
self, id: str, default: Optional[T] = None
|
|
||||||
) -> Optional[Union[Event, T]]:
|
|
||||||
"""获取一个 `receive` 事件
|
"""获取一个 `receive` 事件
|
||||||
|
|
||||||
如果没有找到对应的事件,返回 `default` 值
|
如果没有找到对应的事件,返回 `default` 值
|
||||||
@@ -718,14 +714,12 @@ class Matcher(metaclass=MatcherMeta):
|
|||||||
self.state[LAST_RECEIVE_KEY] = event
|
self.state[LAST_RECEIVE_KEY] = event
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
def get_last_receive(self) -> Union[Event, None]: ...
|
def get_last_receive(self) -> Event | None: ...
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
def get_last_receive(self, default: T) -> Union[Event, T]: ...
|
def get_last_receive(self, default: T) -> Event | T: ...
|
||||||
|
|
||||||
def get_last_receive(
|
def get_last_receive(self, default: T | None = None) -> Event | T | None:
|
||||||
self, default: Optional[T] = None
|
|
||||||
) -> Optional[Union[Event, T]]:
|
|
||||||
"""获取最近一次 `receive` 事件
|
"""获取最近一次 `receive` 事件
|
||||||
|
|
||||||
如果没有事件,返回 `default` 值
|
如果没有事件,返回 `default` 值
|
||||||
@@ -733,14 +727,12 @@ class Matcher(metaclass=MatcherMeta):
|
|||||||
return self.state.get(LAST_RECEIVE_KEY, default)
|
return self.state.get(LAST_RECEIVE_KEY, default)
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
def get_arg(self, key: str) -> Union[Message, None]: ...
|
def get_arg(self, key: str) -> Message | None: ...
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
def get_arg(self, key: str, default: T) -> Union[Message, T]: ...
|
def get_arg(self, key: str, default: T) -> Message | T: ...
|
||||||
|
|
||||||
def get_arg(
|
def get_arg(self, key: str, default: T | None = None) -> Message | T | None:
|
||||||
self, key: str, default: Optional[T] = None
|
|
||||||
) -> Optional[Union[Message, T]]:
|
|
||||||
"""获取一个 `got` 消息
|
"""获取一个 `got` 消息
|
||||||
|
|
||||||
如果没有找到对应的消息,返回 `default` 值
|
如果没有找到对应的消息,返回 `default` 值
|
||||||
@@ -758,12 +750,12 @@ class Matcher(metaclass=MatcherMeta):
|
|||||||
self.state[REJECT_TARGET] = target
|
self.state[REJECT_TARGET] = target
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
def get_target(self) -> Union[str, None]: ...
|
def get_target(self) -> str | None: ...
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
def get_target(self, default: T) -> Union[str, T]: ...
|
def get_target(self, default: T) -> str | T: ...
|
||||||
|
|
||||||
def get_target(self, default: Optional[T] = None) -> Optional[Union[str, T]]:
|
def get_target(self, default: T | None = None) -> str | T | None:
|
||||||
return self.state.get(REJECT_TARGET, default)
|
return self.state.get(REJECT_TARGET, default)
|
||||||
|
|
||||||
def stop_propagation(self):
|
def stop_propagation(self):
|
||||||
@@ -774,8 +766,8 @@ class Matcher(metaclass=MatcherMeta):
|
|||||||
self,
|
self,
|
||||||
bot: Bot,
|
bot: Bot,
|
||||||
event: Event,
|
event: Event,
|
||||||
stack: Optional[AsyncExitStack] = None,
|
stack: AsyncExitStack | None = None,
|
||||||
dependency_cache: Optional[T_DependencyCache] = None,
|
dependency_cache: T_DependencyCache | None = None,
|
||||||
) -> str:
|
) -> str:
|
||||||
updater = self.__class__._default_type_updater
|
updater = self.__class__._default_type_updater
|
||||||
return (
|
return (
|
||||||
@@ -795,8 +787,8 @@ class Matcher(metaclass=MatcherMeta):
|
|||||||
self,
|
self,
|
||||||
bot: Bot,
|
bot: Bot,
|
||||||
event: Event,
|
event: Event,
|
||||||
stack: Optional[AsyncExitStack] = None,
|
stack: AsyncExitStack | None = None,
|
||||||
dependency_cache: Optional[T_DependencyCache] = None,
|
dependency_cache: T_DependencyCache | None = None,
|
||||||
) -> Permission:
|
) -> Permission:
|
||||||
if updater := self.__class__._default_permission_updater:
|
if updater := self.__class__._default_permission_updater:
|
||||||
return await updater(
|
return await updater(
|
||||||
@@ -832,8 +824,8 @@ class Matcher(metaclass=MatcherMeta):
|
|||||||
bot: Bot,
|
bot: Bot,
|
||||||
event: Event,
|
event: Event,
|
||||||
state: T_State,
|
state: T_State,
|
||||||
stack: Optional[AsyncExitStack] = None,
|
stack: AsyncExitStack | None = None,
|
||||||
dependency_cache: Optional[T_DependencyCache] = None,
|
dependency_cache: T_DependencyCache | None = None,
|
||||||
):
|
):
|
||||||
logger.trace(
|
logger.trace(
|
||||||
f"{self} run with incoming args: "
|
f"{self} run with incoming args: "
|
||||||
@@ -877,16 +869,14 @@ class Matcher(metaclass=MatcherMeta):
|
|||||||
bot: Bot,
|
bot: Bot,
|
||||||
event: Event,
|
event: Event,
|
||||||
state: T_State,
|
state: T_State,
|
||||||
stack: Optional[AsyncExitStack] = None,
|
stack: AsyncExitStack | None = None,
|
||||||
dependency_cache: Optional[T_DependencyCache] = None,
|
dependency_cache: T_DependencyCache | None = None,
|
||||||
):
|
):
|
||||||
exc: Optional[Union[FinishedException, RejectedException, PausedException]] = (
|
exc: FinishedException | RejectedException | PausedException | None = None
|
||||||
None
|
|
||||||
)
|
|
||||||
|
|
||||||
def _handle_special_exception(
|
def _handle_special_exception(
|
||||||
exc_group: BaseExceptionGroup[
|
exc_group: BaseExceptionGroup[
|
||||||
Union[FinishedException, RejectedException, PausedException]
|
FinishedException | RejectedException | PausedException
|
||||||
],
|
],
|
||||||
):
|
):
|
||||||
nonlocal exc
|
nonlocal exc
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
from collections.abc import Callable
|
||||||
from contextlib import AsyncExitStack, asynccontextmanager, contextmanager
|
from contextlib import AsyncExitStack, asynccontextmanager, contextmanager
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
import inspect
|
import inspect
|
||||||
@@ -5,13 +6,12 @@ from typing import (
|
|||||||
TYPE_CHECKING,
|
TYPE_CHECKING,
|
||||||
Annotated,
|
Annotated,
|
||||||
Any,
|
Any,
|
||||||
Callable,
|
|
||||||
Literal,
|
Literal,
|
||||||
Optional,
|
|
||||||
Union,
|
|
||||||
cast,
|
cast,
|
||||||
|
get_args,
|
||||||
|
get_origin,
|
||||||
)
|
)
|
||||||
from typing_extensions import Self, get_args, get_origin, override
|
from typing_extensions import Self, override
|
||||||
|
|
||||||
import anyio
|
import anyio
|
||||||
from exceptiongroup import BaseExceptionGroup, catch
|
from exceptiongroup import BaseExceptionGroup, catch
|
||||||
@@ -47,10 +47,10 @@ if TYPE_CHECKING:
|
|||||||
class DependsInner:
|
class DependsInner:
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
dependency: Optional[T_Handler] = None,
|
dependency: T_Handler | None = None,
|
||||||
*,
|
*,
|
||||||
use_cache: bool = True,
|
use_cache: bool = True,
|
||||||
validate: Union[bool, PydanticFieldInfo] = False,
|
validate: bool | PydanticFieldInfo = False,
|
||||||
) -> None:
|
) -> None:
|
||||||
self.dependency = dependency
|
self.dependency = dependency
|
||||||
self.use_cache = use_cache
|
self.use_cache = use_cache
|
||||||
@@ -64,10 +64,10 @@ class DependsInner:
|
|||||||
|
|
||||||
|
|
||||||
def Depends(
|
def Depends(
|
||||||
dependency: Optional[T_Handler] = None,
|
dependency: T_Handler | None = None,
|
||||||
*,
|
*,
|
||||||
use_cache: bool = True,
|
use_cache: bool = True,
|
||||||
validate: Union[bool, PydanticFieldInfo] = False,
|
validate: bool | PydanticFieldInfo = False,
|
||||||
) -> Any:
|
) -> Any:
|
||||||
"""子依赖装饰器
|
"""子依赖装饰器
|
||||||
|
|
||||||
@@ -113,7 +113,7 @@ class DependencyCache:
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
self._state = CacheState.PENDING
|
self._state = CacheState.PENDING
|
||||||
self._result: Any = None
|
self._result: Any = None
|
||||||
self._exception: Optional[BaseException] = None
|
self._exception: BaseException | None = None
|
||||||
self._waiter = anyio.Event()
|
self._waiter = anyio.Event()
|
||||||
|
|
||||||
def done(self) -> bool:
|
def done(self) -> bool:
|
||||||
@@ -129,7 +129,7 @@ class DependencyCache:
|
|||||||
raise self._exception
|
raise self._exception
|
||||||
return self._result
|
return self._result
|
||||||
|
|
||||||
def exception(self) -> Optional[BaseException]:
|
def exception(self) -> BaseException | None:
|
||||||
"""获取子依赖异常"""
|
"""获取子依赖异常"""
|
||||||
|
|
||||||
if self._state != CacheState.FINISHED:
|
if self._state != CacheState.FINISHED:
|
||||||
@@ -192,7 +192,7 @@ class DependParam(Param):
|
|||||||
cls,
|
cls,
|
||||||
sub_dependent: Dependent[Any],
|
sub_dependent: Dependent[Any],
|
||||||
use_cache: bool,
|
use_cache: bool,
|
||||||
validate: Union[bool, PydanticFieldInfo],
|
validate: bool | PydanticFieldInfo,
|
||||||
) -> Self:
|
) -> Self:
|
||||||
return cls._inherit_construct(
|
return cls._inherit_construct(
|
||||||
validate if isinstance(validate, PydanticFieldInfo) else None,
|
validate if isinstance(validate, PydanticFieldInfo) else None,
|
||||||
@@ -205,7 +205,7 @@ class DependParam(Param):
|
|||||||
@override
|
@override
|
||||||
def _check_param(
|
def _check_param(
|
||||||
cls, param: inspect.Parameter, allow_types: tuple[type[Param], ...]
|
cls, param: inspect.Parameter, allow_types: tuple[type[Param], ...]
|
||||||
) -> Optional[Self]:
|
) -> Self | None:
|
||||||
type_annotation, depends_inner = param.annotation, None
|
type_annotation, depends_inner = param.annotation, None
|
||||||
# extract type annotation and dependency from Annotated
|
# extract type annotation and dependency from Annotated
|
||||||
if get_origin(param.annotation) is Annotated:
|
if get_origin(param.annotation) is Annotated:
|
||||||
@@ -245,7 +245,7 @@ class DependParam(Param):
|
|||||||
@override
|
@override
|
||||||
def _check_parameterless(
|
def _check_parameterless(
|
||||||
cls, value: Any, allow_types: tuple[type[Param], ...]
|
cls, value: Any, allow_types: tuple[type[Param], ...]
|
||||||
) -> Optional["Param"]:
|
) -> "Param | None":
|
||||||
if isinstance(value, DependsInner):
|
if isinstance(value, DependsInner):
|
||||||
assert value.dependency, "Dependency cannot be empty"
|
assert value.dependency, "Dependency cannot be empty"
|
||||||
dependent = Dependent[Any].parse(
|
dependent = Dependent[Any].parse(
|
||||||
@@ -256,8 +256,8 @@ class DependParam(Param):
|
|||||||
@override
|
@override
|
||||||
async def _solve(
|
async def _solve(
|
||||||
self,
|
self,
|
||||||
stack: Optional[AsyncExitStack] = None,
|
stack: AsyncExitStack | None = None,
|
||||||
dependency_cache: Optional[T_DependencyCache] = None,
|
dependency_cache: T_DependencyCache | None = None,
|
||||||
**kwargs: Any,
|
**kwargs: Any,
|
||||||
) -> Any:
|
) -> Any:
|
||||||
use_cache: bool = self.use_cache
|
use_cache: bool = self.use_cache
|
||||||
@@ -267,7 +267,7 @@ class DependParam(Param):
|
|||||||
call = cast(Callable[..., Any], sub_dependent.call)
|
call = cast(Callable[..., Any], sub_dependent.call)
|
||||||
|
|
||||||
# solve sub dependency with current cache
|
# solve sub dependency with current cache
|
||||||
exc: Optional[BaseExceptionGroup[SkippedException]] = None
|
exc: BaseExceptionGroup[SkippedException] | None = None
|
||||||
|
|
||||||
def _handle_skipped(exc_group: BaseExceptionGroup[SkippedException]):
|
def _handle_skipped(exc_group: BaseExceptionGroup[SkippedException]):
|
||||||
nonlocal exc
|
nonlocal exc
|
||||||
@@ -332,9 +332,7 @@ class BotParam(Param):
|
|||||||
为保证兼容性,本注入还会解析名为 `bot` 且没有类型注解的参数。
|
为保证兼容性,本注入还会解析名为 `bot` 且没有类型注解的参数。
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(
|
def __init__(self, *args, checker: ModelField | None = None, **kwargs: Any) -> None:
|
||||||
self, *args, checker: Optional[ModelField] = None, **kwargs: Any
|
|
||||||
) -> None:
|
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
self.checker = checker
|
self.checker = checker
|
||||||
|
|
||||||
@@ -349,12 +347,12 @@ class BotParam(Param):
|
|||||||
@override
|
@override
|
||||||
def _check_param(
|
def _check_param(
|
||||||
cls, param: inspect.Parameter, allow_types: tuple[type[Param], ...]
|
cls, param: inspect.Parameter, allow_types: tuple[type[Param], ...]
|
||||||
) -> Optional[Self]:
|
) -> Self | None:
|
||||||
from nonebot.adapters import Bot
|
from nonebot.adapters import Bot
|
||||||
|
|
||||||
# param type is Bot(s) or subclass(es) of Bot or None
|
# param type is Bot(s) or subclass(es) of Bot or None
|
||||||
if generic_check_issubclass(param.annotation, Bot):
|
if generic_check_issubclass(param.annotation, Bot):
|
||||||
checker: Optional[ModelField] = None
|
checker: ModelField | None = None
|
||||||
if param.annotation is not Bot:
|
if param.annotation is not Bot:
|
||||||
checker = ModelField.construct(
|
checker = ModelField.construct(
|
||||||
name=param.name, annotation=param.annotation, field_info=FieldInfo()
|
name=param.name, annotation=param.annotation, field_info=FieldInfo()
|
||||||
@@ -386,9 +384,7 @@ class EventParam(Param):
|
|||||||
为保证兼容性,本注入还会解析名为 `event` 且没有类型注解的参数。
|
为保证兼容性,本注入还会解析名为 `event` 且没有类型注解的参数。
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(
|
def __init__(self, *args, checker: ModelField | None = None, **kwargs: Any) -> None:
|
||||||
self, *args, checker: Optional[ModelField] = None, **kwargs: Any
|
|
||||||
) -> None:
|
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
self.checker = checker
|
self.checker = checker
|
||||||
|
|
||||||
@@ -403,12 +399,12 @@ class EventParam(Param):
|
|||||||
@override
|
@override
|
||||||
def _check_param(
|
def _check_param(
|
||||||
cls, param: inspect.Parameter, allow_types: tuple[type[Param], ...]
|
cls, param: inspect.Parameter, allow_types: tuple[type[Param], ...]
|
||||||
) -> Optional[Self]:
|
) -> Self | None:
|
||||||
from nonebot.adapters import Event
|
from nonebot.adapters import Event
|
||||||
|
|
||||||
# param type is Event(s) or subclass(es) of Event or None
|
# param type is Event(s) or subclass(es) of Event or None
|
||||||
if generic_check_issubclass(param.annotation, Event):
|
if generic_check_issubclass(param.annotation, Event):
|
||||||
checker: Optional[ModelField] = None
|
checker: ModelField | None = None
|
||||||
if param.annotation is not Event:
|
if param.annotation is not Event:
|
||||||
checker = ModelField.construct(
|
checker = ModelField.construct(
|
||||||
name=param.name, annotation=param.annotation, field_info=FieldInfo()
|
name=param.name, annotation=param.annotation, field_info=FieldInfo()
|
||||||
@@ -447,7 +443,7 @@ class StateParam(Param):
|
|||||||
@override
|
@override
|
||||||
def _check_param(
|
def _check_param(
|
||||||
cls, param: inspect.Parameter, allow_types: tuple[type[Param], ...]
|
cls, param: inspect.Parameter, allow_types: tuple[type[Param], ...]
|
||||||
) -> Optional[Self]:
|
) -> Self | None:
|
||||||
# param type is T_State
|
# param type is T_State
|
||||||
if origin_is_annotated(
|
if origin_is_annotated(
|
||||||
get_origin(param.annotation)
|
get_origin(param.annotation)
|
||||||
@@ -472,9 +468,7 @@ class MatcherParam(Param):
|
|||||||
为保证兼容性,本注入还会解析名为 `matcher` 且没有类型注解的参数。
|
为保证兼容性,本注入还会解析名为 `matcher` 且没有类型注解的参数。
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(
|
def __init__(self, *args, checker: ModelField | None = None, **kwargs: Any) -> None:
|
||||||
self, *args, checker: Optional[ModelField] = None, **kwargs: Any
|
|
||||||
) -> None:
|
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
self.checker = checker
|
self.checker = checker
|
||||||
|
|
||||||
@@ -489,12 +483,12 @@ class MatcherParam(Param):
|
|||||||
@override
|
@override
|
||||||
def _check_param(
|
def _check_param(
|
||||||
cls, param: inspect.Parameter, allow_types: tuple[type[Param], ...]
|
cls, param: inspect.Parameter, allow_types: tuple[type[Param], ...]
|
||||||
) -> Optional[Self]:
|
) -> Self | None:
|
||||||
from nonebot.matcher import Matcher
|
from nonebot.matcher import Matcher
|
||||||
|
|
||||||
# param type is Matcher(s) or subclass(es) of Matcher or None
|
# param type is Matcher(s) or subclass(es) of Matcher or None
|
||||||
if generic_check_issubclass(param.annotation, Matcher):
|
if generic_check_issubclass(param.annotation, Matcher):
|
||||||
checker: Optional[ModelField] = None
|
checker: ModelField | None = None
|
||||||
if param.annotation is not Matcher:
|
if param.annotation is not Matcher:
|
||||||
checker = ModelField.construct(
|
checker = ModelField.construct(
|
||||||
name=param.name, annotation=param.annotation, field_info=FieldInfo()
|
name=param.name, annotation=param.annotation, field_info=FieldInfo()
|
||||||
@@ -520,31 +514,31 @@ class MatcherParam(Param):
|
|||||||
|
|
||||||
class ArgInner:
|
class ArgInner:
|
||||||
def __init__(
|
def __init__(
|
||||||
self, key: Optional[str], type: Literal["message", "str", "plaintext", "prompt"]
|
self, key: str | None, type: Literal["message", "str", "plaintext", "prompt"]
|
||||||
) -> None:
|
) -> None:
|
||||||
self.key: Optional[str] = key
|
self.key: str | None = key
|
||||||
self.type: Literal["message", "str", "plaintext", "prompt"] = type
|
self.type: Literal["message", "str", "plaintext", "prompt"] = type
|
||||||
|
|
||||||
def __repr__(self) -> str:
|
def __repr__(self) -> str:
|
||||||
return f"ArgInner(key={self.key!r}, type={self.type!r})"
|
return f"ArgInner(key={self.key!r}, type={self.type!r})"
|
||||||
|
|
||||||
|
|
||||||
def Arg(key: Optional[str] = None) -> Any:
|
def Arg(key: str | None = None) -> Any:
|
||||||
"""Arg 参数消息"""
|
"""Arg 参数消息"""
|
||||||
return ArgInner(key, "message")
|
return ArgInner(key, "message")
|
||||||
|
|
||||||
|
|
||||||
def ArgStr(key: Optional[str] = None) -> str:
|
def ArgStr(key: str | None = None) -> str:
|
||||||
"""Arg 参数消息文本"""
|
"""Arg 参数消息文本"""
|
||||||
return ArgInner(key, "str") # type: ignore
|
return ArgInner(key, "str") # type: ignore
|
||||||
|
|
||||||
|
|
||||||
def ArgPlainText(key: Optional[str] = None) -> str:
|
def ArgPlainText(key: str | None = None) -> str:
|
||||||
"""Arg 参数消息纯文本"""
|
"""Arg 参数消息纯文本"""
|
||||||
return ArgInner(key, "plaintext") # type: ignore
|
return ArgInner(key, "plaintext") # type: ignore
|
||||||
|
|
||||||
|
|
||||||
def ArgPromptResult(key: Optional[str] = None) -> Any:
|
def ArgPromptResult(key: str | None = None) -> Any:
|
||||||
"""`arg` prompt 发送结果"""
|
"""`arg` prompt 发送结果"""
|
||||||
return ArgInner(key, "prompt")
|
return ArgInner(key, "prompt")
|
||||||
|
|
||||||
@@ -576,7 +570,7 @@ class ArgParam(Param):
|
|||||||
@override
|
@override
|
||||||
def _check_param(
|
def _check_param(
|
||||||
cls, param: inspect.Parameter, allow_types: tuple[type[Param], ...]
|
cls, param: inspect.Parameter, allow_types: tuple[type[Param], ...]
|
||||||
) -> Optional[Self]:
|
) -> Self | None:
|
||||||
if isinstance(param.default, ArgInner):
|
if isinstance(param.default, ArgInner):
|
||||||
return cls(key=param.default.key or param.name, type=param.default.type)
|
return cls(key=param.default.key or param.name, type=param.default.type)
|
||||||
elif get_origin(param.annotation) is Annotated:
|
elif get_origin(param.annotation) is Annotated:
|
||||||
@@ -598,18 +592,18 @@ class ArgParam(Param):
|
|||||||
else:
|
else:
|
||||||
raise ValueError(f"Unknown Arg type: {self.type}")
|
raise ValueError(f"Unknown Arg type: {self.type}")
|
||||||
|
|
||||||
def _solve_message(self, matcher: "Matcher") -> Optional["Message"]:
|
def _solve_message(self, matcher: "Matcher") -> "Message | None":
|
||||||
return matcher.get_arg(self.key)
|
return matcher.get_arg(self.key)
|
||||||
|
|
||||||
def _solve_str(self, matcher: "Matcher") -> Optional[str]:
|
def _solve_str(self, matcher: "Matcher") -> str | None:
|
||||||
message = matcher.get_arg(self.key)
|
message = matcher.get_arg(self.key)
|
||||||
return str(message) if message is not None else None
|
return str(message) if message is not None else None
|
||||||
|
|
||||||
def _solve_plaintext(self, matcher: "Matcher") -> Optional[str]:
|
def _solve_plaintext(self, matcher: "Matcher") -> str | None:
|
||||||
message = matcher.get_arg(self.key)
|
message = matcher.get_arg(self.key)
|
||||||
return message.extract_plain_text() if message is not None else None
|
return message.extract_plain_text() if message is not None else None
|
||||||
|
|
||||||
def _solve_prompt(self, matcher: "Matcher") -> Optional[Any]:
|
def _solve_prompt(self, matcher: "Matcher") -> Any | None:
|
||||||
return matcher.state.get(
|
return matcher.state.get(
|
||||||
REJECT_PROMPT_RESULT_KEY.format(key=ARG_KEY.format(key=self.key))
|
REJECT_PROMPT_RESULT_KEY.format(key=ARG_KEY.format(key=self.key))
|
||||||
)
|
)
|
||||||
@@ -630,7 +624,7 @@ class ExceptionParam(Param):
|
|||||||
@override
|
@override
|
||||||
def _check_param(
|
def _check_param(
|
||||||
cls, param: inspect.Parameter, allow_types: tuple[type[Param], ...]
|
cls, param: inspect.Parameter, allow_types: tuple[type[Param], ...]
|
||||||
) -> Optional[Self]:
|
) -> Self | None:
|
||||||
# param type is Exception(s) or subclass(es) of Exception or None
|
# param type is Exception(s) or subclass(es) of Exception or None
|
||||||
if generic_check_issubclass(param.annotation, Exception):
|
if generic_check_issubclass(param.annotation, Exception):
|
||||||
return cls()
|
return cls()
|
||||||
@@ -639,7 +633,7 @@ class ExceptionParam(Param):
|
|||||||
return cls()
|
return cls()
|
||||||
|
|
||||||
@override
|
@override
|
||||||
async def _solve(self, exception: Optional[Exception] = None, **kwargs: Any) -> Any:
|
async def _solve(self, exception: Exception | None = None, **kwargs: Any) -> Any:
|
||||||
return exception
|
return exception
|
||||||
|
|
||||||
|
|
||||||
@@ -658,7 +652,7 @@ class DefaultParam(Param):
|
|||||||
@override
|
@override
|
||||||
def _check_param(
|
def _check_param(
|
||||||
cls, param: inspect.Parameter, allow_types: tuple[type[Param], ...]
|
cls, param: inspect.Parameter, allow_types: tuple[type[Param], ...]
|
||||||
) -> Optional[Self]:
|
) -> Self | None:
|
||||||
if param.default != param.empty:
|
if param.default != param.empty:
|
||||||
return cls(default=param.default)
|
return cls(default=param.default)
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
from contextlib import AsyncExitStack
|
from contextlib import AsyncExitStack
|
||||||
from typing import ClassVar, NoReturn, Optional, Union
|
from typing import ClassVar, NoReturn
|
||||||
from typing_extensions import Self
|
from typing_extensions import Self
|
||||||
|
|
||||||
import anyio
|
import anyio
|
||||||
@@ -38,7 +38,7 @@ class Permission:
|
|||||||
DefaultParam,
|
DefaultParam,
|
||||||
]
|
]
|
||||||
|
|
||||||
def __init__(self, *checkers: Union[T_PermissionChecker, Dependent[bool]]) -> None:
|
def __init__(self, *checkers: T_PermissionChecker | Dependent[bool]) -> None:
|
||||||
self.checkers: set[Dependent[bool]] = {
|
self.checkers: set[Dependent[bool]] = {
|
||||||
(
|
(
|
||||||
checker
|
checker
|
||||||
@@ -58,8 +58,8 @@ class Permission:
|
|||||||
self,
|
self,
|
||||||
bot: Bot,
|
bot: Bot,
|
||||||
event: Event,
|
event: Event,
|
||||||
stack: Optional[AsyncExitStack] = None,
|
stack: AsyncExitStack | None = None,
|
||||||
dependency_cache: Optional[T_DependencyCache] = None,
|
dependency_cache: T_DependencyCache | None = None,
|
||||||
) -> bool:
|
) -> bool:
|
||||||
"""检查是否满足某个权限。
|
"""检查是否满足某个权限。
|
||||||
|
|
||||||
@@ -95,9 +95,7 @@ class Permission:
|
|||||||
def __and__(self, other: object) -> NoReturn:
|
def __and__(self, other: object) -> NoReturn:
|
||||||
raise RuntimeError("And operation between Permissions is not allowed.")
|
raise RuntimeError("And operation between Permissions is not allowed.")
|
||||||
|
|
||||||
def __or__(
|
def __or__(self, other: "Permission | T_PermissionChecker | None") -> "Permission":
|
||||||
self, other: Optional[Union["Permission", T_PermissionChecker]]
|
|
||||||
) -> "Permission":
|
|
||||||
if other is None:
|
if other is None:
|
||||||
return self
|
return self
|
||||||
elif isinstance(other, Permission):
|
elif isinstance(other, Permission):
|
||||||
@@ -105,9 +103,7 @@ class Permission:
|
|||||||
else:
|
else:
|
||||||
return Permission(*self.checkers, other)
|
return Permission(*self.checkers, other)
|
||||||
|
|
||||||
def __ror__(
|
def __ror__(self, other: "Permission | T_PermissionChecker | None") -> "Permission":
|
||||||
self, other: Optional[Union["Permission", T_PermissionChecker]]
|
|
||||||
) -> "Permission":
|
|
||||||
if other is None:
|
if other is None:
|
||||||
return self
|
return self
|
||||||
elif isinstance(other, Permission):
|
elif isinstance(other, Permission):
|
||||||
@@ -126,9 +122,7 @@ class User:
|
|||||||
|
|
||||||
__slots__ = ("perm", "users")
|
__slots__ = ("perm", "users")
|
||||||
|
|
||||||
def __init__(
|
def __init__(self, users: tuple[str, ...], perm: Permission | None = None) -> None:
|
||||||
self, users: tuple[str, ...], perm: Optional[Permission] = None
|
|
||||||
) -> None:
|
|
||||||
self.users = users
|
self.users = users
|
||||||
self.perm = perm
|
self.perm = perm
|
||||||
|
|
||||||
@@ -149,7 +143,7 @@ class User:
|
|||||||
)
|
)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _clean_permission(cls, perm: Permission) -> Optional[Permission]:
|
def _clean_permission(cls, perm: Permission) -> Permission | None:
|
||||||
if len(perm.checkers) == 1 and isinstance(
|
if len(perm.checkers) == 1 and isinstance(
|
||||||
user_perm := next(iter(perm.checkers)).call, cls
|
user_perm := next(iter(perm.checkers)).call, cls
|
||||||
):
|
):
|
||||||
@@ -157,7 +151,7 @@ class User:
|
|||||||
return perm
|
return perm
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_event(cls, event: Event, perm: Optional[Permission] = None) -> Self:
|
def from_event(cls, event: Event, perm: Permission | None = None) -> Self:
|
||||||
"""从事件中获取会话 ID。
|
"""从事件中获取会话 ID。
|
||||||
|
|
||||||
如果 `perm` 中仅有 `User` 类型的权限检查函数,则会去除原有的会话 ID 限制。
|
如果 `perm` 中仅有 `User` 类型的权限检查函数,则会去除原有的会话 ID 限制。
|
||||||
@@ -169,7 +163,7 @@ class User:
|
|||||||
return cls((event.get_session_id(),), perm=perm and cls._clean_permission(perm))
|
return cls((event.get_session_id(),), perm=perm and cls._clean_permission(perm))
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_permission(cls, *users: str, perm: Optional[Permission] = None) -> Self:
|
def from_permission(cls, *users: str, perm: Permission | None = None) -> Self:
|
||||||
"""指定会话与权限。
|
"""指定会话与权限。
|
||||||
|
|
||||||
如果 `perm` 中仅有 `User` 类型的权限检查函数,则会去除原有的会话 ID 限制。
|
如果 `perm` 中仅有 `User` 类型的权限检查函数,则会去除原有的会话 ID 限制。
|
||||||
@@ -181,7 +175,7 @@ class User:
|
|||||||
return cls(users, perm=perm and cls._clean_permission(perm))
|
return cls(users, perm=perm and cls._clean_permission(perm))
|
||||||
|
|
||||||
|
|
||||||
def USER(*users: str, perm: Optional[Permission] = None):
|
def USER(*users: str, perm: Permission | None = None):
|
||||||
"""匹配当前事件属于指定会话。
|
"""匹配当前事件属于指定会话。
|
||||||
|
|
||||||
如果 `perm` 中仅有 `User` 类型的权限检查函数,则会去除原有检查函数的会话 ID 限制。
|
如果 `perm` 中仅有 `User` 类型的权限检查函数,则会去除原有检查函数的会话 ID 限制。
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
from contextlib import AsyncExitStack
|
from contextlib import AsyncExitStack
|
||||||
from typing import ClassVar, NoReturn, Optional, Union
|
from typing import ClassVar, NoReturn
|
||||||
|
|
||||||
import anyio
|
import anyio
|
||||||
from exceptiongroup import BaseExceptionGroup, catch
|
from exceptiongroup import BaseExceptionGroup, catch
|
||||||
@@ -38,7 +38,7 @@ class Rule:
|
|||||||
DefaultParam,
|
DefaultParam,
|
||||||
]
|
]
|
||||||
|
|
||||||
def __init__(self, *checkers: Union[T_RuleChecker, Dependent[bool]]) -> None:
|
def __init__(self, *checkers: T_RuleChecker | Dependent[bool]) -> None:
|
||||||
self.checkers: set[Dependent[bool]] = {
|
self.checkers: set[Dependent[bool]] = {
|
||||||
(
|
(
|
||||||
checker
|
checker
|
||||||
@@ -59,8 +59,8 @@ class Rule:
|
|||||||
bot: Bot,
|
bot: Bot,
|
||||||
event: Event,
|
event: Event,
|
||||||
state: T_State,
|
state: T_State,
|
||||||
stack: Optional[AsyncExitStack] = None,
|
stack: AsyncExitStack | None = None,
|
||||||
dependency_cache: Optional[T_DependencyCache] = None,
|
dependency_cache: T_DependencyCache | None = None,
|
||||||
) -> bool:
|
) -> bool:
|
||||||
"""检查是否符合所有规则
|
"""检查是否符合所有规则
|
||||||
|
|
||||||
@@ -101,7 +101,7 @@ class Rule:
|
|||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def __and__(self, other: Optional[Union["Rule", T_RuleChecker]]) -> "Rule":
|
def __and__(self, other: "Rule | T_RuleChecker | None") -> "Rule":
|
||||||
if other is None:
|
if other is None:
|
||||||
return self
|
return self
|
||||||
elif isinstance(other, Rule):
|
elif isinstance(other, Rule):
|
||||||
@@ -109,7 +109,7 @@ class Rule:
|
|||||||
else:
|
else:
|
||||||
return Rule(*self.checkers, other)
|
return Rule(*self.checkers, other)
|
||||||
|
|
||||||
def __rand__(self, other: Optional[Union["Rule", T_RuleChecker]]) -> "Rule":
|
def __rand__(self, other: "Rule | T_RuleChecker | None") -> "Rule":
|
||||||
if other is None:
|
if other is None:
|
||||||
return self
|
return self
|
||||||
elif isinstance(other, Rule):
|
elif isinstance(other, Rule):
|
||||||
|
|||||||
@@ -9,10 +9,11 @@ FrontMatter:
|
|||||||
description: nonebot.message 模块
|
description: nonebot.message 模块
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
from collections.abc import Callable
|
||||||
import contextlib
|
import contextlib
|
||||||
from contextlib import AsyncExitStack
|
from contextlib import AsyncExitStack
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from typing import TYPE_CHECKING, Any, Callable, Optional
|
from typing import TYPE_CHECKING, Any
|
||||||
|
|
||||||
import anyio
|
import anyio
|
||||||
from exceptiongroup import BaseExceptionGroup, catch
|
from exceptiongroup import BaseExceptionGroup, catch
|
||||||
@@ -153,8 +154,8 @@ async def _apply_event_preprocessors(
|
|||||||
bot: "Bot",
|
bot: "Bot",
|
||||||
event: "Event",
|
event: "Event",
|
||||||
state: T_State,
|
state: T_State,
|
||||||
stack: Optional[AsyncExitStack] = None,
|
stack: AsyncExitStack | None = None,
|
||||||
dependency_cache: Optional[T_DependencyCache] = None,
|
dependency_cache: T_DependencyCache | None = None,
|
||||||
show_log: bool = True,
|
show_log: bool = True,
|
||||||
) -> bool:
|
) -> bool:
|
||||||
"""运行事件预处理。
|
"""运行事件预处理。
|
||||||
@@ -210,8 +211,8 @@ async def _apply_event_postprocessors(
|
|||||||
bot: "Bot",
|
bot: "Bot",
|
||||||
event: "Event",
|
event: "Event",
|
||||||
state: T_State,
|
state: T_State,
|
||||||
stack: Optional[AsyncExitStack] = None,
|
stack: AsyncExitStack | None = None,
|
||||||
dependency_cache: Optional[T_DependencyCache] = None,
|
dependency_cache: T_DependencyCache | None = None,
|
||||||
show_log: bool = True,
|
show_log: bool = True,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""运行事件后处理。
|
"""运行事件后处理。
|
||||||
@@ -257,8 +258,8 @@ async def _apply_run_preprocessors(
|
|||||||
event: "Event",
|
event: "Event",
|
||||||
state: T_State,
|
state: T_State,
|
||||||
matcher: Matcher,
|
matcher: Matcher,
|
||||||
stack: Optional[AsyncExitStack] = None,
|
stack: AsyncExitStack | None = None,
|
||||||
dependency_cache: Optional[T_DependencyCache] = None,
|
dependency_cache: T_DependencyCache | None = None,
|
||||||
) -> bool:
|
) -> bool:
|
||||||
"""运行事件响应器运行前处理。
|
"""运行事件响应器运行前处理。
|
||||||
|
|
||||||
@@ -315,9 +316,9 @@ async def _apply_run_postprocessors(
|
|||||||
bot: "Bot",
|
bot: "Bot",
|
||||||
event: "Event",
|
event: "Event",
|
||||||
matcher: Matcher,
|
matcher: Matcher,
|
||||||
exception: Optional[Exception] = None,
|
exception: Exception | None = None,
|
||||||
stack: Optional[AsyncExitStack] = None,
|
stack: AsyncExitStack | None = None,
|
||||||
dependency_cache: Optional[T_DependencyCache] = None,
|
dependency_cache: T_DependencyCache | None = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""运行事件响应器运行后处理。
|
"""运行事件响应器运行后处理。
|
||||||
|
|
||||||
@@ -365,8 +366,8 @@ async def _check_matcher(
|
|||||||
bot: "Bot",
|
bot: "Bot",
|
||||||
event: "Event",
|
event: "Event",
|
||||||
state: T_State,
|
state: T_State,
|
||||||
stack: Optional[AsyncExitStack] = None,
|
stack: AsyncExitStack | None = None,
|
||||||
dependency_cache: Optional[T_DependencyCache] = None,
|
dependency_cache: T_DependencyCache | None = None,
|
||||||
) -> bool:
|
) -> bool:
|
||||||
"""检查事件响应器是否符合运行条件。
|
"""检查事件响应器是否符合运行条件。
|
||||||
|
|
||||||
@@ -416,8 +417,8 @@ async def _run_matcher(
|
|||||||
bot: "Bot",
|
bot: "Bot",
|
||||||
event: "Event",
|
event: "Event",
|
||||||
state: T_State,
|
state: T_State,
|
||||||
stack: Optional[AsyncExitStack] = None,
|
stack: AsyncExitStack | None = None,
|
||||||
dependency_cache: Optional[T_DependencyCache] = None,
|
dependency_cache: T_DependencyCache | None = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""运行事件响应器。
|
"""运行事件响应器。
|
||||||
|
|
||||||
@@ -482,8 +483,8 @@ async def check_and_run_matcher(
|
|||||||
bot: "Bot",
|
bot: "Bot",
|
||||||
event: "Event",
|
event: "Event",
|
||||||
state: T_State,
|
state: T_State,
|
||||||
stack: Optional[AsyncExitStack] = None,
|
stack: AsyncExitStack | None = None,
|
||||||
dependency_cache: Optional[T_DependencyCache] = None,
|
dependency_cache: T_DependencyCache | None = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""检查并运行事件响应器。
|
"""检查并运行事件响应器。
|
||||||
|
|
||||||
|
|||||||
@@ -7,8 +7,9 @@ FrontMatter:
|
|||||||
description: nonebot.params 模块
|
description: nonebot.params 模块
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
from collections.abc import Callable
|
||||||
from re import Match
|
from re import Match
|
||||||
from typing import Any, Callable, Literal, Optional, Union, overload
|
from typing import Any, Literal, overload
|
||||||
|
|
||||||
from nonebot.adapters import Event, Message, MessageSegment
|
from nonebot.adapters import Event, Message, MessageSegment
|
||||||
from nonebot.consts import (
|
from nonebot.consts import (
|
||||||
@@ -136,7 +137,7 @@ def ShellCommandArgs() -> Any:
|
|||||||
return Depends(_shell_command_args, use_cache=False)
|
return Depends(_shell_command_args, use_cache=False)
|
||||||
|
|
||||||
|
|
||||||
def _shell_command_argv(state: T_State) -> list[Union[str, MessageSegment]]:
|
def _shell_command_argv(state: T_State) -> list[str | MessageSegment]:
|
||||||
return state[SHELL_ARGV]
|
return state[SHELL_ARGV]
|
||||||
|
|
||||||
|
|
||||||
@@ -155,11 +156,11 @@ def RegexMatched() -> Match[str]:
|
|||||||
|
|
||||||
|
|
||||||
def _regex_str(
|
def _regex_str(
|
||||||
groups: tuple[Union[str, int], ...],
|
groups: tuple[str | int, ...],
|
||||||
) -> Callable[[T_State], Union[str, tuple[Union[str, Any], ...], Any]]:
|
) -> Callable[[T_State], str | tuple[str | Any, ...] | Any]:
|
||||||
def _regex_str_dependency(
|
def _regex_str_dependency(
|
||||||
state: T_State,
|
state: T_State,
|
||||||
) -> Union[str, tuple[Union[str, Any], ...], Any]:
|
) -> str | tuple[str | Any, ...] | Any:
|
||||||
return _regex_matched(state).group(*groups)
|
return _regex_matched(state).group(*groups)
|
||||||
|
|
||||||
return _regex_str_dependency
|
return _regex_str_dependency
|
||||||
@@ -170,16 +171,16 @@ def RegexStr(group: Literal[0] = 0, /) -> str: ...
|
|||||||
|
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
def RegexStr(group: Union[str, int], /) -> Union[str, Any]: ...
|
def RegexStr(group: str | int, /) -> str | Any: ...
|
||||||
|
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
def RegexStr(
|
def RegexStr(
|
||||||
group1: Union[str, int], group2: Union[str, int], /, *groups: Union[str, int]
|
group1: str | int, group2: str | int, /, *groups: str | int
|
||||||
) -> tuple[Union[str, Any], ...]: ...
|
) -> tuple[str | Any, ...]: ...
|
||||||
|
|
||||||
|
|
||||||
def RegexStr(*groups: Union[str, int]) -> Union[str, tuple[Union[str, Any], ...], Any]:
|
def RegexStr(*groups: str | int) -> str | tuple[str | Any, ...] | Any:
|
||||||
"""正则匹配结果文本"""
|
"""正则匹配结果文本"""
|
||||||
return Depends(_regex_str(groups), use_cache=False)
|
return Depends(_regex_str(groups), use_cache=False)
|
||||||
|
|
||||||
@@ -238,7 +239,7 @@ def Keyword() -> str:
|
|||||||
return Depends(_keyword, use_cache=False)
|
return Depends(_keyword, use_cache=False)
|
||||||
|
|
||||||
|
|
||||||
def Received(id: Optional[str] = None, default: Any = None) -> Any:
|
def Received(id: str | None = None, default: Any = None) -> Any:
|
||||||
"""`receive` 事件参数"""
|
"""`receive` 事件参数"""
|
||||||
|
|
||||||
def _received(matcher: "Matcher") -> Any:
|
def _received(matcher: "Matcher") -> Any:
|
||||||
@@ -256,7 +257,7 @@ def LastReceived(default: Any = None) -> Any:
|
|||||||
return Depends(_last_received, use_cache=False)
|
return Depends(_last_received, use_cache=False)
|
||||||
|
|
||||||
|
|
||||||
def ReceivePromptResult(id: Optional[str] = None) -> Any:
|
def ReceivePromptResult(id: str | None = None) -> Any:
|
||||||
"""`receive` prompt 发送结果"""
|
"""`receive` prompt 发送结果"""
|
||||||
|
|
||||||
def _receive_prompt_result(matcher: "Matcher") -> Any:
|
def _receive_prompt_result(matcher: "Matcher") -> Any:
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ FrontMatter:
|
|||||||
from contextvars import ContextVar
|
from contextvars import ContextVar
|
||||||
from itertools import chain
|
from itertools import chain
|
||||||
from types import ModuleType
|
from types import ModuleType
|
||||||
from typing import Optional, TypeVar
|
from typing import TypeVar
|
||||||
|
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
@@ -53,7 +53,7 @@ C = TypeVar("C", bound=BaseModel)
|
|||||||
|
|
||||||
_plugins: dict[str, "Plugin"] = {}
|
_plugins: dict[str, "Plugin"] = {}
|
||||||
_managers: list["PluginManager"] = []
|
_managers: list["PluginManager"] = []
|
||||||
_current_plugin: ContextVar[Optional["Plugin"]] = ContextVar(
|
_current_plugin: ContextVar["Plugin | None"] = ContextVar(
|
||||||
"_current_plugin", default=None
|
"_current_plugin", default=None
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -71,8 +71,8 @@ def _controlled_modules() -> dict[str, str]:
|
|||||||
|
|
||||||
|
|
||||||
def _find_parent_plugin_id(
|
def _find_parent_plugin_id(
|
||||||
module_name: str, controlled_modules: Optional[dict[str, str]] = None
|
module_name: str, controlled_modules: dict[str, str] | None = None
|
||||||
) -> Optional[str]:
|
) -> str | None:
|
||||||
if controlled_modules is None:
|
if controlled_modules is None:
|
||||||
controlled_modules = _controlled_modules()
|
controlled_modules = _controlled_modules()
|
||||||
available = {
|
available = {
|
||||||
@@ -85,7 +85,7 @@ def _find_parent_plugin_id(
|
|||||||
|
|
||||||
|
|
||||||
def _module_name_to_plugin_id(
|
def _module_name_to_plugin_id(
|
||||||
module_name: str, controlled_modules: Optional[dict[str, str]] = None
|
module_name: str, controlled_modules: dict[str, str] | None = None
|
||||||
) -> str:
|
) -> str:
|
||||||
plugin_name = _module_name_to_plugin_name(module_name)
|
plugin_name = _module_name_to_plugin_name(module_name)
|
||||||
if parent_plugin_id := _find_parent_plugin_id(module_name, controlled_modules):
|
if parent_plugin_id := _find_parent_plugin_id(module_name, controlled_modules):
|
||||||
@@ -132,7 +132,7 @@ def _revert_plugin(plugin: "Plugin") -> None:
|
|||||||
parent_plugin.sub_plugins.discard(plugin)
|
parent_plugin.sub_plugins.discard(plugin)
|
||||||
|
|
||||||
|
|
||||||
def get_plugin(plugin_id: str) -> Optional["Plugin"]:
|
def get_plugin(plugin_id: str) -> "Plugin | None":
|
||||||
"""获取已经导入的某个插件。
|
"""获取已经导入的某个插件。
|
||||||
|
|
||||||
如果为 `load_plugins` 文件夹导入的插件,则为文件(夹)名。
|
如果为 `load_plugins` 文件夹导入的插件,则为文件(夹)名。
|
||||||
@@ -145,7 +145,7 @@ def get_plugin(plugin_id: str) -> Optional["Plugin"]:
|
|||||||
return _plugins.get(plugin_id)
|
return _plugins.get(plugin_id)
|
||||||
|
|
||||||
|
|
||||||
def get_plugin_by_module_name(module_name: str) -> Optional["Plugin"]:
|
def get_plugin_by_module_name(module_name: str) -> "Plugin | None":
|
||||||
"""通过模块名获取已经导入的某个插件。
|
"""通过模块名获取已经导入的某个插件。
|
||||||
|
|
||||||
如果提供的模块名为某个插件的子模块,同样会返回该插件。
|
如果提供的模块名为某个插件的子模块,同样会返回该插件。
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ from itertools import chain
|
|||||||
import json
|
import json
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from types import ModuleType
|
from types import ModuleType
|
||||||
from typing import Optional, Union
|
|
||||||
|
|
||||||
from nonebot.log import logger
|
from nonebot.log import logger
|
||||||
from nonebot.utils import path_to_module_name
|
from nonebot.utils import path_to_module_name
|
||||||
@@ -27,7 +26,7 @@ except ModuleNotFoundError: # pragma: py-lt-311
|
|||||||
import tomli as tomllib # pyright: ignore[reportMissingImports]
|
import tomli as tomllib # pyright: ignore[reportMissingImports]
|
||||||
|
|
||||||
|
|
||||||
def load_plugin(module_path: Union[str, Path]) -> Optional[Plugin]:
|
def load_plugin(module_path: str | Path) -> Plugin | None:
|
||||||
"""加载单个插件,可以是本地插件或是通过 `pip` 安装的插件。
|
"""加载单个插件,可以是本地插件或是通过 `pip` 安装的插件。
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
@@ -159,7 +158,7 @@ def load_from_toml(file_path: str, encoding: str = "utf-8") -> set[Plugin]:
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def load_builtin_plugin(name: str) -> Optional[Plugin]:
|
def load_builtin_plugin(name: str) -> Plugin | None:
|
||||||
"""导入 NoneBot 内置插件。
|
"""导入 NoneBot 内置插件。
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
@@ -177,7 +176,7 @@ def load_builtin_plugins(*plugins: str) -> set[Plugin]:
|
|||||||
return load_all_plugins([f"nonebot.plugins.{p}" for p in plugins], [])
|
return load_all_plugins([f"nonebot.plugins.{p}" for p in plugins], [])
|
||||||
|
|
||||||
|
|
||||||
def _find_manager_by_name(name: str) -> Optional[PluginManager]:
|
def _find_manager_by_name(name: str) -> PluginManager | None:
|
||||||
for manager in reversed(_managers):
|
for manager in reversed(_managers):
|
||||||
if (
|
if (
|
||||||
name in manager.controlled_modules
|
name in manager.controlled_modules
|
||||||
@@ -217,7 +216,7 @@ def require(name: str) -> ModuleType:
|
|||||||
return plugin.module
|
return plugin.module
|
||||||
|
|
||||||
|
|
||||||
def inherit_supported_adapters(*names: str) -> Optional[set[str]]:
|
def inherit_supported_adapters(*names: str) -> set[str] | None:
|
||||||
"""获取已加载插件的适配器支持状态集合。
|
"""获取已加载插件的适配器支持状态集合。
|
||||||
|
|
||||||
如果传入了多个插件名称,返回值会自动取交集。
|
如果传入了多个插件名称,返回值会自动取交集。
|
||||||
@@ -229,7 +228,7 @@ def inherit_supported_adapters(*names: str) -> Optional[set[str]]:
|
|||||||
RuntimeError: 插件未加载
|
RuntimeError: 插件未加载
|
||||||
ValueError: 插件缺少元数据
|
ValueError: 插件缺少元数据
|
||||||
"""
|
"""
|
||||||
final_supported: Optional[set[str]] = None
|
final_supported: set[str] | None = None
|
||||||
|
|
||||||
for name in names:
|
for name in names:
|
||||||
plugin = get_plugin(_module_name_to_plugin_id(name))
|
plugin = get_plugin(_module_name_to_plugin_id(name))
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ from pathlib import Path
|
|||||||
import pkgutil
|
import pkgutil
|
||||||
import sys
|
import sys
|
||||||
from types import ModuleType
|
from types import ModuleType
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
from nonebot.log import logger
|
from nonebot.log import logger
|
||||||
from nonebot.utils import escape_tag, path_to_module_name
|
from nonebot.utils import escape_tag, path_to_module_name
|
||||||
@@ -43,8 +42,8 @@ class PluginManager:
|
|||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
plugins: Optional[Iterable[str]] = None,
|
plugins: Iterable[str] | None = None,
|
||||||
search_path: Optional[Iterable[str]] = None,
|
search_path: Iterable[str] | None = None,
|
||||||
):
|
):
|
||||||
# simple plugin not in search path
|
# simple plugin not in search path
|
||||||
self.plugins: set[str] = set(plugins or [])
|
self.plugins: set[str] = set(plugins or [])
|
||||||
@@ -154,7 +153,7 @@ class PluginManager:
|
|||||||
|
|
||||||
return self.available_plugins
|
return self.available_plugins
|
||||||
|
|
||||||
def load_plugin(self, name: str) -> Optional[Plugin]:
|
def load_plugin(self, name: str) -> Plugin | None:
|
||||||
"""加载指定插件。
|
"""加载指定插件。
|
||||||
|
|
||||||
可以使用完整插件模块名或者插件标识符加载。
|
可以使用完整插件模块名或者插件标识符加载。
|
||||||
@@ -211,8 +210,8 @@ class PluginFinder(MetaPathFinder):
|
|||||||
def find_spec(
|
def find_spec(
|
||||||
self,
|
self,
|
||||||
fullname: str,
|
fullname: str,
|
||||||
path: Optional[Sequence[str]],
|
path: Sequence[str] | None,
|
||||||
target: Optional[ModuleType] = None,
|
target: ModuleType | None = None,
|
||||||
):
|
):
|
||||||
if _managers:
|
if _managers:
|
||||||
module_spec = PathFinder.find_spec(fullname, path, target)
|
module_spec = PathFinder.find_spec(fullname, path, target)
|
||||||
@@ -235,7 +234,7 @@ class PluginLoader(SourceFileLoader):
|
|||||||
self.loaded = False
|
self.loaded = False
|
||||||
super().__init__(fullname, path)
|
super().__init__(fullname, path)
|
||||||
|
|
||||||
def create_module(self, spec) -> Optional[ModuleType]:
|
def create_module(self, spec) -> ModuleType | None:
|
||||||
if self.name in sys.modules:
|
if self.name in sys.modules:
|
||||||
self.loaded = True
|
self.loaded = True
|
||||||
return sys.modules[self.name]
|
return sys.modules[self.name]
|
||||||
@@ -263,7 +262,7 @@ class PluginLoader(SourceFileLoader):
|
|||||||
_current_plugin.reset(_plugin_token)
|
_current_plugin.reset(_plugin_token)
|
||||||
|
|
||||||
# get plugin metadata
|
# get plugin metadata
|
||||||
metadata: Optional[PluginMetadata] = getattr(module, "__plugin_meta__", None)
|
metadata: PluginMetadata | None = getattr(module, "__plugin_meta__", None)
|
||||||
plugin.metadata = metadata
|
plugin.metadata = metadata
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ FrontMatter:
|
|||||||
import contextlib
|
import contextlib
|
||||||
from dataclasses import dataclass, field
|
from dataclasses import dataclass, field
|
||||||
from types import ModuleType
|
from types import ModuleType
|
||||||
from typing import TYPE_CHECKING, Any, Optional, Type # noqa: UP035
|
from typing import TYPE_CHECKING, Any, Type # noqa: UP035
|
||||||
|
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
@@ -33,13 +33,13 @@ class PluginMetadata:
|
|||||||
"""插件功能介绍"""
|
"""插件功能介绍"""
|
||||||
usage: str
|
usage: str
|
||||||
"""插件使用方法"""
|
"""插件使用方法"""
|
||||||
type: Optional[str] = None
|
type: str | None = None
|
||||||
"""插件类型,用于商店分类"""
|
"""插件类型,用于商店分类"""
|
||||||
homepage: Optional[str] = None
|
homepage: str | None = None
|
||||||
"""插件主页"""
|
"""插件主页"""
|
||||||
config: Optional[Type[BaseModel]] = None # noqa: UP006
|
config: Type[BaseModel] | None = None # noqa: UP006
|
||||||
"""插件配置项"""
|
"""插件配置项"""
|
||||||
supported_adapters: Optional[set[str]] = None
|
supported_adapters: set[str] | None = None
|
||||||
"""插件支持的适配器模块路径
|
"""插件支持的适配器模块路径
|
||||||
|
|
||||||
格式为 `<module>[:<Adapter>]`,`~` 为 `nonebot.adapters.` 的缩写。
|
格式为 `<module>[:<Adapter>]`,`~` 为 `nonebot.adapters.` 的缩写。
|
||||||
@@ -49,7 +49,7 @@ class PluginMetadata:
|
|||||||
extra: dict[Any, Any] = field(default_factory=dict)
|
extra: dict[Any, Any] = field(default_factory=dict)
|
||||||
"""插件额外信息,可由插件编写者自由扩展定义"""
|
"""插件额外信息,可由插件编写者自由扩展定义"""
|
||||||
|
|
||||||
def get_supported_adapters(self) -> Optional[set[Type["Adapter"]]]: # noqa: UP006
|
def get_supported_adapters(self) -> set[Type["Adapter"]] | None: # noqa: UP006
|
||||||
"""获取当前已安装的插件支持适配器类列表"""
|
"""获取当前已安装的插件支持适配器类列表"""
|
||||||
if self.supported_adapters is None:
|
if self.supported_adapters is None:
|
||||||
return None
|
return None
|
||||||
@@ -77,11 +77,11 @@ class Plugin:
|
|||||||
"""导入该插件的插件管理器"""
|
"""导入该插件的插件管理器"""
|
||||||
matcher: set[type[Matcher]] = field(default_factory=set)
|
matcher: set[type[Matcher]] = field(default_factory=set)
|
||||||
"""插件加载时定义的 `Matcher`"""
|
"""插件加载时定义的 `Matcher`"""
|
||||||
parent_plugin: Optional["Plugin"] = None
|
parent_plugin: "Plugin | None" = None
|
||||||
"""父插件"""
|
"""父插件"""
|
||||||
sub_plugins: set["Plugin"] = field(default_factory=set)
|
sub_plugins: set["Plugin"] = field(default_factory=set)
|
||||||
"""子插件集合"""
|
"""子插件集合"""
|
||||||
metadata: Optional[PluginMetadata] = None
|
metadata: PluginMetadata | None = None
|
||||||
"""插件元信息"""
|
"""插件元信息"""
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ from datetime import datetime, timedelta
|
|||||||
import inspect
|
import inspect
|
||||||
import re
|
import re
|
||||||
from types import ModuleType
|
from types import ModuleType
|
||||||
from typing import Any, Optional, Union
|
from typing import Any
|
||||||
import warnings
|
import warnings
|
||||||
|
|
||||||
from nonebot.adapters import Event
|
from nonebot.adapters import Event
|
||||||
@@ -48,7 +48,7 @@ def store_matcher(matcher: type[Matcher]) -> None:
|
|||||||
plugin.matcher.add(matcher)
|
plugin.matcher.add(matcher)
|
||||||
|
|
||||||
|
|
||||||
def get_matcher_plugin(depth: int = 1) -> Optional[Plugin]: # pragma: no cover
|
def get_matcher_plugin(depth: int = 1) -> Plugin | None: # pragma: no cover
|
||||||
"""获取事件响应器定义所在插件。
|
"""获取事件响应器定义所在插件。
|
||||||
|
|
||||||
**Deprecated**, 请使用 {ref}`nonebot.plugin.on.get_matcher_source` 获取信息。
|
**Deprecated**, 请使用 {ref}`nonebot.plugin.on.get_matcher_source` 获取信息。
|
||||||
@@ -63,7 +63,7 @@ def get_matcher_plugin(depth: int = 1) -> Optional[Plugin]: # pragma: no cover
|
|||||||
return (source := get_matcher_source(depth + 1)) and source.plugin
|
return (source := get_matcher_source(depth + 1)) and source.plugin
|
||||||
|
|
||||||
|
|
||||||
def get_matcher_module(depth: int = 1) -> Optional[ModuleType]: # pragma: no cover
|
def get_matcher_module(depth: int = 1) -> ModuleType | None: # pragma: no cover
|
||||||
"""获取事件响应器定义所在模块。
|
"""获取事件响应器定义所在模块。
|
||||||
|
|
||||||
**Deprecated**, 请使用 {ref}`nonebot.plugin.on.get_matcher_source` 获取信息。
|
**Deprecated**, 请使用 {ref}`nonebot.plugin.on.get_matcher_source` 获取信息。
|
||||||
@@ -78,7 +78,7 @@ def get_matcher_module(depth: int = 1) -> Optional[ModuleType]: # pragma: no co
|
|||||||
return (source := get_matcher_source(depth + 1)) and source.module
|
return (source := get_matcher_source(depth + 1)) and source.module
|
||||||
|
|
||||||
|
|
||||||
def get_matcher_source(depth: int = 0) -> Optional[MatcherSource]:
|
def get_matcher_source(depth: int = 0) -> MatcherSource | None:
|
||||||
"""获取事件响应器定义所在源码信息。
|
"""获取事件响应器定义所在源码信息。
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
@@ -99,7 +99,7 @@ def get_matcher_source(depth: int = 0) -> Optional[MatcherSource]:
|
|||||||
module_name = (module := inspect.getmodule(frame)) and module.__name__
|
module_name = (module := inspect.getmodule(frame)) and module.__name__
|
||||||
|
|
||||||
# matcher defined when plugin loading
|
# matcher defined when plugin loading
|
||||||
plugin: Optional["Plugin"] = _current_plugin.get()
|
plugin: Plugin | None = _current_plugin.get()
|
||||||
# matcher defined when plugin running
|
# matcher defined when plugin running
|
||||||
if plugin is None and module_name:
|
if plugin is None and module_name:
|
||||||
plugin = get_plugin_by_module_name(module_name)
|
plugin = get_plugin_by_module_name(module_name)
|
||||||
@@ -113,15 +113,15 @@ def get_matcher_source(depth: int = 0) -> Optional[MatcherSource]:
|
|||||||
|
|
||||||
def on(
|
def on(
|
||||||
type: str = "",
|
type: str = "",
|
||||||
rule: Optional[Union[Rule, T_RuleChecker]] = None,
|
rule: Rule | T_RuleChecker | None = None,
|
||||||
permission: Optional[Union[Permission, T_PermissionChecker]] = None,
|
permission: Permission | T_PermissionChecker | None = None,
|
||||||
*,
|
*,
|
||||||
handlers: Optional[list[Union[T_Handler, Dependent[Any]]]] = None,
|
handlers: list[T_Handler | Dependent[Any]] | None = None,
|
||||||
temp: bool = False,
|
temp: bool = False,
|
||||||
expire_time: Optional[Union[datetime, timedelta]] = None,
|
expire_time: datetime | timedelta | None = None,
|
||||||
priority: int = 1,
|
priority: int = 1,
|
||||||
block: bool = False,
|
block: bool = False,
|
||||||
state: Optional[T_State] = None,
|
state: T_State | None = None,
|
||||||
_depth: int = 0,
|
_depth: int = 0,
|
||||||
) -> type[Matcher]:
|
) -> type[Matcher]:
|
||||||
"""注册一个基础事件响应器,可自定义类型。
|
"""注册一个基础事件响应器,可自定义类型。
|
||||||
@@ -219,8 +219,8 @@ def on_request(*args, _depth: int = 0, **kwargs) -> type[Matcher]:
|
|||||||
|
|
||||||
|
|
||||||
def on_startswith(
|
def on_startswith(
|
||||||
msg: Union[str, tuple[str, ...]],
|
msg: str | tuple[str, ...],
|
||||||
rule: Optional[Union[Rule, T_RuleChecker]] = None,
|
rule: Rule | T_RuleChecker | None = None,
|
||||||
ignorecase: bool = False,
|
ignorecase: bool = False,
|
||||||
_depth: int = 0,
|
_depth: int = 0,
|
||||||
**kwargs,
|
**kwargs,
|
||||||
@@ -243,8 +243,8 @@ def on_startswith(
|
|||||||
|
|
||||||
|
|
||||||
def on_endswith(
|
def on_endswith(
|
||||||
msg: Union[str, tuple[str, ...]],
|
msg: str | tuple[str, ...],
|
||||||
rule: Optional[Union[Rule, T_RuleChecker]] = None,
|
rule: Rule | T_RuleChecker | None = None,
|
||||||
ignorecase: bool = False,
|
ignorecase: bool = False,
|
||||||
_depth: int = 0,
|
_depth: int = 0,
|
||||||
**kwargs,
|
**kwargs,
|
||||||
@@ -267,8 +267,8 @@ def on_endswith(
|
|||||||
|
|
||||||
|
|
||||||
def on_fullmatch(
|
def on_fullmatch(
|
||||||
msg: Union[str, tuple[str, ...]],
|
msg: str | tuple[str, ...],
|
||||||
rule: Optional[Union[Rule, T_RuleChecker]] = None,
|
rule: Rule | T_RuleChecker | None = None,
|
||||||
ignorecase: bool = False,
|
ignorecase: bool = False,
|
||||||
_depth: int = 0,
|
_depth: int = 0,
|
||||||
**kwargs,
|
**kwargs,
|
||||||
@@ -292,7 +292,7 @@ def on_fullmatch(
|
|||||||
|
|
||||||
def on_keyword(
|
def on_keyword(
|
||||||
keywords: set[str],
|
keywords: set[str],
|
||||||
rule: Optional[Union[Rule, T_RuleChecker]] = None,
|
rule: Rule | T_RuleChecker | None = None,
|
||||||
_depth: int = 0,
|
_depth: int = 0,
|
||||||
**kwargs,
|
**kwargs,
|
||||||
) -> type[Matcher]:
|
) -> type[Matcher]:
|
||||||
@@ -313,10 +313,10 @@ def on_keyword(
|
|||||||
|
|
||||||
|
|
||||||
def on_command(
|
def on_command(
|
||||||
cmd: Union[str, tuple[str, ...]],
|
cmd: str | tuple[str, ...],
|
||||||
rule: Optional[Union[Rule, T_RuleChecker]] = None,
|
rule: Rule | T_RuleChecker | None = None,
|
||||||
aliases: Optional[set[Union[str, tuple[str, ...]]]] = None,
|
aliases: set[str | tuple[str, ...]] | None = None,
|
||||||
force_whitespace: Optional[Union[str, bool]] = None,
|
force_whitespace: str | bool | None = None,
|
||||||
_depth: int = 0,
|
_depth: int = 0,
|
||||||
**kwargs,
|
**kwargs,
|
||||||
) -> type[Matcher]:
|
) -> type[Matcher]:
|
||||||
@@ -348,10 +348,10 @@ def on_command(
|
|||||||
|
|
||||||
|
|
||||||
def on_shell_command(
|
def on_shell_command(
|
||||||
cmd: Union[str, tuple[str, ...]],
|
cmd: str | tuple[str, ...],
|
||||||
rule: Optional[Union[Rule, T_RuleChecker]] = None,
|
rule: Rule | T_RuleChecker | None = None,
|
||||||
aliases: Optional[set[Union[str, tuple[str, ...]]]] = None,
|
aliases: set[str | tuple[str, ...]] | None = None,
|
||||||
parser: Optional[ArgumentParser] = None,
|
parser: ArgumentParser | None = None,
|
||||||
_depth: int = 0,
|
_depth: int = 0,
|
||||||
**kwargs,
|
**kwargs,
|
||||||
) -> type[Matcher]:
|
) -> type[Matcher]:
|
||||||
@@ -386,8 +386,8 @@ def on_shell_command(
|
|||||||
|
|
||||||
def on_regex(
|
def on_regex(
|
||||||
pattern: str,
|
pattern: str,
|
||||||
flags: Union[int, re.RegexFlag] = 0,
|
flags: int | re.RegexFlag = 0,
|
||||||
rule: Optional[Union[Rule, T_RuleChecker]] = None,
|
rule: Rule | T_RuleChecker | None = None,
|
||||||
_depth: int = 0,
|
_depth: int = 0,
|
||||||
**kwargs,
|
**kwargs,
|
||||||
) -> type[Matcher]:
|
) -> type[Matcher]:
|
||||||
@@ -411,8 +411,8 @@ def on_regex(
|
|||||||
|
|
||||||
|
|
||||||
def on_type(
|
def on_type(
|
||||||
types: Union[type[Event], tuple[type[Event], ...]],
|
types: type[Event] | tuple[type[Event], ...],
|
||||||
rule: Optional[Union[Rule, T_RuleChecker]] = None,
|
rule: Rule | T_RuleChecker | None = None,
|
||||||
*,
|
*,
|
||||||
_depth: int = 0,
|
_depth: int = 0,
|
||||||
**kwargs,
|
**kwargs,
|
||||||
@@ -443,7 +443,7 @@ class _Group:
|
|||||||
"""其他传递给 `on` 的参数默认值"""
|
"""其他传递给 `on` 的参数默认值"""
|
||||||
|
|
||||||
def _get_final_kwargs(
|
def _get_final_kwargs(
|
||||||
self, update: dict[str, Any], *, exclude: Optional[set[str]] = None
|
self, update: dict[str, Any], *, exclude: set[str] | None = None
|
||||||
) -> dict[str, Any]:
|
) -> dict[str, Any]:
|
||||||
"""获取最终传递给 `on` 的参数
|
"""获取最终传递给 `on` 的参数
|
||||||
|
|
||||||
@@ -477,7 +477,7 @@ class CommandGroup(_Group):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self, cmd: Union[str, tuple[str, ...]], prefix_aliases: bool = False, **kwargs
|
self, cmd: str | tuple[str, ...], prefix_aliases: bool = False, **kwargs
|
||||||
):
|
):
|
||||||
"""命令前缀"""
|
"""命令前缀"""
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
@@ -488,7 +488,7 @@ class CommandGroup(_Group):
|
|||||||
def __repr__(self) -> str:
|
def __repr__(self) -> str:
|
||||||
return f"CommandGroup(cmd={self.basecmd}, matchers={len(self.matchers)})"
|
return f"CommandGroup(cmd={self.basecmd}, matchers={len(self.matchers)})"
|
||||||
|
|
||||||
def command(self, cmd: Union[str, tuple[str, ...]], **kwargs) -> type[Matcher]:
|
def command(self, cmd: str | tuple[str, ...], **kwargs) -> type[Matcher]:
|
||||||
"""注册一个新的命令。新参数将会覆盖命令组默认值
|
"""注册一个新的命令。新参数将会覆盖命令组默认值
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
@@ -515,9 +515,7 @@ class CommandGroup(_Group):
|
|||||||
self.matchers.append(matcher)
|
self.matchers.append(matcher)
|
||||||
return matcher
|
return matcher
|
||||||
|
|
||||||
def shell_command(
|
def shell_command(self, cmd: str | tuple[str, ...], **kwargs) -> type[Matcher]:
|
||||||
self, cmd: Union[str, tuple[str, ...]], **kwargs
|
|
||||||
) -> type[Matcher]:
|
|
||||||
"""注册一个新的 `shell_like` 命令。新参数将会覆盖命令组默认值
|
"""注册一个新的 `shell_like` 命令。新参数将会覆盖命令组默认值
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
@@ -641,9 +639,7 @@ class MatcherGroup(_Group):
|
|||||||
self.matchers.append(matcher)
|
self.matchers.append(matcher)
|
||||||
return matcher
|
return matcher
|
||||||
|
|
||||||
def on_startswith(
|
def on_startswith(self, msg: str | tuple[str, ...], **kwargs) -> type[Matcher]:
|
||||||
self, msg: Union[str, tuple[str, ...]], **kwargs
|
|
||||||
) -> type[Matcher]:
|
|
||||||
"""注册一个消息事件响应器,并且当消息的**文本部分**以指定内容开头时响应。
|
"""注册一个消息事件响应器,并且当消息的**文本部分**以指定内容开头时响应。
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
@@ -663,7 +659,7 @@ class MatcherGroup(_Group):
|
|||||||
self.matchers.append(matcher)
|
self.matchers.append(matcher)
|
||||||
return matcher
|
return matcher
|
||||||
|
|
||||||
def on_endswith(self, msg: Union[str, tuple[str, ...]], **kwargs) -> type[Matcher]:
|
def on_endswith(self, msg: str | tuple[str, ...], **kwargs) -> type[Matcher]:
|
||||||
"""注册一个消息事件响应器,并且当消息的**文本部分**以指定内容结尾时响应。
|
"""注册一个消息事件响应器,并且当消息的**文本部分**以指定内容结尾时响应。
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
@@ -683,7 +679,7 @@ class MatcherGroup(_Group):
|
|||||||
self.matchers.append(matcher)
|
self.matchers.append(matcher)
|
||||||
return matcher
|
return matcher
|
||||||
|
|
||||||
def on_fullmatch(self, msg: Union[str, tuple[str, ...]], **kwargs) -> type[Matcher]:
|
def on_fullmatch(self, msg: str | tuple[str, ...], **kwargs) -> type[Matcher]:
|
||||||
"""注册一个消息事件响应器,并且当消息的**文本部分**与指定内容完全一致时响应。
|
"""注册一个消息事件响应器,并且当消息的**文本部分**与指定内容完全一致时响应。
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
@@ -724,9 +720,9 @@ class MatcherGroup(_Group):
|
|||||||
|
|
||||||
def on_command(
|
def on_command(
|
||||||
self,
|
self,
|
||||||
cmd: Union[str, tuple[str, ...]],
|
cmd: str | tuple[str, ...],
|
||||||
aliases: Optional[set[Union[str, tuple[str, ...]]]] = None,
|
aliases: set[str | tuple[str, ...]] | None = None,
|
||||||
force_whitespace: Optional[Union[str, bool]] = None,
|
force_whitespace: str | bool | None = None,
|
||||||
**kwargs,
|
**kwargs,
|
||||||
) -> type[Matcher]:
|
) -> type[Matcher]:
|
||||||
"""注册一个消息事件响应器,并且当消息以指定命令开头时响应。
|
"""注册一个消息事件响应器,并且当消息以指定命令开头时响应。
|
||||||
@@ -755,9 +751,9 @@ class MatcherGroup(_Group):
|
|||||||
|
|
||||||
def on_shell_command(
|
def on_shell_command(
|
||||||
self,
|
self,
|
||||||
cmd: Union[str, tuple[str, ...]],
|
cmd: str | tuple[str, ...],
|
||||||
aliases: Optional[set[Union[str, tuple[str, ...]]]] = None,
|
aliases: set[str | tuple[str, ...]] | None = None,
|
||||||
parser: Optional[ArgumentParser] = None,
|
parser: ArgumentParser | None = None,
|
||||||
**kwargs,
|
**kwargs,
|
||||||
) -> type[Matcher]:
|
) -> type[Matcher]:
|
||||||
"""注册一个支持 `shell_like` 解析参数的命令消息事件响应器。
|
"""注册一个支持 `shell_like` 解析参数的命令消息事件响应器。
|
||||||
@@ -786,7 +782,7 @@ class MatcherGroup(_Group):
|
|||||||
return matcher
|
return matcher
|
||||||
|
|
||||||
def on_regex(
|
def on_regex(
|
||||||
self, pattern: str, flags: Union[int, re.RegexFlag] = 0, **kwargs
|
self, pattern: str, flags: int | re.RegexFlag = 0, **kwargs
|
||||||
) -> type[Matcher]:
|
) -> type[Matcher]:
|
||||||
"""注册一个消息事件响应器,并且当消息匹配正则表达式时响应。
|
"""注册一个消息事件响应器,并且当消息匹配正则表达式时响应。
|
||||||
|
|
||||||
@@ -810,7 +806,7 @@ class MatcherGroup(_Group):
|
|||||||
return matcher
|
return matcher
|
||||||
|
|
||||||
def on_type(
|
def on_type(
|
||||||
self, types: Union[type[Event], tuple[type[Event]]], **kwargs
|
self, types: type[Event] | tuple[type[Event]], **kwargs
|
||||||
) -> type[Matcher]:
|
) -> type[Matcher]:
|
||||||
"""注册一个事件响应器,并且当事件为指定类型时响应。
|
"""注册一个事件响应器,并且当事件为指定类型时响应。
|
||||||
|
|
||||||
|
|||||||
@@ -24,10 +24,8 @@ from typing import (
|
|||||||
IO,
|
IO,
|
||||||
TYPE_CHECKING,
|
TYPE_CHECKING,
|
||||||
NamedTuple,
|
NamedTuple,
|
||||||
Optional,
|
|
||||||
TypedDict,
|
TypedDict,
|
||||||
TypeVar,
|
TypeVar,
|
||||||
Union,
|
|
||||||
cast,
|
cast,
|
||||||
overload,
|
overload,
|
||||||
)
|
)
|
||||||
@@ -61,11 +59,11 @@ T = TypeVar("T")
|
|||||||
|
|
||||||
|
|
||||||
class CMD_RESULT(TypedDict):
|
class CMD_RESULT(TypedDict):
|
||||||
command: Optional[tuple[str, ...]]
|
command: tuple[str, ...] | None
|
||||||
raw_command: Optional[str]
|
raw_command: str | None
|
||||||
command_arg: Optional[Message]
|
command_arg: Message | None
|
||||||
command_start: Optional[str]
|
command_start: str | None
|
||||||
command_whitespace: Optional[str]
|
command_whitespace: str | None
|
||||||
|
|
||||||
|
|
||||||
class TRIE_VALUE(NamedTuple):
|
class TRIE_VALUE(NamedTuple):
|
||||||
@@ -179,7 +177,7 @@ class StartswithRule:
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
def startswith(msg: Union[str, tuple[str, ...]], ignorecase: bool = False) -> Rule:
|
def startswith(msg: str | tuple[str, ...], ignorecase: bool = False) -> Rule:
|
||||||
"""匹配消息纯文本开头。
|
"""匹配消息纯文本开头。
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
@@ -234,7 +232,7 @@ class EndswithRule:
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
def endswith(msg: Union[str, tuple[str, ...]], ignorecase: bool = False) -> Rule:
|
def endswith(msg: str | tuple[str, ...], ignorecase: bool = False) -> Rule:
|
||||||
"""匹配消息纯文本结尾。
|
"""匹配消息纯文本结尾。
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
@@ -288,7 +286,7 @@ class FullmatchRule:
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
def fullmatch(msg: Union[str, tuple[str, ...]], ignorecase: bool = False) -> Rule:
|
def fullmatch(msg: str | tuple[str, ...], ignorecase: bool = False) -> Rule:
|
||||||
"""完全匹配消息。
|
"""完全匹配消息。
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
@@ -360,7 +358,7 @@ class CommandRule:
|
|||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
cmds: list[tuple[str, ...]],
|
cmds: list[tuple[str, ...]],
|
||||||
force_whitespace: Optional[Union[str, bool]] = None,
|
force_whitespace: str | bool | None = None,
|
||||||
):
|
):
|
||||||
self.cmds = tuple(cmds)
|
self.cmds = tuple(cmds)
|
||||||
self.force_whitespace = force_whitespace
|
self.force_whitespace = force_whitespace
|
||||||
@@ -378,9 +376,9 @@ class CommandRule:
|
|||||||
|
|
||||||
async def __call__(
|
async def __call__(
|
||||||
self,
|
self,
|
||||||
cmd: Optional[tuple[str, ...]] = Command(),
|
cmd: tuple[str, ...] | None = Command(),
|
||||||
cmd_arg: Optional[Message] = CommandArg(),
|
cmd_arg: Message | None = CommandArg(),
|
||||||
cmd_whitespace: Optional[str] = CommandWhitespace(),
|
cmd_whitespace: str | None = CommandWhitespace(),
|
||||||
) -> bool:
|
) -> bool:
|
||||||
if cmd not in self.cmds:
|
if cmd not in self.cmds:
|
||||||
return False
|
return False
|
||||||
@@ -392,8 +390,8 @@ class CommandRule:
|
|||||||
|
|
||||||
|
|
||||||
def command(
|
def command(
|
||||||
*cmds: Union[str, tuple[str, ...]],
|
*cmds: str | tuple[str, ...],
|
||||||
force_whitespace: Optional[Union[str, bool]] = None,
|
force_whitespace: str | bool | None = None,
|
||||||
) -> Rule:
|
) -> Rule:
|
||||||
"""匹配消息命令。
|
"""匹配消息命令。
|
||||||
|
|
||||||
@@ -456,36 +454,36 @@ class ArgumentParser(ArgParser):
|
|||||||
@overload
|
@overload
|
||||||
def parse_known_args(
|
def parse_known_args(
|
||||||
self,
|
self,
|
||||||
args: Optional[Sequence[Union[str, MessageSegment]]] = None,
|
args: Sequence[str | MessageSegment] | None = None,
|
||||||
namespace: None = None,
|
namespace: None = None,
|
||||||
) -> tuple[Namespace, list[Union[str, MessageSegment]]]: ...
|
) -> tuple[Namespace, list[str | MessageSegment]]: ...
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
def parse_known_args(
|
def parse_known_args(
|
||||||
self, args: Optional[Sequence[Union[str, MessageSegment]]], namespace: T
|
self, args: Sequence[str | MessageSegment] | None, namespace: T
|
||||||
) -> tuple[T, list[Union[str, MessageSegment]]]: ...
|
) -> tuple[T, list[str | MessageSegment]]: ...
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
def parse_known_args(
|
def parse_known_args(
|
||||||
self, *, namespace: T
|
self, *, namespace: T
|
||||||
) -> tuple[T, list[Union[str, MessageSegment]]]: ...
|
) -> tuple[T, list[str | MessageSegment]]: ...
|
||||||
|
|
||||||
def parse_known_args( # pyright: ignore[reportIncompatibleMethodOverride]
|
def parse_known_args( # pyright: ignore[reportIncompatibleMethodOverride]
|
||||||
self,
|
self,
|
||||||
args: Optional[Sequence[Union[str, MessageSegment]]] = None,
|
args: Sequence[str | MessageSegment] | None = None,
|
||||||
namespace: Optional[T] = None,
|
namespace: T | None = None,
|
||||||
) -> tuple[Union[Namespace, T], list[Union[str, MessageSegment]]]: ...
|
) -> tuple[Namespace | T, list[str | MessageSegment]]: ...
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
def parse_args(
|
def parse_args(
|
||||||
self,
|
self,
|
||||||
args: Optional[Sequence[Union[str, MessageSegment]]] = None,
|
args: Sequence[str | MessageSegment] | None = None,
|
||||||
namespace: None = None,
|
namespace: None = None,
|
||||||
) -> Namespace: ...
|
) -> Namespace: ...
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
def parse_args(
|
def parse_args(
|
||||||
self, args: Optional[Sequence[Union[str, MessageSegment]]], namespace: T
|
self, args: Sequence[str | MessageSegment] | None, namespace: T
|
||||||
) -> T: ...
|
) -> T: ...
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
@@ -493,29 +491,29 @@ class ArgumentParser(ArgParser):
|
|||||||
|
|
||||||
def parse_args(
|
def parse_args(
|
||||||
self,
|
self,
|
||||||
args: Optional[Sequence[Union[str, MessageSegment]]] = None,
|
args: Sequence[str | MessageSegment] | None = None,
|
||||||
namespace: Optional[T] = None,
|
namespace: T | None = None,
|
||||||
) -> Union[Namespace, T]:
|
) -> Namespace | T:
|
||||||
result, argv = self.parse_known_args(args, namespace)
|
result, argv = self.parse_known_args(args, namespace)
|
||||||
if argv:
|
if argv:
|
||||||
msg = gettext("unrecognized arguments: %s")
|
msg = gettext("unrecognized arguments: %s")
|
||||||
self.error(msg % " ".join(map(str, argv)))
|
self.error(msg % " ".join(map(str, argv)))
|
||||||
return cast(Union[Namespace, T], result)
|
return cast(Namespace | T, result)
|
||||||
|
|
||||||
def _parse_optional(
|
def _parse_optional(
|
||||||
self, arg_string: Union[str, MessageSegment]
|
self, arg_string: str | MessageSegment
|
||||||
) -> Optional[tuple[Optional[Action], str, Optional[str]]]:
|
) -> tuple[Action | None, str, str | None] | None:
|
||||||
return (
|
return (
|
||||||
super()._parse_optional(arg_string) if isinstance(arg_string, str) else None
|
super()._parse_optional(arg_string) if isinstance(arg_string, str) else None
|
||||||
)
|
)
|
||||||
|
|
||||||
def _print_message(self, message: str, file: Optional[IO[str]] = None): # type: ignore
|
def _print_message(self, message: str, file: IO[str] | None = None): # type: ignore
|
||||||
if (msg := parser_message.get(None)) is not None:
|
if (msg := parser_message.get(None)) is not None:
|
||||||
parser_message.set(msg + message)
|
parser_message.set(msg + message)
|
||||||
else:
|
else:
|
||||||
super()._print_message(message, file)
|
super()._print_message(message, file)
|
||||||
|
|
||||||
def exit(self, status: int = 0, message: Optional[str] = None):
|
def exit(self, status: int = 0, message: str | None = None):
|
||||||
if message:
|
if message:
|
||||||
self._print_message(message)
|
self._print_message(message)
|
||||||
raise ParserExit(status=status, message=parser_message.get(None))
|
raise ParserExit(status=status, message=parser_message.get(None))
|
||||||
@@ -531,7 +529,7 @@ class ShellCommandRule:
|
|||||||
|
|
||||||
__slots__ = ("cmds", "parser")
|
__slots__ = ("cmds", "parser")
|
||||||
|
|
||||||
def __init__(self, cmds: list[tuple[str, ...]], parser: Optional[ArgumentParser]):
|
def __init__(self, cmds: list[tuple[str, ...]], parser: ArgumentParser | None):
|
||||||
self.cmds = tuple(cmds)
|
self.cmds = tuple(cmds)
|
||||||
self.parser = parser
|
self.parser = parser
|
||||||
|
|
||||||
@@ -551,8 +549,8 @@ class ShellCommandRule:
|
|||||||
async def __call__(
|
async def __call__(
|
||||||
self,
|
self,
|
||||||
state: T_State,
|
state: T_State,
|
||||||
cmd: Optional[tuple[str, ...]] = Command(),
|
cmd: tuple[str, ...] | None = Command(),
|
||||||
msg: Optional[Message] = CommandArg(),
|
msg: Message | None = CommandArg(),
|
||||||
) -> bool:
|
) -> bool:
|
||||||
if cmd not in self.cmds or msg is None:
|
if cmd not in self.cmds or msg is None:
|
||||||
return False
|
return False
|
||||||
@@ -589,7 +587,7 @@ class ShellCommandRule:
|
|||||||
|
|
||||||
|
|
||||||
def shell_command(
|
def shell_command(
|
||||||
*cmds: Union[str, tuple[str, ...]], parser: Optional[ArgumentParser] = None
|
*cmds: str | tuple[str, ...], parser: ArgumentParser | None = None
|
||||||
) -> Rule:
|
) -> Rule:
|
||||||
"""匹配 `shell_like` 形式的消息命令。
|
"""匹配 `shell_like` 形式的消息命令。
|
||||||
|
|
||||||
@@ -695,7 +693,7 @@ class RegexRule:
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
def regex(regex: str, flags: Union[int, re.RegexFlag] = 0) -> Rule:
|
def regex(regex: str, flags: int | re.RegexFlag = 0) -> Rule:
|
||||||
"""匹配符合正则表达式的消息字符串。
|
"""匹配符合正则表达式的消息字符串。
|
||||||
|
|
||||||
可以通过 {ref}`nonebot.params.RegexStr` 获取匹配成功的字符串,
|
可以通过 {ref}`nonebot.params.RegexStr` 获取匹配成功的字符串,
|
||||||
|
|||||||
@@ -15,9 +15,9 @@ FrontMatter:
|
|||||||
import sys
|
import sys
|
||||||
import types
|
import types
|
||||||
import typing as t
|
import typing as t
|
||||||
from typing import TYPE_CHECKING, TypeVar
|
from typing import TYPE_CHECKING, TypeAlias, TypeVar, get_args, get_origin
|
||||||
import typing_extensions as t_ext
|
import typing_extensions as t_ext
|
||||||
from typing_extensions import ParamSpec, TypeAlias, get_args, get_origin, override
|
from typing_extensions import ParamSpec, override
|
||||||
import warnings
|
import warnings
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
@@ -43,31 +43,15 @@ def overrides(InterfaceClass: object):
|
|||||||
return override
|
return override
|
||||||
|
|
||||||
|
|
||||||
if sys.version_info < (3, 10):
|
def type_has_args(type_: type[t.Any]) -> bool:
|
||||||
|
return isinstance(type_, (t._GenericAlias, types.GenericAlias, types.UnionType)) # type: ignore
|
||||||
def type_has_args(type_: type[t.Any]) -> bool:
|
|
||||||
"""判断类型是否有参数"""
|
|
||||||
return isinstance(type_, (t._GenericAlias, types.GenericAlias)) # type: ignore
|
|
||||||
|
|
||||||
else:
|
|
||||||
|
|
||||||
def type_has_args(type_: type[t.Any]) -> bool:
|
|
||||||
return isinstance(type_, (t._GenericAlias, types.GenericAlias, types.UnionType)) # type: ignore
|
|
||||||
|
|
||||||
|
|
||||||
if sys.version_info < (3, 10):
|
def origin_is_union(origin: type[t.Any] | None) -> bool:
|
||||||
|
return origin is t.Union or origin is types.UnionType
|
||||||
def origin_is_union(origin: t.Optional[type[t.Any]]) -> bool:
|
|
||||||
"""判断是否是 Union 类型"""
|
|
||||||
return origin is t.Union
|
|
||||||
|
|
||||||
else:
|
|
||||||
|
|
||||||
def origin_is_union(origin: t.Optional[type[t.Any]]) -> bool:
|
|
||||||
return origin is t.Union or origin is types.UnionType
|
|
||||||
|
|
||||||
|
|
||||||
def origin_is_literal(origin: t.Optional[type[t.Any]]) -> bool:
|
def origin_is_literal(origin: type[t.Any] | None) -> bool:
|
||||||
"""判断是否是 Literal 类型"""
|
"""判断是否是 Literal 类型"""
|
||||||
return origin is t.Literal or origin is t_ext.Literal
|
return origin is t.Literal or origin is t_ext.Literal
|
||||||
|
|
||||||
@@ -84,14 +68,12 @@ def all_literal_values(type_: type[t.Any]) -> list[t.Any]:
|
|||||||
return [x for value in _literal_values(type_) for x in all_literal_values(value)]
|
return [x for value in _literal_values(type_) for x in all_literal_values(value)]
|
||||||
|
|
||||||
|
|
||||||
def origin_is_annotated(origin: t.Optional[type[t.Any]]) -> bool:
|
def origin_is_annotated(origin: type[t.Any] | None) -> bool:
|
||||||
"""判断是否是 Annotated 类型"""
|
"""判断是否是 Annotated 类型"""
|
||||||
return origin is t_ext.Annotated
|
return origin is t_ext.Annotated
|
||||||
|
|
||||||
|
|
||||||
NONE_TYPES = {None, type(None), t.Literal[None], t_ext.Literal[None]} # noqa: PYI061
|
NONE_TYPES = {None, type(None), t.Literal[None], t_ext.Literal[None], types.NoneType} # noqa: PYI061
|
||||||
if sys.version_info >= (3, 10):
|
|
||||||
NONE_TYPES.add(types.NoneType)
|
|
||||||
|
|
||||||
|
|
||||||
def is_none_type(type_: type[t.Any]) -> bool:
|
def is_none_type(type_: type[t.Any]) -> bool:
|
||||||
@@ -133,9 +115,7 @@ _STATE_FLAG = StateFlag()
|
|||||||
T_State: TypeAlias = t.Annotated[dict[t.Any, t.Any], _STATE_FLAG]
|
T_State: TypeAlias = t.Annotated[dict[t.Any, t.Any], _STATE_FLAG]
|
||||||
"""事件处理状态 State 类型"""
|
"""事件处理状态 State 类型"""
|
||||||
|
|
||||||
_DependentCallable: TypeAlias = t.Union[
|
_DependentCallable: TypeAlias = t.Callable[..., T] | t.Callable[..., t.Awaitable[T]]
|
||||||
t.Callable[..., T], t.Callable[..., t.Awaitable[T]]
|
|
||||||
]
|
|
||||||
|
|
||||||
# driver hooks
|
# driver hooks
|
||||||
T_BotConnectionHook: TypeAlias = _DependentCallable[t.Any]
|
T_BotConnectionHook: TypeAlias = _DependentCallable[t.Any]
|
||||||
@@ -163,7 +143,7 @@ T_CallingAPIHook: TypeAlias = t.Callable[
|
|||||||
]
|
]
|
||||||
"""`bot.call_api` 钩子函数"""
|
"""`bot.call_api` 钩子函数"""
|
||||||
T_CalledAPIHook: TypeAlias = t.Callable[
|
T_CalledAPIHook: TypeAlias = t.Callable[
|
||||||
["Bot", t.Optional[Exception], str, dict[str, t.Any], t.Any], t.Awaitable[t.Any]
|
["Bot", Exception | None, str, dict[str, t.Any], t.Any], t.Awaitable[t.Any]
|
||||||
]
|
]
|
||||||
"""`bot.call_api` 后执行的函数,参数分别为 bot, exception, api, data, result"""
|
"""`bot.call_api` 后执行的函数,参数分别为 bot, exception, api, data, result"""
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,14 @@ FrontMatter:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
from collections import deque
|
from collections import deque
|
||||||
from collections.abc import AsyncGenerator, Coroutine, Generator, Mapping, Sequence
|
from collections.abc import (
|
||||||
|
AsyncGenerator,
|
||||||
|
Callable,
|
||||||
|
Coroutine,
|
||||||
|
Generator,
|
||||||
|
Mapping,
|
||||||
|
Sequence,
|
||||||
|
)
|
||||||
import contextlib
|
import contextlib
|
||||||
from contextlib import AbstractContextManager, asynccontextmanager
|
from contextlib import AbstractContextManager, asynccontextmanager
|
||||||
import dataclasses
|
import dataclasses
|
||||||
@@ -18,8 +25,15 @@ import inspect
|
|||||||
import json
|
import json
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
import re
|
import re
|
||||||
from typing import Any, Callable, Generic, Optional, TypeVar, Union, overload
|
from typing import (
|
||||||
from typing_extensions import ParamSpec, get_args, get_origin, override
|
Any,
|
||||||
|
Generic,
|
||||||
|
TypeVar,
|
||||||
|
get_args,
|
||||||
|
get_origin,
|
||||||
|
overload,
|
||||||
|
)
|
||||||
|
from typing_extensions import ParamSpec, override
|
||||||
|
|
||||||
import anyio
|
import anyio
|
||||||
import anyio.to_thread
|
import anyio.to_thread
|
||||||
@@ -73,7 +87,7 @@ def deep_update(
|
|||||||
|
|
||||||
|
|
||||||
def lenient_issubclass(
|
def lenient_issubclass(
|
||||||
cls: Any, class_or_tuple: Union[type[Any], tuple[type[Any], ...]]
|
cls: Any, class_or_tuple: type[Any] | tuple[type[Any], ...]
|
||||||
) -> bool:
|
) -> bool:
|
||||||
"""检查 cls 是否是 class_or_tuple 中的一个类型子类并忽略类型错误。"""
|
"""检查 cls 是否是 class_or_tuple 中的一个类型子类并忽略类型错误。"""
|
||||||
try:
|
try:
|
||||||
@@ -83,7 +97,7 @@ def lenient_issubclass(
|
|||||||
|
|
||||||
|
|
||||||
def generic_check_issubclass(
|
def generic_check_issubclass(
|
||||||
cls: Any, class_or_tuple: Union[type[Any], tuple[type[Any], ...]]
|
cls: Any, class_or_tuple: type[Any] | tuple[type[Any], ...]
|
||||||
) -> bool:
|
) -> bool:
|
||||||
"""检查 cls 是否是 class_or_tuple 中的一个类型子类。
|
"""检查 cls 是否是 class_or_tuple 中的一个类型子类。
|
||||||
|
|
||||||
@@ -141,7 +155,7 @@ def type_is_complex(type_: type[Any]) -> bool:
|
|||||||
return _type_is_complex_inner(type_) or _type_is_complex_inner(origin)
|
return _type_is_complex_inner(type_) or _type_is_complex_inner(origin)
|
||||||
|
|
||||||
|
|
||||||
def _type_is_complex_inner(type_: Optional[type[Any]]) -> bool:
|
def _type_is_complex_inner(type_: type[Any] | None) -> bool:
|
||||||
if lenient_issubclass(type_, (str, bytes)):
|
if lenient_issubclass(type_, (str, bytes)):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@@ -212,7 +226,7 @@ async def run_coro_with_catch(
|
|||||||
coro: Coroutine[Any, Any, T],
|
coro: Coroutine[Any, Any, T],
|
||||||
exc: tuple[type[Exception], ...],
|
exc: tuple[type[Exception], ...],
|
||||||
return_on_err: None = None,
|
return_on_err: None = None,
|
||||||
) -> Union[T, None]: ...
|
) -> T | None: ...
|
||||||
|
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
@@ -220,14 +234,14 @@ async def run_coro_with_catch(
|
|||||||
coro: Coroutine[Any, Any, T],
|
coro: Coroutine[Any, Any, T],
|
||||||
exc: tuple[type[Exception], ...],
|
exc: tuple[type[Exception], ...],
|
||||||
return_on_err: R,
|
return_on_err: R,
|
||||||
) -> Union[T, R]: ...
|
) -> T | R: ...
|
||||||
|
|
||||||
|
|
||||||
async def run_coro_with_catch(
|
async def run_coro_with_catch(
|
||||||
coro: Coroutine[Any, Any, T],
|
coro: Coroutine[Any, Any, T],
|
||||||
exc: tuple[type[Exception], ...],
|
exc: tuple[type[Exception], ...],
|
||||||
return_on_err: Optional[R] = None,
|
return_on_err: R | None = None,
|
||||||
) -> Optional[Union[T, R]]:
|
) -> T | R | None:
|
||||||
"""运行协程并当遇到指定异常时返回指定值。
|
"""运行协程并当遇到指定异常时返回指定值。
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
@@ -288,7 +302,7 @@ def path_to_module_name(path: Path) -> str:
|
|||||||
|
|
||||||
|
|
||||||
def resolve_dot_notation(
|
def resolve_dot_notation(
|
||||||
obj_str: str, default_attr: str, default_prefix: Optional[str] = None
|
obj_str: str, default_attr: str, default_prefix: str | None = None
|
||||||
) -> Any:
|
) -> Any:
|
||||||
"""解析并导入点分表示法的对象"""
|
"""解析并导入点分表示法的对象"""
|
||||||
modulename, _, cls = obj_str.partition(":")
|
modulename, _, cls = obj_str.partition(":")
|
||||||
@@ -309,7 +323,7 @@ class classproperty(Generic[T]):
|
|||||||
def __init__(self, func: Callable[[Any], T]) -> None:
|
def __init__(self, func: Callable[[Any], T]) -> None:
|
||||||
self.func = func
|
self.func = func
|
||||||
|
|
||||||
def __get__(self, instance: Any, owner: Optional[type[Any]] = None) -> T:
|
def __get__(self, instance: Any, owner: type[Any] | None = None) -> T:
|
||||||
return self.func(type(instance) if owner is None else owner)
|
return self.func(type(instance) if owner is None else owner)
|
||||||
|
|
||||||
|
|
||||||
@@ -339,7 +353,7 @@ def logger_wrapper(logger_name: str):
|
|||||||
- exception: 异常信息
|
- exception: 异常信息
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def log(level: str, message: str, exception: Optional[Exception] = None):
|
def log(level: str, message: str, exception: Exception | None = None):
|
||||||
logger.opt(colors=True, exception=exception).log(
|
logger.opt(colors=True, exception=exception).log(
|
||||||
level, f"<m>{escape_tag(logger_name)}</m> | {message}"
|
level, f"<m>{escape_tag(logger_name)}</m> | {message}"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ classifiers = [
|
|||||||
"Operating System :: OS Independent",
|
"Operating System :: OS Independent",
|
||||||
"Programming Language :: Python :: 3",
|
"Programming Language :: Python :: 3",
|
||||||
]
|
]
|
||||||
requires-python = ">=3.9, <4.0"
|
requires-python = ">=3.10, <4.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"yarl >=1.7.2, <2.0.0",
|
"yarl >=1.7.2, <2.0.0",
|
||||||
"anyio >=4.4.0, <5.0.0",
|
"anyio >=4.4.0, <5.0.0",
|
||||||
@@ -57,7 +57,7 @@ test = [
|
|||||||
"pytest-xdist >=3.0.2, <4.0.0",
|
"pytest-xdist >=3.0.2, <4.0.0",
|
||||||
"coverage-conditional-plugin >=0.9.0, <0.10.0",
|
"coverage-conditional-plugin >=0.9.0, <0.10.0",
|
||||||
]
|
]
|
||||||
docs = ["nb-autodoc >=1.0.0a5, <2.0.0"]
|
docs = ["nb-autodoc >=1.0.3, <2.0.0"]
|
||||||
pydantic-v1 = ["pydantic >=1.10.0, <2.0.0"]
|
pydantic-v1 = ["pydantic >=1.10.0, <2.0.0"]
|
||||||
pydantic-v2 = ["pydantic >=2.0.0, <3.0.0"]
|
pydantic-v2 = ["pydantic >=2.0.0, <3.0.0"]
|
||||||
|
|
||||||
@@ -83,7 +83,6 @@ filterwarnings = ["error", "ignore::DeprecationWarning"]
|
|||||||
|
|
||||||
[tool.ruff]
|
[tool.ruff]
|
||||||
line-length = 88
|
line-length = 88
|
||||||
target-version = "py39"
|
|
||||||
|
|
||||||
[tool.ruff.format]
|
[tool.ruff.format]
|
||||||
line-ending = "lf"
|
line-ending = "lf"
|
||||||
@@ -126,7 +125,7 @@ mark-parentheses = false
|
|||||||
keep-runtime-typing = true
|
keep-runtime-typing = true
|
||||||
|
|
||||||
[tool.pyright]
|
[tool.pyright]
|
||||||
pythonVersion = "3.9"
|
pythonVersion = "3.10"
|
||||||
pythonPlatform = "All"
|
pythonPlatform = "All"
|
||||||
defineConstant = { PYDANTIC_V2 = true }
|
defineConstant = { PYDANTIC_V2 = true }
|
||||||
executionEnvironments = [
|
executionEnvironments = [
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
from collections.abc import Generator
|
from collections.abc import Callable, Generator
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
import os
|
import os
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
import sys
|
import sys
|
||||||
import threading
|
import threading
|
||||||
from typing import TYPE_CHECKING, Callable, TypeVar
|
from types import EllipsisType
|
||||||
|
from typing import TYPE_CHECKING, TypeVar
|
||||||
from typing_extensions import ParamSpec
|
from typing_extensions import ParamSpec
|
||||||
|
|
||||||
from nonebug import NONEBOT_INIT_KWARGS
|
from nonebug import NONEBOT_INIT_KWARGS
|
||||||
@@ -50,12 +51,12 @@ def anyio_backend(request: pytest.FixtureRequest):
|
|||||||
|
|
||||||
|
|
||||||
def run_once(func: Callable[P, R]) -> Callable[P, R]:
|
def run_once(func: Callable[P, R]) -> Callable[P, R]:
|
||||||
result = ...
|
result: R | EllipsisType = ...
|
||||||
|
|
||||||
@wraps(func)
|
@wraps(func)
|
||||||
def _wrapper(*args: P.args, **kwargs: P.kwargs) -> R:
|
def _wrapper(*args: P.args, **kwargs: P.kwargs) -> R:
|
||||||
nonlocal result
|
nonlocal result
|
||||||
if result is not Ellipsis:
|
if result is not ...:
|
||||||
return result
|
return result
|
||||||
|
|
||||||
result = func(*args, **kwargs)
|
result = func(*args, **kwargs)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import base64
|
import base64
|
||||||
import json
|
import json
|
||||||
import socket
|
import socket
|
||||||
from typing import TypeVar, Union
|
from typing import TypeVar
|
||||||
|
|
||||||
from werkzeug import Request, Response
|
from werkzeug import Request, Response
|
||||||
from werkzeug.datastructures import MultiDict
|
from werkzeug.datastructures import MultiDict
|
||||||
@@ -36,7 +36,7 @@ def json_safe(string, content_type="application/octet-stream") -> str:
|
|||||||
).decode("utf-8")
|
).decode("utf-8")
|
||||||
|
|
||||||
|
|
||||||
def flattern(d: "MultiDict[K, V]") -> dict[K, Union[V, list[V]]]:
|
def flattern(d: "MultiDict[K, V]") -> dict[K, V | list[V]]:
|
||||||
return {k: v[0] if len(v) == 1 else v for k, v in d.to_dict(flat=False).items()}
|
return {k: v[0] if len(v) == 1 else v for k, v in d.to_dict(flat=False).items()}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from typing import TypeVar, Union
|
from typing import TypeVar
|
||||||
|
|
||||||
from nonebot.adapters import Bot
|
from nonebot.adapters import Bot
|
||||||
|
|
||||||
@@ -28,7 +28,7 @@ async def sub_bot(b: FooBot) -> FooBot:
|
|||||||
class BarBot(Bot): ...
|
class BarBot(Bot): ...
|
||||||
|
|
||||||
|
|
||||||
async def union_bot(b: Union[FooBot, BarBot]) -> Union[FooBot, BarBot]:
|
async def union_bot(b: FooBot | BarBot) -> FooBot | BarBot:
|
||||||
return b
|
return b
|
||||||
|
|
||||||
|
|
||||||
@@ -46,4 +46,4 @@ async def generic_bot_none(b: CB) -> CB:
|
|||||||
return b
|
return b
|
||||||
|
|
||||||
|
|
||||||
async def not_bot(b: Union[int, Bot]): ...
|
async def not_bot(b: int | Bot): ...
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from typing import TypeVar, Union
|
from typing import TypeVar
|
||||||
|
|
||||||
from nonebot.adapters import Event, Message
|
from nonebot.adapters import Event, Message
|
||||||
from nonebot.params import EventMessage, EventPlainText, EventToMe, EventType
|
from nonebot.params import EventMessage, EventPlainText, EventToMe, EventType
|
||||||
@@ -29,7 +29,7 @@ async def sub_event(e: FooEvent) -> FooEvent:
|
|||||||
class BarEvent(Event): ...
|
class BarEvent(Event): ...
|
||||||
|
|
||||||
|
|
||||||
async def union_event(e: Union[FooEvent, BarEvent]) -> Union[FooEvent, BarEvent]:
|
async def union_event(e: FooEvent | BarEvent) -> FooEvent | BarEvent:
|
||||||
return e
|
return e
|
||||||
|
|
||||||
|
|
||||||
@@ -47,7 +47,7 @@ async def generic_event_none(e: CE) -> CE:
|
|||||||
return e
|
return e
|
||||||
|
|
||||||
|
|
||||||
async def not_event(e: Union[int, Event]): ...
|
async def not_event(e: int | Event): ...
|
||||||
|
|
||||||
|
|
||||||
async def event_type(t: str = EventType()) -> str:
|
async def event_type(t: str = EventType()) -> str:
|
||||||
|
|||||||
@@ -1,7 +1,4 @@
|
|||||||
from typing import Union
|
async def exc(e: Exception, x: ValueError | TypeError) -> Exception:
|
||||||
|
|
||||||
|
|
||||||
async def exc(e: Exception, x: Union[ValueError, TypeError]) -> Exception:
|
|
||||||
assert e == x
|
assert e == x
|
||||||
return e
|
return e
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from typing import Any, TypeVar, Union
|
from typing import Any, TypeVar
|
||||||
|
|
||||||
from nonebot.adapters import Event
|
from nonebot.adapters import Event
|
||||||
from nonebot.matcher import Matcher
|
from nonebot.matcher import Matcher
|
||||||
@@ -36,8 +36,8 @@ class BarMatcher(Matcher): ...
|
|||||||
|
|
||||||
|
|
||||||
async def union_matcher(
|
async def union_matcher(
|
||||||
m: Union[FooMatcher, BarMatcher],
|
m: FooMatcher | BarMatcher,
|
||||||
) -> Union[FooMatcher, BarMatcher]:
|
) -> FooMatcher | BarMatcher:
|
||||||
return m
|
return m
|
||||||
|
|
||||||
|
|
||||||
@@ -55,7 +55,7 @@ async def generic_matcher_none(m: CM) -> CM:
|
|||||||
return m
|
return m
|
||||||
|
|
||||||
|
|
||||||
async def not_matcher(m: Union[int, Matcher]): ...
|
async def not_matcher(m: int | Matcher): ...
|
||||||
|
|
||||||
|
|
||||||
async def receive(e: Event = Received("test")) -> Event:
|
async def receive(e: Event = Received("test")) -> Event:
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
from typing import Optional
|
|
||||||
|
|
||||||
from nonebot.adapters import Bot, Event, Message
|
from nonebot.adapters import Bot, Event, Message
|
||||||
from nonebot.matcher import Matcher
|
from nonebot.matcher import Matcher
|
||||||
from nonebot.params import Arg, Depends
|
from nonebot.params import Arg, Depends
|
||||||
@@ -12,11 +10,11 @@ def dependency():
|
|||||||
|
|
||||||
async def complex_priority(
|
async def complex_priority(
|
||||||
sub: int = Depends(dependency),
|
sub: int = Depends(dependency),
|
||||||
bot: Optional[Bot] = None,
|
bot: Bot | None = None,
|
||||||
event: Optional[Event] = None,
|
event: Event | None = None,
|
||||||
state: T_State = {},
|
state: T_State = {},
|
||||||
matcher: Optional[Matcher] = None,
|
matcher: Matcher | None = None,
|
||||||
arg: Message = Arg(),
|
arg: Message = Arg(),
|
||||||
exception: Optional[Exception] = None,
|
exception: Exception | None = None,
|
||||||
default: int = 1,
|
default: int = 1,
|
||||||
): ...
|
): ...
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
from contextlib import asynccontextmanager
|
from contextlib import asynccontextmanager
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
from nonebug import App
|
from nonebug import App
|
||||||
import pytest
|
import pytest
|
||||||
@@ -19,8 +18,8 @@ from utils import FakeAdapter
|
|||||||
|
|
||||||
@pytest.mark.anyio
|
@pytest.mark.anyio
|
||||||
async def test_adapter_connect(app: App, driver: Driver):
|
async def test_adapter_connect(app: App, driver: Driver):
|
||||||
last_connect_bot: Optional[Bot] = None
|
last_connect_bot: Bot | None = None
|
||||||
last_disconnect_bot: Optional[Bot] = None
|
last_disconnect_bot: Bot | None = None
|
||||||
|
|
||||||
def _fake_bot_connect(bot: Bot):
|
def _fake_bot_connect(bot: Bot):
|
||||||
nonlocal last_connect_bot
|
nonlocal last_connect_bot
|
||||||
@@ -75,8 +74,8 @@ async def test_adapter_connect(app: App, driver: Driver):
|
|||||||
indirect=True,
|
indirect=True,
|
||||||
)
|
)
|
||||||
def test_adapter_server(driver: Driver):
|
def test_adapter_server(driver: Driver):
|
||||||
last_http_setup: Optional[HTTPServerSetup] = None
|
last_http_setup: HTTPServerSetup | None = None
|
||||||
last_ws_setup: Optional[WebSocketServerSetup] = None
|
last_ws_setup: WebSocketServerSetup | None = None
|
||||||
|
|
||||||
def _fake_setup_http_server(setup: HTTPServerSetup):
|
def _fake_setup_http_server(setup: HTTPServerSetup):
|
||||||
nonlocal last_http_setup
|
nonlocal last_http_setup
|
||||||
@@ -142,7 +141,7 @@ def test_adapter_server(driver: Driver):
|
|||||||
indirect=True,
|
indirect=True,
|
||||||
)
|
)
|
||||||
async def test_adapter_http_client(driver: Driver):
|
async def test_adapter_http_client(driver: Driver):
|
||||||
last_request: Optional[Request] = None
|
last_request: Request | None = None
|
||||||
|
|
||||||
async def _fake_request(request: Request):
|
async def _fake_request(request: Request):
|
||||||
nonlocal last_request
|
nonlocal last_request
|
||||||
@@ -190,7 +189,7 @@ async def test_adapter_http_client(driver: Driver):
|
|||||||
)
|
)
|
||||||
async def test_adapter_websocket_client(driver: Driver):
|
async def test_adapter_websocket_client(driver: Driver):
|
||||||
_fake_ws = object()
|
_fake_ws = object()
|
||||||
_last_request: Optional[Request] = None
|
_last_request: Request | None = None
|
||||||
|
|
||||||
@asynccontextmanager
|
@asynccontextmanager
|
||||||
async def _fake_websocket(setup: Request):
|
async def _fake_websocket(setup: Request):
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from typing import Any, Optional
|
from typing import Any
|
||||||
|
|
||||||
import anyio
|
import anyio
|
||||||
from nonebug import App
|
from nonebug import App
|
||||||
@@ -123,7 +123,7 @@ async def test_bot_called_api_hook_simple(app: App):
|
|||||||
|
|
||||||
async def called_api_hook(
|
async def called_api_hook(
|
||||||
bot: Bot,
|
bot: Bot,
|
||||||
exception: Optional[Exception],
|
exception: Exception | None,
|
||||||
api: str,
|
api: str,
|
||||||
data: dict[str, Any],
|
data: dict[str, Any],
|
||||||
result: Any,
|
result: Any,
|
||||||
@@ -155,7 +155,7 @@ async def test_bot_called_api_hook_mock(app: App):
|
|||||||
|
|
||||||
async def called_api_hook(
|
async def called_api_hook(
|
||||||
bot: Bot,
|
bot: Bot,
|
||||||
exception: Optional[Exception],
|
exception: Exception | None,
|
||||||
api: str,
|
api: str,
|
||||||
data: dict[str, Any],
|
data: dict[str, Any],
|
||||||
result: Any,
|
result: Any,
|
||||||
@@ -201,7 +201,7 @@ async def test_bot_called_api_hook_multi_mock(app: App):
|
|||||||
|
|
||||||
async def called_api_hook1(
|
async def called_api_hook1(
|
||||||
bot: Bot,
|
bot: Bot,
|
||||||
exception: Optional[Exception],
|
exception: Exception | None,
|
||||||
api: str,
|
api: str,
|
||||||
data: dict[str, Any],
|
data: dict[str, Any],
|
||||||
result: Any,
|
result: Any,
|
||||||
@@ -214,7 +214,7 @@ async def test_bot_called_api_hook_multi_mock(app: App):
|
|||||||
|
|
||||||
async def called_api_hook2(
|
async def called_api_hook2(
|
||||||
bot: Bot,
|
bot: Bot,
|
||||||
exception: Optional[Exception],
|
exception: Exception | None,
|
||||||
api: str,
|
api: str,
|
||||||
data: dict[str, Any],
|
data: dict[str, Any],
|
||||||
result: Any,
|
result: Any,
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import sys
|
import sys
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
from nonebug import App
|
from nonebug import App
|
||||||
import pytest
|
import pytest
|
||||||
@@ -326,7 +325,7 @@ async def test_run_postprocessor(app: App, monkeypatch: pytest.MonkeyPatch):
|
|||||||
event: Event,
|
event: Event,
|
||||||
state: T_State,
|
state: T_State,
|
||||||
matcher: Matcher,
|
matcher: Matcher,
|
||||||
exception: Optional[Exception],
|
exception: Exception | None,
|
||||||
sub: int = Depends(_dependency),
|
sub: int = Depends(_dependency),
|
||||||
default: int = 1,
|
default: int = 1,
|
||||||
):
|
):
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from typing import Annotated, Any, Optional
|
from typing import Annotated, Any
|
||||||
|
|
||||||
from pydantic import BaseModel, ValidationError
|
from pydantic import BaseModel, ValidationError
|
||||||
import pytest
|
import pytest
|
||||||
@@ -144,7 +144,7 @@ def test_validate_json():
|
|||||||
test3: bool
|
test3: bool
|
||||||
test4: dict
|
test4: dict
|
||||||
test5: list
|
test5: list
|
||||||
test6: Optional[int]
|
test6: int | None
|
||||||
|
|
||||||
assert type_validate_json(
|
assert type_validate_json(
|
||||||
TestModel,
|
TestModel,
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from typing import TYPE_CHECKING, Optional, Union
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
from pydantic import BaseModel, Field
|
from pydantic import BaseModel, Field
|
||||||
import pytest
|
import pytest
|
||||||
@@ -16,8 +16,8 @@ class Simple(BaseModel):
|
|||||||
|
|
||||||
class Example(BaseSettings):
|
class Example(BaseSettings):
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
_env_file: Optional[DOTENV_TYPE] = ".env", ".env.example"
|
_env_file: DOTENV_TYPE | None = ".env", ".env.example"
|
||||||
_env_nested_delimiter: Optional[str] = "__"
|
_env_nested_delimiter: str | None = "__"
|
||||||
|
|
||||||
if PYDANTIC_V2:
|
if PYDANTIC_V2:
|
||||||
model_config = SettingsConfig(
|
model_config = SettingsConfig(
|
||||||
@@ -32,10 +32,10 @@ class Example(BaseSettings):
|
|||||||
env_nested_delimiter = "__"
|
env_nested_delimiter = "__"
|
||||||
|
|
||||||
simple: str = ""
|
simple: str = ""
|
||||||
int_str: Union[int, str] = LegacyUnionField(default="")
|
int_str: int | str = LegacyUnionField(default="")
|
||||||
complex: list[int] = Field(default=[1])
|
complex: list[int] = Field(default=[1])
|
||||||
complex_none: Optional[list[int]] = None
|
complex_none: list[int] | None = None
|
||||||
complex_union: Union[int, list[int]] = 1
|
complex_union: int | list[int] = 1
|
||||||
nested: Simple = Simple()
|
nested: Simple = Simple()
|
||||||
nested_inner: Simple = Simple()
|
nested_inner: Simple = Simple()
|
||||||
aliased_simple: str = Field(default="", alias="alias_simple")
|
aliased_simple: str = Field(default="", alias="alias_simple")
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from http.cookies import SimpleCookie
|
from http.cookies import SimpleCookie
|
||||||
import json
|
import json
|
||||||
from typing import Any, Optional
|
from typing import Any
|
||||||
|
|
||||||
from aiohttp import ClientSession, ClientWebSocketResponse, WSMessage, WSMsgType
|
from aiohttp import ClientSession, ClientWebSocketResponse, WSMessage, WSMsgType
|
||||||
import anyio
|
import anyio
|
||||||
@@ -173,7 +173,7 @@ async def test_websocket_server(app: App, driver: Driver):
|
|||||||
async def test_cross_context(app: App, driver: Driver):
|
async def test_cross_context(app: App, driver: Driver):
|
||||||
assert isinstance(driver, ASGIMixin)
|
assert isinstance(driver, ASGIMixin)
|
||||||
|
|
||||||
ws: Optional[WebSocket] = None
|
ws: WebSocket | None = None
|
||||||
ws_ready = anyio.Event()
|
ws_ready = anyio.Event()
|
||||||
ws_should_close = anyio.Event()
|
ws_should_close = anyio.Event()
|
||||||
|
|
||||||
@@ -651,7 +651,7 @@ async def test_aiohttp_websocket_close_frame(msg_type: str) -> None:
|
|||||||
def closed(self) -> bool:
|
def closed(self) -> bool:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
async def receive(self, timeout: Optional[float] = None) -> WSMessage: # noqa: ASYNC109
|
async def receive(self, timeout: float | None = None) -> WSMessage: # noqa: ASYNC109
|
||||||
return WSMessage(type=WSMsgType[msg_type], data=None, extra=None)
|
return WSMessage(type=WSMsgType[msg_type], data=None, extra=None)
|
||||||
|
|
||||||
async with ClientSession() as session:
|
async with ClientSession() as session:
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
from typing import Optional
|
|
||||||
|
|
||||||
from nonebug import App
|
from nonebug import App
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
@@ -138,7 +136,7 @@ async def test_superuser(app: App, type: str, user_id: str, expected: bool):
|
|||||||
],
|
],
|
||||||
)
|
)
|
||||||
async def test_user(
|
async def test_user(
|
||||||
app: App, session_ids: tuple[str, ...], session_id: Optional[str], expected: bool
|
app: App, session_ids: tuple[str, ...], session_id: str | None, expected: bool
|
||||||
):
|
):
|
||||||
dependent = next(iter(USER(*session_ids).checkers))
|
dependent = next(iter(USER(*session_ids).checkers))
|
||||||
checker = dependent.call
|
checker = dependent.call
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
|
from collections.abc import Callable
|
||||||
from dataclasses import asdict
|
from dataclasses import asdict
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
import sys
|
import sys
|
||||||
from typing import Callable, TypeVar
|
from typing import TypeVar
|
||||||
from typing_extensions import ParamSpec
|
from typing_extensions import ParamSpec
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from typing import Callable, Optional
|
from collections.abc import Callable
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
@@ -103,7 +103,7 @@ from nonebot.typing import T_RuleChecker
|
|||||||
)
|
)
|
||||||
def test_on(
|
def test_on(
|
||||||
matcher_name: str,
|
matcher_name: str,
|
||||||
pre_rule_factory: Optional[Callable[[type[Event]], T_RuleChecker]],
|
pre_rule_factory: Callable[[type[Event]], T_RuleChecker] | None,
|
||||||
has_permission: bool,
|
has_permission: bool,
|
||||||
):
|
):
|
||||||
import plugins.plugin.matchers as module
|
import plugins.plugin.matchers as module
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import re
|
import re
|
||||||
from re import Match
|
from re import Match
|
||||||
from typing import Optional, Union
|
|
||||||
|
|
||||||
from nonebug import App
|
from nonebug import App
|
||||||
import pytest
|
import pytest
|
||||||
@@ -163,10 +162,10 @@ async def test_trie(app: App):
|
|||||||
],
|
],
|
||||||
)
|
)
|
||||||
async def test_startswith(
|
async def test_startswith(
|
||||||
msg: Union[str, tuple[str, ...]],
|
msg: str | tuple[str, ...],
|
||||||
ignorecase: bool,
|
ignorecase: bool,
|
||||||
type: str,
|
type: str,
|
||||||
text: Optional[str],
|
text: str | None,
|
||||||
expected: bool,
|
expected: bool,
|
||||||
):
|
):
|
||||||
test_startswith = startswith(msg, ignorecase)
|
test_startswith = startswith(msg, ignorecase)
|
||||||
@@ -203,10 +202,10 @@ async def test_startswith(
|
|||||||
],
|
],
|
||||||
)
|
)
|
||||||
async def test_endswith(
|
async def test_endswith(
|
||||||
msg: Union[str, tuple[str, ...]],
|
msg: str | tuple[str, ...],
|
||||||
ignorecase: bool,
|
ignorecase: bool,
|
||||||
type: str,
|
type: str,
|
||||||
text: Optional[str],
|
text: str | None,
|
||||||
expected: bool,
|
expected: bool,
|
||||||
):
|
):
|
||||||
test_endswith = endswith(msg, ignorecase)
|
test_endswith = endswith(msg, ignorecase)
|
||||||
@@ -243,10 +242,10 @@ async def test_endswith(
|
|||||||
],
|
],
|
||||||
)
|
)
|
||||||
async def test_fullmatch(
|
async def test_fullmatch(
|
||||||
msg: Union[str, tuple[str, ...]],
|
msg: str | tuple[str, ...],
|
||||||
ignorecase: bool,
|
ignorecase: bool,
|
||||||
type: str,
|
type: str,
|
||||||
text: Optional[str],
|
text: str | None,
|
||||||
expected: bool,
|
expected: bool,
|
||||||
):
|
):
|
||||||
test_fullmatch = fullmatch(msg, ignorecase)
|
test_fullmatch = fullmatch(msg, ignorecase)
|
||||||
@@ -281,7 +280,7 @@ async def test_fullmatch(
|
|||||||
async def test_keyword(
|
async def test_keyword(
|
||||||
kws: tuple[str, ...],
|
kws: tuple[str, ...],
|
||||||
type: str,
|
type: str,
|
||||||
text: Optional[str],
|
text: str | None,
|
||||||
expected: bool,
|
expected: bool,
|
||||||
):
|
):
|
||||||
test_keyword = keyword(*kws)
|
test_keyword = keyword(*kws)
|
||||||
@@ -324,10 +323,10 @@ async def test_keyword(
|
|||||||
)
|
)
|
||||||
async def test_command(
|
async def test_command(
|
||||||
cmds: tuple[tuple[str, ...]],
|
cmds: tuple[tuple[str, ...]],
|
||||||
force_whitespace: Optional[Union[str, bool]],
|
force_whitespace: str | bool | None,
|
||||||
cmd: tuple[str, ...],
|
cmd: tuple[str, ...],
|
||||||
whitespace: Optional[str],
|
whitespace: str | None,
|
||||||
arg_text: Optional[str],
|
arg_text: str | None,
|
||||||
expected: bool,
|
expected: bool,
|
||||||
):
|
):
|
||||||
test_command = command(*cmds, force_whitespace=force_whitespace)
|
test_command = command(*cmds, force_whitespace=force_whitespace)
|
||||||
@@ -492,9 +491,9 @@ async def test_shell_command():
|
|||||||
async def test_regex(
|
async def test_regex(
|
||||||
pattern: str,
|
pattern: str,
|
||||||
type: str,
|
type: str,
|
||||||
text: Optional[str],
|
text: str | None,
|
||||||
expected: bool,
|
expected: bool,
|
||||||
matched: Optional[Match[str]],
|
matched: Match[str] | None,
|
||||||
):
|
):
|
||||||
test_regex = regex(pattern)
|
test_regex = regex(pattern)
|
||||||
dependent = next(iter(test_regex.checkers))
|
dependent = next(iter(test_regex.checkers))
|
||||||
@@ -507,7 +506,7 @@ async def test_regex(
|
|||||||
event = make_fake_event(_type=type, _message=message)()
|
event = make_fake_event(_type=type, _message=message)()
|
||||||
state = {}
|
state = {}
|
||||||
assert await dependent(event=event, state=state) == expected
|
assert await dependent(event=event, state=state) == expected
|
||||||
result: Optional[Match[str]] = state.get(REGEX_MATCHED)
|
result: Match[str] | None = state.get(REGEX_MATCHED)
|
||||||
if matched is None:
|
if matched is None:
|
||||||
assert result is None
|
assert result is None
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -23,7 +23,8 @@ def test_loguru_escape_tag():
|
|||||||
def test_generic_check_issubclass():
|
def test_generic_check_issubclass():
|
||||||
assert generic_check_issubclass(int, (int, float))
|
assert generic_check_issubclass(int, (int, float))
|
||||||
assert not generic_check_issubclass(str, (int, float))
|
assert not generic_check_issubclass(str, (int, float))
|
||||||
assert generic_check_issubclass(Union[int, float, None], (int, float))
|
assert generic_check_issubclass(Union[int, float, None], (int, float)) # noqa: UP007
|
||||||
|
assert generic_check_issubclass(int | float | None, (int, float))
|
||||||
assert generic_check_issubclass(Literal[1, 2, 3], int)
|
assert generic_check_issubclass(Literal[1, 2, 3], int)
|
||||||
assert not generic_check_issubclass(Literal[1, 2, "3"], int)
|
assert not generic_check_issubclass(Literal[1, 2, "3"], int)
|
||||||
assert generic_check_issubclass(List[int], list) # noqa: UP006
|
assert generic_check_issubclass(List[int], list) # noqa: UP006
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
from collections.abc import Iterable, Mapping
|
from collections.abc import Iterable, Mapping
|
||||||
from typing import Optional, Union
|
|
||||||
from typing_extensions import override
|
from typing_extensions import override
|
||||||
|
|
||||||
from pydantic import create_model
|
from pydantic import create_model
|
||||||
@@ -60,7 +59,7 @@ class FakeMessage(Message[FakeMessageSegment]):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@override
|
@override
|
||||||
def _construct(msg: Union[str, Iterable[Mapping]]):
|
def _construct(msg: str | Iterable[Mapping]):
|
||||||
if isinstance(msg, str):
|
if isinstance(msg, str):
|
||||||
yield FakeMessageSegment.text(msg)
|
yield FakeMessageSegment.text(msg)
|
||||||
else:
|
else:
|
||||||
@@ -69,21 +68,19 @@ class FakeMessage(Message[FakeMessageSegment]):
|
|||||||
return
|
return
|
||||||
|
|
||||||
@override
|
@override
|
||||||
def __add__(
|
def __add__(self, other: str | FakeMessageSegment | Iterable[FakeMessageSegment]):
|
||||||
self, other: Union[str, FakeMessageSegment, Iterable[FakeMessageSegment]]
|
|
||||||
):
|
|
||||||
other = escape_text(other) if isinstance(other, str) else other
|
other = escape_text(other) if isinstance(other, str) else other
|
||||||
return super().__add__(other)
|
return super().__add__(other)
|
||||||
|
|
||||||
|
|
||||||
def make_fake_event(
|
def make_fake_event(
|
||||||
_base: Optional[type[Event]] = None,
|
_base: type[Event] | None = None,
|
||||||
_type: str = "message",
|
_type: str = "message",
|
||||||
_name: str = "test",
|
_name: str = "test",
|
||||||
_description: str = "test",
|
_description: str = "test",
|
||||||
_user_id: Optional[str] = "test",
|
_user_id: str | None = "test",
|
||||||
_session_id: Optional[str] = "test",
|
_session_id: str | None = "test",
|
||||||
_message: Optional[Message] = None,
|
_message: Message | None = None,
|
||||||
_to_me: bool = True,
|
_to_me: bool = True,
|
||||||
**fields,
|
**fields,
|
||||||
) -> type[Event]:
|
) -> type[Event]:
|
||||||
|
|||||||
512
uv.lock
generated
512
uv.lock
generated
@@ -1,10 +1,9 @@
|
|||||||
version = 1
|
version = 1
|
||||||
revision = 3
|
revision = 3
|
||||||
requires-python = ">=3.9, <4.0"
|
requires-python = ">=3.10, <4.0"
|
||||||
resolution-markers = [
|
resolution-markers = [
|
||||||
"python_full_version >= '3.14'",
|
"python_full_version >= '3.14'",
|
||||||
"python_full_version >= '3.10' and python_full_version < '3.14'",
|
"python_full_version < '3.14'",
|
||||||
"python_full_version < '3.10'",
|
|
||||||
]
|
]
|
||||||
conflicts = [[
|
conflicts = [[
|
||||||
{ package = "nonebot2", group = "pydantic-v1" },
|
{ package = "nonebot2", group = "pydantic-v1" },
|
||||||
@@ -159,23 +158,6 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/ff/f7/ba5f0ba4ea8d8f3c32850912944532b933acbf0f3a75546b89269b9b7dde/aiohttp-3.13.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cf00e5db968c3f67eccd2778574cf64d8b27d95b237770aa32400bd7a1ca4f6c", size = 1762334, upload-time = "2025-10-28T20:58:47.936Z" },
|
{ url = "https://files.pythonhosted.org/packages/ff/f7/ba5f0ba4ea8d8f3c32850912944532b933acbf0f3a75546b89269b9b7dde/aiohttp-3.13.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cf00e5db968c3f67eccd2778574cf64d8b27d95b237770aa32400bd7a1ca4f6c", size = 1762334, upload-time = "2025-10-28T20:58:47.936Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/7e/83/1a5a1856574588b1cad63609ea9ad75b32a8353ac995d830bf5da9357364/aiohttp-3.13.2-cp314-cp314t-win32.whl", hash = "sha256:d23b5fe492b0805a50d3371e8a728a9134d8de5447dce4c885f5587294750734", size = 464685, upload-time = "2025-10-28T20:58:50.642Z" },
|
{ url = "https://files.pythonhosted.org/packages/7e/83/1a5a1856574588b1cad63609ea9ad75b32a8353ac995d830bf5da9357364/aiohttp-3.13.2-cp314-cp314t-win32.whl", hash = "sha256:d23b5fe492b0805a50d3371e8a728a9134d8de5447dce4c885f5587294750734", size = 464685, upload-time = "2025-10-28T20:58:50.642Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/9f/4d/d22668674122c08f4d56972297c51a624e64b3ed1efaa40187607a7cb66e/aiohttp-3.13.2-cp314-cp314t-win_amd64.whl", hash = "sha256:ff0a7b0a82a7ab905cbda74006318d1b12e37c797eb1b0d4eb3e316cf47f658f", size = 498093, upload-time = "2025-10-28T20:58:52.782Z" },
|
{ url = "https://files.pythonhosted.org/packages/9f/4d/d22668674122c08f4d56972297c51a624e64b3ed1efaa40187607a7cb66e/aiohttp-3.13.2-cp314-cp314t-win_amd64.whl", hash = "sha256:ff0a7b0a82a7ab905cbda74006318d1b12e37c797eb1b0d4eb3e316cf47f658f", size = 498093, upload-time = "2025-10-28T20:58:52.782Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/04/4a/3da532fdf51b5e58fffa1a86d6569184cb1bf4bf81cd4434b6541a8d14fd/aiohttp-3.13.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7fbdf5ad6084f1940ce88933de34b62358d0f4a0b6ec097362dcd3e5a65a4989", size = 739009, upload-time = "2025-10-28T20:58:55.682Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/89/74/fefa6f7939cdc1d77e5cad712004e675a8847dccc589dcc3abca7feaed73/aiohttp-3.13.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7c3a50345635a02db61792c85bb86daffac05330f6473d524f1a4e3ef9d0046d", size = 495308, upload-time = "2025-10-28T20:58:58.408Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/4e/b4/a0638ae1f12d09a0dc558870968a2f19a1eba1b10ad0a85ef142ddb40b50/aiohttp-3.13.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0e87dff73f46e969af38ab3f7cb75316a7c944e2e574ff7c933bc01b10def7f5", size = 490624, upload-time = "2025-10-28T20:59:00.479Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/02/73/361cd4cac9d98a5a4183d1f26faf7b777330f8dba838c5aae2412862bdd0/aiohttp-3.13.2-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2adebd4577724dcae085665f294cc57c8701ddd4d26140504db622b8d566d7aa", size = 1662968, upload-time = "2025-10-28T20:59:03.105Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/9e/93/ce2ca7584555a6c7dd78f2e6b539a96c5172d88815e13a05a576e14a5a22/aiohttp-3.13.2-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e036a3a645fe92309ec34b918394bb377950cbb43039a97edae6c08db64b23e2", size = 1627117, upload-time = "2025-10-28T20:59:05.274Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/a6/42/7ee0e699111f5fc20a69b3203e8f5d5da0b681f270b90bc088d15e339980/aiohttp-3.13.2-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:23ad365e30108c422d0b4428cf271156dd56790f6dd50d770b8e360e6c5ab2e6", size = 1724037, upload-time = "2025-10-28T20:59:07.522Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/66/88/67ad5ff11dd61dd1d7882cda39f085d5fca31cf7e2143f5173429d8a591e/aiohttp-3.13.2-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1f9b2c2d4b9d958b1f9ae0c984ec1dd6b6689e15c75045be8ccb4011426268ca", size = 1812899, upload-time = "2025-10-28T20:59:11.698Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/60/1b/a46f6e1c2a347b9c7a789292279c159b327fadecbf8340f3b05fffff1151/aiohttp-3.13.2-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3a92cf4b9bea33e15ecbaa5c59921be0f23222608143d025c989924f7e3e0c07", size = 1660961, upload-time = "2025-10-28T20:59:14.425Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/44/cc/1af9e466eafd9b5d8922238c69aaf95b656137add4c5db65f63ee129bf3c/aiohttp-3.13.2-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:070599407f4954021509193404c4ac53153525a19531051661440644728ba9a7", size = 1553851, upload-time = "2025-10-28T20:59:17.044Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/e5/d1/9e5f4f40f9d0ee5668e9b5e7ebfb0eaf371cc09da03785decdc5da56f4b3/aiohttp-3.13.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:29562998ec66f988d49fb83c9b01694fa927186b781463f376c5845c121e4e0b", size = 1634260, upload-time = "2025-10-28T20:59:19.378Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/83/2e/5d065091c4ae8b55a153f458f19308191bad3b62a89496aa081385486338/aiohttp-3.13.2-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:4dd3db9d0f4ebca1d887d76f7cdbcd1116ac0d05a9221b9dad82c64a62578c4d", size = 1639499, upload-time = "2025-10-28T20:59:22.013Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/a3/de/58ae6dc73691a51ff16f69a94d13657bf417456fa0fdfed2b59dd6b4c293/aiohttp-3.13.2-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:d7bc4b7f9c4921eba72677cd9fedd2308f4a4ca3e12fab58935295ad9ea98700", size = 1694087, upload-time = "2025-10-28T20:59:24.773Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/45/fe/4d9df516268867d83041b6c073ee15cd532dbea58b82d675a7e1cf2ec24c/aiohttp-3.13.2-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:dacd50501cd017f8cccb328da0c90823511d70d24a323196826d923aad865901", size = 1540532, upload-time = "2025-10-28T20:59:27.982Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/24/e7/a802619308232499482bf30b3530efb5d141481cfd61850368350fb1acb5/aiohttp-3.13.2-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:8b2f1414f6a1e0683f212ec80e813f4abef94c739fd090b66c9adf9d2a05feac", size = 1710369, upload-time = "2025-10-28T20:59:30.363Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/62/08/e8593f39f025efe96ef59550d17cf097222d84f6f84798bedac5bf037fce/aiohttp-3.13.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:04c3971421576ed24c191f610052bcb2f059e395bc2489dd99e397f9bc466329", size = 1649296, upload-time = "2025-10-28T20:59:33.285Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/e5/fd/ffbc1b6aa46fc6c284af4a438b2c7eab79af1c8ac4b6d2ced185c17f403e/aiohttp-3.13.2-cp39-cp39-win32.whl", hash = "sha256:9f377d0a924e5cc94dc620bc6366fc3e889586a7f18b748901cf016c916e2084", size = 432980, upload-time = "2025-10-28T20:59:35.515Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/ad/a9/d47e7873175a4d8aed425f2cdea2df700b2dd44fac024ffbd83455a69a50/aiohttp-3.13.2-cp39-cp39-win_amd64.whl", hash = "sha256:9c705601e16c03466cb72011bd1af55d68fa65b045356d8f96c216e5f6db0fa5", size = 456021, upload-time = "2025-10-28T20:59:37.659Z" },
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.optional-dependencies]
|
[package.optional-dependencies]
|
||||||
@@ -353,21 +335,6 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/81/cb/1d77d6cf3850e804f4994a8106db2830e58638ed0f2d0f92636adb38a38d/backports_zstd-1.0.0-cp313-cp313t-win32.whl", hash = "sha256:870effb06ffb7623af1c8dac35647a1c4b597d3bb0b3f9895c738bd5ad23666c", size = 289410, upload-time = "2025-10-10T07:05:36.776Z" },
|
{ url = "https://files.pythonhosted.org/packages/81/cb/1d77d6cf3850e804f4994a8106db2830e58638ed0f2d0f92636adb38a38d/backports_zstd-1.0.0-cp313-cp313t-win32.whl", hash = "sha256:870effb06ffb7623af1c8dac35647a1c4b597d3bb0b3f9895c738bd5ad23666c", size = 289410, upload-time = "2025-10-10T07:05:36.776Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/16/59/5ec914419b6db0516794f6f5214b1990e550971fe0867c60ea55262b5d68/backports_zstd-1.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:8bb6470186301e84aaa704c8eb339c97dcdec67445e7e197d44665e933807e4e", size = 314778, upload-time = "2025-10-10T07:05:38.637Z" },
|
{ url = "https://files.pythonhosted.org/packages/16/59/5ec914419b6db0516794f6f5214b1990e550971fe0867c60ea55262b5d68/backports_zstd-1.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:8bb6470186301e84aaa704c8eb339c97dcdec67445e7e197d44665e933807e4e", size = 314778, upload-time = "2025-10-10T07:05:38.637Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/75/88/198e1726f65229f219bb2a72849c9424ba41f6de989c3a8c9bf58118a4a7/backports_zstd-1.0.0-cp313-cp313t-win_arm64.whl", hash = "sha256:b2d85810393b3be6e8e77d89a165fc67c2a08290a210dbd77e2fc148dbc4106f", size = 289333, upload-time = "2025-10-10T07:05:39.758Z" },
|
{ url = "https://files.pythonhosted.org/packages/75/88/198e1726f65229f219bb2a72849c9424ba41f6de989c3a8c9bf58118a4a7/backports_zstd-1.0.0-cp313-cp313t-win_arm64.whl", hash = "sha256:b2d85810393b3be6e8e77d89a165fc67c2a08290a210dbd77e2fc148dbc4106f", size = 289333, upload-time = "2025-10-10T07:05:39.758Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/c5/80/cad971088dd705adedce95e4ce77801cbad61ac9250b4e77fbbb2881c34f/backports_zstd-1.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1315107754808856ddcf187a19cc139cb4a2a65970bd1bafd71718cfd051d32e", size = 435835, upload-time = "2025-10-10T07:05:41.027Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/8c/9f/8c13830b7d698bd270d9aaeebd685670e8955282a3e5f6967521bcb5b2d3/backports_zstd-1.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:96bf0a564af74951adfa6addd1c148ab467ba92172cd23b267dd150b0f47fd9e", size = 362191, upload-time = "2025-10-10T07:05:42.594Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/db/b4/dd0d86d04b1dd4d08468e8d980d3ece48d86909b9635f1efebce309b98d4/backports_zstd-1.0.0-cp39-cp39-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:d7c1c6ebedf7bc70c1adca3f4624e1e04b2a0d7a389b065f0c5d6244f6be3dae", size = 506076, upload-time = "2025-10-10T07:05:43.842Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/86/6e/b484e33d8eb13b9379741e9e88daa48c15c9038e9ee9926ebf1096bfed6f/backports_zstd-1.0.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2ea4ff5e162fb61f8421724021eac0a612af0aff2da9e585c96d27c2da924589", size = 475720, upload-time = "2025-10-10T07:05:45.094Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/b4/e6/c49157bb8240ffd4c0abf93306276be4e80d2ef8c1b8465e06bcecece250/backports_zstd-1.0.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5a6047fb0bef5bbe519b1e46108847e01a48d002b3dfc69af1423a53d8144dda", size = 581396, upload-time = "2025-10-10T07:05:46.389Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/67/24/a900cfdc4dd74306c6b53604ad51af5f38e2353b0d615a3c869051134b3b/backports_zstd-1.0.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2d510b422e7b2b6ca142082fa85ac360edf77b73108454335ecfd19071c819ff", size = 641053, upload-time = "2025-10-10T07:05:48.012Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/3d/75/5ce7953c6306fc976abf7cf33f0071a10d58c71c94348844ae625dfdee22/backports_zstd-1.0.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e6349defa266342802d86343b7fc59ee12048bca5f77a9fcb1c1ab9bb894d09", size = 491186, upload-time = "2025-10-10T07:05:49.424Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/f9/db/375410a26abf2ac972fec554122065d774fa037f9ffeedf4f7b05553b01d/backports_zstd-1.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:20b0a1be02b2ee18c74b68a89eec14be98d11f0415a79eb209dce4bc2d6f4e52", size = 481750, upload-time = "2025-10-10T07:05:50.678Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/21/d1/fa7c2d7b7a1c433e4e79c027c54d17f2ffc489ab7e76496b149d9ae6f667/backports_zstd-1.0.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3595cbc2f4d8a5dc6bd791ba8d9fee2fdfcdfc07206e944c1b3ec3090fcbc99e", size = 509601, upload-time = "2025-10-10T07:05:51.952Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/c4/35/befe5ee9bec078f7f4c9290cefc56d3336b4ee52d17a60293d9dda4589c0/backports_zstd-1.0.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:d3eddb298db7a9a1b122c40bcb418a154b6c8f1b54ef7308644e0e67d42c159e", size = 585743, upload-time = "2025-10-10T07:05:53.609Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/a3/0a/cfbf0ae24348be3c3f597717c639e9cbe29692a99ad650c232b8a97c74c1/backports_zstd-1.0.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ef31a9482727e6b335f673a8b8116be186b83ca72be4a07f60684b8220a213e9", size = 631591, upload-time = "2025-10-10T07:05:54.846Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/e1/2d/7c996648c7a7b84a3e8b045fb494466475c1f599374da3c780198bde96c4/backports_zstd-1.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0a6a6d114058735d042116aa9199b0b436236fddcb5f805fb17310fcadddd441", size = 495294, upload-time = "2025-10-10T07:05:56.417Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/be/c8/5a15a4a52506e2e2598d2667ae67404516ea4336535fdd7b7b1b2fffd623/backports_zstd-1.0.0-cp39-cp39-win32.whl", hash = "sha256:8aea1bdc89becb21d1df1cdcc6182b2aa9540addaa20569169e01b25b8996f41", size = 288646, upload-time = "2025-10-10T07:05:57.993Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/67/4e/42409d11a9d324f68a079493c5806d593f54184962e5fff1dc88a1d5e3ba/backports_zstd-1.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:23a40a40fb56f4b47ece5e9cb7048c2e93d9eeb81ad5fb4e68adcaeb699d6b98", size = 313532, upload-time = "2025-10-10T07:05:59.212Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/5a/f8/932b05fd2f98f85c95674f09ae28ccc1638b8cc17d6f566d21ed499ee456/backports_zstd-1.0.0-cp39-cp39-win_arm64.whl", hash = "sha256:2f07bd1c1b478bd8a0bbe413439c24ee08ceb6ebc957a97de3666e8f2e612463", size = 288756, upload-time = "2025-10-10T07:06:01.216Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/5d/35/680ac0ad73676eb1f3bb71f6dd3bbaa2d28a9e4293d3ede4adcd78905b93/backports_zstd-1.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:efa53658c1e617986ed202e7aa8eb23c69fc8f33d01192cd1565e455ed9aa057", size = 409790, upload-time = "2025-10-10T07:06:02.405Z" },
|
{ url = "https://files.pythonhosted.org/packages/5d/35/680ac0ad73676eb1f3bb71f6dd3bbaa2d28a9e4293d3ede4adcd78905b93/backports_zstd-1.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:efa53658c1e617986ed202e7aa8eb23c69fc8f33d01192cd1565e455ed9aa057", size = 409790, upload-time = "2025-10-10T07:06:02.405Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/62/6c/6410c334890b4a43c893b9dcd3cbc8b10f17ea8dced483d9ba200b17ccab/backports_zstd-1.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:4386a17c99ce647877298c916f2afeacb238e56cb7cca2d665822a0ee743b5d5", size = 339308, upload-time = "2025-10-10T07:06:03.667Z" },
|
{ url = "https://files.pythonhosted.org/packages/62/6c/6410c334890b4a43c893b9dcd3cbc8b10f17ea8dced483d9ba200b17ccab/backports_zstd-1.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:4386a17c99ce647877298c916f2afeacb238e56cb7cca2d665822a0ee743b5d5", size = 339308, upload-time = "2025-10-10T07:06:03.667Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/0f/b2/ad3e651985b8a2a4876e5adc61100cef07a8caefb87180391f1f5b8c801c/backports_zstd-1.0.0-pp310-pypy310_pp73-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:cbbb0bda54bda18af99961d7d22d7bc7fedcc7d8ca3a04dcde9189494dbfc87a", size = 420356, upload-time = "2025-10-10T07:06:04.984Z" },
|
{ url = "https://files.pythonhosted.org/packages/0f/b2/ad3e651985b8a2a4876e5adc61100cef07a8caefb87180391f1f5b8c801c/backports_zstd-1.0.0-pp310-pypy310_pp73-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:cbbb0bda54bda18af99961d7d22d7bc7fedcc7d8ca3a04dcde9189494dbfc87a", size = 420356, upload-time = "2025-10-10T07:06:04.984Z" },
|
||||||
@@ -459,22 +426,6 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/af/85/a94e5cfaa0ca449d8f91c3d6f78313ebf919a0dbd55a100c711c6e9655bc/Brotli-1.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:832436e59afb93e1836081a20f324cb185836c617659b07b129141a8426973c7", size = 2930206, upload-time = "2024-10-18T12:32:51.198Z" },
|
{ url = "https://files.pythonhosted.org/packages/af/85/a94e5cfaa0ca449d8f91c3d6f78313ebf919a0dbd55a100c711c6e9655bc/Brotli-1.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:832436e59afb93e1836081a20f324cb185836c617659b07b129141a8426973c7", size = 2930206, upload-time = "2024-10-18T12:32:51.198Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/c2/f0/a61d9262cd01351df22e57ad7c34f66794709acab13f34be2675f45bf89d/Brotli-1.1.0-cp313-cp313-win32.whl", hash = "sha256:43395e90523f9c23a3d5bdf004733246fba087f2948f87ab28015f12359ca6a0", size = 333804, upload-time = "2024-10-18T12:32:52.661Z" },
|
{ url = "https://files.pythonhosted.org/packages/c2/f0/a61d9262cd01351df22e57ad7c34f66794709acab13f34be2675f45bf89d/Brotli-1.1.0-cp313-cp313-win32.whl", hash = "sha256:43395e90523f9c23a3d5bdf004733246fba087f2948f87ab28015f12359ca6a0", size = 333804, upload-time = "2024-10-18T12:32:52.661Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/7e/c1/ec214e9c94000d1c1974ec67ced1c970c148aa6b8d8373066123fc3dbf06/Brotli-1.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:9011560a466d2eb3f5a6e4929cf4a09be405c64154e12df0dd72713f6500e32b", size = 358517, upload-time = "2024-10-18T12:32:54.066Z" },
|
{ url = "https://files.pythonhosted.org/packages/7e/c1/ec214e9c94000d1c1974ec67ced1c970c148aa6b8d8373066123fc3dbf06/Brotli-1.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:9011560a466d2eb3f5a6e4929cf4a09be405c64154e12df0dd72713f6500e32b", size = 358517, upload-time = "2024-10-18T12:32:54.066Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/1b/aa/aa6e0c9848ee4375514af0b27abf470904992939b7363ae78fc8aca8a9a8/Brotli-1.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5fb2ce4b8045c78ebbc7b8f3c15062e435d47e7393cc57c25115cfd49883747a", size = 873048, upload-time = "2023-09-07T14:05:21.205Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/ae/32/38bba1a8bef9ecb1cda08439fd28d7e9c51aff13b4783a4f1610da90b6c2/Brotli-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7905193081db9bfa73b1219140b3d315831cbff0d8941f22da695832f0dd188f", size = 446207, upload-time = "2023-09-07T14:05:23.21Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/3c/6a/14cc20ddc53efc274601c8195791a27cfb7acc5e5134e0f8c493a8b8821a/Brotli-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a77def80806c421b4b0af06f45d65a136e7ac0bdca3c09d9e2ea4e515367c7e9", size = 2903803, upload-time = "2023-09-07T14:05:24.864Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/9a/26/62b2d894d4e82d7a7f4e0bb9007a42bbc765697a5679b43186acd68d7a79/Brotli-1.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dadd1314583ec0bf2d1379f7008ad627cd6336625d6679cf2f8e67081b83acf", size = 2941149, upload-time = "2023-09-07T14:05:26.479Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/a9/ca/00d55bbdd8631236c61777742d8a8454cf6a87eb4125cad675912c68bec7/Brotli-1.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:901032ff242d479a0efa956d853d16875d42157f98951c0230f69e69f9c09bac", size = 2672253, upload-time = "2023-09-07T14:05:28.133Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/e2/e6/4a730f6e5b5d538e92d09bc51bf69119914f29a222f9e1d65ae4abb27a4e/Brotli-1.1.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:22fc2a8549ffe699bfba2256ab2ed0421a7b8fadff114a3d201794e45a9ff578", size = 2757005, upload-time = "2023-09-07T14:05:29.812Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/cb/6b/8cf297987fe3c1bf1c87f0c0b714af2ce47092b8d307b9f6ecbc65f98968/Brotli-1.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ae15b066e5ad21366600ebec29a7ccbc86812ed267e4b28e860b8ca16a2bc474", size = 2910658, upload-time = "2023-09-07T14:05:31.376Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/2c/1f/be9443995821c933aad7159803f84ef4923c6f5b72c2affd001192b310fc/Brotli-1.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:949f3b7c29912693cee0afcf09acd6ebc04c57af949d9bf77d6101ebb61e388c", size = 2809728, upload-time = "2023-09-07T14:05:32.923Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/76/2f/213bab6efa902658c80a1247142d42b138a27ccdd6bade49ca9cd74e714a/Brotli-1.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:89f4988c7203739d48c6f806f1e87a1d96e0806d44f0fba61dba81392c9e474d", size = 2935043, upload-time = "2023-09-07T14:05:34.607Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/27/89/bbb14fa98e895d1e601491fba54a5feec167d262f0d3d537a3b0d4cd0029/Brotli-1.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:de6551e370ef19f8de1807d0a9aa2cdfdce2e85ce88b122fe9f6b2b076837e59", size = 2930639, upload-time = "2023-09-07T14:05:36.317Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/14/87/03a6d6e1866eddf9f58cc57e35befbeb5514da87a416befe820150cae63f/Brotli-1.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0737ddb3068957cf1b054899b0883830bb1fec522ec76b1098f9b6e0f02d9419", size = 2932834, upload-time = "2024-10-18T12:33:18.364Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/a4/d5/e5f85e04f75144d1a89421ba432def6bdffc8f28b04f5b7d540bbd03362c/Brotli-1.1.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:4f3607b129417e111e30637af1b56f24f7a49e64763253bbc275c75fa887d4b2", size = 2845213, upload-time = "2024-10-18T12:33:20.059Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/99/bf/25ef07add7afbb1aacd4460726a1a40370dfd60c0810b6f242a6d3871d7e/Brotli-1.1.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:6c6e0c425f22c1c719c42670d561ad682f7bfeeef918edea971a79ac5252437f", size = 3031573, upload-time = "2024-10-18T12:33:22.541Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/55/22/948a97bda5c9dc9968d56b9ed722d9727778db43739cf12ef26ff69be94d/Brotli-1.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:494994f807ba0b92092a163a0a283961369a65f6cbe01e8891132b7a320e61eb", size = 2926885, upload-time = "2024-10-18T12:33:24.781Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/31/ba/e53d107399b535ef89deb6977dd8eae468e2dde7b1b74c6cbe2c0e31fda2/Brotli-1.1.0-cp39-cp39-win32.whl", hash = "sha256:f0d8a7a6b5983c2496e364b969f0e526647a06b075d034f3297dc66f3b360c64", size = 333171, upload-time = "2023-09-07T14:05:38.071Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/99/b3/f7b3af539f74b82e1c64d28685a5200c631cc14ae751d37d6ed819655627/Brotli-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:cdad5b9014d83ca68c25d2e9444e28e967ef16e80f6b436918c700c117a85467", size = 357258, upload-time = "2023-09-07T14:05:39.591Z" },
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -497,11 +448,6 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/e5/95/15aa422aa6450e6556e54a5fd1650ff59f470aed77ac739aa90ab63dc611/brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54a07bb2374a1eba8ebb52b6fafffa2afd3c4df85ddd38fcc0511f2bb387c2a8", size = 378635, upload-time = "2023-09-14T14:22:11.982Z" },
|
{ url = "https://files.pythonhosted.org/packages/e5/95/15aa422aa6450e6556e54a5fd1650ff59f470aed77ac739aa90ab63dc611/brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54a07bb2374a1eba8ebb52b6fafffa2afd3c4df85ddd38fcc0511f2bb387c2a8", size = 378635, upload-time = "2023-09-14T14:22:11.982Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/6c/a7/f254e13b2cb43337d6d99a4ec10394c134e41bfda8a2eff15b75627f4a3d/brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7901a7dc4b88f1c1475de59ae9be59799db1007b7d059817948d8e4f12e24e35", size = 385719, upload-time = "2023-09-14T14:22:13.483Z" },
|
{ url = "https://files.pythonhosted.org/packages/6c/a7/f254e13b2cb43337d6d99a4ec10394c134e41bfda8a2eff15b75627f4a3d/brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7901a7dc4b88f1c1475de59ae9be59799db1007b7d059817948d8e4f12e24e35", size = 385719, upload-time = "2023-09-14T14:22:13.483Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/72/a9/0971251c4427c14b2a827dba3d910d4d3330dabf23d4278bf6d06a978847/brotlicffi-1.1.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ce01c7316aebc7fce59da734286148b1d1b9455f89cf2c8a4dfce7d41db55c2d", size = 361760, upload-time = "2023-09-14T14:22:14.767Z" },
|
{ url = "https://files.pythonhosted.org/packages/72/a9/0971251c4427c14b2a827dba3d910d4d3330dabf23d4278bf6d06a978847/brotlicffi-1.1.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ce01c7316aebc7fce59da734286148b1d1b9455f89cf2c8a4dfce7d41db55c2d", size = 361760, upload-time = "2023-09-14T14:22:14.767Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/35/9b/e0b577351e1d9d5890e1a56900c4ceaaef783b807145cd229446a43cf437/brotlicffi-1.1.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1a807d760763e398bbf2c6394ae9da5815901aa93ee0a37bca5efe78d4ee3171", size = 397392, upload-time = "2023-09-14T14:22:32.2Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/4f/7f/a16534d28386f74781db8b4544a764cf955abae336379a76f50e745bb0ee/brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa8ca0623b26c94fccc3a1fdd895be1743b838f3917300506d04aa3346fd2a14", size = 379695, upload-time = "2023-09-14T14:22:33.85Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/50/2a/699388b5e489726991132441b55aff0691dd73c49105ef220408a5ab98d6/brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3de0cf28a53a3238b252aca9fed1593e9d36c1d116748013339f0949bfc84112", size = 378629, upload-time = "2023-09-14T14:22:35.9Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/4a/3f/58254e7fbe6011bf043e4dcade0e16995a9f82b731734fad97220d201f42/brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6be5ec0e88a4925c91f3dea2bb0013b3a2accda6f77238f76a34a1ea532a1cb0", size = 385712, upload-time = "2023-09-14T14:22:37.767Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/40/16/2a29a625a6f74d13726387f83484dfaaf6fcdaafaadfbe26a0412ae268cc/brotlicffi-1.1.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d9eb71bb1085d996244439154387266fd23d6ad37161f6f52f1cd41dd95a3808", size = 361747, upload-time = "2023-09-14T14:22:39.368Z" },
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -593,18 +539,6 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/a0/1d/ec1a60bd1a10daa292d3cd6bb0b359a81607154fb8165f3ec95fe003b85c/cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e", size = 180487, upload-time = "2025-09-08T23:23:40.423Z" },
|
{ url = "https://files.pythonhosted.org/packages/a0/1d/ec1a60bd1a10daa292d3cd6bb0b359a81607154fb8165f3ec95fe003b85c/cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e", size = 180487, upload-time = "2025-09-08T23:23:40.423Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/bf/41/4c1168c74fac325c0c8156f04b6749c8b6a8f405bbf91413ba088359f60d/cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6", size = 191726, upload-time = "2025-09-08T23:23:41.742Z" },
|
{ url = "https://files.pythonhosted.org/packages/bf/41/4c1168c74fac325c0c8156f04b6749c8b6a8f405bbf91413ba088359f60d/cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6", size = 191726, upload-time = "2025-09-08T23:23:41.742Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195, upload-time = "2025-09-08T23:23:43.004Z" },
|
{ url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195, upload-time = "2025-09-08T23:23:43.004Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/c0/cc/08ed5a43f2996a16b462f64a7055c6e962803534924b9b2f1371d8c00b7b/cffi-2.0.0-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:fe562eb1a64e67dd297ccc4f5addea2501664954f2692b69a76449ec7913ecbf", size = 184288, upload-time = "2025-09-08T23:23:48.404Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/3d/de/38d9726324e127f727b4ecc376bc85e505bfe61ef130eaf3f290c6847dd4/cffi-2.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:de8dad4425a6ca6e4e5e297b27b5c824ecc7581910bf9aee86cb6835e6812aa7", size = 180509, upload-time = "2025-09-08T23:23:49.73Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/9b/13/c92e36358fbcc39cf0962e83223c9522154ee8630e1df7c0b3a39a8124e2/cffi-2.0.0-cp39-cp39-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:4647afc2f90d1ddd33441e5b0e85b16b12ddec4fca55f0d9671fef036ecca27c", size = 208813, upload-time = "2025-09-08T23:23:51.263Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/15/12/a7a79bd0df4c3bff744b2d7e52cc1b68d5e7e427b384252c42366dc1ecbc/cffi-2.0.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3f4d46d8b35698056ec29bca21546e1551a205058ae1a181d871e278b0b28165", size = 216498, upload-time = "2025-09-08T23:23:52.494Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/a3/ad/5c51c1c7600bdd7ed9a24a203ec255dccdd0ebf4527f7b922a0bde2fb6ed/cffi-2.0.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:e6e73b9e02893c764e7e8d5bb5ce277f1a009cd5243f8228f75f842bf937c534", size = 203243, upload-time = "2025-09-08T23:23:53.836Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/32/f2/81b63e288295928739d715d00952c8c6034cb6c6a516b17d37e0c8be5600/cffi-2.0.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:cb527a79772e5ef98fb1d700678fe031e353e765d1ca2d409c92263c6d43e09f", size = 203158, upload-time = "2025-09-08T23:23:55.169Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/1f/74/cc4096ce66f5939042ae094e2e96f53426a979864aa1f96a621ad128be27/cffi-2.0.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:61d028e90346df14fedc3d1e5441df818d095f3b87d286825dfcbd6459b7ef63", size = 216548, upload-time = "2025-09-08T23:23:56.506Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/e8/be/f6424d1dc46b1091ffcc8964fa7c0ab0cd36839dd2761b49c90481a6ba1b/cffi-2.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0f6084a0ea23d05d20c3edcda20c3d006f9b6f3fefeac38f59262e10cef47ee2", size = 218897, upload-time = "2025-09-08T23:23:57.825Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/f7/e0/dda537c2309817edf60109e39265f24f24aa7f050767e22c98c53fe7f48b/cffi-2.0.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1cd13c99ce269b3ed80b417dcd591415d3372bcac067009b6e0f59c7d4015e65", size = 211249, upload-time = "2025-09-08T23:23:59.139Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/2b/e7/7c769804eb75e4c4b35e658dba01de1640a351a9653c3d49ca89d16ccc91/cffi-2.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:89472c9762729b5ae1ad974b777416bfda4ac5642423fa93bd57a09204712322", size = 218041, upload-time = "2025-09-08T23:24:00.496Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/aa/d9/6218d78f920dcd7507fc16a766b5ef8f3b913cc7aa938e7fc80b9978d089/cffi-2.0.0-cp39-cp39-win32.whl", hash = "sha256:2081580ebb843f759b9f617314a24ed5738c51d2aee65d31e02f6f7a2b97707a", size = 172138, upload-time = "2025-09-08T23:24:01.7Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/54/8f/a1e836f82d8e32a97e6b29cc8f641779181ac7363734f12df27db803ebda/cffi-2.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9", size = 182794, upload-time = "2025-09-08T23:24:02.943Z" },
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -702,50 +636,15 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/b0/6f/8f7af07237c34a1defe7defc565a9bc1807762f672c0fde711a4b22bf9c0/charset_normalizer-3.4.4-cp314-cp314-win32.whl", hash = "sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9", size = 99940, upload-time = "2025-10-14T04:41:49.946Z" },
|
{ url = "https://files.pythonhosted.org/packages/b0/6f/8f7af07237c34a1defe7defc565a9bc1807762f672c0fde711a4b22bf9c0/charset_normalizer-3.4.4-cp314-cp314-win32.whl", hash = "sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9", size = 99940, upload-time = "2025-10-14T04:41:49.946Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/4b/51/8ade005e5ca5b0d80fb4aff72a3775b325bdc3d27408c8113811a7cbe640/charset_normalizer-3.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c", size = 107104, upload-time = "2025-10-14T04:41:51.051Z" },
|
{ url = "https://files.pythonhosted.org/packages/4b/51/8ade005e5ca5b0d80fb4aff72a3775b325bdc3d27408c8113811a7cbe640/charset_normalizer-3.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c", size = 107104, upload-time = "2025-10-14T04:41:51.051Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/da/5f/6b8f83a55bb8278772c5ae54a577f3099025f9ade59d0136ac24a0df4bde/charset_normalizer-3.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2", size = 100743, upload-time = "2025-10-14T04:41:52.122Z" },
|
{ url = "https://files.pythonhosted.org/packages/da/5f/6b8f83a55bb8278772c5ae54a577f3099025f9ade59d0136ac24a0df4bde/charset_normalizer-3.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2", size = 100743, upload-time = "2025-10-14T04:41:52.122Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/46/7c/0c4760bccf082737ca7ab84a4c2034fcc06b1f21cf3032ea98bd6feb1725/charset_normalizer-3.4.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a9768c477b9d7bd54bc0c86dbaebdec6f03306675526c9927c0e8a04e8f94af9", size = 209609, upload-time = "2025-10-14T04:42:10.922Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/bb/a4/69719daef2f3d7f1819de60c9a6be981b8eeead7542d5ec4440f3c80e111/charset_normalizer-3.4.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1bee1e43c28aa63cb16e5c14e582580546b08e535299b8b6158a7c9c768a1f3d", size = 149029, upload-time = "2025-10-14T04:42:12.38Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/e6/21/8d4e1d6c1e6070d3672908b8e4533a71b5b53e71d16828cc24d0efec564c/charset_normalizer-3.4.4-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:fd44c878ea55ba351104cb93cc85e74916eb8fa440ca7903e57575e97394f608", size = 144580, upload-time = "2025-10-14T04:42:13.549Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/a7/0a/a616d001b3f25647a9068e0b9199f697ce507ec898cacb06a0d5a1617c99/charset_normalizer-3.4.4-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0f04b14ffe5fdc8c4933862d8306109a2c51e0704acfa35d51598eb45a1e89fc", size = 162340, upload-time = "2025-10-14T04:42:14.892Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/85/93/060b52deb249a5450460e0585c88a904a83aec474ab8e7aba787f45e79f2/charset_normalizer-3.4.4-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:cd09d08005f958f370f539f186d10aec3377d55b9eeb0d796025d4886119d76e", size = 159619, upload-time = "2025-10-14T04:42:16.676Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/dd/21/0274deb1cc0632cd587a9a0ec6b4674d9108e461cb4cd40d457adaeb0564/charset_normalizer-3.4.4-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4fe7859a4e3e8457458e2ff592f15ccb02f3da787fcd31e0183879c3ad4692a1", size = 153980, upload-time = "2025-10-14T04:42:17.917Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/28/2b/e3d7d982858dccc11b31906976323d790dded2017a0572f093ff982d692f/charset_normalizer-3.4.4-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fa09f53c465e532f4d3db095e0c55b615f010ad81803d383195b6b5ca6cbf5f3", size = 152174, upload-time = "2025-10-14T04:42:19.018Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/6e/ff/4a269f8e35f1e58b2df52c131a1fa019acb7ef3f8697b7d464b07e9b492d/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7fa17817dc5625de8a027cb8b26d9fefa3ea28c8253929b8d6649e705d2835b6", size = 151666, upload-time = "2025-10-14T04:42:20.171Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/da/c9/ec39870f0b330d58486001dd8e532c6b9a905f5765f58a6f8204926b4a93/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:5947809c8a2417be3267efc979c47d76a079758166f7d43ef5ae8e9f92751f88", size = 145550, upload-time = "2025-10-14T04:42:21.324Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/75/8f/d186ab99e40e0ed9f82f033d6e49001701c81244d01905dd4a6924191a30/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:4902828217069c3c5c71094537a8e623f5d097858ac6ca8252f7b4d10b7560f1", size = 163721, upload-time = "2025-10-14T04:42:22.46Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/96/b1/6047663b9744df26a7e479ac1e77af7134b1fcf9026243bb48ee2d18810f/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:7c308f7e26e4363d79df40ca5b2be1c6ba9f02bdbccfed5abddb7859a6ce72cf", size = 152127, upload-time = "2025-10-14T04:42:23.712Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/59/78/e5a6eac9179f24f704d1be67d08704c3c6ab9f00963963524be27c18ed87/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:2c9d3c380143a1fedbff95a312aa798578371eb29da42106a29019368a475318", size = 161175, upload-time = "2025-10-14T04:42:24.87Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/e5/43/0e626e42d54dd2f8dd6fc5e1c5ff00f05fbca17cb699bedead2cae69c62f/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:cb01158d8b88ee68f15949894ccc6712278243d95f344770fa7593fa2d94410c", size = 155375, upload-time = "2025-10-14T04:42:27.246Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/e9/91/d9615bf2e06f35e4997616ff31248c3657ed649c5ab9d35ea12fce54e380/charset_normalizer-3.4.4-cp39-cp39-win32.whl", hash = "sha256:2677acec1a2f8ef614c6888b5b4ae4060cc184174a938ed4e8ef690e15d3e505", size = 99692, upload-time = "2025-10-14T04:42:28.425Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/d1/a9/6c040053909d9d1ef4fcab45fddec083aedc9052c10078339b47c8573ea8/charset_normalizer-3.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:f8e160feb2aed042cd657a72acc0b481212ed28b1b9a95c0cee1621b524e1966", size = 107192, upload-time = "2025-10-14T04:42:29.482Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/f0/c6/4fa536b2c0cd3edfb7ccf8469fa0f363ea67b7213a842b90909ca33dd851/charset_normalizer-3.4.4-cp39-cp39-win_arm64.whl", hash = "sha256:b5d84d37db046c5ca74ee7bb47dd6cbc13f80665fdde3e8040bdd3fb015ecb50", size = 100220, upload-time = "2025-10-14T04:42:30.632Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/0a/4c/925909008ed5a988ccbb72dcc897407e5d6d3bd72410d69e051fc0c14647/charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f", size = 53402, upload-time = "2025-10-14T04:42:31.76Z" },
|
{ url = "https://files.pythonhosted.org/packages/0a/4c/925909008ed5a988ccbb72dcc897407e5d6d3bd72410d69e051fc0c14647/charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f", size = 53402, upload-time = "2025-10-14T04:42:31.76Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "click"
|
|
||||||
version = "8.1.8"
|
|
||||||
source = { registry = "https://pypi.org/simple" }
|
|
||||||
resolution-markers = [
|
|
||||||
"python_full_version < '3.10'",
|
|
||||||
]
|
|
||||||
dependencies = [
|
|
||||||
{ name = "colorama", marker = "(python_full_version < '3.10' and sys_platform == 'win32') or (python_full_version >= '3.10' and extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2') or (sys_platform != 'win32' and extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2')" },
|
|
||||||
]
|
|
||||||
sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593, upload-time = "2024-12-21T18:38:44.339Z" }
|
|
||||||
wheels = [
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188, upload-time = "2024-12-21T18:38:41.666Z" },
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "click"
|
name = "click"
|
||||||
version = "8.3.0"
|
version = "8.3.0"
|
||||||
source = { registry = "https://pypi.org/simple" }
|
source = { registry = "https://pypi.org/simple" }
|
||||||
resolution-markers = [
|
|
||||||
"python_full_version >= '3.14'",
|
|
||||||
"python_full_version >= '3.10' and python_full_version < '3.14'",
|
|
||||||
]
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
{ name = "colorama", marker = "(python_full_version >= '3.10' and sys_platform == 'win32') or (python_full_version < '3.10' and extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2') or (sys_platform != 'win32' and extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2')" },
|
{ name = "colorama", marker = "sys_platform == 'win32' or (extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2')" },
|
||||||
]
|
]
|
||||||
sdist = { url = "https://files.pythonhosted.org/packages/46/61/de6cd827efad202d7057d93e0fed9294b96952e188f7384832791c7b2254/click-8.3.0.tar.gz", hash = "sha256:e7b8232224eba16f4ebe410c25ced9f7875cb5f3263ffc93cc3e8da705e229c4", size = 276943, upload-time = "2025-09-18T17:32:23.696Z" }
|
sdist = { url = "https://files.pythonhosted.org/packages/46/61/de6cd827efad202d7057d93e0fed9294b96952e188f7384832791c7b2254/click-8.3.0.tar.gz", hash = "sha256:e7b8232224eba16f4ebe410c25ced9f7875cb5f3263ffc93cc3e8da705e229c4", size = 276943, upload-time = "2025-09-18T17:32:23.696Z" }
|
||||||
wheels = [
|
wheels = [
|
||||||
@@ -761,133 +660,10 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" },
|
{ url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "coverage"
|
|
||||||
version = "7.10.7"
|
|
||||||
source = { registry = "https://pypi.org/simple" }
|
|
||||||
resolution-markers = [
|
|
||||||
"python_full_version < '3.10'",
|
|
||||||
]
|
|
||||||
sdist = { url = "https://files.pythonhosted.org/packages/51/26/d22c300112504f5f9a9fd2297ce33c35f3d353e4aeb987c8419453b2a7c2/coverage-7.10.7.tar.gz", hash = "sha256:f4ab143ab113be368a3e9b795f9cd7906c5ef407d6173fe9675a902e1fffc239", size = 827704, upload-time = "2025-09-21T20:03:56.815Z" }
|
|
||||||
wheels = [
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/e5/6c/3a3f7a46888e69d18abe3ccc6fe4cb16cccb1e6a2f99698931dafca489e6/coverage-7.10.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fc04cc7a3db33664e0c2d10eb8990ff6b3536f6842c9590ae8da4c614b9ed05a", size = 217987, upload-time = "2025-09-21T20:00:57.218Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/03/94/952d30f180b1a916c11a56f5c22d3535e943aa22430e9e3322447e520e1c/coverage-7.10.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e201e015644e207139f7e2351980feb7040e6f4b2c2978892f3e3789d1c125e5", size = 218388, upload-time = "2025-09-21T20:01:00.081Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/50/2b/9e0cf8ded1e114bcd8b2fd42792b57f1c4e9e4ea1824cde2af93a67305be/coverage-7.10.7-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:240af60539987ced2c399809bd34f7c78e8abe0736af91c3d7d0e795df633d17", size = 245148, upload-time = "2025-09-21T20:01:01.768Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/19/20/d0384ac06a6f908783d9b6aa6135e41b093971499ec488e47279f5b846e6/coverage-7.10.7-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8421e088bc051361b01c4b3a50fd39a4b9133079a2229978d9d30511fd05231b", size = 246958, upload-time = "2025-09-21T20:01:03.355Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/60/83/5c283cff3d41285f8eab897651585db908a909c572bdc014bcfaf8a8b6ae/coverage-7.10.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6be8ed3039ae7f7ac5ce058c308484787c86e8437e72b30bf5e88b8ea10f3c87", size = 248819, upload-time = "2025-09-21T20:01:04.968Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/60/22/02eb98fdc5ff79f423e990d877693e5310ae1eab6cb20ae0b0b9ac45b23b/coverage-7.10.7-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e28299d9f2e889e6d51b1f043f58d5f997c373cc12e6403b90df95b8b047c13e", size = 245754, upload-time = "2025-09-21T20:01:06.321Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/b4/bc/25c83bcf3ad141b32cd7dc45485ef3c01a776ca3aa8ef0a93e77e8b5bc43/coverage-7.10.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c4e16bd7761c5e454f4efd36f345286d6f7c5fa111623c355691e2755cae3b9e", size = 246860, upload-time = "2025-09-21T20:01:07.605Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/3c/b7/95574702888b58c0928a6e982038c596f9c34d52c5e5107f1eef729399b5/coverage-7.10.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b1c81d0e5e160651879755c9c675b974276f135558cf4ba79fee7b8413a515df", size = 244877, upload-time = "2025-09-21T20:01:08.829Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/47/b6/40095c185f235e085df0e0b158f6bd68cc6e1d80ba6c7721dc81d97ec318/coverage-7.10.7-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:606cc265adc9aaedcc84f1f064f0e8736bc45814f15a357e30fca7ecc01504e0", size = 245108, upload-time = "2025-09-21T20:01:10.527Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/c8/50/4aea0556da7a4b93ec9168420d170b55e2eb50ae21b25062513d020c6861/coverage-7.10.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:10b24412692df990dbc34f8fb1b6b13d236ace9dfdd68df5b28c2e39cafbba13", size = 245752, upload-time = "2025-09-21T20:01:11.857Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/6a/28/ea1a84a60828177ae3b100cb6723838523369a44ec5742313ed7db3da160/coverage-7.10.7-cp310-cp310-win32.whl", hash = "sha256:b51dcd060f18c19290d9b8a9dd1e0181538df2ce0717f562fff6cf74d9fc0b5b", size = 220497, upload-time = "2025-09-21T20:01:13.459Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/fc/1a/a81d46bbeb3c3fd97b9602ebaa411e076219a150489bcc2c025f151bd52d/coverage-7.10.7-cp310-cp310-win_amd64.whl", hash = "sha256:3a622ac801b17198020f09af3eaf45666b344a0d69fc2a6ffe2ea83aeef1d807", size = 221392, upload-time = "2025-09-21T20:01:14.722Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/d2/5d/c1a17867b0456f2e9ce2d8d4708a4c3a089947d0bec9c66cdf60c9e7739f/coverage-7.10.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a609f9c93113be646f44c2a0256d6ea375ad047005d7f57a5c15f614dc1b2f59", size = 218102, upload-time = "2025-09-21T20:01:16.089Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/54/f0/514dcf4b4e3698b9a9077f084429681bf3aad2b4a72578f89d7f643eb506/coverage-7.10.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:65646bb0359386e07639c367a22cf9b5bf6304e8630b565d0626e2bdf329227a", size = 218505, upload-time = "2025-09-21T20:01:17.788Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/20/f6/9626b81d17e2a4b25c63ac1b425ff307ecdeef03d67c9a147673ae40dc36/coverage-7.10.7-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5f33166f0dfcce728191f520bd2692914ec70fac2713f6bf3ce59c3deacb4699", size = 248898, upload-time = "2025-09-21T20:01:19.488Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/b0/ef/bd8e719c2f7417ba03239052e099b76ea1130ac0cbb183ee1fcaa58aaff3/coverage-7.10.7-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:35f5e3f9e455bb17831876048355dca0f758b6df22f49258cb5a91da23ef437d", size = 250831, upload-time = "2025-09-21T20:01:20.817Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/a5/b6/bf054de41ec948b151ae2b79a55c107f5760979538f5fb80c195f2517718/coverage-7.10.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4da86b6d62a496e908ac2898243920c7992499c1712ff7c2b6d837cc69d9467e", size = 252937, upload-time = "2025-09-21T20:01:22.171Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/0f/e5/3860756aa6f9318227443c6ce4ed7bf9e70bb7f1447a0353f45ac5c7974b/coverage-7.10.7-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6b8b09c1fad947c84bbbc95eca841350fad9cbfa5a2d7ca88ac9f8d836c92e23", size = 249021, upload-time = "2025-09-21T20:01:23.907Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/26/0f/bd08bd042854f7fd07b45808927ebcce99a7ed0f2f412d11629883517ac2/coverage-7.10.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4376538f36b533b46f8971d3a3e63464f2c7905c9800db97361c43a2b14792ab", size = 250626, upload-time = "2025-09-21T20:01:25.721Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/8e/a7/4777b14de4abcc2e80c6b1d430f5d51eb18ed1d75fca56cbce5f2db9b36e/coverage-7.10.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:121da30abb574f6ce6ae09840dae322bef734480ceafe410117627aa54f76d82", size = 248682, upload-time = "2025-09-21T20:01:27.105Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/34/72/17d082b00b53cd45679bad682fac058b87f011fd8b9fe31d77f5f8d3a4e4/coverage-7.10.7-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:88127d40df529336a9836870436fc2751c339fbaed3a836d42c93f3e4bd1d0a2", size = 248402, upload-time = "2025-09-21T20:01:28.629Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/81/7a/92367572eb5bdd6a84bfa278cc7e97db192f9f45b28c94a9ca1a921c3577/coverage-7.10.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ba58bbcd1b72f136080c0bccc2400d66cc6115f3f906c499013d065ac33a4b61", size = 249320, upload-time = "2025-09-21T20:01:30.004Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/2f/88/a23cc185f6a805dfc4fdf14a94016835eeb85e22ac3a0e66d5e89acd6462/coverage-7.10.7-cp311-cp311-win32.whl", hash = "sha256:972b9e3a4094b053a4e46832b4bc829fc8a8d347160eb39d03f1690316a99c14", size = 220536, upload-time = "2025-09-21T20:01:32.184Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/fe/ef/0b510a399dfca17cec7bc2f05ad8bd78cf55f15c8bc9a73ab20c5c913c2e/coverage-7.10.7-cp311-cp311-win_amd64.whl", hash = "sha256:a7b55a944a7f43892e28ad4bc0561dfd5f0d73e605d1aa5c3c976b52aea121d2", size = 221425, upload-time = "2025-09-21T20:01:33.557Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/51/7f/023657f301a276e4ba1850f82749bc136f5a7e8768060c2e5d9744a22951/coverage-7.10.7-cp311-cp311-win_arm64.whl", hash = "sha256:736f227fb490f03c6488f9b6d45855f8e0fd749c007f9303ad30efab0e73c05a", size = 220103, upload-time = "2025-09-21T20:01:34.929Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/13/e4/eb12450f71b542a53972d19117ea5a5cea1cab3ac9e31b0b5d498df1bd5a/coverage-7.10.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7bb3b9ddb87ef7725056572368040c32775036472d5a033679d1fa6c8dc08417", size = 218290, upload-time = "2025-09-21T20:01:36.455Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/37/66/593f9be12fc19fb36711f19a5371af79a718537204d16ea1d36f16bd78d2/coverage-7.10.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:18afb24843cbc175687225cab1138c95d262337f5473512010e46831aa0c2973", size = 218515, upload-time = "2025-09-21T20:01:37.982Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/66/80/4c49f7ae09cafdacc73fbc30949ffe77359635c168f4e9ff33c9ebb07838/coverage-7.10.7-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:399a0b6347bcd3822be369392932884b8216d0944049ae22925631a9b3d4ba4c", size = 250020, upload-time = "2025-09-21T20:01:39.617Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/a6/90/a64aaacab3b37a17aaedd83e8000142561a29eb262cede42d94a67f7556b/coverage-7.10.7-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:314f2c326ded3f4b09be11bc282eb2fc861184bc95748ae67b360ac962770be7", size = 252769, upload-time = "2025-09-21T20:01:41.341Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/98/2e/2dda59afd6103b342e096f246ebc5f87a3363b5412609946c120f4e7750d/coverage-7.10.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c41e71c9cfb854789dee6fc51e46743a6d138b1803fab6cb860af43265b42ea6", size = 253901, upload-time = "2025-09-21T20:01:43.042Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/53/dc/8d8119c9051d50f3119bb4a75f29f1e4a6ab9415cd1fa8bf22fcc3fb3b5f/coverage-7.10.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc01f57ca26269c2c706e838f6422e2a8788e41b3e3c65e2f41148212e57cd59", size = 250413, upload-time = "2025-09-21T20:01:44.469Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/98/b3/edaff9c5d79ee4d4b6d3fe046f2b1d799850425695b789d491a64225d493/coverage-7.10.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a6442c59a8ac8b85812ce33bc4d05bde3fb22321fa8294e2a5b487c3505f611b", size = 251820, upload-time = "2025-09-21T20:01:45.915Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/11/25/9a0728564bb05863f7e513e5a594fe5ffef091b325437f5430e8cfb0d530/coverage-7.10.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:78a384e49f46b80fb4c901d52d92abe098e78768ed829c673fbb53c498bef73a", size = 249941, upload-time = "2025-09-21T20:01:47.296Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/e0/fd/ca2650443bfbef5b0e74373aac4df67b08180d2f184b482c41499668e258/coverage-7.10.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:5e1e9802121405ede4b0133aa4340ad8186a1d2526de5b7c3eca519db7bb89fb", size = 249519, upload-time = "2025-09-21T20:01:48.73Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/24/79/f692f125fb4299b6f963b0745124998ebb8e73ecdfce4ceceb06a8c6bec5/coverage-7.10.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d41213ea25a86f69efd1575073d34ea11aabe075604ddf3d148ecfec9e1e96a1", size = 251375, upload-time = "2025-09-21T20:01:50.529Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/5e/75/61b9bbd6c7d24d896bfeec57acba78e0f8deac68e6baf2d4804f7aae1f88/coverage-7.10.7-cp312-cp312-win32.whl", hash = "sha256:77eb4c747061a6af8d0f7bdb31f1e108d172762ef579166ec84542f711d90256", size = 220699, upload-time = "2025-09-21T20:01:51.941Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/ca/f3/3bf7905288b45b075918d372498f1cf845b5b579b723c8fd17168018d5f5/coverage-7.10.7-cp312-cp312-win_amd64.whl", hash = "sha256:f51328ffe987aecf6d09f3cd9d979face89a617eacdaea43e7b3080777f647ba", size = 221512, upload-time = "2025-09-21T20:01:53.481Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/5c/44/3e32dbe933979d05cf2dac5e697c8599cfe038aaf51223ab901e208d5a62/coverage-7.10.7-cp312-cp312-win_arm64.whl", hash = "sha256:bda5e34f8a75721c96085903c6f2197dc398c20ffd98df33f866a9c8fd95f4bf", size = 220147, upload-time = "2025-09-21T20:01:55.2Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/9a/94/b765c1abcb613d103b64fcf10395f54d69b0ef8be6a0dd9c524384892cc7/coverage-7.10.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:981a651f543f2854abd3b5fcb3263aac581b18209be49863ba575de6edf4c14d", size = 218320, upload-time = "2025-09-21T20:01:56.629Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/72/4f/732fff31c119bb73b35236dd333030f32c4bfe909f445b423e6c7594f9a2/coverage-7.10.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:73ab1601f84dc804f7812dc297e93cd99381162da39c47040a827d4e8dafe63b", size = 218575, upload-time = "2025-09-21T20:01:58.203Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/87/02/ae7e0af4b674be47566707777db1aa375474f02a1d64b9323e5813a6cdd5/coverage-7.10.7-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a8b6f03672aa6734e700bbcd65ff050fd19cddfec4b031cc8cf1c6967de5a68e", size = 249568, upload-time = "2025-09-21T20:01:59.748Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/a2/77/8c6d22bf61921a59bce5471c2f1f7ac30cd4ac50aadde72b8c48d5727902/coverage-7.10.7-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:10b6ba00ab1132a0ce4428ff68cf50a25efd6840a42cdf4239c9b99aad83be8b", size = 252174, upload-time = "2025-09-21T20:02:01.192Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/b1/20/b6ea4f69bbb52dac0aebd62157ba6a9dddbfe664f5af8122dac296c3ee15/coverage-7.10.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c79124f70465a150e89340de5963f936ee97097d2ef76c869708c4248c63ca49", size = 253447, upload-time = "2025-09-21T20:02:02.701Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/f9/28/4831523ba483a7f90f7b259d2018fef02cb4d5b90bc7c1505d6e5a84883c/coverage-7.10.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:69212fbccdbd5b0e39eac4067e20a4a5256609e209547d86f740d68ad4f04911", size = 249779, upload-time = "2025-09-21T20:02:04.185Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/a7/9f/4331142bc98c10ca6436d2d620c3e165f31e6c58d43479985afce6f3191c/coverage-7.10.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7ea7c6c9d0d286d04ed3541747e6597cbe4971f22648b68248f7ddcd329207f0", size = 251604, upload-time = "2025-09-21T20:02:06.034Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/ce/60/bda83b96602036b77ecf34e6393a3836365481b69f7ed7079ab85048202b/coverage-7.10.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b9be91986841a75042b3e3243d0b3cb0b2434252b977baaf0cd56e960fe1e46f", size = 249497, upload-time = "2025-09-21T20:02:07.619Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/5f/af/152633ff35b2af63977edd835d8e6430f0caef27d171edf2fc76c270ef31/coverage-7.10.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:b281d5eca50189325cfe1f365fafade89b14b4a78d9b40b05ddd1fc7d2a10a9c", size = 249350, upload-time = "2025-09-21T20:02:10.34Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/9d/71/d92105d122bd21cebba877228990e1646d862e34a98bb3374d3fece5a794/coverage-7.10.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:99e4aa63097ab1118e75a848a28e40d68b08a5e19ce587891ab7fd04475e780f", size = 251111, upload-time = "2025-09-21T20:02:12.122Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/a2/9e/9fdb08f4bf476c912f0c3ca292e019aab6712c93c9344a1653986c3fd305/coverage-7.10.7-cp313-cp313-win32.whl", hash = "sha256:dc7c389dce432500273eaf48f410b37886be9208b2dd5710aaf7c57fd442c698", size = 220746, upload-time = "2025-09-21T20:02:13.919Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/b1/b1/a75fd25df44eab52d1931e89980d1ada46824c7a3210be0d3c88a44aaa99/coverage-7.10.7-cp313-cp313-win_amd64.whl", hash = "sha256:cac0fdca17b036af3881a9d2729a850b76553f3f716ccb0360ad4dbc06b3b843", size = 221541, upload-time = "2025-09-21T20:02:15.57Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/14/3a/d720d7c989562a6e9a14b2c9f5f2876bdb38e9367126d118495b89c99c37/coverage-7.10.7-cp313-cp313-win_arm64.whl", hash = "sha256:4b6f236edf6e2f9ae8fcd1332da4e791c1b6ba0dc16a2dc94590ceccb482e546", size = 220170, upload-time = "2025-09-21T20:02:17.395Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/bb/22/e04514bf2a735d8b0add31d2b4ab636fc02370730787c576bb995390d2d5/coverage-7.10.7-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a0ec07fd264d0745ee396b666d47cef20875f4ff2375d7c4f58235886cc1ef0c", size = 219029, upload-time = "2025-09-21T20:02:18.936Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/11/0b/91128e099035ece15da3445d9015e4b4153a6059403452d324cbb0a575fa/coverage-7.10.7-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:dd5e856ebb7bfb7672b0086846db5afb4567a7b9714b8a0ebafd211ec7ce6a15", size = 219259, upload-time = "2025-09-21T20:02:20.44Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/8b/51/66420081e72801536a091a0c8f8c1f88a5c4bf7b9b1bdc6222c7afe6dc9b/coverage-7.10.7-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f57b2a3c8353d3e04acf75b3fed57ba41f5c0646bbf1d10c7c282291c97936b4", size = 260592, upload-time = "2025-09-21T20:02:22.313Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/5d/22/9b8d458c2881b22df3db5bb3e7369e63d527d986decb6c11a591ba2364f7/coverage-7.10.7-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1ef2319dd15a0b009667301a3f84452a4dc6fddfd06b0c5c53ea472d3989fbf0", size = 262768, upload-time = "2025-09-21T20:02:24.287Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/f7/08/16bee2c433e60913c610ea200b276e8eeef084b0d200bdcff69920bd5828/coverage-7.10.7-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:83082a57783239717ceb0ad584de3c69cf581b2a95ed6bf81ea66034f00401c0", size = 264995, upload-time = "2025-09-21T20:02:26.133Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/20/9d/e53eb9771d154859b084b90201e5221bca7674ba449a17c101a5031d4054/coverage-7.10.7-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:50aa94fb1fb9a397eaa19c0d5ec15a5edd03a47bf1a3a6111a16b36e190cff65", size = 259546, upload-time = "2025-09-21T20:02:27.716Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/ad/b0/69bc7050f8d4e56a89fb550a1577d5d0d1db2278106f6f626464067b3817/coverage-7.10.7-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2120043f147bebb41c85b97ac45dd173595ff14f2a584f2963891cbcc3091541", size = 262544, upload-time = "2025-09-21T20:02:29.216Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/ef/4b/2514b060dbd1bc0aaf23b852c14bb5818f244c664cb16517feff6bb3a5ab/coverage-7.10.7-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2fafd773231dd0378fdba66d339f84904a8e57a262f583530f4f156ab83863e6", size = 260308, upload-time = "2025-09-21T20:02:31.226Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/54/78/7ba2175007c246d75e496f64c06e94122bdb914790a1285d627a918bd271/coverage-7.10.7-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:0b944ee8459f515f28b851728ad224fa2d068f1513ef6b7ff1efafeb2185f999", size = 258920, upload-time = "2025-09-21T20:02:32.823Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/c0/b3/fac9f7abbc841409b9a410309d73bfa6cfb2e51c3fada738cb607ce174f8/coverage-7.10.7-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4b583b97ab2e3efe1b3e75248a9b333bd3f8b0b1b8e5b45578e05e5850dfb2c2", size = 261434, upload-time = "2025-09-21T20:02:34.86Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/ee/51/a03bec00d37faaa891b3ff7387192cef20f01604e5283a5fabc95346befa/coverage-7.10.7-cp313-cp313t-win32.whl", hash = "sha256:2a78cd46550081a7909b3329e2266204d584866e8d97b898cd7fb5ac8d888b1a", size = 221403, upload-time = "2025-09-21T20:02:37.034Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/53/22/3cf25d614e64bf6d8e59c7c669b20d6d940bb337bdee5900b9ca41c820bb/coverage-7.10.7-cp313-cp313t-win_amd64.whl", hash = "sha256:33a5e6396ab684cb43dc7befa386258acb2d7fae7f67330ebb85ba4ea27938eb", size = 222469, upload-time = "2025-09-21T20:02:39.011Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/49/a1/00164f6d30d8a01c3c9c48418a7a5be394de5349b421b9ee019f380df2a0/coverage-7.10.7-cp313-cp313t-win_arm64.whl", hash = "sha256:86b0e7308289ddde73d863b7683f596d8d21c7d8664ce1dee061d0bcf3fbb4bb", size = 220731, upload-time = "2025-09-21T20:02:40.939Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/23/9c/5844ab4ca6a4dd97a1850e030a15ec7d292b5c5cb93082979225126e35dd/coverage-7.10.7-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:b06f260b16ead11643a5a9f955bd4b5fd76c1a4c6796aeade8520095b75de520", size = 218302, upload-time = "2025-09-21T20:02:42.527Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/f0/89/673f6514b0961d1f0e20ddc242e9342f6da21eaba3489901b565c0689f34/coverage-7.10.7-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:212f8f2e0612778f09c55dd4872cb1f64a1f2b074393d139278ce902064d5b32", size = 218578, upload-time = "2025-09-21T20:02:44.468Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/05/e8/261cae479e85232828fb17ad536765c88dd818c8470aca690b0ac6feeaa3/coverage-7.10.7-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3445258bcded7d4aa630ab8296dea4d3f15a255588dd535f980c193ab6b95f3f", size = 249629, upload-time = "2025-09-21T20:02:46.503Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/82/62/14ed6546d0207e6eda876434e3e8475a3e9adbe32110ce896c9e0c06bb9a/coverage-7.10.7-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:bb45474711ba385c46a0bfe696c695a929ae69ac636cda8f532be9e8c93d720a", size = 252162, upload-time = "2025-09-21T20:02:48.689Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/ff/49/07f00db9ac6478e4358165a08fb41b469a1b053212e8a00cb02f0d27a05f/coverage-7.10.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:813922f35bd800dca9994c5971883cbc0d291128a5de6b167c7aa697fcf59360", size = 253517, upload-time = "2025-09-21T20:02:50.31Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/a2/59/c5201c62dbf165dfbc91460f6dbbaa85a8b82cfa6131ac45d6c1bfb52deb/coverage-7.10.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:93c1b03552081b2a4423091d6fb3787265b8f86af404cff98d1b5342713bdd69", size = 249632, upload-time = "2025-09-21T20:02:51.971Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/07/ae/5920097195291a51fb00b3a70b9bbd2edbfe3c84876a1762bd1ef1565ebc/coverage-7.10.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:cc87dd1b6eaf0b848eebb1c86469b9f72a1891cb42ac7adcfbce75eadb13dd14", size = 251520, upload-time = "2025-09-21T20:02:53.858Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/b9/3c/a815dde77a2981f5743a60b63df31cb322c944843e57dbd579326625a413/coverage-7.10.7-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:39508ffda4f343c35f3236fe8d1a6634a51f4581226a1262769d7f970e73bffe", size = 249455, upload-time = "2025-09-21T20:02:55.807Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/aa/99/f5cdd8421ea656abefb6c0ce92556709db2265c41e8f9fc6c8ae0f7824c9/coverage-7.10.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:925a1edf3d810537c5a3abe78ec5530160c5f9a26b1f4270b40e62cc79304a1e", size = 249287, upload-time = "2025-09-21T20:02:57.784Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/c3/7a/e9a2da6a1fc5d007dd51fca083a663ab930a8c4d149c087732a5dbaa0029/coverage-7.10.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2c8b9a0636f94c43cd3576811e05b89aa9bc2d0a85137affc544ae5cb0e4bfbd", size = 250946, upload-time = "2025-09-21T20:02:59.431Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/ef/5b/0b5799aa30380a949005a353715095d6d1da81927d6dbed5def2200a4e25/coverage-7.10.7-cp314-cp314-win32.whl", hash = "sha256:b7b8288eb7cdd268b0304632da8cb0bb93fadcfec2fe5712f7b9cc8f4d487be2", size = 221009, upload-time = "2025-09-21T20:03:01.324Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/da/b0/e802fbb6eb746de006490abc9bb554b708918b6774b722bb3a0e6aa1b7de/coverage-7.10.7-cp314-cp314-win_amd64.whl", hash = "sha256:1ca6db7c8807fb9e755d0379ccc39017ce0a84dcd26d14b5a03b78563776f681", size = 221804, upload-time = "2025-09-21T20:03:03.4Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/9e/e8/71d0c8e374e31f39e3389bb0bd19e527d46f00ea8571ec7ec8fd261d8b44/coverage-7.10.7-cp314-cp314-win_arm64.whl", hash = "sha256:097c1591f5af4496226d5783d036bf6fd6cd0cbc132e071b33861de756efb880", size = 220384, upload-time = "2025-09-21T20:03:05.111Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/62/09/9a5608d319fa3eba7a2019addeacb8c746fb50872b57a724c9f79f146969/coverage-7.10.7-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:a62c6ef0d50e6de320c270ff91d9dd0a05e7250cac2a800b7784bae474506e63", size = 219047, upload-time = "2025-09-21T20:03:06.795Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/f5/6f/f58d46f33db9f2e3647b2d0764704548c184e6f5e014bef528b7f979ef84/coverage-7.10.7-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:9fa6e4dd51fe15d8738708a973470f67a855ca50002294852e9571cdbd9433f2", size = 219266, upload-time = "2025-09-21T20:03:08.495Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/74/5c/183ffc817ba68e0b443b8c934c8795553eb0c14573813415bd59941ee165/coverage-7.10.7-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8fb190658865565c549b6b4706856d6a7b09302c797eb2cf8e7fe9dabb043f0d", size = 260767, upload-time = "2025-09-21T20:03:10.172Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/0f/48/71a8abe9c1ad7e97548835e3cc1adbf361e743e9d60310c5f75c9e7bf847/coverage-7.10.7-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:affef7c76a9ef259187ef31599a9260330e0335a3011732c4b9effa01e1cd6e0", size = 262931, upload-time = "2025-09-21T20:03:11.861Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/84/fd/193a8fb132acfc0a901f72020e54be5e48021e1575bb327d8ee1097a28fd/coverage-7.10.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e16e07d85ca0cf8bafe5f5d23a0b850064e8e945d5677492b06bbe6f09cc699", size = 265186, upload-time = "2025-09-21T20:03:13.539Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/b1/8f/74ecc30607dd95ad50e3034221113ccb1c6d4e8085cc761134782995daae/coverage-7.10.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:03ffc58aacdf65d2a82bbeb1ffe4d01ead4017a21bfd0454983b88ca73af94b9", size = 259470, upload-time = "2025-09-21T20:03:15.584Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/0f/55/79ff53a769f20d71b07023ea115c9167c0bb56f281320520cf64c5298a96/coverage-7.10.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1b4fd784344d4e52647fd7857b2af5b3fbe6c239b0b5fa63e94eb67320770e0f", size = 262626, upload-time = "2025-09-21T20:03:17.673Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/88/e2/dac66c140009b61ac3fc13af673a574b00c16efdf04f9b5c740703e953c0/coverage-7.10.7-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:0ebbaddb2c19b71912c6f2518e791aa8b9f054985a0769bdb3a53ebbc765c6a1", size = 260386, upload-time = "2025-09-21T20:03:19.36Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/a2/f1/f48f645e3f33bb9ca8a496bc4a9671b52f2f353146233ebd7c1df6160440/coverage-7.10.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:a2d9a3b260cc1d1dbdb1c582e63ddcf5363426a1a68faa0f5da28d8ee3c722a0", size = 258852, upload-time = "2025-09-21T20:03:21.007Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/bb/3b/8442618972c51a7affeead957995cfa8323c0c9bcf8fa5a027421f720ff4/coverage-7.10.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a3cc8638b2480865eaa3926d192e64ce6c51e3d29c849e09d5b4ad95efae5399", size = 261534, upload-time = "2025-09-21T20:03:23.12Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/b2/dc/101f3fa3a45146db0cb03f5b4376e24c0aac818309da23e2de0c75295a91/coverage-7.10.7-cp314-cp314t-win32.whl", hash = "sha256:67f8c5cbcd3deb7a60b3345dffc89a961a484ed0af1f6f73de91705cc6e31235", size = 221784, upload-time = "2025-09-21T20:03:24.769Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/4c/a1/74c51803fc70a8a40d7346660379e144be772bab4ac7bb6e6b905152345c/coverage-7.10.7-cp314-cp314t-win_amd64.whl", hash = "sha256:e1ed71194ef6dea7ed2d5cb5f7243d4bcd334bfb63e59878519be558078f848d", size = 222905, upload-time = "2025-09-21T20:03:26.93Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/12/65/f116a6d2127df30bcafbceef0302d8a64ba87488bf6f73a6d8eebf060873/coverage-7.10.7-cp314-cp314t-win_arm64.whl", hash = "sha256:7fe650342addd8524ca63d77b2362b02345e5f1a093266787d210c70a50b471a", size = 220922, upload-time = "2025-09-21T20:03:28.672Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/a3/ad/d1c25053764b4c42eb294aae92ab617d2e4f803397f9c7c8295caa77a260/coverage-7.10.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fff7b9c3f19957020cac546c70025331113d2e61537f6e2441bc7657913de7d3", size = 217978, upload-time = "2025-09-21T20:03:30.362Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/52/2f/b9f9daa39b80ece0b9548bbb723381e29bc664822d9a12c2135f8922c22b/coverage-7.10.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bc91b314cef27742da486d6839b677b3f2793dfe52b51bbbb7cf736d5c29281c", size = 218370, upload-time = "2025-09-21T20:03:32.147Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/dd/6e/30d006c3b469e58449650642383dddf1c8fb63d44fdf92994bfd46570695/coverage-7.10.7-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:567f5c155eda8df1d3d439d40a45a6a5f029b429b06648235f1e7e51b522b396", size = 244802, upload-time = "2025-09-21T20:03:33.919Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/b0/49/8a070782ce7e6b94ff6a0b6d7c65ba6bc3091d92a92cef4cd4eb0767965c/coverage-7.10.7-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2af88deffcc8a4d5974cf2d502251bc3b2db8461f0b66d80a449c33757aa9f40", size = 246625, upload-time = "2025-09-21T20:03:36.09Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/6a/92/1c1c5a9e8677ce56d42b97bdaca337b2d4d9ebe703d8c174ede52dbabd5f/coverage-7.10.7-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7315339eae3b24c2d2fa1ed7d7a38654cba34a13ef19fbcb9425da46d3dc594", size = 248399, upload-time = "2025-09-21T20:03:38.342Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/c0/54/b140edee7257e815de7426d5d9846b58505dffc29795fff2dfb7f8a1c5a0/coverage-7.10.7-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:912e6ebc7a6e4adfdbb1aec371ad04c68854cd3bf3608b3514e7ff9062931d8a", size = 245142, upload-time = "2025-09-21T20:03:40.591Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/e4/9e/6d6b8295940b118e8b7083b29226c71f6154f7ff41e9ca431f03de2eac0d/coverage-7.10.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f49a05acd3dfe1ce9715b657e28d138578bc40126760efb962322c56e9ca344b", size = 246284, upload-time = "2025-09-21T20:03:42.355Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/db/e5/5e957ca747d43dbe4d9714358375c7546cb3cb533007b6813fc20fce37ad/coverage-7.10.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:cce2109b6219f22ece99db7644b9622f54a4e915dad65660ec435e89a3ea7cc3", size = 244353, upload-time = "2025-09-21T20:03:44.218Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/9a/45/540fc5cc92536a1b783b7ef99450bd55a4b3af234aae35a18a339973ce30/coverage-7.10.7-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:f3c887f96407cea3916294046fc7dab611c2552beadbed4ea901cbc6a40cc7a0", size = 244430, upload-time = "2025-09-21T20:03:46.065Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/75/0b/8287b2e5b38c8fe15d7e3398849bb58d382aedc0864ea0fa1820e8630491/coverage-7.10.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:635adb9a4507c9fd2ed65f39693fa31c9a3ee3a8e6dc64df033e8fdf52a7003f", size = 245311, upload-time = "2025-09-21T20:03:48.19Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/0c/1d/29724999984740f0c86d03e6420b942439bf5bd7f54d4382cae386a9d1e9/coverage-7.10.7-cp39-cp39-win32.whl", hash = "sha256:5a02d5a850e2979b0a014c412573953995174743a3f7fa4ea5a6e9a3c5617431", size = 220500, upload-time = "2025-09-21T20:03:50.024Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/43/11/4b1e6b129943f905ca54c339f343877b55b365ae2558806c1be4f7476ed5/coverage-7.10.7-cp39-cp39-win_amd64.whl", hash = "sha256:c134869d5ffe34547d14e174c866fd8fe2254918cc0a95e99052903bc1543e07", size = 221408, upload-time = "2025-09-21T20:03:51.803Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/ec/16/114df1c291c22cac3b0c127a73e0af5c12ed7bbb6558d310429a0ae24023/coverage-7.10.7-py3-none-any.whl", hash = "sha256:f7941f6f2fe6dd6807a1208737b8a0cbcf1cc6d7b07d24998ad2d63590868260", size = 209952, upload-time = "2025-09-21T20:03:53.918Z" },
|
|
||||||
]
|
|
||||||
|
|
||||||
[package.optional-dependencies]
|
|
||||||
toml = [
|
|
||||||
{ name = "tomli", marker = "python_full_version < '3.10' or (extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2')" },
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "coverage"
|
name = "coverage"
|
||||||
version = "7.11.0"
|
version = "7.11.0"
|
||||||
source = { registry = "https://pypi.org/simple" }
|
source = { registry = "https://pypi.org/simple" }
|
||||||
resolution-markers = [
|
|
||||||
"python_full_version >= '3.14'",
|
|
||||||
"python_full_version >= '3.10' and python_full_version < '3.14'",
|
|
||||||
]
|
|
||||||
sdist = { url = "https://files.pythonhosted.org/packages/1c/38/ee22495420457259d2f3390309505ea98f98a5eed40901cf62196abad006/coverage-7.11.0.tar.gz", hash = "sha256:167bd504ac1ca2af7ff3b81d245dfea0292c5032ebef9d66cc08a7d28c1b8050", size = 811905, upload-time = "2025-10-15T15:15:08.542Z" }
|
sdist = { url = "https://files.pythonhosted.org/packages/1c/38/ee22495420457259d2f3390309505ea98f98a5eed40901cf62196abad006/coverage-7.11.0.tar.gz", hash = "sha256:167bd504ac1ca2af7ff3b81d245dfea0292c5032ebef9d66cc08a7d28c1b8050", size = 811905, upload-time = "2025-10-15T15:15:08.542Z" }
|
||||||
wheels = [
|
wheels = [
|
||||||
{ url = "https://files.pythonhosted.org/packages/12/95/c49df0aceb5507a80b9fe5172d3d39bf23f05be40c23c8d77d556df96cec/coverage-7.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eb53f1e8adeeb2e78962bade0c08bfdc461853c7969706ed901821e009b35e31", size = 215800, upload-time = "2025-10-15T15:12:19.824Z" },
|
{ url = "https://files.pythonhosted.org/packages/12/95/c49df0aceb5507a80b9fe5172d3d39bf23f05be40c23c8d77d556df96cec/coverage-7.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eb53f1e8adeeb2e78962bade0c08bfdc461853c7969706ed901821e009b35e31", size = 215800, upload-time = "2025-10-15T15:12:19.824Z" },
|
||||||
@@ -985,7 +761,7 @@ wheels = [
|
|||||||
|
|
||||||
[package.optional-dependencies]
|
[package.optional-dependencies]
|
||||||
toml = [
|
toml = [
|
||||||
{ name = "tomli", marker = "(python_full_version >= '3.10' and python_full_version <= '3.11') or (python_full_version < '3.10' and extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2') or (python_full_version > '3.11' and extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2')" },
|
{ name = "tomli", marker = "python_full_version <= '3.11' or (extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2')" },
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -993,9 +769,7 @@ name = "coverage-conditional-plugin"
|
|||||||
version = "0.9.0"
|
version = "0.9.0"
|
||||||
source = { registry = "https://pypi.org/simple" }
|
source = { registry = "https://pypi.org/simple" }
|
||||||
dependencies = [
|
dependencies = [
|
||||||
{ name = "coverage", version = "7.10.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' or (extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2')" },
|
{ name = "coverage" },
|
||||||
{ name = "coverage", version = "7.11.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10' or (extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2')" },
|
|
||||||
{ name = "importlib-metadata", marker = "python_full_version < '3.10' or (extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2')" },
|
|
||||||
{ name = "packaging" },
|
{ name = "packaging" },
|
||||||
]
|
]
|
||||||
sdist = { url = "https://files.pythonhosted.org/packages/2e/6e/82f411d325a38cc24289060ca5f80d990ee8d026f4de9782006acf061f9b/coverage_conditional_plugin-0.9.0.tar.gz", hash = "sha256:6893dab0542695dbd5ea714281dae0dfec8d0e36480ba32d839e9fa7344f8215", size = 10579, upload-time = "2023-06-02T10:25:10.166Z" }
|
sdist = { url = "https://files.pythonhosted.org/packages/2e/6e/82f411d325a38cc24289060ca5f80d990ee8d026f4de9782006acf061f9b/coverage_conditional_plugin-0.9.0.tar.gz", hash = "sha256:6893dab0542695dbd5ea714281dae0dfec8d0e36480ba32d839e9fa7344f8215", size = 10579, upload-time = "2023-06-02T10:25:10.166Z" }
|
||||||
@@ -1049,26 +823,10 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/7e/bb/1a74dbe87e9a595bf63052c886dfef965dc5b91d149456a8301eb3d41ce2/fastapi-0.120.1-py3-none-any.whl", hash = "sha256:0e8a2c328e96c117272d8c794d3a97d205f753cc2e69dd7ee387b7488a75601f", size = 108254, upload-time = "2025-10-27T17:53:40.076Z" },
|
{ url = "https://files.pythonhosted.org/packages/7e/bb/1a74dbe87e9a595bf63052c886dfef965dc5b91d149456a8301eb3d41ce2/fastapi-0.120.1-py3-none-any.whl", hash = "sha256:0e8a2c328e96c117272d8c794d3a97d205f753cc2e69dd7ee387b7488a75601f", size = 108254, upload-time = "2025-10-27T17:53:40.076Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "filelock"
|
|
||||||
version = "3.19.1"
|
|
||||||
source = { registry = "https://pypi.org/simple" }
|
|
||||||
resolution-markers = [
|
|
||||||
"python_full_version < '3.10'",
|
|
||||||
]
|
|
||||||
sdist = { url = "https://files.pythonhosted.org/packages/40/bb/0ab3e58d22305b6f5440629d20683af28959bf793d98d11950e305c1c326/filelock-3.19.1.tar.gz", hash = "sha256:66eda1888b0171c998b35be2bcc0f6d75c388a7ce20c3f3f37aa8e96c2dddf58", size = 17687, upload-time = "2025-08-14T16:56:03.016Z" }
|
|
||||||
wheels = [
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/42/14/42b2651a2f46b022ccd948bca9f2d5af0fd8929c4eec235b8d6d844fbe67/filelock-3.19.1-py3-none-any.whl", hash = "sha256:d38e30481def20772f5baf097c122c3babc4fcdb7e14e57049eb9d88c6dc017d", size = 15988, upload-time = "2025-08-14T16:56:01.633Z" },
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "filelock"
|
name = "filelock"
|
||||||
version = "3.20.0"
|
version = "3.20.0"
|
||||||
source = { registry = "https://pypi.org/simple" }
|
source = { registry = "https://pypi.org/simple" }
|
||||||
resolution-markers = [
|
|
||||||
"python_full_version >= '3.14'",
|
|
||||||
"python_full_version >= '3.10' and python_full_version < '3.14'",
|
|
||||||
]
|
|
||||||
sdist = { url = "https://files.pythonhosted.org/packages/58/46/0028a82567109b5ef6e4d2a1f04a583fb513e6cf9527fcdd09afd817deeb/filelock-3.20.0.tar.gz", hash = "sha256:711e943b4ec6be42e1d4e6690b48dc175c822967466bb31c0c293f34334c13f4", size = 18922, upload-time = "2025-10-08T18:03:50.056Z" }
|
sdist = { url = "https://files.pythonhosted.org/packages/58/46/0028a82567109b5ef6e4d2a1f04a583fb513e6cf9527fcdd09afd817deeb/filelock-3.20.0.tar.gz", hash = "sha256:711e943b4ec6be42e1d4e6690b48dc175c822967466bb31c0c293f34334c13f4", size = 18922, upload-time = "2025-10-08T18:03:50.056Z" }
|
||||||
wheels = [
|
wheels = [
|
||||||
{ url = "https://files.pythonhosted.org/packages/76/91/7216b27286936c16f5b4d0c530087e4a54eead683e6b0b73dd0c64844af6/filelock-3.20.0-py3-none-any.whl", hash = "sha256:339b4732ffda5cd79b13f4e2711a31b0365ce445d95d243bb996273d072546a2", size = 16054, upload-time = "2025-10-08T18:03:48.35Z" },
|
{ url = "https://files.pythonhosted.org/packages/76/91/7216b27286936c16f5b4d0c530087e4a54eead683e6b0b73dd0c64844af6/filelock-3.20.0-py3-none-any.whl", hash = "sha256:339b4732ffda5cd79b13f4e2711a31b0365ce445d95d243bb996273d072546a2", size = 16054, upload-time = "2025-10-08T18:03:48.35Z" },
|
||||||
@@ -1080,9 +838,7 @@ version = "3.1.2"
|
|||||||
source = { registry = "https://pypi.org/simple" }
|
source = { registry = "https://pypi.org/simple" }
|
||||||
dependencies = [
|
dependencies = [
|
||||||
{ name = "blinker" },
|
{ name = "blinker" },
|
||||||
{ name = "click", version = "8.1.8", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' or (extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2')" },
|
{ name = "click" },
|
||||||
{ name = "click", version = "8.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10' or (extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2')" },
|
|
||||||
{ name = "importlib-metadata", marker = "python_full_version < '3.10' or (extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2')" },
|
|
||||||
{ name = "itsdangerous" },
|
{ name = "itsdangerous" },
|
||||||
{ name = "jinja2" },
|
{ name = "jinja2" },
|
||||||
{ name = "markupsafe" },
|
{ name = "markupsafe" },
|
||||||
@@ -1211,22 +967,6 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/af/d3/76bd4ed4317e7119c2b7f57c3f6934aba26d277acc6309f873341640e21f/frozenlist-1.8.0-cp314-cp314t-win32.whl", hash = "sha256:342c97bf697ac5480c0a7ec73cd700ecfa5a8a40ac923bd035484616efecc2df", size = 44676, upload-time = "2025-10-06T05:37:52.222Z" },
|
{ url = "https://files.pythonhosted.org/packages/af/d3/76bd4ed4317e7119c2b7f57c3f6934aba26d277acc6309f873341640e21f/frozenlist-1.8.0-cp314-cp314t-win32.whl", hash = "sha256:342c97bf697ac5480c0a7ec73cd700ecfa5a8a40ac923bd035484616efecc2df", size = 44676, upload-time = "2025-10-06T05:37:52.222Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/89/76/c615883b7b521ead2944bb3480398cbb07e12b7b4e4d073d3752eb721558/frozenlist-1.8.0-cp314-cp314t-win_amd64.whl", hash = "sha256:06be8f67f39c8b1dc671f5d83aaefd3358ae5cdcf8314552c57e7ed3e6475bdd", size = 49451, upload-time = "2025-10-06T05:37:53.425Z" },
|
{ url = "https://files.pythonhosted.org/packages/89/76/c615883b7b521ead2944bb3480398cbb07e12b7b4e4d073d3752eb721558/frozenlist-1.8.0-cp314-cp314t-win_amd64.whl", hash = "sha256:06be8f67f39c8b1dc671f5d83aaefd3358ae5cdcf8314552c57e7ed3e6475bdd", size = 49451, upload-time = "2025-10-06T05:37:53.425Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/e0/a3/5982da14e113d07b325230f95060e2169f5311b1017ea8af2a29b374c289/frozenlist-1.8.0-cp314-cp314t-win_arm64.whl", hash = "sha256:102e6314ca4da683dca92e3b1355490fed5f313b768500084fbe6371fddfdb79", size = 42507, upload-time = "2025-10-06T05:37:54.513Z" },
|
{ url = "https://files.pythonhosted.org/packages/e0/a3/5982da14e113d07b325230f95060e2169f5311b1017ea8af2a29b374c289/frozenlist-1.8.0-cp314-cp314t-win_arm64.whl", hash = "sha256:102e6314ca4da683dca92e3b1355490fed5f313b768500084fbe6371fddfdb79", size = 42507, upload-time = "2025-10-06T05:37:54.513Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/c2/59/ae5cdac87a00962122ea37bb346d41b66aec05f9ce328fa2b9e216f8967b/frozenlist-1.8.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d8b7138e5cd0647e4523d6685b0eac5d4be9a184ae9634492f25c6eb38c12a47", size = 86967, upload-time = "2025-10-06T05:37:55.607Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/8a/10/17059b2db5a032fd9323c41c39e9d1f5f9d0c8f04d1e4e3e788573086e61/frozenlist-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a6483e309ca809f1efd154b4d37dc6d9f61037d6c6a81c2dc7a15cb22c8c5dca", size = 49984, upload-time = "2025-10-06T05:37:57.049Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/4b/de/ad9d82ca8e5fa8f0c636e64606553c79e2b859ad253030b62a21fe9986f5/frozenlist-1.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1b9290cf81e95e93fdf90548ce9d3c1211cf574b8e3f4b3b7cb0537cf2227068", size = 50240, upload-time = "2025-10-06T05:37:58.145Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/4e/45/3dfb7767c2a67d123650122b62ce13c731b6c745bc14424eea67678b508c/frozenlist-1.8.0-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:59a6a5876ca59d1b63af8cd5e7ffffb024c3dc1e9cf9301b21a2e76286505c95", size = 219472, upload-time = "2025-10-06T05:37:59.239Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/0b/bf/5bf23d913a741b960d5c1dac7c1985d8a2a1d015772b2d18ea168b08e7ff/frozenlist-1.8.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6dc4126390929823e2d2d9dc79ab4046ed74680360fc5f38b585c12c66cdf459", size = 221531, upload-time = "2025-10-06T05:38:00.521Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/d0/03/27ec393f3b55860859f4b74cdc8c2a4af3dbf3533305e8eacf48a4fd9a54/frozenlist-1.8.0-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:332db6b2563333c5671fecacd085141b5800cb866be16d5e3eb15a2086476675", size = 219211, upload-time = "2025-10-06T05:38:01.842Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/3a/ad/0fd00c404fa73fe9b169429e9a972d5ed807973c40ab6b3cf9365a33d360/frozenlist-1.8.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9ff15928d62a0b80bb875655c39bf517938c7d589554cbd2669be42d97c2cb61", size = 231775, upload-time = "2025-10-06T05:38:03.384Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/8a/c3/86962566154cb4d2995358bc8331bfc4ea19d07db1a96f64935a1607f2b6/frozenlist-1.8.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7bf6cdf8e07c8151fba6fe85735441240ec7f619f935a5205953d58009aef8c6", size = 236631, upload-time = "2025-10-06T05:38:04.609Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/ea/9e/6ffad161dbd83782d2c66dc4d378a9103b31770cb1e67febf43aea42d202/frozenlist-1.8.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:48e6d3f4ec5c7273dfe83ff27c91083c6c9065af655dc2684d2c200c94308bb5", size = 218632, upload-time = "2025-10-06T05:38:05.917Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/58/b2/4677eee46e0a97f9b30735e6ad0bf6aba3e497986066eb68807ac85cf60f/frozenlist-1.8.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:1a7607e17ad33361677adcd1443edf6f5da0ce5e5377b798fba20fae194825f3", size = 235967, upload-time = "2025-10-06T05:38:07.614Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/05/f3/86e75f8639c5a93745ca7addbbc9de6af56aebb930d233512b17e46f6493/frozenlist-1.8.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:5a3a935c3a4e89c733303a2d5a7c257ea44af3a56c8202df486b7f5de40f37e1", size = 228799, upload-time = "2025-10-06T05:38:08.845Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/30/00/39aad3a7f0d98f5eb1d99a3c311215674ed87061aecee7851974b335c050/frozenlist-1.8.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:940d4a017dbfed9daf46a3b086e1d2167e7012ee297fef9e1c545c4d022f5178", size = 230566, upload-time = "2025-10-06T05:38:10.52Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/0d/4d/aa144cac44568d137846ddc4d5210fb5d9719eb1d7ec6fa2728a54b5b94a/frozenlist-1.8.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b9be22a69a014bc47e78072d0ecae716f5eb56c15238acca0f43d6eb8e4a5bda", size = 217715, upload-time = "2025-10-06T05:38:11.832Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/64/4c/8f665921667509d25a0dd72540513bc86b356c95541686f6442a3283019f/frozenlist-1.8.0-cp39-cp39-win32.whl", hash = "sha256:1aa77cb5697069af47472e39612976ed05343ff2e84a3dcf15437b232cbfd087", size = 39933, upload-time = "2025-10-06T05:38:13.061Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/79/bd/bcc926f87027fad5e59926ff12d136e1082a115025d33c032d1cd69ab377/frozenlist-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:7398c222d1d405e796970320036b1b563892b65809d9e5261487bb2c7f7b5c6a", size = 44121, upload-time = "2025-10-06T05:38:14.572Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/4c/07/9c2e4eb7584af4b705237b971b89a4155a8e57599c4483a131a39256a9a0/frozenlist-1.8.0-cp39-cp39-win_arm64.whl", hash = "sha256:b4f3b365f31c6cd4af24545ca0a244a53688cad8834e32f56831c4923b50a103", size = 40312, upload-time = "2025-10-06T05:38:15.699Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/9a/9a/e35b4a917281c0b8419d4207f4334c8e8c5dbf4f3f5f9ada73958d937dcc/frozenlist-1.8.0-py3-none-any.whl", hash = "sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d", size = 13409, upload-time = "2025-10-06T05:38:16.721Z" },
|
{ url = "https://files.pythonhosted.org/packages/9a/9a/e35b4a917281c0b8419d4207f4334c8e8c5dbf4f3f5f9ada73958d937dcc/frozenlist-1.8.0-py3-none-any.whl", hash = "sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d", size = 13409, upload-time = "2025-10-06T05:38:16.721Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -1315,13 +1055,6 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/4d/31/14df99e1c43bd132eec921c2e7e11cda7852f65619bc0fc5bdc2d0cb126c/httptools-0.7.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:f084813239e1eb403ddacd06a30de3d3e09a9b76e7894dcda2b22f8a726e9c60", size = 452631, upload-time = "2025-10-10T03:54:58.219Z" },
|
{ url = "https://files.pythonhosted.org/packages/4d/31/14df99e1c43bd132eec921c2e7e11cda7852f65619bc0fc5bdc2d0cb126c/httptools-0.7.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:f084813239e1eb403ddacd06a30de3d3e09a9b76e7894dcda2b22f8a726e9c60", size = 452631, upload-time = "2025-10-10T03:54:58.219Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/22/d2/b7e131f7be8d854d48cb6d048113c30f9a46dca0c9a8b08fcb3fcd588cdc/httptools-0.7.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7347714368fb2b335e9063bc2b96f2f87a9ceffcd9758ac295f8bbcd3ffbc0ca", size = 452910, upload-time = "2025-10-10T03:54:59.366Z" },
|
{ url = "https://files.pythonhosted.org/packages/22/d2/b7e131f7be8d854d48cb6d048113c30f9a46dca0c9a8b08fcb3fcd588cdc/httptools-0.7.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7347714368fb2b335e9063bc2b96f2f87a9ceffcd9758ac295f8bbcd3ffbc0ca", size = 452910, upload-time = "2025-10-10T03:54:59.366Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/53/cf/878f3b91e4e6e011eff6d1fa9ca39f7eb17d19c9d7971b04873734112f30/httptools-0.7.1-cp314-cp314-win_amd64.whl", hash = "sha256:cfabda2a5bb85aa2a904ce06d974a3f30fb36cc63d7feaddec05d2050acede96", size = 88205, upload-time = "2025-10-10T03:55:00.389Z" },
|
{ url = "https://files.pythonhosted.org/packages/53/cf/878f3b91e4e6e011eff6d1fa9ca39f7eb17d19c9d7971b04873734112f30/httptools-0.7.1-cp314-cp314-win_amd64.whl", hash = "sha256:cfabda2a5bb85aa2a904ce06d974a3f30fb36cc63d7feaddec05d2050acede96", size = 88205, upload-time = "2025-10-10T03:55:00.389Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/90/de/b1fe0e8890f0292c266117d4cd268186758a9c34e576fbd573fdf3beacff/httptools-0.7.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ac50afa68945df63ec7a2707c506bd02239272288add34539a2ef527254626a4", size = 206454, upload-time = "2025-10-10T03:55:01.528Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/57/a7/a675c90b49e550c7635ce209c01bc61daa5b08aef17da27ef4e0e78fcf3f/httptools-0.7.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:de987bb4e7ac95b99b805b99e0aae0ad51ae61df4263459d36e07cf4052d8b3a", size = 110260, upload-time = "2025-10-10T03:55:02.418Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/03/44/fb5ef8136e6e97f7b020e97e40c03a999f97e68574d4998fa52b0a62b01b/httptools-0.7.1-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:d169162803a24425eb5e4d51d79cbf429fd7a491b9e570a55f495ea55b26f0bf", size = 441524, upload-time = "2025-10-10T03:55:03.292Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/b4/62/8496a5425341867796d7e2419695f74a74607054e227bbaeabec8323e87f/httptools-0.7.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:49794f9250188a57fa73c706b46cb21a313edb00d337ca4ce1a011fe3c760b28", size = 440877, upload-time = "2025-10-10T03:55:04.282Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/e8/f1/26c2e5214106bf6ed04d03e518ff28ca0c6b5390c5da7b12bbf94b40ae43/httptools-0.7.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:aeefa0648362bb97a7d6b5ff770bfb774930a327d7f65f8208394856862de517", size = 425775, upload-time = "2025-10-10T03:55:05.341Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/3a/34/7500a19257139725281f7939a7d1aa3701cf1ac4601a1690f9ab6f510e15/httptools-0.7.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0d92b10dbf0b3da4823cde6a96d18e6ae358a9daa741c71448975f6a2c339cad", size = 425001, upload-time = "2025-10-10T03:55:06.389Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/71/04/31a7949d645ebf33a67f56a0024109444a52a271735e0647a210264f3e61/httptools-0.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:5ddbd045cfcb073db2449563dd479057f2c2b681ebc232380e63ef15edc9c023", size = 86818, upload-time = "2025-10-10T03:55:07.316Z" },
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -1390,38 +1123,10 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" },
|
{ url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "importlib-metadata"
|
|
||||||
version = "8.7.0"
|
|
||||||
source = { registry = "https://pypi.org/simple" }
|
|
||||||
dependencies = [
|
|
||||||
{ name = "zipp", marker = "python_full_version < '3.10' or (extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2')" },
|
|
||||||
]
|
|
||||||
sdist = { url = "https://files.pythonhosted.org/packages/76/66/650a33bd90f786193e4de4b3ad86ea60b53c89b669a5c7be931fac31cdb0/importlib_metadata-8.7.0.tar.gz", hash = "sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000", size = 56641, upload-time = "2025-04-27T15:29:01.736Z" }
|
|
||||||
wheels = [
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/20/b0/36bd937216ec521246249be3bf9855081de4c5e06a0c9b4219dbeda50373/importlib_metadata-8.7.0-py3-none-any.whl", hash = "sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd", size = 27656, upload-time = "2025-04-27T15:29:00.214Z" },
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "iniconfig"
|
|
||||||
version = "2.1.0"
|
|
||||||
source = { registry = "https://pypi.org/simple" }
|
|
||||||
resolution-markers = [
|
|
||||||
"python_full_version < '3.10'",
|
|
||||||
]
|
|
||||||
sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793, upload-time = "2025-03-19T20:09:59.721Z" }
|
|
||||||
wheels = [
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050, upload-time = "2025-03-19T20:10:01.071Z" },
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "iniconfig"
|
name = "iniconfig"
|
||||||
version = "2.3.0"
|
version = "2.3.0"
|
||||||
source = { registry = "https://pypi.org/simple" }
|
source = { registry = "https://pypi.org/simple" }
|
||||||
resolution-markers = [
|
|
||||||
"python_full_version >= '3.14'",
|
|
||||||
"python_full_version >= '3.10' and python_full_version < '3.14'",
|
|
||||||
]
|
|
||||||
sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" }
|
sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" }
|
||||||
wheels = [
|
wheels = [
|
||||||
{ url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" },
|
{ url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" },
|
||||||
@@ -1544,17 +1249,6 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819, upload-time = "2025-09-27T18:37:26.285Z" },
|
{ url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819, upload-time = "2025-09-27T18:37:26.285Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426, upload-time = "2025-09-27T18:37:27.316Z" },
|
{ url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426, upload-time = "2025-09-27T18:37:27.316Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" },
|
{ url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/56/23/0d8c13a44bde9154821586520840643467aee574d8ce79a17da539ee7fed/markupsafe-3.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15d939a21d546304880945ca1ecb8a039db6b4dc49b2c5a400387cdae6a62e26", size = 11623, upload-time = "2025-09-27T18:37:29.296Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/fd/23/07a2cb9a8045d5f3f0890a8c3bc0859d7a47bfd9a560b563899bec7b72ed/markupsafe-3.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f71a396b3bf33ecaa1626c255855702aca4d3d9fea5e051b41ac59a9c1c41edc", size = 12049, upload-time = "2025-09-27T18:37:30.234Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/bc/e4/6be85eb81503f8e11b61c0b6369b6e077dcf0a74adbd9ebf6b349937b4e9/markupsafe-3.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f4b68347f8c5eab4a13419215bdfd7f8c9b19f2b25520968adfad23eb0ce60c", size = 21923, upload-time = "2025-09-27T18:37:31.177Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/6f/bc/4dc914ead3fe6ddaef035341fee0fc956949bbd27335b611829292b89ee2/markupsafe-3.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e8fc20152abba6b83724d7ff268c249fa196d8259ff481f3b1476383f8f24e42", size = 20543, upload-time = "2025-09-27T18:37:32.168Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/89/6e/5fe81fbcfba4aef4093d5f856e5c774ec2057946052d18d168219b7bd9f9/markupsafe-3.0.3-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:949b8d66bc381ee8b007cd945914c721d9aba8e27f71959d750a46f7c282b20b", size = 20585, upload-time = "2025-09-27T18:37:33.166Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/f6/f6/e0e5a3d3ae9c4020f696cd055f940ef86b64fe88de26f3a0308b9d3d048c/markupsafe-3.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:3537e01efc9d4dccdf77221fb1cb3b8e1a38d5428920e0657ce299b20324d758", size = 21387, upload-time = "2025-09-27T18:37:34.185Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/c8/25/651753ef4dea08ea790f4fbb65146a9a44a014986996ca40102e237aa49a/markupsafe-3.0.3-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:591ae9f2a647529ca990bc681daebdd52c8791ff06c2bfa05b65163e28102ef2", size = 20133, upload-time = "2025-09-27T18:37:35.138Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/dc/0a/c3cf2b4fef5f0426e8a6d7fce3cb966a17817c568ce59d76b92a233fdbec/markupsafe-3.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a320721ab5a1aba0a233739394eb907f8c8da5c98c9181d1161e77a0c8e36f2d", size = 20588, upload-time = "2025-09-27T18:37:36.096Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/cd/1b/a7782984844bd519ad4ffdbebbba2671ec5d0ebbeac34736c15fb86399e8/markupsafe-3.0.3-cp39-cp39-win32.whl", hash = "sha256:df2449253ef108a379b8b5d6b43f4b1a8e81a061d6537becd5582fba5f9196d7", size = 14566, upload-time = "2025-09-27T18:37:37.09Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/18/1f/8d9c20e1c9440e215a44be5ab64359e207fcb4f675543f1cf9a2a7f648d0/markupsafe-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:7c3fb7d25180895632e5d3148dbdc29ea38ccb7fd210aa27acbd1201a1902c6e", size = 15053, upload-time = "2025-09-27T18:37:38.054Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/4e/d3/fe08482b5cd995033556d45041a4f4e76e7f0521112a9c9991d40d39825f/markupsafe-3.0.3-cp39-cp39-win_arm64.whl", hash = "sha256:38664109c14ffc9e7437e86b4dceb442b0096dfe3541d7864d9cbe1da4cf36c8", size = 13928, upload-time = "2025-09-27T18:37:39.037Z" },
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -1692,39 +1386,20 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/39/ca/c05f144128ea232ae2178b008d5011d4e2cea86e4ee8c85c2631b1b94802/multidict-6.7.0-cp314-cp314t-win32.whl", hash = "sha256:b2d7f80c4e1fd010b07cb26820aae86b7e73b681ee4889684fb8d2d4537aab13", size = 48023, upload-time = "2025-10-06T14:51:51.883Z" },
|
{ url = "https://files.pythonhosted.org/packages/39/ca/c05f144128ea232ae2178b008d5011d4e2cea86e4ee8c85c2631b1b94802/multidict-6.7.0-cp314-cp314t-win32.whl", hash = "sha256:b2d7f80c4e1fd010b07cb26820aae86b7e73b681ee4889684fb8d2d4537aab13", size = 48023, upload-time = "2025-10-06T14:51:51.883Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/ba/8f/0a60e501584145588be1af5cc829265701ba3c35a64aec8e07cbb71d39bb/multidict-6.7.0-cp314-cp314t-win_amd64.whl", hash = "sha256:09929cab6fcb68122776d575e03c6cc64ee0b8fca48d17e135474b042ce515cd", size = 53507, upload-time = "2025-10-06T14:51:53.672Z" },
|
{ url = "https://files.pythonhosted.org/packages/ba/8f/0a60e501584145588be1af5cc829265701ba3c35a64aec8e07cbb71d39bb/multidict-6.7.0-cp314-cp314t-win_amd64.whl", hash = "sha256:09929cab6fcb68122776d575e03c6cc64ee0b8fca48d17e135474b042ce515cd", size = 53507, upload-time = "2025-10-06T14:51:53.672Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/7f/ae/3148b988a9c6239903e786eac19c889fab607c31d6efa7fb2147e5680f23/multidict-6.7.0-cp314-cp314t-win_arm64.whl", hash = "sha256:cc41db090ed742f32bd2d2c721861725e6109681eddf835d0a82bd3a5c382827", size = 44804, upload-time = "2025-10-06T14:51:55.415Z" },
|
{ url = "https://files.pythonhosted.org/packages/7f/ae/3148b988a9c6239903e786eac19c889fab607c31d6efa7fb2147e5680f23/multidict-6.7.0-cp314-cp314t-win_arm64.whl", hash = "sha256:cc41db090ed742f32bd2d2c721861725e6109681eddf835d0a82bd3a5c382827", size = 44804, upload-time = "2025-10-06T14:51:55.415Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/90/d7/4cf84257902265c4250769ac49f4eaab81c182ee9aff8bf59d2714dbb174/multidict-6.7.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:363eb68a0a59bd2303216d2346e6c441ba10d36d1f9969fcb6f1ba700de7bb5c", size = 77073, upload-time = "2025-10-06T14:51:57.386Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/6d/51/194e999630a656e76c2965a1590d12faa5cd528170f2abaa04423e09fe8d/multidict-6.7.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d874eb056410ca05fed180b6642e680373688efafc7f077b2a2f61811e873a40", size = 44928, upload-time = "2025-10-06T14:51:58.791Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/e5/6b/2a195373c33068c9158e0941d0b46cfcc9c1d894ca2eb137d1128081dff0/multidict-6.7.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8b55d5497b51afdfde55925e04a022f1de14d4f4f25cdfd4f5d9b0aa96166851", size = 44581, upload-time = "2025-10-06T14:52:00.174Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/69/7b/7f4f2e644b6978bf011a5fd9a5ebb7c21de3f38523b1f7897d36a1ac1311/multidict-6.7.0-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f8e5c0031b90ca9ce555e2e8fd5c3b02a25f14989cbc310701823832c99eb687", size = 239901, upload-time = "2025-10-06T14:52:02.416Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/3c/b5/952c72786710a031aa204a9adf7db66d7f97a2c6573889d58b9e60fe6702/multidict-6.7.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cf41880c991716f3c7cec48e2f19ae4045fc9db5fc9cff27347ada24d710bb5", size = 240534, upload-time = "2025-10-06T14:52:04.105Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/f3/ef/109fe1f2471e4c458c74242c7e4a833f2d9fc8a6813cd7ee345b0bad18f9/multidict-6.7.0-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8cfc12a8630a29d601f48d47787bd7eb730e475e83edb5d6c5084317463373eb", size = 219545, upload-time = "2025-10-06T14:52:06.208Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/42/bd/327d91288114967f9fe90dc53de70aa3fec1b9073e46aa32c4828f771a87/multidict-6.7.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3996b50c3237c4aec17459217c1e7bbdead9a22a0fcd3c365564fbd16439dde6", size = 251187, upload-time = "2025-10-06T14:52:08.049Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/f4/13/a8b078ebbaceb7819fd28cd004413c33b98f1b70d542a62e6a00b74fb09f/multidict-6.7.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7f5170993a0dd3ab871c74f45c0a21a4e2c37a2f2b01b5f722a2ad9c6650469e", size = 249379, upload-time = "2025-10-06T14:52:09.831Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/e3/6d/ab12e1246be4d65d1f55de1e6f6aaa9b8120eddcfdd1d290439c7833d5ce/multidict-6.7.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ec81878ddf0e98817def1e77d4f50dae5ef5b0e4fe796fae3bd674304172416e", size = 239241, upload-time = "2025-10-06T14:52:11.561Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/bb/d7/079a93625208c173b8fa756396814397c0fd9fee61ef87b75a748820b86e/multidict-6.7.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9281bf5b34f59afbc6b1e477a372e9526b66ca446f4bf62592839c195a718b32", size = 237418, upload-time = "2025-10-06T14:52:13.671Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/c9/29/03777c2212274aa9440918d604dc9d6af0e6b4558c611c32c3dcf1a13870/multidict-6.7.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:68af405971779d8b37198726f2b6fe3955db846fee42db7a4286fc542203934c", size = 232987, upload-time = "2025-10-06T14:52:15.708Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/d9/00/11188b68d85a84e8050ee34724d6ded19ad03975caebe0c8dcb2829b37bf/multidict-6.7.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3ba3ef510467abb0667421a286dc906e30eb08569365f5cdb131d7aff7c2dd84", size = 240985, upload-time = "2025-10-06T14:52:17.317Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/df/0c/12eef6aeda21859c6cdf7d75bd5516d83be3efe3d8cc45fd1a3037f5b9dc/multidict-6.7.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:b61189b29081a20c7e4e0b49b44d5d44bb0dc92be3c6d06a11cc043f81bf9329", size = 246855, upload-time = "2025-10-06T14:52:19.096Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/69/f6/076120fd8bb3975f09228e288e08bff6b9f1bfd5166397c7ba284f622ab2/multidict-6.7.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:fb287618b9c7aa3bf8d825f02d9201b2f13078a5ed3b293c8f4d953917d84d5e", size = 241804, upload-time = "2025-10-06T14:52:21.166Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/5f/51/41bb950c81437b88a93e6ddfca1d8763569ae861e638442838c4375f7497/multidict-6.7.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:521f33e377ff64b96c4c556b81c55d0cfffb96a11c194fd0c3f1e56f3d8dd5a4", size = 235321, upload-time = "2025-10-06T14:52:23.208Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/5a/cf/5bbd31f055199d56c1f6b04bbadad3ccb24e6d5d4db75db774fc6d6674b8/multidict-6.7.0-cp39-cp39-win32.whl", hash = "sha256:ce8fdc2dca699f8dbf055a61d73eaa10482569ad20ee3c36ef9641f69afa8c91", size = 41435, upload-time = "2025-10-06T14:52:24.735Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/af/01/547ffe9c2faec91c26965c152f3fea6cff068b6037401f61d310cc861ff4/multidict-6.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:7e73299c99939f089dd9b2120a04a516b95cdf8c1cd2b18c53ebf0de80b1f18f", size = 46193, upload-time = "2025-10-06T14:52:26.101Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/27/77/cfa5461d1d2651d6fc24216c92b4a21d4e385a41c46e0d9f3b070675167b/multidict-6.7.0-cp39-cp39-win_arm64.whl", hash = "sha256:6bdce131e14b04fd34a809b6380dbfd826065c3e2fe8a50dbae659fa0c390546", size = 43118, upload-time = "2025-10-06T14:52:27.876Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/b7/da/7d22601b625e241d4f23ef1ebff8acfc60da633c9e7e7922e24d10f592b3/multidict-6.7.0-py3-none-any.whl", hash = "sha256:394fc5c42a333c9ffc3e421a4c85e08580d990e08b99f6bf35b4132114c5dcb3", size = 12317, upload-time = "2025-10-06T14:52:29.272Z" },
|
{ url = "https://files.pythonhosted.org/packages/b7/da/7d22601b625e241d4f23ef1ebff8acfc60da633c9e7e7922e24d10f592b3/multidict-6.7.0-py3-none-any.whl", hash = "sha256:394fc5c42a333c9ffc3e421a4c85e08580d990e08b99f6bf35b4132114c5dcb3", size = 12317, upload-time = "2025-10-06T14:52:29.272Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nb-autodoc"
|
name = "nb-autodoc"
|
||||||
version = "1.0.0a7"
|
version = "1.0.3"
|
||||||
source = { registry = "https://pypi.org/simple" }
|
source = { registry = "https://pypi.org/simple" }
|
||||||
dependencies = [
|
dependencies = [
|
||||||
{ name = "click", version = "8.1.8", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' or (extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2')" },
|
{ name = "click" },
|
||||||
{ name = "click", version = "8.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10' or (extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2')" },
|
|
||||||
{ name = "typing-extensions" },
|
{ name = "typing-extensions" },
|
||||||
]
|
]
|
||||||
sdist = { url = "https://files.pythonhosted.org/packages/a3/d9/be84ebb0e7b4b67307e3bc1cf13deb941fed8f30d0d339d4de1d9ae141a6/nb-autodoc-1.0.0a7.tar.gz", hash = "sha256:16cf127a3574dcd1e7e495ce992406bb2783245062033fef54b741fdf9b29f7e", size = 62878, upload-time = "2023-06-23T15:05:27.882Z" }
|
sdist = { url = "https://files.pythonhosted.org/packages/0a/b7/46978e3423b8311e1599967c4b91a6c5233b9e2d853aa99a8aef4de4b8fa/nb_autodoc-1.0.3.tar.gz", hash = "sha256:8bb90a20820280adf12a0aad1b94603e9f0c65750d81af8378c6dd6cfb0be400", size = 62703, upload-time = "2025-12-01T08:52:16.891Z" }
|
||||||
wheels = [
|
wheels = [
|
||||||
{ url = "https://files.pythonhosted.org/packages/79/2b/9b1e33c6bd6786d450b0c44b4b52f8829130506a6832c62b18b8bff25a1a/nb_autodoc-1.0.0a7-py3-none-any.whl", hash = "sha256:789a17c0fa5e4c071cf65402d59444828b56b245aa7ec01c80640ce6bbe347b3", size = 52886, upload-time = "2023-06-23T15:05:25.488Z" },
|
{ url = "https://files.pythonhosted.org/packages/dc/70/ce9c943da109599649efed7ca1d8e549515f60de9c8a046e93fe17b10ad4/nb_autodoc-1.0.3-py3-none-any.whl", hash = "sha256:6b5d1d244ee5c5ae896e0c6683193df64e47497986beceaeed2a76ae7235c06b", size = 53029, upload-time = "2025-12-01T08:52:15.301Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -1841,7 +1516,7 @@ provides-extras = ["websockets", "httpx", "aiohttp", "quart", "fastapi", "all"]
|
|||||||
[package.metadata.requires-dev]
|
[package.metadata.requires-dev]
|
||||||
dev = [
|
dev = [
|
||||||
{ name = "coverage-conditional-plugin", specifier = ">=0.9.0,<0.10.0" },
|
{ name = "coverage-conditional-plugin", specifier = ">=0.9.0,<0.10.0" },
|
||||||
{ name = "nb-autodoc", specifier = ">=1.0.0a5,<2.0.0" },
|
{ name = "nb-autodoc", specifier = ">=1.0.3,<2.0.0" },
|
||||||
{ name = "nonebug", specifier = ">=0.4.1,<0.5.0" },
|
{ name = "nonebug", specifier = ">=0.4.1,<0.5.0" },
|
||||||
{ name = "nonemoji", specifier = ">=0.1.2,<0.2.0" },
|
{ name = "nonemoji", specifier = ">=0.1.2,<0.2.0" },
|
||||||
{ name = "pre-commit", specifier = ">=4.0.0,<5.0.0" },
|
{ name = "pre-commit", specifier = ">=4.0.0,<5.0.0" },
|
||||||
@@ -1852,7 +1527,7 @@ dev = [
|
|||||||
{ name = "werkzeug", specifier = ">=2.3.6,<4.0.0" },
|
{ name = "werkzeug", specifier = ">=2.3.6,<4.0.0" },
|
||||||
{ name = "wsproto", specifier = ">=1.2.0,<2.0.0" },
|
{ name = "wsproto", specifier = ">=1.2.0,<2.0.0" },
|
||||||
]
|
]
|
||||||
docs = [{ name = "nb-autodoc", specifier = ">=1.0.0a5,<2.0.0" }]
|
docs = [{ name = "nb-autodoc", specifier = ">=1.0.3,<2.0.0" }]
|
||||||
pydantic-v1 = [{ name = "pydantic", specifier = ">=1.10.0,<2.0.0" }]
|
pydantic-v1 = [{ name = "pydantic", specifier = ">=1.10.0,<2.0.0" }]
|
||||||
pydantic-v2 = [{ name = "pydantic", specifier = ">=2.0.0,<3.0.0" }]
|
pydantic-v2 = [{ name = "pydantic", specifier = ">=2.0.0,<3.0.0" }]
|
||||||
test = [
|
test = [
|
||||||
@@ -1926,26 +1601,10 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" },
|
{ url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "platformdirs"
|
|
||||||
version = "4.4.0"
|
|
||||||
source = { registry = "https://pypi.org/simple" }
|
|
||||||
resolution-markers = [
|
|
||||||
"python_full_version < '3.10'",
|
|
||||||
]
|
|
||||||
sdist = { url = "https://files.pythonhosted.org/packages/23/e8/21db9c9987b0e728855bd57bff6984f67952bea55d6f75e055c46b5383e8/platformdirs-4.4.0.tar.gz", hash = "sha256:ca753cf4d81dc309bc67b0ea38fd15dc97bc30ce419a7f58d13eb3bf14c4febf", size = 21634, upload-time = "2025-08-26T14:32:04.268Z" }
|
|
||||||
wheels = [
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/40/4b/2028861e724d3bd36227adfa20d3fd24c3fc6d52032f4a93c133be5d17ce/platformdirs-4.4.0-py3-none-any.whl", hash = "sha256:abd01743f24e5287cd7a5db3752faf1a2d65353f38ec26d98e25a6db65958c85", size = 18654, upload-time = "2025-08-26T14:32:02.735Z" },
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "platformdirs"
|
name = "platformdirs"
|
||||||
version = "4.5.0"
|
version = "4.5.0"
|
||||||
source = { registry = "https://pypi.org/simple" }
|
source = { registry = "https://pypi.org/simple" }
|
||||||
resolution-markers = [
|
|
||||||
"python_full_version >= '3.14'",
|
|
||||||
"python_full_version >= '3.10' and python_full_version < '3.14'",
|
|
||||||
]
|
|
||||||
sdist = { url = "https://files.pythonhosted.org/packages/61/33/9611380c2bdb1225fdef633e2a9610622310fed35ab11dac9620972ee088/platformdirs-4.5.0.tar.gz", hash = "sha256:70ddccdd7c99fc5942e9fc25636a8b34d04c24b335100223152c2803e4063312", size = 21632, upload-time = "2025-10-08T17:44:48.791Z" }
|
sdist = { url = "https://files.pythonhosted.org/packages/61/33/9611380c2bdb1225fdef633e2a9610622310fed35ab11dac9620972ee088/platformdirs-4.5.0.tar.gz", hash = "sha256:70ddccdd7c99fc5942e9fc25636a8b34d04c24b335100223152c2803e4063312", size = 21632, upload-time = "2025-10-08T17:44:48.791Z" }
|
||||||
wheels = [
|
wheels = [
|
||||||
{ url = "https://files.pythonhosted.org/packages/73/cb/ac7874b3e5d58441674fb70742e6c374b28b0c7cb988d37d991cde47166c/platformdirs-4.5.0-py3-none-any.whl", hash = "sha256:e578a81bb873cbb89a41fcc904c7ef523cc18284b7e3b3ccf06aca1403b7ebd3", size = 18651, upload-time = "2025-10-08T17:44:47.223Z" },
|
{ url = "https://files.pythonhosted.org/packages/73/cb/ac7874b3e5d58441674fb70742e6c374b28b0c7cb988d37d991cde47166c/platformdirs-4.5.0-py3-none-any.whl", hash = "sha256:e578a81bb873cbb89a41fcc904c7ef523cc18284b7e3b3ccf06aca1403b7ebd3", size = 18651, upload-time = "2025-10-08T17:44:47.223Z" },
|
||||||
@@ -2108,21 +1767,6 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/08/02/87b25304249a35c0915d236575bc3574a323f60b47939a2262b77632a3ee/propcache-0.4.1-cp314-cp314t-win32.whl", hash = "sha256:05674a162469f31358c30bcaa8883cb7829fa3110bf9c0991fe27d7896c42d85", size = 42546, upload-time = "2025-10-08T19:48:32.872Z" },
|
{ url = "https://files.pythonhosted.org/packages/08/02/87b25304249a35c0915d236575bc3574a323f60b47939a2262b77632a3ee/propcache-0.4.1-cp314-cp314t-win32.whl", hash = "sha256:05674a162469f31358c30bcaa8883cb7829fa3110bf9c0991fe27d7896c42d85", size = 42546, upload-time = "2025-10-08T19:48:32.872Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/cb/ef/3c6ecf8b317aa982f309835e8f96987466123c6e596646d4e6a1dfcd080f/propcache-0.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:990f6b3e2a27d683cb7602ed6c86f15ee6b43b1194736f9baaeb93d0016633b1", size = 46259, upload-time = "2025-10-08T19:48:34.226Z" },
|
{ url = "https://files.pythonhosted.org/packages/cb/ef/3c6ecf8b317aa982f309835e8f96987466123c6e596646d4e6a1dfcd080f/propcache-0.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:990f6b3e2a27d683cb7602ed6c86f15ee6b43b1194736f9baaeb93d0016633b1", size = 46259, upload-time = "2025-10-08T19:48:34.226Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/c4/2d/346e946d4951f37eca1e4f55be0f0174c52cd70720f84029b02f296f4a38/propcache-0.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:ecef2343af4cc68e05131e45024ba34f6095821988a9d0a02aa7c73fcc448aa9", size = 40428, upload-time = "2025-10-08T19:48:35.441Z" },
|
{ url = "https://files.pythonhosted.org/packages/c4/2d/346e946d4951f37eca1e4f55be0f0174c52cd70720f84029b02f296f4a38/propcache-0.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:ecef2343af4cc68e05131e45024ba34f6095821988a9d0a02aa7c73fcc448aa9", size = 40428, upload-time = "2025-10-08T19:48:35.441Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/9b/01/0ebaec9003f5d619a7475165961f8e3083cf8644d704b60395df3601632d/propcache-0.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3d233076ccf9e450c8b3bc6720af226b898ef5d051a2d145f7d765e6e9f9bcff", size = 80277, upload-time = "2025-10-08T19:48:36.647Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/34/58/04af97ac586b4ef6b9026c3fd36ee7798b737a832f5d3440a4280dcebd3a/propcache-0.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:357f5bb5c377a82e105e44bd3d52ba22b616f7b9773714bff93573988ef0a5fb", size = 45865, upload-time = "2025-10-08T19:48:37.859Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/7c/19/b65d98ae21384518b291d9939e24a8aeac4fdb5101b732576f8f7540e834/propcache-0.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cbc3b6dfc728105b2a57c06791eb07a94229202ea75c59db644d7d496b698cac", size = 47636, upload-time = "2025-10-08T19:48:39.038Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/b3/0f/317048c6d91c356c7154dca5af019e6effeb7ee15fa6a6db327cc19e12b4/propcache-0.4.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:182b51b421f0501952d938dc0b0eb45246a5b5153c50d42b495ad5fb7517c888", size = 201126, upload-time = "2025-10-08T19:48:40.774Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/71/69/0b2a7a5a6ee83292b4b997dbd80549d8ce7d40b6397c1646c0d9495f5a85/propcache-0.4.1-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4b536b39c5199b96fc6245eb5fb796c497381d3942f169e44e8e392b29c9ebcc", size = 209837, upload-time = "2025-10-08T19:48:42.167Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/a5/92/c699ac495a6698df6e497fc2de27af4b6ace10d8e76528357ce153722e45/propcache-0.4.1-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:db65d2af507bbfbdcedb254a11149f894169d90488dd3e7190f7cdcb2d6cd57a", size = 215578, upload-time = "2025-10-08T19:48:43.56Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/b3/ee/14de81c5eb02c0ee4f500b4e39c4e1bd0677c06e72379e6ab18923c773fc/propcache-0.4.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fd2dbc472da1f772a4dae4fa24be938a6c544671a912e30529984dd80400cd88", size = 197187, upload-time = "2025-10-08T19:48:45.309Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/1d/94/48dce9aaa6d8dd5a0859bad75158ec522546d4ac23f8e2f05fac469477dd/propcache-0.4.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:daede9cd44e0f8bdd9e6cc9a607fc81feb80fae7a5fc6cecaff0e0bb32e42d00", size = 193478, upload-time = "2025-10-08T19:48:47.743Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/60/b5/0516b563e801e1ace212afde869a0596a0d7115eec0b12d296d75633fb29/propcache-0.4.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:71b749281b816793678ae7f3d0d84bd36e694953822eaad408d682efc5ca18e0", size = 190650, upload-time = "2025-10-08T19:48:49.373Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/24/89/e0f7d4a5978cd56f8cd67735f74052f257dc471ec901694e430f0d1572fe/propcache-0.4.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:0002004213ee1f36cfb3f9a42b5066100c44276b9b72b4e1504cddd3d692e86e", size = 200251, upload-time = "2025-10-08T19:48:51.4Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/06/7d/a1fac863d473876ed4406c914f2e14aa82d2f10dd207c9e16fc383cc5a24/propcache-0.4.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:fe49d0a85038f36ba9e3ffafa1103e61170b28e95b16622e11be0a0ea07c6781", size = 200919, upload-time = "2025-10-08T19:48:53.227Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/c3/4e/f86a256ff24944cf5743e4e6c6994e3526f6acfcfb55e21694c2424f758c/propcache-0.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:99d43339c83aaf4d32bda60928231848eee470c6bda8d02599cc4cebe872d183", size = 193211, upload-time = "2025-10-08T19:48:55.027Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/6e/3f/3fbad5f4356b068f1b047d300a6ff2c66614d7030f078cd50be3fec04228/propcache-0.4.1-cp39-cp39-win32.whl", hash = "sha256:a129e76735bc792794d5177069691c3217898b9f5cee2b2661471e52ffe13f19", size = 38314, upload-time = "2025-10-08T19:48:56.792Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/a4/45/d78d136c3a3d215677abb886785aae744da2c3005bcb99e58640c56529b1/propcache-0.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:948dab269721ae9a87fd16c514a0a2c2a1bdb23a9a61b969b0f9d9ee2968546f", size = 41912, upload-time = "2025-10-08T19:48:57.995Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/fc/2a/b0632941f25139f4e58450b307242951f7c2717a5704977c6d5323a800af/propcache-0.4.1-cp39-cp39-win_arm64.whl", hash = "sha256:5fd37c406dd6dc85aa743e214cef35dc54bbdd1419baac4f6ae5e5b1a2976938", size = 38450, upload-time = "2025-10-08T19:48:59.349Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/5b/5a/bc7b4a4ef808fa59a816c17b20c4bef6884daebbdf627ff2a161da67da19/propcache-0.4.1-py3-none-any.whl", hash = "sha256:af2a6052aeb6cf17d3e46ee169099044fd8224cbaf75c76a2ef596e8163e2237", size = 13305, upload-time = "2025-10-08T19:49:00.792Z" },
|
{ url = "https://files.pythonhosted.org/packages/5b/5a/bc7b4a4ef808fa59a816c17b20c4bef6884daebbdf627ff2a161da67da19/propcache-0.4.1-py3-none-any.whl", hash = "sha256:af2a6052aeb6cf17d3e46ee169099044fd8224cbaf75c76a2ef596e8163e2237", size = 13305, upload-time = "2025-10-08T19:49:00.792Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -2213,19 +1857,6 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/1f/79/2b2e723d1b929dbe7f99e80a56abb29a4f86988c1f73195d960d706b1629/pycares-4.11.0-cp314-cp314t-win32.whl", hash = "sha256:8a75a406432ce39ce0ca41edff7486df6c970eb0fe5cfbe292f195a6b8654461", size = 122235, upload-time = "2025-09-09T15:17:57.576Z" },
|
{ url = "https://files.pythonhosted.org/packages/1f/79/2b2e723d1b929dbe7f99e80a56abb29a4f86988c1f73195d960d706b1629/pycares-4.11.0-cp314-cp314t-win32.whl", hash = "sha256:8a75a406432ce39ce0ca41edff7486df6c970eb0fe5cfbe292f195a6b8654461", size = 122235, upload-time = "2025-09-09T15:17:57.576Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/93/fe/bf3b3ed9345a38092e72cd9890a5df5c2349fc27846a714d823a41f0ee27/pycares-4.11.0-cp314-cp314t-win_amd64.whl", hash = "sha256:3784b80d797bcc2ff2bf3d4b27f46d8516fe1707ff3b82c2580dc977537387f9", size = 148575, upload-time = "2025-09-09T15:17:58.699Z" },
|
{ url = "https://files.pythonhosted.org/packages/93/fe/bf3b3ed9345a38092e72cd9890a5df5c2349fc27846a714d823a41f0ee27/pycares-4.11.0-cp314-cp314t-win_amd64.whl", hash = "sha256:3784b80d797bcc2ff2bf3d4b27f46d8516fe1707ff3b82c2580dc977537387f9", size = 148575, upload-time = "2025-09-09T15:17:58.699Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/ce/20/c0c5cfcf89725fe533b27bc5f714dc4efa8e782bf697c36f9ddf04ba975d/pycares-4.11.0-cp314-cp314t-win_arm64.whl", hash = "sha256:afc6503adf8b35c21183b9387be64ca6810644ef54c9ef6c99d1d5635c01601b", size = 119690, upload-time = "2025-09-09T15:17:59.809Z" },
|
{ url = "https://files.pythonhosted.org/packages/ce/20/c0c5cfcf89725fe533b27bc5f714dc4efa8e782bf697c36f9ddf04ba975d/pycares-4.11.0-cp314-cp314t-win_arm64.whl", hash = "sha256:afc6503adf8b35c21183b9387be64ca6810644ef54c9ef6c99d1d5635c01601b", size = 119690, upload-time = "2025-09-09T15:17:59.809Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/5e/1e/010c82503165f6b3d9e4dbfe5e0d70563a262fe0dda0ccf8fe067877e09e/pycares-4.11.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5e1ab899bb0763dea5d6569300aab3a205572e6e2d0ef1a33b8cf2b86d1312a4", size = 145861, upload-time = "2025-09-09T15:18:01.26Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/a8/b6/5d78a6fa81259eabff095cdd58a6d44a188a5617ef5dd2b4cbb49947d815/pycares-4.11.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9d0c543bdeefa4794582ef48f3c59e5e7a43d672a4bfad9cbbd531e897911690", size = 141825, upload-time = "2025-09-09T15:18:02.423Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/14/bd/8d5168c4261a826a6b56c9b112c3f2befeeee344d7e516438e7eb36ca890/pycares-4.11.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:5344d52efa37df74728505a81dd52c15df639adffd166f7ddca7a6318ecdb605", size = 642573, upload-time = "2025-09-09T15:18:03.796Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/52/29/ef44ba3f50e371a5ef59d1111c5bd016e20f882b893193c60079c5e5a9d7/pycares-4.11.0-cp39-cp39-manylinux_2_28_ppc64le.whl", hash = "sha256:b50ca218a3e2e23cbda395fd002d030385202fbb8182aa87e11bea0a568bd0b8", size = 690223, upload-time = "2025-09-09T15:18:05.681Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/10/53/e1966c7da8923506cb8a724f03c7b7ecc4bf7f908cb19a23a0b08de181c5/pycares-4.11.0-cp39-cp39-manylinux_2_28_s390x.whl", hash = "sha256:30feeab492ac609f38a0d30fab3dc1789bd19c48f725b2955bcaaef516e32a21", size = 682112, upload-time = "2025-09-09T15:18:06.923Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/4a/e7/9230c4bf852cf0651a2b55ba63cdd0a256a857aa10ef5d6307f4fa135fcb/pycares-4.11.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:6195208b16cce1a7b121727710a6f78e8403878c1017ab5a3f92158b048cec34", size = 643946, upload-time = "2025-09-09T15:18:08.68Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/58/1a/5e288e4885c7ff7e5f8cc7076c173bddc28f889c77e08fafbf0cd0b61892/pycares-4.11.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:77bf82dc0beb81262bf1c7f546e1c1fde4992e5c8a2343b867ca201b85f9e1aa", size = 627024, upload-time = "2025-09-09T15:18:11.023Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/2b/8e/6a677a390975713fce04c114d686c64e9f0054210ecb9decf148dd53b132/pycares-4.11.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:aca981fc00c8af8d5b9254ea5c2f276df8ece089b081af1ef4856fbcfc7c698a", size = 673342, upload-time = "2025-09-09T15:18:13.427Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/25/01/e22d5207af4ea0534f20ca86ac42284243884f70d832105e997081e61ed3/pycares-4.11.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:96e07d5a8b733d753e37d1f7138e7321d2316bb3f0f663ab4e3d500fabc82807", size = 656635, upload-time = "2025-09-09T15:18:14.772Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/81/ec/af662143800c6994b7736e34c18ae0aeaf15bfffd59cf101dc3b533526f0/pycares-4.11.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:9a00408105901ede92e318eecb46d0e661d7d093d0a9b1224c71b5dd94f79e83", size = 631925, upload-time = "2025-09-09T15:18:15.98Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/98/17/1c4044e21b9b3a4c4eddaa3a17b3a47b95d171d488818df7d0db6d36db38/pycares-4.11.0-cp39-cp39-win32.whl", hash = "sha256:910ce19a549f493fb55cfd1d7d70960706a03de6bfc896c1429fc5d6216df77e", size = 118832, upload-time = "2025-09-09T15:18:17.065Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/43/ae/09438092d3e470ed1ab19a89f06231ba5cdda355b41791db2265f80b44a3/pycares-4.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:6f751f5a0e4913b2787f237c2c69c11a53f599269012feaa9fb86d7cef3aec26", size = 144575, upload-time = "2025-09-09T15:18:18.488Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/f2/d0/0e6e843d7057aa26bd72a48cec40b88fdb0ae8d14bac2f028fe5ee33886e/pycares-4.11.0-cp39-cp39-win_arm64.whl", hash = "sha256:f6c602c5e3615abbf43dbdf3c6c64c65e76e5aa23cb74e18466b55d4a2095468", size = 115684, upload-time = "2025-09-09T15:18:20.148Z" },
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -2243,8 +1874,7 @@ version = "1.10.24"
|
|||||||
source = { registry = "https://pypi.org/simple" }
|
source = { registry = "https://pypi.org/simple" }
|
||||||
resolution-markers = [
|
resolution-markers = [
|
||||||
"python_full_version >= '3.14'",
|
"python_full_version >= '3.14'",
|
||||||
"python_full_version >= '3.10' and python_full_version < '3.14'",
|
"python_full_version < '3.14'",
|
||||||
"python_full_version < '3.10'",
|
|
||||||
]
|
]
|
||||||
dependencies = [
|
dependencies = [
|
||||||
{ name = "typing-extensions", marker = "extra == 'group-8-nonebot2-pydantic-v1'" },
|
{ name = "typing-extensions", marker = "extra == 'group-8-nonebot2-pydantic-v1'" },
|
||||||
@@ -2279,13 +1909,6 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/2f/6a/9b6b51d19d1af57e8864caff08ce5e8554388b91dc41987ce49315bce3e1/pydantic-1.10.24-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:9c377fc30d9ca40dbff5fd79c5a5e1f0d6fff040fa47a18851bb6b0bd040a5d8", size = 2890844, upload-time = "2025-09-25T01:35:48.724Z" },
|
{ url = "https://files.pythonhosted.org/packages/2f/6a/9b6b51d19d1af57e8864caff08ce5e8554388b91dc41987ce49315bce3e1/pydantic-1.10.24-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:9c377fc30d9ca40dbff5fd79c5a5e1f0d6fff040fa47a18851bb6b0bd040a5d8", size = 2890844, upload-time = "2025-09-25T01:35:48.724Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/27/ca/1ab6b16bd792c8a1fb54949d8b5eef8032d672932ca4afc3048e4febfcdc/pydantic-1.10.24-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b644d6f14b2ce617d6def21622f9ba73961a16b7dffdba7f6692e2f66fa05d00", size = 2850844, upload-time = "2025-09-25T01:35:50.279Z" },
|
{ url = "https://files.pythonhosted.org/packages/27/ca/1ab6b16bd792c8a1fb54949d8b5eef8032d672932ca4afc3048e4febfcdc/pydantic-1.10.24-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b644d6f14b2ce617d6def21622f9ba73961a16b7dffdba7f6692e2f66fa05d00", size = 2850844, upload-time = "2025-09-25T01:35:50.279Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/86/5f/fcc5635818113858a6b37099fed6b860a15b27bb1d0fb270ceb50d0a91b6/pydantic-1.10.24-cp313-cp313-win_amd64.whl", hash = "sha256:0cbbf306124ae41cc153fdc2559b37faa1bec9a23ef7b082c1756d1315ceffe6", size = 1971713, upload-time = "2025-09-25T01:35:52.027Z" },
|
{ url = "https://files.pythonhosted.org/packages/86/5f/fcc5635818113858a6b37099fed6b860a15b27bb1d0fb270ceb50d0a91b6/pydantic-1.10.24-cp313-cp313-win_amd64.whl", hash = "sha256:0cbbf306124ae41cc153fdc2559b37faa1bec9a23ef7b082c1756d1315ceffe6", size = 1971713, upload-time = "2025-09-25T01:35:52.027Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/a9/29/62dd3ffcf7d003f53e834942e9651c2ddd9dc6fb59e6619317e0ed37cf6b/pydantic-1.10.24-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:25fb9a69a21d711deb5acefdab9ff8fb49e6cc77fdd46d38217d433bff2e3de2", size = 2504290, upload-time = "2025-09-25T01:36:16.661Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/f2/83/ef9c4be8e7fc96f52320296aed34f7cbe50fa0219833cc2756e611b644f2/pydantic-1.10.24-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6af36a8fb3072526b5b38d3f341b12d8f423188e7d185f130c0079fe02cdec7f", size = 2311007, upload-time = "2025-09-25T01:36:18.75Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/1c/b7/ec7da8fbaac8c8100b05301a81fac6b2b7446961edb91bbef4b564834abf/pydantic-1.10.24-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fc35569dfd15d3b3fc06a22abee0a45fdde0784be644e650a8769cd0b2abd94", size = 2968514, upload-time = "2025-09-25T01:36:20.511Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/49/84/9e218a35008fbc32dac2974a35a4bd88d7deb0f5b572cf46ccf003a06310/pydantic-1.10.24-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fac7fbcb65171959973f3136d0792c3d1668bc01fd414738f0898b01f692f1b4", size = 3039539, upload-time = "2025-09-25T01:36:24.359Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/b0/2f/b13a8c2d641e3af3fbba136202a9808025ee7cde4b1326ce1aabd1c79d51/pydantic-1.10.24-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:fc3f4a6544517380658b63b144c7d43d5276a343012913b7e5d18d9fba2f12bb", size = 3108949, upload-time = "2025-09-25T01:36:26.138Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/1f/57/dccbf080b35b9797f4d477f4c59935e39e4493cd507f31b5ca5ee49c930d/pydantic-1.10.24-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:415c638ca5fd57b915a62dd38c18c8e0afe5adf5527be6f8ce16b4636b616816", size = 3049395, upload-time = "2025-09-25T01:36:27.782Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/a2/ff/2a25855a1495fcbe1d3b8c782276994575e98ce2218dbf57c1f2eee7c894/pydantic-1.10.24-cp39-cp39-win_amd64.whl", hash = "sha256:a5bf94042efbc6ab56b18a5921f426ebbeefc04f554a911d76029e7be9057d01", size = 2100530, upload-time = "2025-09-25T01:36:29.932Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/46/7f/a168d7077f85f85128aa5636abf13c804c06235c786f1881e659703899a4/pydantic-1.10.24-py3-none-any.whl", hash = "sha256:093768eba26db55a88b12f3073017e3fdee319ef60d3aef5c6c04a4e484db193", size = 166727, upload-time = "2025-09-25T01:36:31.732Z" },
|
{ url = "https://files.pythonhosted.org/packages/46/7f/a168d7077f85f85128aa5636abf13c804c06235c786f1881e659703899a4/pydantic-1.10.24-py3-none-any.whl", hash = "sha256:093768eba26db55a88b12f3073017e3fdee319ef60d3aef5c6c04a4e484db193", size = 166727, upload-time = "2025-09-25T01:36:31.732Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -2295,8 +1918,7 @@ version = "2.12.3"
|
|||||||
source = { registry = "https://pypi.org/simple" }
|
source = { registry = "https://pypi.org/simple" }
|
||||||
resolution-markers = [
|
resolution-markers = [
|
||||||
"python_full_version >= '3.14'",
|
"python_full_version >= '3.14'",
|
||||||
"python_full_version >= '3.10' and python_full_version < '3.14'",
|
"python_full_version < '3.14'",
|
||||||
"python_full_version < '3.10'",
|
|
||||||
]
|
]
|
||||||
dependencies = [
|
dependencies = [
|
||||||
{ name = "annotated-types", marker = "extra == 'group-8-nonebot2-pydantic-v2' or extra != 'group-8-nonebot2-pydantic-v1'" },
|
{ name = "annotated-types", marker = "extra == 'group-8-nonebot2-pydantic-v2' or extra != 'group-8-nonebot2-pydantic-v1'" },
|
||||||
@@ -2397,19 +2019,6 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/1e/29/b53a9ca6cd366bfc928823679c6a76c7a4c69f8201c0ba7903ad18ebae2f/pydantic_core-2.41.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5729225de81fb65b70fdb1907fcf08c75d498f4a6f15af005aabb1fdadc19dfa", size = 2041183, upload-time = "2025-10-14T10:22:08.812Z" },
|
{ url = "https://files.pythonhosted.org/packages/1e/29/b53a9ca6cd366bfc928823679c6a76c7a4c69f8201c0ba7903ad18ebae2f/pydantic_core-2.41.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5729225de81fb65b70fdb1907fcf08c75d498f4a6f15af005aabb1fdadc19dfa", size = 2041183, upload-time = "2025-10-14T10:22:08.812Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/c7/3d/f8c1a371ceebcaf94d6dd2d77c6cf4b1c078e13a5837aee83f760b4f7cfd/pydantic_core-2.41.4-cp314-cp314t-win_amd64.whl", hash = "sha256:de2cfbb09e88f0f795fd90cf955858fc2c691df65b1f21f0aa00b99f3fbc661d", size = 1993542, upload-time = "2025-10-14T10:22:11.332Z" },
|
{ url = "https://files.pythonhosted.org/packages/c7/3d/f8c1a371ceebcaf94d6dd2d77c6cf4b1c078e13a5837aee83f760b4f7cfd/pydantic_core-2.41.4-cp314-cp314t-win_amd64.whl", hash = "sha256:de2cfbb09e88f0f795fd90cf955858fc2c691df65b1f21f0aa00b99f3fbc661d", size = 1993542, upload-time = "2025-10-14T10:22:11.332Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/8a/ac/9fc61b4f9d079482a290afe8d206b8f490e9fd32d4fc03ed4fc698214e01/pydantic_core-2.41.4-cp314-cp314t-win_arm64.whl", hash = "sha256:d34f950ae05a83e0ede899c595f312ca976023ea1db100cd5aa188f7005e3ab0", size = 1973897, upload-time = "2025-10-14T10:22:13.444Z" },
|
{ url = "https://files.pythonhosted.org/packages/8a/ac/9fc61b4f9d079482a290afe8d206b8f490e9fd32d4fc03ed4fc698214e01/pydantic_core-2.41.4-cp314-cp314t-win_arm64.whl", hash = "sha256:d34f950ae05a83e0ede899c595f312ca976023ea1db100cd5aa188f7005e3ab0", size = 1973897, upload-time = "2025-10-14T10:22:13.444Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/2c/36/f86d582be5fb47d4014506cd9ddd10a3979b6d0f2d237aa6ad3e7033b3ea/pydantic_core-2.41.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:646e76293345954acea6966149683047b7b2ace793011922208c8e9da12b0062", size = 2112444, upload-time = "2025-10-14T10:22:16.165Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/ba/e5/63c521dc2dd106ba6b5941c080617ea9db252f8a7d5625231e9d761bc28c/pydantic_core-2.41.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cc8e85a63085a137d286e2791037f5fdfff0aabb8b899483ca9c496dd5797338", size = 1938218, upload-time = "2025-10-14T10:22:19.443Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/30/56/c84b638a3e6e9f5a612b9f5abdad73182520423de43669d639ed4f14b011/pydantic_core-2.41.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:692c622c8f859a17c156492783902d8370ac7e121a611bd6fe92cc71acf9ee8d", size = 1971449, upload-time = "2025-10-14T10:22:21.567Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/99/c6/e974aade34fc7a0248fdfd0a373d62693502a407c596ab3470165e38183c/pydantic_core-2.41.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d1e2906efb1031a532600679b424ef1d95d9f9fb507f813951f23320903adbd7", size = 2054023, upload-time = "2025-10-14T10:22:24.229Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/4f/91/2507dda801f50980a38d1353c313e8f51349a42b008e63a4e45bf4620562/pydantic_core-2.41.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e04e2f7f8916ad3ddd417a7abdd295276a0bf216993d9318a5d61cc058209166", size = 2251614, upload-time = "2025-10-14T10:22:26.498Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/b2/ad/05d886bc96938f4d31bed24e8d3fc3496d9aea7e77bcff6e4b93127c6de7/pydantic_core-2.41.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:df649916b81822543d1c8e0e1d079235f68acdc7d270c911e8425045a8cfc57e", size = 2378807, upload-time = "2025-10-14T10:22:28.733Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/6a/0a/d26e1bb9a80b9fc12cc30d9288193fbc9e60a799e55843804ee37bd38a9c/pydantic_core-2.41.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66c529f862fdba70558061bb936fe00ddbaaa0c647fd26e4a4356ef1d6561891", size = 2076891, upload-time = "2025-10-14T10:22:30.853Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/d9/66/af014e3a294d9933ebfecf11a5d858709014bd2315fa9616195374dd82f0/pydantic_core-2.41.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fc3b4c5a1fd3a311563ed866c2c9b62da06cb6398bee186484ce95c820db71cb", size = 2192179, upload-time = "2025-10-14T10:22:33.481Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/e7/3e/79783f97024037d0ea6e1b3ebcd761463a925199e04ce2625727e9f27d06/pydantic_core-2.41.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6e0fc40d84448f941df9b3334c4b78fe42f36e3bf631ad54c3047a0cdddc2514", size = 2153067, upload-time = "2025-10-14T10:22:35.792Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/b3/97/ea83b0f87d9e742405fb687d5682e7a26334eef2c82a2de06bfbdc305fab/pydantic_core-2.41.4-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:44e7625332683b6c1c8b980461475cde9595eff94447500e80716db89b0da005", size = 2319048, upload-time = "2025-10-14T10:22:38.144Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/64/4a/36d8c966a0b086362ac10a7ee75978ed15c5f2dfdfc02a1578d19d3802fb/pydantic_core-2.41.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:170ee6835f6c71081d031ef1c3b4dc4a12b9efa6a9540f93f95b82f3c7571ae8", size = 2321830, upload-time = "2025-10-14T10:22:40.337Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/a2/6e/d80cc4909dde5f6842861288aa1a7181e7afbfc50940c862ed2848df15bd/pydantic_core-2.41.4-cp39-cp39-win32.whl", hash = "sha256:3adf61415efa6ce977041ba9745183c0e1f637ca849773afa93833e04b163feb", size = 1976706, upload-time = "2025-10-14T10:22:42.61Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/29/ee/5bda8d960d4a8b24a7eeb8a856efa9c865a7a6cab714ed387b29507dc278/pydantic_core-2.41.4-cp39-cp39-win_amd64.whl", hash = "sha256:a238dd3feee263eeaeb7dc44aea4ba1364682c4f9f9467e6af5596ba322c2332", size = 2027640, upload-time = "2025-10-14T10:22:44.907Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/b0/12/5ba58daa7f453454464f92b3ca7b9d7c657d8641c48e370c3ebc9a82dd78/pydantic_core-2.41.4-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:a1b2cfec3879afb742a7b0bcfa53e4f22ba96571c9e54d6a3afe1052d17d843b", size = 2122139, upload-time = "2025-10-14T10:22:47.288Z" },
|
{ url = "https://files.pythonhosted.org/packages/b0/12/5ba58daa7f453454464f92b3ca7b9d7c657d8641c48e370c3ebc9a82dd78/pydantic_core-2.41.4-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:a1b2cfec3879afb742a7b0bcfa53e4f22ba96571c9e54d6a3afe1052d17d843b", size = 2122139, upload-time = "2025-10-14T10:22:47.288Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/21/fb/6860126a77725c3108baecd10fd3d75fec25191d6381b6eb2ac660228eac/pydantic_core-2.41.4-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:d175600d975b7c244af6eb9c9041f10059f20b8bbffec9e33fdd5ee3f67cdc42", size = 1936674, upload-time = "2025-10-14T10:22:49.555Z" },
|
{ url = "https://files.pythonhosted.org/packages/21/fb/6860126a77725c3108baecd10fd3d75fec25191d6381b6eb2ac660228eac/pydantic_core-2.41.4-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:d175600d975b7c244af6eb9c9041f10059f20b8bbffec9e33fdd5ee3f67cdc42", size = 1936674, upload-time = "2025-10-14T10:22:49.555Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/de/be/57dcaa3ed595d81f8757e2b44a38240ac5d37628bce25fb20d02c7018776/pydantic_core-2.41.4-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f184d657fa4947ae5ec9c47bd7e917730fa1cbb78195037e32dcbab50aca5ee", size = 1956398, upload-time = "2025-10-14T10:22:52.19Z" },
|
{ url = "https://files.pythonhosted.org/packages/de/be/57dcaa3ed595d81f8757e2b44a38240ac5d37628bce25fb20d02c7018776/pydantic_core-2.41.4-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f184d657fa4947ae5ec9c47bd7e917730fa1cbb78195037e32dcbab50aca5ee", size = 1956398, upload-time = "2025-10-14T10:22:52.19Z" },
|
||||||
@@ -2461,8 +2070,7 @@ source = { registry = "https://pypi.org/simple" }
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
{ name = "colorama", marker = "sys_platform == 'win32' or (extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2')" },
|
{ name = "colorama", marker = "sys_platform == 'win32' or (extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2')" },
|
||||||
{ name = "exceptiongroup", marker = "python_full_version < '3.11' or (extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2')" },
|
{ name = "exceptiongroup", marker = "python_full_version < '3.11' or (extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2')" },
|
||||||
{ name = "iniconfig", version = "2.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' or (extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2')" },
|
{ name = "iniconfig" },
|
||||||
{ name = "iniconfig", version = "2.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10' or (extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2')" },
|
|
||||||
{ name = "packaging" },
|
{ name = "packaging" },
|
||||||
{ name = "pluggy" },
|
{ name = "pluggy" },
|
||||||
{ name = "pygments" },
|
{ name = "pygments" },
|
||||||
@@ -2478,8 +2086,7 @@ name = "pytest-cov"
|
|||||||
version = "7.0.0"
|
version = "7.0.0"
|
||||||
source = { registry = "https://pypi.org/simple" }
|
source = { registry = "https://pypi.org/simple" }
|
||||||
dependencies = [
|
dependencies = [
|
||||||
{ name = "coverage", version = "7.10.7", source = { registry = "https://pypi.org/simple" }, extra = ["toml"], marker = "python_full_version < '3.10' or (extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2')" },
|
{ name = "coverage", extra = ["toml"] },
|
||||||
{ name = "coverage", version = "7.11.0", source = { registry = "https://pypi.org/simple" }, extra = ["toml"], marker = "python_full_version >= '3.10' or (extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2')" },
|
|
||||||
{ name = "pluggy" },
|
{ name = "pluggy" },
|
||||||
{ name = "pytest" },
|
{ name = "pytest" },
|
||||||
]
|
]
|
||||||
@@ -2572,15 +2179,6 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" },
|
{ url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" },
|
{ url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" },
|
{ url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/9f/62/67fc8e68a75f738c9200422bf65693fb79a4cd0dc5b23310e5202e978090/pyyaml-6.0.3-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:b865addae83924361678b652338317d1bd7e79b1f4596f96b96c77a5a34b34da", size = 184450, upload-time = "2025-09-25T21:33:00.618Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/ae/92/861f152ce87c452b11b9d0977952259aa7df792d71c1053365cc7b09cc08/pyyaml-6.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c3355370a2c156cffb25e876646f149d5d68f5e0a3ce86a5084dd0b64a994917", size = 174319, upload-time = "2025-09-25T21:33:02.086Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/d0/cd/f0cfc8c74f8a030017a2b9c771b7f47e5dd702c3e28e5b2071374bda2948/pyyaml-6.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3c5677e12444c15717b902a5798264fa7909e41153cdf9ef7ad571b704a63dd9", size = 737631, upload-time = "2025-09-25T21:33:03.25Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/ef/b2/18f2bd28cd2055a79a46c9b0895c0b3d987ce40ee471cecf58a1a0199805/pyyaml-6.0.3-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5ed875a24292240029e4483f9d4a4b8a1ae08843b9c54f43fcc11e404532a8a5", size = 836795, upload-time = "2025-09-25T21:33:05.014Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/73/b9/793686b2d54b531203c160ef12bec60228a0109c79bae6c1277961026770/pyyaml-6.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0150219816b6a1fa26fb4699fb7daa9caf09eb1999f3b70fb6e786805e80375a", size = 750767, upload-time = "2025-09-25T21:33:06.398Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/a9/86/a137b39a611def2ed78b0e66ce2fe13ee701a07c07aebe55c340ed2a050e/pyyaml-6.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fa160448684b4e94d80416c0fa4aac48967a969efe22931448d853ada8baf926", size = 727982, upload-time = "2025-09-25T21:33:08.708Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/dd/62/71c27c94f457cf4418ef8ccc71735324c549f7e3ea9d34aba50874563561/pyyaml-6.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:27c0abcb4a5dac13684a37f76e701e054692a9b2d3064b70f5e4eb54810553d7", size = 755677, upload-time = "2025-09-25T21:33:09.876Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/29/3d/6f5e0d58bd924fb0d06c3a6bad00effbdae2de5adb5cda5648006ffbd8d3/pyyaml-6.0.3-cp39-cp39-win32.whl", hash = "sha256:1ebe39cb5fc479422b83de611d14e2c0d3bb2a18bbcb01f229ab3cfbd8fee7a0", size = 142592, upload-time = "2025-09-25T21:33:10.983Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/f0/0c/25113e0b5e103d7f1490c0e947e303fe4a696c10b501dea7a9f49d4e876c/pyyaml-6.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:2e71d11abed7344e42a8849600193d15b6def118602c4c176f748e4583246007", size = 158777, upload-time = "2025-09-25T21:33:15.55Z" },
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -2590,15 +2188,12 @@ source = { registry = "https://pypi.org/simple" }
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
{ name = "aiofiles" },
|
{ name = "aiofiles" },
|
||||||
{ name = "blinker" },
|
{ name = "blinker" },
|
||||||
{ name = "click", version = "8.1.8", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' or (extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2')" },
|
{ name = "click" },
|
||||||
{ name = "click", version = "8.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10' or (extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2')" },
|
|
||||||
{ name = "flask" },
|
{ name = "flask" },
|
||||||
{ name = "hypercorn" },
|
{ name = "hypercorn" },
|
||||||
{ name = "importlib-metadata", marker = "python_full_version < '3.10' or (extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2')" },
|
|
||||||
{ name = "itsdangerous" },
|
{ name = "itsdangerous" },
|
||||||
{ name = "jinja2" },
|
{ name = "jinja2" },
|
||||||
{ name = "markupsafe" },
|
{ name = "markupsafe" },
|
||||||
{ name = "typing-extensions", marker = "python_full_version < '3.10' or (extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2')" },
|
|
||||||
{ name = "werkzeug" },
|
{ name = "werkzeug" },
|
||||||
]
|
]
|
||||||
sdist = { url = "https://files.pythonhosted.org/packages/1d/9d/12e1143a5bd2ccc05c293a6f5ae1df8fd94a8fc1440ecc6c344b2b30ce13/quart-0.20.0.tar.gz", hash = "sha256:08793c206ff832483586f5ae47018c7e40bdd75d886fee3fabbdaa70c2cf505d", size = 63874, upload-time = "2024-12-23T13:53:05.664Z" }
|
sdist = { url = "https://files.pythonhosted.org/packages/1d/9d/12e1143a5bd2ccc05c293a6f5ae1df8fd94a8fc1440ecc6c344b2b30ce13/quart-0.20.0.tar.gz", hash = "sha256:08793c206ff832483586f5ae47018c7e40bdd75d886fee3fabbdaa70c2cf505d", size = 63874, upload-time = "2024-12-23T13:53:05.664Z" }
|
||||||
@@ -2793,8 +2388,7 @@ name = "uvicorn"
|
|||||||
version = "0.38.0"
|
version = "0.38.0"
|
||||||
source = { registry = "https://pypi.org/simple" }
|
source = { registry = "https://pypi.org/simple" }
|
||||||
dependencies = [
|
dependencies = [
|
||||||
{ name = "click", version = "8.1.8", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' or (extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2')" },
|
{ name = "click" },
|
||||||
{ name = "click", version = "8.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10' or (extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2')" },
|
|
||||||
{ name = "h11" },
|
{ name = "h11" },
|
||||||
{ name = "typing-extensions", marker = "python_full_version < '3.11' or (extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2')" },
|
{ name = "typing-extensions", marker = "python_full_version < '3.11' or (extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2')" },
|
||||||
]
|
]
|
||||||
@@ -2856,12 +2450,6 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/c1/37/945b4ca0ac27e3dc4952642d4c900edd030b3da6c9634875af6e13ae80e5/uvloop-0.22.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b91328c72635f6f9e0282e4a57da7470c7350ab1c9f48546c0f2866205349d21", size = 4467065, upload-time = "2025-10-16T22:16:58.206Z" },
|
{ url = "https://files.pythonhosted.org/packages/c1/37/945b4ca0ac27e3dc4952642d4c900edd030b3da6c9634875af6e13ae80e5/uvloop-0.22.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b91328c72635f6f9e0282e4a57da7470c7350ab1c9f48546c0f2866205349d21", size = 4467065, upload-time = "2025-10-16T22:16:58.206Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/97/cc/48d232f33d60e2e2e0b42f4e73455b146b76ebe216487e862700457fbf3c/uvloop-0.22.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:daf620c2995d193449393d6c62131b3fbd40a63bf7b307a1527856ace637fe88", size = 4328384, upload-time = "2025-10-16T22:16:59.36Z" },
|
{ url = "https://files.pythonhosted.org/packages/97/cc/48d232f33d60e2e2e0b42f4e73455b146b76ebe216487e862700457fbf3c/uvloop-0.22.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:daf620c2995d193449393d6c62131b3fbd40a63bf7b307a1527856ace637fe88", size = 4328384, upload-time = "2025-10-16T22:16:59.36Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/e4/16/c1fd27e9549f3c4baf1dc9c20c456cd2f822dbf8de9f463824b0c0357e06/uvloop-0.22.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6cde23eeda1a25c75b2e07d39970f3374105d5eafbaab2a4482be82f272d5a5e", size = 4296730, upload-time = "2025-10-16T22:17:00.744Z" },
|
{ url = "https://files.pythonhosted.org/packages/e4/16/c1fd27e9549f3c4baf1dc9c20c456cd2f822dbf8de9f463824b0c0357e06/uvloop-0.22.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6cde23eeda1a25c75b2e07d39970f3374105d5eafbaab2a4482be82f272d5a5e", size = 4296730, upload-time = "2025-10-16T22:17:00.744Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/bd/1b/6fbd611aeba01ef802c5876c94d7be603a9710db055beacbad39e75a31aa/uvloop-0.22.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b45649628d816c030dba3c80f8e2689bab1c89518ed10d426036cdc47874dfc4", size = 1345858, upload-time = "2025-10-16T22:17:11.106Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/9e/91/2c84f00bdbe3c51023cc83b027bac1fe959ba4a552e970da5ef0237f7945/uvloop-0.22.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ea721dd3203b809039fcc2983f14608dae82b212288b346e0bfe46ec2fab0b7c", size = 743913, upload-time = "2025-10-16T22:17:12.165Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/cc/10/76aec83886d41a88aca5681db6a2c0601622d0d2cb66cd0d200587f962ad/uvloop-0.22.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ae676de143db2b2f60a9696d7eca5bb9d0dd6cc3ac3dad59a8ae7e95f9e1b54", size = 3635818, upload-time = "2025-10-16T22:17:13.812Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/d5/9a/733fcb815d345979fc54d3cdc3eb50bc75a47da3e4003ea7ada58e6daa65/uvloop-0.22.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:17d4e97258b0172dfa107b89aa1eeba3016f4b1974ce85ca3ef6a66b35cbf659", size = 3685477, upload-time = "2025-10-16T22:17:15.307Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/83/fb/bee1eb11cc92bd91f76d97869bb6a816e80d59fd73721b0a3044dc703d9c/uvloop-0.22.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:05e4b5f86e621cf3927631789999e697e58f0d2d32675b67d9ca9eb0bca55743", size = 3496128, upload-time = "2025-10-16T22:17:16.558Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/76/ee/3fdfeaa9776c0fd585d358c92b1dbca669720ffa476f0bbe64ed8f245bd7/uvloop-0.22.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:286322a90bea1f9422a470d5d2ad82d38080be0a29c4dd9b3e6384320a4d11e7", size = 3602565, upload-time = "2025-10-16T22:17:17.755Z" },
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -2870,10 +2458,8 @@ version = "20.35.3"
|
|||||||
source = { registry = "https://pypi.org/simple" }
|
source = { registry = "https://pypi.org/simple" }
|
||||||
dependencies = [
|
dependencies = [
|
||||||
{ name = "distlib" },
|
{ name = "distlib" },
|
||||||
{ name = "filelock", version = "3.19.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' or (extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2')" },
|
{ name = "filelock" },
|
||||||
{ name = "filelock", version = "3.20.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10' or (extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2')" },
|
{ name = "platformdirs" },
|
||||||
{ name = "platformdirs", version = "4.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' or (extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2')" },
|
|
||||||
{ name = "platformdirs", version = "4.5.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10' or (extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2')" },
|
|
||||||
{ name = "typing-extensions", marker = "python_full_version < '3.11' or (extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2')" },
|
{ name = "typing-extensions", marker = "python_full_version < '3.11' or (extra == 'group-8-nonebot2-pydantic-v1' and extra == 'group-8-nonebot2-pydantic-v2')" },
|
||||||
]
|
]
|
||||||
sdist = { url = "https://files.pythonhosted.org/packages/a4/d5/b0ccd381d55c8f45d46f77df6ae59fbc23d19e901e2d523395598e5f4c93/virtualenv-20.35.3.tar.gz", hash = "sha256:4f1a845d131133bdff10590489610c98c168ff99dc75d6c96853801f7f67af44", size = 6002907, upload-time = "2025-10-10T21:23:33.178Z" }
|
sdist = { url = "https://files.pythonhosted.org/packages/a4/d5/b0ccd381d55c8f45d46f77df6ae59fbc23d19e901e2d523395598e5f4c93/virtualenv-20.35.3.tar.gz", hash = "sha256:4f1a845d131133bdff10590489610c98c168ff99dc75d6c96853801f7f67af44", size = 6002907, upload-time = "2025-10-10T21:23:33.178Z" }
|
||||||
@@ -2974,18 +2560,6 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/4f/55/2af26693fd15165c4ff7857e38330e1b61ab8c37d15dc79118cdba115b7a/watchfiles-1.1.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c91ed27800188c2ae96d16e3149f199d62f86c7af5f5f4d2c61a3ed8cd3666c", size = 455072, upload-time = "2025-10-14T15:05:48.928Z" },
|
{ url = "https://files.pythonhosted.org/packages/4f/55/2af26693fd15165c4ff7857e38330e1b61ab8c37d15dc79118cdba115b7a/watchfiles-1.1.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c91ed27800188c2ae96d16e3149f199d62f86c7af5f5f4d2c61a3ed8cd3666c", size = 455072, upload-time = "2025-10-14T15:05:48.928Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/66/1d/d0d200b10c9311ec25d2273f8aad8c3ef7cc7ea11808022501811208a750/watchfiles-1.1.1-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:311ff15a0bae3714ffb603e6ba6dbfba4065ab60865d15a6ec544133bdb21099", size = 629104, upload-time = "2025-10-14T15:05:49.908Z" },
|
{ url = "https://files.pythonhosted.org/packages/66/1d/d0d200b10c9311ec25d2273f8aad8c3ef7cc7ea11808022501811208a750/watchfiles-1.1.1-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:311ff15a0bae3714ffb603e6ba6dbfba4065ab60865d15a6ec544133bdb21099", size = 629104, upload-time = "2025-10-14T15:05:49.908Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/e3/bd/fa9bb053192491b3867ba07d2343d9f2252e00811567d30ae8d0f78136fe/watchfiles-1.1.1-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:a916a2932da8f8ab582f242c065f5c81bed3462849ca79ee357dd9551b0e9b01", size = 622112, upload-time = "2025-10-14T15:05:50.941Z" },
|
{ url = "https://files.pythonhosted.org/packages/e3/bd/fa9bb053192491b3867ba07d2343d9f2252e00811567d30ae8d0f78136fe/watchfiles-1.1.1-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:a916a2932da8f8ab582f242c065f5c81bed3462849ca79ee357dd9551b0e9b01", size = 622112, upload-time = "2025-10-14T15:05:50.941Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/a4/68/a7303a15cc797ab04d58f1fea7f67c50bd7f80090dfd7e750e7576e07582/watchfiles-1.1.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c882d69f6903ef6092bedfb7be973d9319940d56b8427ab9187d1ecd73438a70", size = 409220, upload-time = "2025-10-14T15:05:51.917Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/99/b8/d1857ce9ac76034c053fa7ef0e0ef92d8bd031e842ea6f5171725d31e88f/watchfiles-1.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d6ff426a7cb54f310d51bfe83fe9f2bbe40d540c741dc974ebc30e6aa238f52e", size = 396712, upload-time = "2025-10-14T15:05:53.437Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/41/7a/da7ada566f48beaa6a30b13335b49d1f6febaf3a5ddbd1d92163a1002cf4/watchfiles-1.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79ff6c6eadf2e3fc0d7786331362e6ef1e51125892c75f1004bd6b52155fb956", size = 451462, upload-time = "2025-10-14T15:05:54.742Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/e2/b2/7cb9e0d5445a8d45c4cccd68a590d9e3a453289366b96ff37d1075aaebef/watchfiles-1.1.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c1f5210f1b8fc91ead1283c6fd89f70e76fb07283ec738056cf34d51e9c1d62c", size = 460811, upload-time = "2025-10-14T15:05:55.743Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/04/9d/b07d4491dde6db6ea6c680fdec452f4be363d65c82004faf2d853f59b76f/watchfiles-1.1.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b9c4702f29ca48e023ffd9b7ff6b822acdf47cb1ff44cb490a3f1d5ec8987e9c", size = 490576, upload-time = "2025-10-14T15:05:56.983Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/56/03/e64dcab0a1806157db272a61b7891b062f441a30580a581ae72114259472/watchfiles-1.1.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:acb08650863767cbc58bca4813b92df4d6c648459dcaa3d4155681962b2aa2d3", size = 597726, upload-time = "2025-10-14T15:05:57.986Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/5c/8e/a827cf4a8d5f2903a19a934dcf512082eb07675253e154d4cd9367978a58/watchfiles-1.1.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08af70fd77eee58549cd69c25055dc344f918d992ff626068242259f98d598a2", size = 474900, upload-time = "2025-10-14T15:05:59.378Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/dc/a6/94fed0b346b85b22303a12eee5f431006fae6af70d841cac2f4403245533/watchfiles-1.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c3631058c37e4a0ec440bf583bc53cdbd13e5661bb6f465bc1d88ee9a0a4d02", size = 457521, upload-time = "2025-10-14T15:06:00.419Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/c4/64/bc3331150e8f3c778d48a4615d4b72b3d2d87868635e6c54bbd924946189/watchfiles-1.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:cf57a27fb986c6243d2ee78392c503826056ffe0287e8794503b10fb51b881be", size = 632191, upload-time = "2025-10-14T15:06:01.621Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/e4/84/f39e19549c2f3ec97225dcb2ceb9a7bb3c5004ed227aad1f321bf0ff2051/watchfiles-1.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d7e7067c98040d646982daa1f37a33d3544138ea155536c2e0e63e07ff8a7e0f", size = 623923, upload-time = "2025-10-14T15:06:02.671Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/0e/24/0759ae15d9a0c9c5fe946bd4cf45ab9e7bad7cfede2c06dc10f59171b29f/watchfiles-1.1.1-cp39-cp39-win32.whl", hash = "sha256:6c9c9262f454d1c4d8aaa7050121eb4f3aea197360553699520767daebf2180b", size = 274010, upload-time = "2025-10-14T15:06:03.779Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/7e/3b/eb26cddd4dfa081e2bf6918be3b2fc05ee3b55c1d21331d5562ee0c6aaad/watchfiles-1.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:74472234c8370669850e1c312490f6026d132ca2d396abfad8830b4f1c096957", size = 289090, upload-time = "2025-10-14T15:06:04.821Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/ba/4c/a888c91e2e326872fa4705095d64acd8aa2fb9c1f7b9bd0588f33850516c/watchfiles-1.1.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:17ef139237dfced9da49fb7f2232c86ca9421f666d78c264c7ffca6601d154c3", size = 409611, upload-time = "2025-10-14T15:06:05.809Z" },
|
{ url = "https://files.pythonhosted.org/packages/ba/4c/a888c91e2e326872fa4705095d64acd8aa2fb9c1f7b9bd0588f33850516c/watchfiles-1.1.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:17ef139237dfced9da49fb7f2232c86ca9421f666d78c264c7ffca6601d154c3", size = 409611, upload-time = "2025-10-14T15:06:05.809Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/1e/c7/5420d1943c8e3ce1a21c0a9330bcf7edafb6aa65d26b21dbb3267c9e8112/watchfiles-1.1.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:672b8adf25b1a0d35c96b5888b7b18699d27d4194bac8beeae75be4b7a3fc9b2", size = 396889, upload-time = "2025-10-14T15:06:07.035Z" },
|
{ url = "https://files.pythonhosted.org/packages/1e/c7/5420d1943c8e3ce1a21c0a9330bcf7edafb6aa65d26b21dbb3267c9e8112/watchfiles-1.1.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:672b8adf25b1a0d35c96b5888b7b18699d27d4194bac8beeae75be4b7a3fc9b2", size = 396889, upload-time = "2025-10-14T15:06:07.035Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/0c/e5/0072cef3804ce8d3aaddbfe7788aadff6b3d3f98a286fdbee9fd74ca59a7/watchfiles-1.1.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77a13aea58bc2b90173bc69f2a90de8e282648939a00a602e1dc4ee23e26b66d", size = 451616, upload-time = "2025-10-14T15:06:08.072Z" },
|
{ url = "https://files.pythonhosted.org/packages/0c/e5/0072cef3804ce8d3aaddbfe7788aadff6b3d3f98a286fdbee9fd74ca59a7/watchfiles-1.1.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77a13aea58bc2b90173bc69f2a90de8e282648939a00a602e1dc4ee23e26b66d", size = 451616, upload-time = "2025-10-14T15:06:08.072Z" },
|
||||||
@@ -2994,10 +2568,6 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/bd/95/615e72cd27b85b61eec764a5ca51bd94d40b5adea5ff47567d9ebc4d275a/watchfiles-1.1.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:89eef07eee5e9d1fda06e38822ad167a044153457e6fd997f8a858ab7564a336", size = 396117, upload-time = "2025-10-14T15:06:11.28Z" },
|
{ url = "https://files.pythonhosted.org/packages/bd/95/615e72cd27b85b61eec764a5ca51bd94d40b5adea5ff47567d9ebc4d275a/watchfiles-1.1.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:89eef07eee5e9d1fda06e38822ad167a044153457e6fd997f8a858ab7564a336", size = 396117, upload-time = "2025-10-14T15:06:11.28Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/c9/81/e7fe958ce8a7fb5c73cc9fb07f5aeaf755e6aa72498c57d760af760c91f8/watchfiles-1.1.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce19e06cbda693e9e7686358af9cd6f5d61312ab8b00488bc36f5aabbaf77e24", size = 450493, upload-time = "2025-10-14T15:06:12.321Z" },
|
{ url = "https://files.pythonhosted.org/packages/c9/81/e7fe958ce8a7fb5c73cc9fb07f5aeaf755e6aa72498c57d760af760c91f8/watchfiles-1.1.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce19e06cbda693e9e7686358af9cd6f5d61312ab8b00488bc36f5aabbaf77e24", size = 450493, upload-time = "2025-10-14T15:06:12.321Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/6e/d4/ed38dd3b1767193de971e694aa544356e63353c33a85d948166b5ff58b9e/watchfiles-1.1.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e6f39af2eab0118338902798b5aa6664f46ff66bc0280de76fca67a7f262a49", size = 457546, upload-time = "2025-10-14T15:06:13.372Z" },
|
{ url = "https://files.pythonhosted.org/packages/6e/d4/ed38dd3b1767193de971e694aa544356e63353c33a85d948166b5ff58b9e/watchfiles-1.1.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e6f39af2eab0118338902798b5aa6664f46ff66bc0280de76fca67a7f262a49", size = 457546, upload-time = "2025-10-14T15:06:13.372Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/00/db/38a2c52fdbbfe2fc7ffaaaaaebc927d52b9f4d5139bba3186c19a7463001/watchfiles-1.1.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cdab464fee731e0884c35ae3588514a9bcf718d0e2c82169c1c4a85cc19c3c7f", size = 409210, upload-time = "2025-10-14T15:06:14.492Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/d1/43/d7e8b71f6c21ff813ee8da1006f89b6c7fff047fb4c8b16ceb5e840599c5/watchfiles-1.1.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:3dbd8cbadd46984f802f6d479b7e3afa86c42d13e8f0f322d669d79722c8ec34", size = 397286, upload-time = "2025-10-14T15:06:16.177Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/1f/5d/884074a5269317e75bd0b915644b702b89de73e61a8a7446e2b225f45b1f/watchfiles-1.1.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5524298e3827105b61951a29c3512deb9578586abf3a7c5da4a8069df247cccc", size = 451768, upload-time = "2025-10-14T15:06:18.266Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/17/71/7ffcaa9b5e8961a25026058058c62ec8f604d2a6e8e1e94bee8a09e1593f/watchfiles-1.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b943d3668d61cfa528eb949577479d3b077fd25fb83c641235437bc0b5bc60e", size = 458561, upload-time = "2025-10-14T15:06:19.323Z" },
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -3059,29 +2629,12 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/33/2b/1f168cb6041853eef0362fb9554c3824367c5560cbdaad89ac40f8c2edfc/websockets-15.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4", size = 182195, upload-time = "2025-03-05T20:02:51.561Z" },
|
{ url = "https://files.pythonhosted.org/packages/33/2b/1f168cb6041853eef0362fb9554c3824367c5560cbdaad89ac40f8c2edfc/websockets-15.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4", size = 182195, upload-time = "2025-03-05T20:02:51.561Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/86/eb/20b6cdf273913d0ad05a6a14aed4b9a85591c18a987a3d47f20fa13dcc47/websockets-15.0.1-cp313-cp313-win32.whl", hash = "sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa", size = 176393, upload-time = "2025-03-05T20:02:53.814Z" },
|
{ url = "https://files.pythonhosted.org/packages/86/eb/20b6cdf273913d0ad05a6a14aed4b9a85591c18a987a3d47f20fa13dcc47/websockets-15.0.1-cp313-cp313-win32.whl", hash = "sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa", size = 176393, upload-time = "2025-03-05T20:02:53.814Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/1b/6c/c65773d6cab416a64d191d6ee8a8b1c68a09970ea6909d16965d26bfed1e/websockets-15.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561", size = 176837, upload-time = "2025-03-05T20:02:55.237Z" },
|
{ url = "https://files.pythonhosted.org/packages/1b/6c/c65773d6cab416a64d191d6ee8a8b1c68a09970ea6909d16965d26bfed1e/websockets-15.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561", size = 176837, upload-time = "2025-03-05T20:02:55.237Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/36/db/3fff0bcbe339a6fa6a3b9e3fbc2bfb321ec2f4cd233692272c5a8d6cf801/websockets-15.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5f4c04ead5aed67c8a1a20491d54cdfba5884507a48dd798ecaf13c74c4489f5", size = 175424, upload-time = "2025-03-05T20:02:56.505Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/46/e6/519054c2f477def4165b0ec060ad664ed174e140b0d1cbb9fafa4a54f6db/websockets-15.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:abdc0c6c8c648b4805c5eacd131910d2a7f6455dfd3becab248ef108e89ab16a", size = 173077, upload-time = "2025-03-05T20:02:58.37Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/1a/21/c0712e382df64c93a0d16449ecbf87b647163485ca1cc3f6cbadb36d2b03/websockets-15.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a625e06551975f4b7ea7102bc43895b90742746797e2e14b70ed61c43a90f09b", size = 173324, upload-time = "2025-03-05T20:02:59.773Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/1c/cb/51ba82e59b3a664df54beed8ad95517c1b4dc1a913730e7a7db778f21291/websockets-15.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d591f8de75824cbb7acad4e05d2d710484f15f29d4a915092675ad3456f11770", size = 182094, upload-time = "2025-03-05T20:03:01.827Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/fb/0f/bf3788c03fec679bcdaef787518dbe60d12fe5615a544a6d4cf82f045193/websockets-15.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:47819cea040f31d670cc8d324bb6435c6f133b8c7a19ec3d61634e62f8d8f9eb", size = 181094, upload-time = "2025-03-05T20:03:03.123Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/5e/da/9fb8c21edbc719b66763a571afbaf206cb6d3736d28255a46fc2fe20f902/websockets-15.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac017dd64572e5c3bd01939121e4d16cf30e5d7e110a119399cf3133b63ad054", size = 181397, upload-time = "2025-03-05T20:03:04.443Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/2e/65/65f379525a2719e91d9d90c38fe8b8bc62bd3c702ac651b7278609b696c4/websockets-15.0.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4a9fac8e469d04ce6c25bb2610dc535235bd4aa14996b4e6dbebf5e007eba5ee", size = 181794, upload-time = "2025-03-05T20:03:06.708Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/d9/26/31ac2d08f8e9304d81a1a7ed2851c0300f636019a57cbaa91342015c72cc/websockets-15.0.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:363c6f671b761efcb30608d24925a382497c12c506b51661883c3e22337265ed", size = 181194, upload-time = "2025-03-05T20:03:08.844Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/98/72/1090de20d6c91994cd4b357c3f75a4f25ee231b63e03adea89671cc12a3f/websockets-15.0.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2034693ad3097d5355bfdacfffcbd3ef5694f9718ab7f29c29689a9eae841880", size = 181164, upload-time = "2025-03-05T20:03:10.242Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/2d/37/098f2e1c103ae8ed79b0e77f08d83b0ec0b241cf4b7f2f10edd0126472e1/websockets-15.0.1-cp39-cp39-win32.whl", hash = "sha256:3b1ac0d3e594bf121308112697cf4b32be538fb1444468fb0a6ae4feebc83411", size = 176381, upload-time = "2025-03-05T20:03:12.77Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/75/8b/a32978a3ab42cebb2ebdd5b05df0696a09f4d436ce69def11893afa301f0/websockets-15.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:b7643a03db5c95c799b89b31c036d5f27eeb4d259c798e878d6937d71832b1e4", size = 176841, upload-time = "2025-03-05T20:03:14.367Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/02/9e/d40f779fa16f74d3468357197af8d6ad07e7c5a27ea1ca74ceb38986f77a/websockets-15.0.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0c9e74d766f2818bb95f84c25be4dea09841ac0f734d1966f415e4edfc4ef1c3", size = 173109, upload-time = "2025-03-05T20:03:17.769Z" },
|
{ url = "https://files.pythonhosted.org/packages/02/9e/d40f779fa16f74d3468357197af8d6ad07e7c5a27ea1ca74ceb38986f77a/websockets-15.0.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0c9e74d766f2818bb95f84c25be4dea09841ac0f734d1966f415e4edfc4ef1c3", size = 173109, upload-time = "2025-03-05T20:03:17.769Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/bc/cd/5b887b8585a593073fd92f7c23ecd3985cd2c3175025a91b0d69b0551372/websockets-15.0.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1009ee0c7739c08a0cd59de430d6de452a55e42d6b522de7aa15e6f67db0b8e1", size = 173343, upload-time = "2025-03-05T20:03:19.094Z" },
|
{ url = "https://files.pythonhosted.org/packages/bc/cd/5b887b8585a593073fd92f7c23ecd3985cd2c3175025a91b0d69b0551372/websockets-15.0.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1009ee0c7739c08a0cd59de430d6de452a55e42d6b522de7aa15e6f67db0b8e1", size = 173343, upload-time = "2025-03-05T20:03:19.094Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/fe/ae/d34f7556890341e900a95acf4886833646306269f899d58ad62f588bf410/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76d1f20b1c7a2fa82367e04982e708723ba0e7b8d43aa643d3dcd404d74f1475", size = 174599, upload-time = "2025-03-05T20:03:21.1Z" },
|
{ url = "https://files.pythonhosted.org/packages/fe/ae/d34f7556890341e900a95acf4886833646306269f899d58ad62f588bf410/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76d1f20b1c7a2fa82367e04982e708723ba0e7b8d43aa643d3dcd404d74f1475", size = 174599, upload-time = "2025-03-05T20:03:21.1Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/71/e6/5fd43993a87db364ec60fc1d608273a1a465c0caba69176dd160e197ce42/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f29d80eb9a9263b8d109135351caf568cc3f80b9928bccde535c235de55c22d9", size = 174207, upload-time = "2025-03-05T20:03:23.221Z" },
|
{ url = "https://files.pythonhosted.org/packages/71/e6/5fd43993a87db364ec60fc1d608273a1a465c0caba69176dd160e197ce42/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f29d80eb9a9263b8d109135351caf568cc3f80b9928bccde535c235de55c22d9", size = 174207, upload-time = "2025-03-05T20:03:23.221Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/2b/fb/c492d6daa5ec067c2988ac80c61359ace5c4c674c532985ac5a123436cec/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b359ed09954d7c18bbc1680f380c7301f92c60bf924171629c5db97febb12f04", size = 174155, upload-time = "2025-03-05T20:03:25.321Z" },
|
{ url = "https://files.pythonhosted.org/packages/2b/fb/c492d6daa5ec067c2988ac80c61359ace5c4c674c532985ac5a123436cec/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b359ed09954d7c18bbc1680f380c7301f92c60bf924171629c5db97febb12f04", size = 174155, upload-time = "2025-03-05T20:03:25.321Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/68/a1/dcb68430b1d00b698ae7a7e0194433bce4f07ded185f0ee5fb21e2a2e91e/websockets-15.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:cad21560da69f4ce7658ca2cb83138fb4cf695a2ba3e475e0559e05991aa8122", size = 176884, upload-time = "2025-03-05T20:03:27.934Z" },
|
{ url = "https://files.pythonhosted.org/packages/68/a1/dcb68430b1d00b698ae7a7e0194433bce4f07ded185f0ee5fb21e2a2e91e/websockets-15.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:cad21560da69f4ce7658ca2cb83138fb4cf695a2ba3e475e0559e05991aa8122", size = 176884, upload-time = "2025-03-05T20:03:27.934Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/b7/48/4b67623bac4d79beb3a6bb27b803ba75c1bdedc06bd827e465803690a4b2/websockets-15.0.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7f493881579c90fc262d9cdbaa05a6b54b3811c2f300766748db79f098db9940", size = 173106, upload-time = "2025-03-05T20:03:29.404Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/ed/f0/adb07514a49fe5728192764e04295be78859e4a537ab8fcc518a3dbb3281/websockets-15.0.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:47b099e1f4fbc95b701b6e85768e1fcdaf1630f3cbe4765fa216596f12310e2e", size = 173339, upload-time = "2025-03-05T20:03:30.755Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/87/28/bd23c6344b18fb43df40d0700f6d3fffcd7cef14a6995b4f976978b52e62/websockets-15.0.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67f2b6de947f8c757db2db9c71527933ad0019737ec374a8a6be9a956786aaf9", size = 174597, upload-time = "2025-03-05T20:03:32.247Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/6d/79/ca288495863d0f23a60f546f0905ae8f3ed467ad87f8b6aceb65f4c013e4/websockets-15.0.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d08eb4c2b7d6c41da6ca0600c077e93f5adcfd979cd777d747e9ee624556da4b", size = 174205, upload-time = "2025-03-05T20:03:33.731Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/04/e4/120ff3180b0872b1fe6637f6f995bcb009fb5c87d597c1fc21456f50c848/websockets-15.0.1-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b826973a4a2ae47ba357e4e82fa44a463b8f168e1ca775ac64521442b19e87f", size = 174150, upload-time = "2025-03-05T20:03:35.757Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/cb/c3/30e2f9c539b8da8b1d76f64012f3b19253271a63413b2d3adb94b143407f/websockets-15.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:21c1fa28a6a7e3cbdc171c694398b6df4744613ce9b36b1a498e816787e28123", size = 176877, upload-time = "2025-03-05T20:03:37.199Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/fa/a8/5b41e0da817d64113292ab1f8247140aac61cbf6cfd085d6a0fa77f4984f/websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f", size = 169743, upload-time = "2025-03-05T20:03:39.41Z" },
|
{ url = "https://files.pythonhosted.org/packages/fa/a8/5b41e0da817d64113292ab1f8247140aac61cbf6cfd085d6a0fa77f4984f/websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f", size = 169743, upload-time = "2025-03-05T20:03:39.41Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -3241,30 +2794,5 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/35/18/55e6011f7c044dc80b98893060773cefcfdbf60dfefb8cb2f58b9bacbd83/yarl-1.22.0-cp314-cp314t-win32.whl", hash = "sha256:8009b3173bcd637be650922ac455946197d858b3630b6d8787aa9e5c4564533e", size = 89056, upload-time = "2025-10-06T14:12:13.317Z" },
|
{ url = "https://files.pythonhosted.org/packages/35/18/55e6011f7c044dc80b98893060773cefcfdbf60dfefb8cb2f58b9bacbd83/yarl-1.22.0-cp314-cp314t-win32.whl", hash = "sha256:8009b3173bcd637be650922ac455946197d858b3630b6d8787aa9e5c4564533e", size = 89056, upload-time = "2025-10-06T14:12:13.317Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/f9/86/0f0dccb6e59a9e7f122c5afd43568b1d31b8ab7dda5f1b01fb5c7025c9a9/yarl-1.22.0-cp314-cp314t-win_amd64.whl", hash = "sha256:9fb17ea16e972c63d25d4a97f016d235c78dd2344820eb35bc034bc32012ee27", size = 96292, upload-time = "2025-10-06T14:12:15.398Z" },
|
{ url = "https://files.pythonhosted.org/packages/f9/86/0f0dccb6e59a9e7f122c5afd43568b1d31b8ab7dda5f1b01fb5c7025c9a9/yarl-1.22.0-cp314-cp314t-win_amd64.whl", hash = "sha256:9fb17ea16e972c63d25d4a97f016d235c78dd2344820eb35bc034bc32012ee27", size = 96292, upload-time = "2025-10-06T14:12:15.398Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/48/b7/503c98092fb3b344a179579f55814b613c1fbb1c23b3ec14a7b008a66a6e/yarl-1.22.0-cp314-cp314t-win_arm64.whl", hash = "sha256:9f6d73c1436b934e3f01df1e1b21ff765cd1d28c77dfb9ace207f746d4610ee1", size = 85171, upload-time = "2025-10-06T14:12:16.935Z" },
|
{ url = "https://files.pythonhosted.org/packages/48/b7/503c98092fb3b344a179579f55814b613c1fbb1c23b3ec14a7b008a66a6e/yarl-1.22.0-cp314-cp314t-win_arm64.whl", hash = "sha256:9f6d73c1436b934e3f01df1e1b21ff765cd1d28c77dfb9ace207f746d4610ee1", size = 85171, upload-time = "2025-10-06T14:12:16.935Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/94/fd/6480106702a79bcceda5fd9c63cb19a04a6506bd5ce7fd8d9b63742f0021/yarl-1.22.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3aa27acb6de7a23785d81557577491f6c38a5209a254d1191519d07d8fe51748", size = 141301, upload-time = "2025-10-06T14:12:19.01Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/42/e1/6d95d21b17a93e793e4ec420a925fe1f6a9342338ca7a563ed21129c0990/yarl-1.22.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:af74f05666a5e531289cb1cc9c883d1de2088b8e5b4de48004e5ca8a830ac859", size = 93864, upload-time = "2025-10-06T14:12:21.05Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/32/58/b8055273c203968e89808413ea4c984988b6649baabf10f4522e67c22d2f/yarl-1.22.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:62441e55958977b8167b2709c164c91a6363e25da322d87ae6dd9c6019ceecf9", size = 94706, upload-time = "2025-10-06T14:12:23.287Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/18/91/d7bfbc28a88c2895ecd0da6a874def0c147de78afc52c773c28e1aa233a3/yarl-1.22.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b580e71cac3f8113d3135888770903eaf2f507e9421e5697d6ee6d8cd1c7f054", size = 347100, upload-time = "2025-10-06T14:12:28.527Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/bd/e8/37a1e7b99721c0564b1fc7b0a4d1f595ef6fb8060d82ca61775b644185f7/yarl-1.22.0-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e81fda2fb4a07eda1a2252b216aa0df23ebcd4d584894e9612e80999a78fd95b", size = 318902, upload-time = "2025-10-06T14:12:30.528Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/1c/ef/34724449d7ef2db4f22df644f2dac0b8a275d20f585e526937b3ae47b02d/yarl-1.22.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:99b6fc1d55782461b78221e95fc357b47ad98b041e8e20f47c1411d0aacddc60", size = 363302, upload-time = "2025-10-06T14:12:32.295Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/8a/04/88a39a5dad39889f192cce8d66cc4c58dbeca983e83f9b6bf23822a7ed91/yarl-1.22.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:088e4e08f033db4be2ccd1f34cf29fe994772fb54cfe004bbf54db320af56890", size = 370816, upload-time = "2025-10-06T14:12:34.01Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/6b/1f/5e895e547129413f56c76be2c3ce4b96c797d2d0ff3e16a817d9269b12e6/yarl-1.22.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e4e1f6f0b4da23e61188676e3ed027ef0baa833a2e633c29ff8530800edccba", size = 346465, upload-time = "2025-10-06T14:12:35.977Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/11/13/a750e9fd6f9cc9ed3a52a70fe58ffe505322f0efe0d48e1fd9ffe53281f5/yarl-1.22.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:84fc3ec96fce86ce5aa305eb4aa9358279d1aa644b71fab7b8ed33fe3ba1a7ca", size = 341506, upload-time = "2025-10-06T14:12:37.788Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/3c/67/bb6024de76e7186611ebe626aec5b71a2d2ecf9453e795f2dbd80614784c/yarl-1.22.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:5dbeefd6ca588b33576a01b0ad58aa934bc1b41ef89dee505bf2932b22ddffba", size = 335030, upload-time = "2025-10-06T14:12:39.775Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/a2/be/50b38447fd94a7992996a62b8b463d0579323fcfc08c61bdba949eef8a5d/yarl-1.22.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:14291620375b1060613f4aab9ebf21850058b6b1b438f386cc814813d901c60b", size = 358560, upload-time = "2025-10-06T14:12:41.547Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/e2/89/c020b6f547578c4e3dbb6335bf918f26e2f34ad0d1e515d72fd33ac0c635/yarl-1.22.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:a4fcfc8eb2c34148c118dfa02e6427ca278bfd0f3df7c5f99e33d2c0e81eae3e", size = 357290, upload-time = "2025-10-06T14:12:43.861Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/8c/52/c49a619ee35a402fa3a7019a4fa8d26878fec0d1243f6968bbf516789578/yarl-1.22.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:029866bde8d7b0878b9c160e72305bbf0a7342bcd20b9999381704ae03308dc8", size = 350700, upload-time = "2025-10-06T14:12:46.868Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/ab/c9/f5042d87777bf6968435f04a2bbb15466b2f142e6e47fa4f34d1a3f32f0c/yarl-1.22.0-cp39-cp39-win32.whl", hash = "sha256:4dcc74149ccc8bba31ce1944acee24813e93cfdee2acda3c172df844948ddf7b", size = 82323, upload-time = "2025-10-06T14:12:48.633Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/fd/58/d00f7cad9eba20c4eefac2682f34661d1d1b3a942fc0092eb60e78cfb733/yarl-1.22.0-cp39-cp39-win_amd64.whl", hash = "sha256:10619d9fdee46d20edc49d3479e2f8269d0779f1b031e6f7c2aa1c76be04b7ed", size = 87145, upload-time = "2025-10-06T14:12:50.241Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/c2/a3/70904f365080780d38b919edd42d224b8c4ce224a86950d2eaa2a24366ad/yarl-1.22.0-cp39-cp39-win_arm64.whl", hash = "sha256:dd7afd3f8b0bfb4e0d9fc3c31bfe8a4ec7debe124cfd90619305def3c8ca8cd2", size = 82173, upload-time = "2025-10-06T14:12:51.869Z" },
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/73/ae/b48f95715333080afb75a4504487cbe142cae1268afc482d06692d605ae6/yarl-1.22.0-py3-none-any.whl", hash = "sha256:1380560bdba02b6b6c90de54133c81c9f2a453dee9912fe58c1dcced1edb7cff", size = 46814, upload-time = "2025-10-06T14:12:53.872Z" },
|
{ url = "https://files.pythonhosted.org/packages/73/ae/b48f95715333080afb75a4504487cbe142cae1268afc482d06692d605ae6/yarl-1.22.0-py3-none-any.whl", hash = "sha256:1380560bdba02b6b6c90de54133c81c9f2a453dee9912fe58c1dcced1edb7cff", size = 46814, upload-time = "2025-10-06T14:12:53.872Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "zipp"
|
|
||||||
version = "3.23.0"
|
|
||||||
source = { registry = "https://pypi.org/simple" }
|
|
||||||
sdist = { url = "https://files.pythonhosted.org/packages/e3/02/0f2892c661036d50ede074e376733dca2ae7c6eb617489437771209d4180/zipp-3.23.0.tar.gz", hash = "sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166", size = 25547, upload-time = "2025-06-08T17:06:39.4Z" }
|
|
||||||
wheels = [
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl", hash = "sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e", size = 10276, upload-time = "2025-06-08T17:06:38.034Z" },
|
|
||||||
]
|
|
||||||
|
|||||||
Reference in New Issue
Block a user