Skip to content
On this page

iamai.utils

iamai 内部使用的实用工具。

class ModulePathFinder(self, /, *args, **kwargs)

Bases: importlib.abc.MetaPathFinder

用于查找 iamai 组件的元路径查找器。

  • Arguments

    • args

    • kwargs

  • Attributes

    • path (List[str])

method find_spec(self, fullname, path = None, target = None)

用于查找指定模块的 spec

  • Arguments

    • fullname (str)

    • path (Optional[Sequence[str]])

    • target (Optional[module])

function is_config_class(config_class)

判断一个对象是否是配置类。

  • Arguments

    • config_class (Any) - 待判断的对象。
  • Returns

    Type: TypeGuard[Type[iamai.config.ConfigModel]]

    返回是否是配置类。

function get_classes_from_module(module, super_class)

从模块中查找指定类型的类。

  • Arguments

    • module (module) - Python 模块。

    • super_class (Type[~_T]) - 要查找的类的超类。

  • Returns

    Type: List[Type[~_T]]

    返回符合条件的类的列表。

function get_classes_from_module_name(name, super_class)

从指定名称的模块中查找指定类型的类。

  • Arguments

    • name (str) - 模块名称,格式和 Python import 语句相同。

    • super_class (Type[~_T]) - 要查找的类的超类。

  • Returns

    Type: List[Tuple[Type[~_T], module]]

    返回由符合条件的类和模块组成的元组的列表。

  • Raises

    • ImportError - 当导入模块过程中出现错误。

class DataclassEncoder(self, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, default=None)

Bases: json.encoder.JSONEncoder

用于解析 MessageSegmentJSONEncoder 类。

  • Arguments

    • skipkeys

    • ensure_ascii

    • check_circular

    • allow_nan

    • sort_keys

    • indent

    • separators

    • default

method default(self, o)

返回 o 的可序列化对象。

  • Arguments

    • o (Any)
  • Returns

    Type: Any

function samefile(path1, path2)

一个 os.path.samefile 的简单包装。

  • Arguments

    • path1 (str) - 路径1。

    • path2 (str) - 路径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, Coroutine[NoneType, NoneType, ~_R]]

    异步函数。

function sync_ctx_manager_wrapper(cm, *, to_thread = False)

将同步上下文管理器包装为异步上下文管理器。

  • Arguments

    • cm (ContextManager[~_T]) - 待包装的同步上下文管理器。

    • to_thread (bool) - 是否在独立的线程中运行同步函数。默认为 False

  • Returns

    Type: AsyncGenerator[~_T, NoneType]

    异步上下文管理器。

function wrap_get_func(func)

get() 函数接受的参数包装为一个异步函数。

  • Arguments

    • func (Optional[Callable[[~T_Event], Union[bool, Awaitable[bool]]]]) - get() 函数接受的参数。
  • Returns

    Type: Callable[[~T_Event], Awaitable[bool]]

    异步函数。

function get_annotations(obj, *, globals=None, locals=None, eval_str=False)

Compute the annotations dict for an object.

obj may be a callable, class, or module. Passing in an object of any other type raises TypeError.

Returns a dict. get_annotations() returns a new dict every time it's called; calling it twice on the same object will return two different but equivalent dicts.

This function handles several details for you:

  • If eval_str is true, values of type str will be un-stringized using eval(). This is intended for use with stringized annotations ("from future import annotations").
  • If obj doesn't have an annotations dict, returns an empty dict. (Functions and methods always have an annotations dict; classes, modules, and other types of callables may not.)
  • Ignores inherited annotations on classes. If a class doesn't have its own annotations dict, returns an empty dict.
  • All accesses to object members and dict values are done using getattr() and dict.get() for safety.
  • Always, always, always returns a freshly-created dict.

eval_str controls whether or not values of type str are replaced with the result of calling eval() on those values:

  • If eval_str is true, eval() is called on values of type str.
  • If eval_str is false (the default), values of type str are unchanged.

globals and locals are passed in to eval(); see the documentation for eval() for more information. If either globals or locals is None, this function may replace that value with a context-specific default, contingent on type(obj):

  • If obj is a module, globals defaults to obj.dict.
  • If obj is a class, globals defaults to sys.modules[obj.module].dict and locals defaults to the obj class namespace.
  • If obj is a callable, globals defaults to obj.globals, although if obj is a wrapped function (using functools.update_wrapper()) it is first unwrapped.
  • Arguments

    • obj

    • globals

    • locals

    • eval_str

Released under the MIT License.