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

Classes

MenuManager([logger])

High-level menu management with caching and convenience methods.

MenuProcessor(raw_menu[, logger])

Processes raw menu data with various filters and transformations.

RawMenuData(routes, ~typing.Any]] =, ...)

Raw menu data parsed from JavaScript asset.

class pybragerone.models.menu_manager.MenuManager(logger: Logger | None = None)[source]

Bases: object

High-level menu management with caching and convenience methods.

Parameters:

logger (logging.Logger | None)

clear_cache()[source]

Clear all cached menu data.

Return type:

None

get_debug_info(device_menu: int)[source]

Get debug information for device_menu.

Return type:

dict[str, Any]

Parameters:

device_menu (int)

get_menu(device_menu: int, *, permissions: set[str] | None = None, debug_mode: bool = False)[source]

Get processed menu for device_menu.

Parameters:
  • device_menu (int) – Device menu ID

  • permissions (set[str] | None) – User permissions for filtering (None = no filtering)

  • debug_mode (bool) – If True, includes invisible routes for debugging

Returns:

MenuResult – Processed MenuResult

Return type:

MenuResult

get_raw_menu(device_menu: int)[source]

Get raw menu data for debugging.

Return type:

RawMenuData

Parameters:

device_menu (int)

list_cached_menus()[source]

List all cached device_menu IDs.

Return type:

list[int]

store_raw_menu(device_menu: int, routes: list[dict[str, Any]], asset_url: str | None = None)[source]

Store raw menu data for later processing.

Return type:

None

Parameters:
class pybragerone.models.menu_manager.MenuProcessor(raw_menu: RawMenuData, logger: Logger | None = None)[source]

Bases: object

Processes raw menu data with various filters and transformations.

Parameters:
get_clean_menu(*, filter_permissions: set[str] | None = None, include_invisible: bool = False, apply_i18n: bool = True, resolve_tokens: bool = True)[source]

Get processed menu with specified transformations.

Parameters:
  • filter_permissions (set[str] | None) – Set of user permissions to filter by. If None, no filtering.

  • include_invisible (bool) – If True, keeps routes that user can’t access (for debug)

  • apply_i18n (bool) – If True, applies internationalization transformations

  • resolve_tokens (bool) – If True, resolves parameter tokens to clean format

Returns:

MenuResult – Processed MenuResult with clean Pydantic models

Return type:

MenuResult

get_debug_info()[source]

Get debug information about the menu.

Return type:

dict[str, Any]

class pybragerone.models.menu_manager.RawMenuData(routes: list[dict[str, ~typing.Any]]=<factory>, asset_url: str | None = None, device_menu: int | None = None, parsed_at: float = <factory>)[source]

Bases: object

Raw menu data parsed from JavaScript asset.

Parameters:
asset_url: str | None = None
device_menu: int | None = None
parsed_at: float
route_count()[source]

Count total routes including nested.

Return type:

int

routes: list[dict[str, Any]]