번역툴 2.0 업데이트
This commit is contained in:
87
lib/config_loader.py
Normal file
87
lib/config_loader.py
Normal file
@ -0,0 +1,87 @@
|
||||
"""
|
||||
Configuration Loader for DS_L10N
|
||||
YAML 설정 파일 로더
|
||||
"""
|
||||
import yaml
|
||||
from pathlib import Path
|
||||
from typing import Dict, Any
|
||||
|
||||
|
||||
class Config:
|
||||
"""설정 관리 클래스"""
|
||||
|
||||
def __init__(self, config_path: Path):
|
||||
self.config_path = config_path
|
||||
self.data: Dict[str, Any] = {}
|
||||
self.base_dir = config_path.parent
|
||||
self.load()
|
||||
|
||||
def load(self):
|
||||
"""YAML 설정 파일 로드"""
|
||||
if not self.config_path.exists():
|
||||
raise FileNotFoundError(f"설정 파일을 찾을 수 없습니다: {self.config_path}")
|
||||
|
||||
with open(self.config_path, 'r', encoding='utf-8') as f:
|
||||
self.data = yaml.safe_load(f)
|
||||
|
||||
def get(self, key: str, default=None):
|
||||
"""설정 값 가져오기 (점 표기법 지원)"""
|
||||
keys = key.split('.')
|
||||
value = self.data
|
||||
|
||||
for k in keys:
|
||||
if isinstance(value, dict):
|
||||
value = value.get(k)
|
||||
else:
|
||||
return default
|
||||
|
||||
if value is None:
|
||||
return default
|
||||
|
||||
return value
|
||||
|
||||
def get_path(self, key: str, default=None) -> Path:
|
||||
"""경로 설정 가져오기 (상대 경로를 절대 경로로 변환)"""
|
||||
value = self.get(key, default)
|
||||
if value is None:
|
||||
return None
|
||||
|
||||
path = Path(value)
|
||||
|
||||
# 상대 경로면 base_dir 기준으로 절대 경로 변환
|
||||
if not path.is_absolute():
|
||||
path = (self.base_dir / path).resolve()
|
||||
|
||||
return path
|
||||
|
||||
def get_all_paths(self) -> Dict[str, Path]:
|
||||
"""모든 경로 설정 가져오기"""
|
||||
paths_config = self.get('paths', {})
|
||||
return {key: self.get_path(f'paths.{key}') for key in paths_config.keys()}
|
||||
|
||||
def get_languages(self) -> Dict[str, Any]:
|
||||
"""언어 설정 가져오기"""
|
||||
return {
|
||||
'source': self.get('languages.source', 'ko'),
|
||||
'targets': self.get('languages.targets', [])
|
||||
}
|
||||
|
||||
def get_validation_config(self) -> Dict[str, bool]:
|
||||
"""검증 설정 가져오기"""
|
||||
return self.get('validation', {})
|
||||
|
||||
def __getitem__(self, key: str):
|
||||
"""딕셔너리 스타일 접근"""
|
||||
return self.get(key)
|
||||
|
||||
def __repr__(self):
|
||||
return f"Config(config_path={self.config_path})"
|
||||
|
||||
|
||||
def load_config(config_path: Path = None) -> Config:
|
||||
"""설정 파일 로드"""
|
||||
if config_path is None:
|
||||
# 현재 스크립트 위치 기준으로 config.yaml 찾기
|
||||
config_path = Path(__file__).parent.parent / 'config.yaml'
|
||||
|
||||
return Config(config_path)
|
||||
Reference in New Issue
Block a user