67 lines
2.3 KiB
Python
67 lines
2.3 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
설정 파일(settings.json) 로더
|
|
프로젝트 전체에서 사용되는 설정을 중앙에서 관리하고 제공합니다.
|
|
"""
|
|
|
|
import json
|
|
from pathlib import Path
|
|
from typing import Dict, Any
|
|
|
|
class ConfigLoader:
|
|
def __init__(self, config_path: str = "config/settings.json"):
|
|
self.config_path = Path(config_path)
|
|
self.config = self._load_config()
|
|
|
|
def _load_config(self) -> Dict[str, Any]:
|
|
"""JSON 설정 파일을 읽어 딕셔너리로 반환합니다."""
|
|
if not self.config_path.exists():
|
|
raise FileNotFoundError(f"설정 파일을 찾을 수 없습니다: {self.config_path}")
|
|
|
|
with open(self.config_path, 'r', encoding='utf-8') as f:
|
|
config_data = json.load(f)
|
|
|
|
# 경로 설정에서 '~'를 실제 홈 디렉토리로 확장
|
|
if 'paths' in config_data:
|
|
for key, value in config_data['paths'].items():
|
|
if isinstance(value, str) and value.startswith('~/'):
|
|
config_data['paths'][key] = str(Path.home() / value[2:])
|
|
|
|
return config_data
|
|
|
|
def get_section(self, section_name: str) -> Dict[str, Any]:
|
|
"""설정의 특정 섹션을 반환합니다."""
|
|
return self.config.get(section_name, {})
|
|
|
|
@property
|
|
def network_config(self) -> Dict[str, Any]:
|
|
return self.get_section("network")
|
|
|
|
@property
|
|
def paths_config(self) -> Dict[str, Any]:
|
|
return self.get_section("paths")
|
|
|
|
@property
|
|
def models_config(self) -> Dict[str, Any]:
|
|
return self.get_section("models")
|
|
|
|
# 전역 설정 인스턴스 생성
|
|
# 프로젝트 어디서든 `from config_loader import settings`로 불러와 사용 가능
|
|
settings = ConfigLoader()
|
|
|
|
if __name__ == "__main__":
|
|
# 설정 로더 테스트
|
|
print("✅ 설정 로더 테스트")
|
|
print("-" * 30)
|
|
|
|
network = settings.network_config
|
|
print(f"네트워크 설정: {network}")
|
|
print(f" - 서버 IP: {network.get('mac_mini_ip')}")
|
|
print(f" - 서버 포트: {network.get('server_port')}")
|
|
|
|
paths = settings.paths_config
|
|
print(f"경로 설정: {paths}")
|
|
print(f" - 로컬 작업 경로: {paths.get('local_work_path')}")
|
|
|
|
print("-" * 30)
|
|
print("설정 로드 완료!") |