31 lines
765 B
Python
31 lines
765 B
Python
# app/utils/skill_registry.py
|
|
from dataclasses import dataclass
|
|
from pathlib import Path
|
|
from typing import Dict, List, Optional
|
|
import yaml
|
|
|
|
@dataclass
|
|
class Skill:
|
|
id: str
|
|
name: str
|
|
description: str
|
|
tags: List[str]
|
|
max_rank: int = 1
|
|
|
|
class SkillRegistry:
|
|
def __init__(self) -> None:
|
|
self.by_id: Dict[str, Skill] = {}
|
|
|
|
def load_file(self, path: Path) -> None:
|
|
data = yaml.safe_load(path.read_text()) or []
|
|
for raw in data:
|
|
skill = Skill(**raw)
|
|
self.by_id[skill.id] = skill
|
|
|
|
def load_dir(self, root: Path) -> None:
|
|
for p in sorted(root.glob("*.y*ml")):
|
|
self.load_file(p)
|
|
|
|
def get(self, skill_id: str) -> Optional[Skill]:
|
|
return self.by_id.get(skill_id)
|