alkaid_release_platform/database/common.py

54 lines
2.0 KiB
Python
Raw Normal View History

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