Files

127 lines
3.0 KiB
Python
Raw Permalink Normal View History

"""
Strapi MCP 配置加载器
YAML 配置文件加载 Strapi API 配置
"""
import yaml
from pathlib import Path
from typing import Dict, List, Optional
from pydantic import BaseModel
class LanguageConfig(BaseModel):
"""语言配置"""
code: str
name: str
class CategoryConfig(BaseModel):
"""FAQ 分类配置"""
endpoint: str
description: str
keywords: List[str] = []
class StrapiConfig(BaseModel):
"""Strapi 配置"""
base_url: str
api_token: str = ""
languages: List[LanguageConfig] = []
faq_categories: Dict[str, CategoryConfig] = {}
info_sections: Dict[str, Dict] = {}
def load_config(config_path: Optional[str] = None) -> StrapiConfig:
"""加载配置文件
Args:
config_path: 配置文件路径默认为 config.yaml
Returns:
StrapiConfig: 配置对象
"""
if config_path is None:
# 默认从当前目录的 config.yaml 加载
config_path = Path(__file__).parent / "config.yaml"
with open(config_path, 'r', encoding='utf-8') as f:
config_data = yaml.safe_load(f)
return StrapiConfig(**config_data)
def get_category_endpoint(category: str, config: Optional[StrapiConfig] = None) -> str:
"""获取分类对应的 API 端点
Args:
category: 分类名称
config: 配置对象
Returns:
str: API 端点
"""
if config is None:
config = load_config()
if category in config.faq_categories:
return config.faq_categories[category].endpoint
# 如果没有找到,返回默认格式
return f"faq-{category}"
def get_supported_languages(config: Optional[StrapiConfig] = None) -> List[str]:
"""获取支持的语言代码列表
Args:
config: 配置对象
Returns:
List[str]: 语言代码列表
"""
if config is None:
config = load_config()
return [lang.code for lang in config.languages]
def get_all_categories(config: Optional[StrapiConfig] = None) -> Dict[str, str]:
"""获取所有分类及其描述
Args:
config: 配置对象
Returns:
Dict[str, str]: 分类名称 -> 描述的映射
"""
if config is None:
config = load_config()
return {
name: cat.description
for name, cat in config.faq_categories.items()
}
# 导出配置单例
_global_config: Optional[StrapiConfig] = None
def get_config() -> StrapiConfig:
"""获取全局配置单例"""
global _global_config
if _global_config is None:
_global_config = load_config()
return _global_config
if __name__ == "__main__":
# 测试配置加载
config = load_config()
print(f"✅ 配置加载成功")
print(f"Base URL: {config.base_url}")
print(f"支持语言: {[lang.code for lang in config.languages]}")
print(f"FAQ 分类: {list(config.faq_categories.keys())}")
print(f"\n分类详情:")
for name, cat in config.faq_categories.items():
print(f" - {name}: {cat.description} (/{cat.endpoint})")