import os


def dynamic_import(import_prefix, root_dir, file_suffix=".py"):
    """
    动态导入模块
    :param import_prefix:导入模块的前缀
    :param root_dir:扫描的根目录
    :param file_suffix:文件后缀
    :return:
    """

    def suffix_is_match(file):
        if isinstance(file_suffix, str):
            return file.lower().endswith(file_suffix.lower())
        return any(filter(lambda x: file.lower().endswith(x.lower()), file_suffix))

    for root, dirs, files in os.walk(root_dir):
        # logger.debug('路径{}'.format(root_dir))
        for file in files:
            # logger.debug('{},{},{}'.format(file.startswith("__"), 111, suffix_is_match(file)))
            if file.startswith("__") or not suffix_is_match(file):
                continue
            module_name = "{}.{}".format(import_prefix, os.path.splitext(file)[0])
            # logger.debug('导入前{}'.format(module_name))
            __import__(module_name)
            # logger.debug('导入后{}'.format(module_name))
        # 递归调用
        for _dir in dirs:
            # .开头的文件夹不处理和utils的文件夹不作处理
            if _dir == "__pycache__" or _dir.startswith(".") or _dir == 'huansi_utils':
                continue
            dynamic_import(import_prefix + '.' + _dir, os.path.join(root, _dir), file_suffix)

        # 由于自己递归了,所以不再往下递归
        break