Source code for pybragerone.models.menu_manager

"""Refactored menu system with clear separation of concerns.

New design:
1. MenuParser - parses raw JS and stores raw menu data
2. MenuProcessor - applies filtering, validation, i18n etc.
3. ProcessedMenu - final clean result with all transformations applied
"""

from __future__ import annotations

import logging
from dataclasses import dataclass, field
from typing import Any

from pydantic import ValidationError

from .menu import MenuParameter, MenuResult


[docs] @dataclass class RawMenuData: """Raw menu data parsed from JavaScript asset.""" routes: list[dict[str, Any]] = field(default_factory=list) asset_url: str | None = None device_menu: int | None = None parsed_at: float = field(default_factory=lambda: __import__("time").time())
[docs] def route_count(self) -> int: """Count total routes including nested.""" def count_recursive(routes: list[dict[str, Any]]) -> int: count = len(routes) for route in routes: children = route.get("children", []) count += count_recursive(children) return count return count_recursive(self.routes)