Source code for algomancy_gui.configuration.pageconfig

from dataclasses import dataclass
from typing import Dict, Any

from algomancy_content import (
    BaseHomePage,
    BaseDataPage,
    BaseScenarioPage,
    BaseComparePage,
    BaseOverviewPage,
    LibraryManager as library,
)


[docs] @dataclass class PageConfig: """ Page implementations and UI behavior. Args: home_page: Home page implementation or registered page name. Defaults to `"standard"`. data_page: Data page implementation or registered page name. Defaults to `"placeholder"`. scenario_page: Scenario page implementation or registered page name. Defaults to `"placeholder"`. compare_page: Compare page implementation or registered page name. Defaults to `"placeholder"`. overview_page: Overview page implementation or registered page name. Defaults to `"standard"`. """ home_page: BaseHomePage | str = "standard" data_page: BaseDataPage | str = "placeholder" scenario_page: BaseScenarioPage | str = "placeholder" compare_page: BaseComparePage | str = "placeholder" overview_page: BaseOverviewPage | str = "standard" def __post_init__(self): self._validate() def _validate(self) -> None: """ Validate page implementations have required methods. Args: config_dict: Full configuration dictionary for page resolution. """ # Fetch pages that were passed as str home, data, scenario, compare, overview = library.get_pages(self.as_dict()) # Check home page attributes assert hasattr(home, "create_content"), ( "home_page must have create_content method" ) assert hasattr(home, "register_callbacks"), ( "home_page must have register_callbacks method" ) # Check data page attributes assert hasattr(data, "create_content"), ( "data_page must have create_content method" ) assert hasattr(data, "register_callbacks"), ( "data_page must have register_callbacks method" ) # Check scenario page attributes assert hasattr(scenario, "create_content"), ( "scenario_page must have create_content method" ) assert hasattr(scenario, "register_callbacks"), ( "scenario_page must have register_callbacks method" ) # Check compare page attributes assert hasattr(compare, "create_side_by_side_content"), ( "compare_page must have create_side_by_side_content method" ) assert hasattr(compare, "create_compare_section"), ( "compare_page must have create_compare_section method" ) assert hasattr(compare, "create_details_section"), ( "compare_page must have create_details_section method" ) assert hasattr(compare, "register_callbacks"), ( "compare_page must have register_callbacks method" ) # Check overview page attributes assert hasattr(overview, "create_content"), ( "overview_page must have create_content method" ) assert hasattr(overview, "register_callbacks"), ( "overview_page must have register_callbacks method" ) def as_dict(self) -> Dict[str, Any]: return { "home_page": self.home_page, "data_page": self.data_page, "scenario_page": self.scenario_page, "compare_page": self.compare_page, "overview_page": self.overview_page, }