Glob pattern for YAML files (e.g., assets/worlds/*.yaml)
Returns: List of parsed YAML dictionaries that contain an id fieldBehavior:
Expands glob pattern to find matching files
Sorts files alphabetically
Attempts to parse each file as YAML
Validates that id field exists
Logs errors for files that fail to load
Returns only successfully loaded assets
Source:engine/utils.py:16-27
def load_yaml_assets(pattern: str) -> List[Dict[str, Any]]: assets = [] for filepath in sorted(glob.glob(pattern)): try: with open(filepath, "r", encoding="utf-8") as f: data = yaml.safe_load(f) if data and "id" in data: assets.append(data) except Exception as e: log.error(f"Failed to load asset {filepath}: {e}") return assets
Usage Examples:
from engine.utils import load_yaml_assets# Load all world definitionsworlds = load_yaml_assets("assets/worlds/*.yaml")# [# {"id": "cyberpunk", "name": "Neo Tokyo", "lore": "..."},# {"id": "fantasy", "name": "Eldergrove", "lore": "..."}# ]# Load all character definitionscharacters = load_yaml_assets("assets/characters/*.yaml")# Load all rule definitionsrules = load_yaml_assets("assets/rules/*.yaml")# Used in state.py to populate available assetsavailable_worlds = [ {"id": d["id"], "name": d.get("name", d["id"])} for d in load_yaml_assets("assets/worlds/*.yaml")]
Used By:
engine/state.py - Loading available worlds, characters, and rules at startup
engine/main.py - Syncing YAML assets to database during startup