import sys, os from typing import Any from pathlib import Path sys.path.append(os.path.join(os.path.dirname(__file__), '..')) from core.logger import get_logger log = get_logger() sys.path.append(os.path.join(os.path.dirname(__file__))) from .base import BaseConfig from .options import ReleaseOptions import dirs def config_expand(instance: Any): """配置展开: 1. 将DirAlias中的alias展开,为实际路径 2. 将BaseConfig中的配置展开 将字符串中的{key}替换为Args._dict[key] 3. 如果为多层嵌套,则递归展开 Returns: List: 展开后的列表 """ _ret = [] if isinstance(instance, str): # 将字符串中的{key}替换为ReleaseOptions._dict[key] 实现动态路径 instance = dirs.str_format(instance) # 尝试从DirAlias中获取instance的值 value = dirs.DirAlias.get(instance, instance) if value == instance: # 如果value和instance相同,说明其已经不可以再拓展了 已经是最终路径了 _ret.append(instance) else: # 如果value和instance不同,说明其还可以继续拓展 _ret.extend(config_expand(value)) elif isinstance(instance, list): for item in instance: _ret.extend(config_expand(item)) elif isinstance(instance, dict): for _, value in instance.items(): _ret.extend(config_expand(value)) elif isinstance(instance, BaseConfig): if instance._list: _ret.extend(config_expand(instance._list)) elif instance._dict: _ret.extend(config_expand(instance._dict)) else: raise ValueError(f"Invalid config type: {type(instance)}") #log.info(f"config_expand: {instance.__class__.__name__} {_ret}") return sorted(set(_ret)) def check_file_exists(item: str) -> bool: """检查文件是否存在 """ file = Path(ReleaseOptions.AlkaidRootPath) / item if not file.exists(): return False return True