54 lines
2.0 KiB
Python
54 lines
2.0 KiB
Python
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 |