alicebot.utils
AliceBot 内部使用的实用工具。
class ModulePathFinder
Bases: importlib.abc.MetaPathFinder
用于查找 AliceBot 组件的元路径查找器。
Attributes
- path (ClassVar[list[str]])
method find_spec(self, fullname, path = None, target = None)
用于查找指定模块的 spec
。
Arguments
fullname (str)
path (Optional[collections.abc.Sequence[str]])
target (Optional[module])
Returns
Type: Optional[_frozen_importlib.ModuleSpec]
function is_config_class(config_class)
判断一个对象是否是配置类。
Arguments
- config_class (Any) - 待判断的对象。
Returns
Type: TypeGuard[type[alicebot.config.ConfigModel]]
返回是否是配置类。
function get_classes_from_module(module, super_class)
从模块中查找指定类型的类。
Arguments
module (module) - Python 模块。
super_class (~_TypeT) - 要查找的类的超类。
Returns
Type: list[~_TypeT]
返回符合条件的类的列表。
function get_classes_from_module_name(name, super_class, *, reload = False)
从指定名称的模块中查找指定类型的类。
Arguments
name (str) - 模块名称,格式和 Python
import
语句相同。super_class (~_TypeT) - 要查找的类的超类。
reload (bool) - 是否重新加载模块。
Returns
Type: list[tuple[~_TypeT, module]]
返回由符合条件的类和模块组成的元组的列表。
Raises
- ImportError - 当导入模块过程中出现错误。
class PydanticEncoder
Bases: json.encoder.JSONEncoder
用于解析 pydantic.BaseModel
的 JSONEncoder
类。
method default(self, o)
Implement this method in a subclass such that it returns
a serializable object for o
, or calls the base implementation (to raise a TypeError
).
For example, to support arbitrary iterators, you could implement default like this::
def default(self, o):
try:
iterable = iter(o)
except TypeError:
pass
else:
return list(iterable)
# Let the base class default method raise the TypeError
return super().default(o)
Arguments
- o (Any)
Returns
Type: Any
function samefile(path1, path2)
一个 os.path.samefile
的简单包装。
Arguments
path1 (Union[str, bytes, PathLike[str], PathLike[bytes]]) - 路径1。
path2 (Union[str, bytes, PathLike[str], PathLike[bytes]]) - 路径2。
Returns
Type: bool
如果两个路径是否指向相同的文件或目录。
function sync_func_wrapper(func, *, to_thread = False)
包装一个同步函数为异步函数。
Arguments
func (Callable[~_P, ~_R]) - 待包装的同步函数。
to_thread (bool) - 是否在独立的线程中运行同步函数。默认为
False
。
Returns
Type: Callable[~_P, collections.abc.Coroutine[None, None, ~_R]]
异步函数。
function sync_ctx_manager_wrapper(cm, *, to_thread = False)
将同步上下文管理器包装为异步上下文管理器。
Arguments
cm (contextlib.AbstractContextManager[~_T]) - 待包装的同步上下文管理器。
to_thread (bool) - 是否在独立的线程中运行同步函数。默认为
False
。
Returns
Type: collections.abc.AsyncGenerator[~_T, None]
异步上下文管理器。
function wrap_get_func(func, *, event_type = None, adapter_type = None)
将 get()
函数接受的参数包装为一个异步函数。
Arguments
func (Optional[Callable[[~EventT], Union[bool, collections.abc.Awaitable[bool]]]]) -
get()
函数接受的参数。event_type (Optional[type['Event[Any]']]) - 事件类型。
adapter_type (Optional[type['Adapter[Any, Any]']]) - 适配器类型。
Returns
Type: Callable[[~EventT], collections.abc.Awaitable[bool]]
异步函数。