init commit
This commit is contained in:
33
app/utils/catalogs/spell_catalog.py
Normal file
33
app/utils/catalogs/spell_catalog.py
Normal file
@@ -0,0 +1,33 @@
|
||||
# app/utils/spell_registry.py
|
||||
from dataclasses import dataclass
|
||||
from pathlib import Path
|
||||
from typing import Dict, List, Optional
|
||||
import yaml
|
||||
|
||||
@dataclass
|
||||
class Spell:
|
||||
id: str
|
||||
name: str
|
||||
school: str
|
||||
element: Optional[str] = None
|
||||
rank: int = 1
|
||||
cost_mp: int = 0
|
||||
description: str = ""
|
||||
aoe: Optional[str] = None
|
||||
|
||||
class SpellRegistry:
|
||||
def __init__(self) -> None:
|
||||
self.by_id: Dict[str, Spell] = {}
|
||||
|
||||
def load_file(self, path: Path) -> None:
|
||||
data = yaml.safe_load(path.read_text()) or []
|
||||
for raw in data:
|
||||
spell = Spell(**raw)
|
||||
self.by_id[spell.id] = spell
|
||||
|
||||
def load_dir(self, root: Path) -> None:
|
||||
for p in sorted(root.glob("*.y*ml")):
|
||||
self.load_file(p)
|
||||
|
||||
def get(self, spell_id: str) -> Optional[Spell]:
|
||||
return self.by_id.get(spell_id)
|
||||
Reference in New Issue
Block a user