mirror of
https://github.com/nonebot/nonebot2.git
synced 2024-11-24 00:55:07 +08:00
✨ Feature: 跳过部分非必要的 task group 创建 (#3095)
This commit is contained in:
parent
7b136548a9
commit
15c5464069
@ -182,13 +182,17 @@ class Dependent(Generic[R]):
|
|||||||
return cls(call, params, parameterless_params)
|
return cls(call, params, parameterless_params)
|
||||||
|
|
||||||
async def check(self, **params: Any) -> None:
|
async def check(self, **params: Any) -> None:
|
||||||
|
if self.parameterless:
|
||||||
async with anyio.create_task_group() as tg:
|
async with anyio.create_task_group() as tg:
|
||||||
for param in self.parameterless:
|
for param in self.parameterless:
|
||||||
tg.start_soon(partial(param._check, **params))
|
tg.start_soon(partial(param._check, **params))
|
||||||
|
|
||||||
|
if self.params:
|
||||||
async with anyio.create_task_group() as tg:
|
async with anyio.create_task_group() as tg:
|
||||||
for param in self.params:
|
for param in self.params:
|
||||||
tg.start_soon(partial(cast(Param, param.field_info)._check, **params))
|
tg.start_soon(
|
||||||
|
partial(cast(Param, param.field_info)._check, **params)
|
||||||
|
)
|
||||||
|
|
||||||
async def _solve_field(self, field: ModelField, params: dict[str, Any]) -> Any:
|
async def _solve_field(self, field: ModelField, params: dict[str, Any]) -> Any:
|
||||||
param = cast(Param, field.field_info)
|
param = cast(Param, field.field_info)
|
||||||
@ -205,6 +209,8 @@ class Dependent(Generic[R]):
|
|||||||
|
|
||||||
# solve param values
|
# solve param values
|
||||||
result: dict[str, Any] = {}
|
result: dict[str, Any] = {}
|
||||||
|
if not self.params:
|
||||||
|
return result
|
||||||
|
|
||||||
async def _solve_field(field: ModelField, params: dict[str, Any]) -> None:
|
async def _solve_field(field: ModelField, params: dict[str, Any]) -> None:
|
||||||
value = await self._solve_field(field, params)
|
value = await self._solve_field(field, params)
|
||||||
|
@ -158,6 +158,9 @@ class Driver(abc.ABC):
|
|||||||
raise RuntimeError(f"Duplicate bot connection with id {bot.self_id}")
|
raise RuntimeError(f"Duplicate bot connection with id {bot.self_id}")
|
||||||
self._bots[bot.self_id] = bot
|
self._bots[bot.self_id] = bot
|
||||||
|
|
||||||
|
if not self._bot_connection_hook:
|
||||||
|
return
|
||||||
|
|
||||||
def handle_exception(exc_group: BaseExceptionGroup) -> None:
|
def handle_exception(exc_group: BaseExceptionGroup) -> None:
|
||||||
for exc in flatten_exception_group(exc_group):
|
for exc in flatten_exception_group(exc_group):
|
||||||
logger.opt(colors=True, exception=exc).error(
|
logger.opt(colors=True, exception=exc).error(
|
||||||
@ -186,6 +189,9 @@ class Driver(abc.ABC):
|
|||||||
if bot.self_id in self._bots:
|
if bot.self_id in self._bots:
|
||||||
del self._bots[bot.self_id]
|
del self._bots[bot.self_id]
|
||||||
|
|
||||||
|
if not self._bot_disconnection_hook:
|
||||||
|
return
|
||||||
|
|
||||||
def handle_exception(exc_group: BaseExceptionGroup) -> None:
|
def handle_exception(exc_group: BaseExceptionGroup) -> None:
|
||||||
for exc in flatten_exception_group(exc_group):
|
for exc in flatten_exception_group(exc_group):
|
||||||
logger.opt(colors=True, exception=exc).error(
|
logger.opt(colors=True, exception=exc).error(
|
||||||
|
Loading…
Reference in New Issue
Block a user